Exemplo n.º 1
0
        public static TerminalTypes GetOneTerminalTypes(int id)
        {
            TerminalTypes termType = new TerminalTypes();
            string        sql      = "select * from TerminalTypes where ID=" + id.ToString();
            DataTable     dt       = null;

            try
            {
                SQLDBHelper sqlHelper = new SQLDBHelper();
                dt = sqlHelper.Query(sql);
            }
            catch (Exception e)
            {
                throw e;
            }
            if (dt != null && dt.Rows.Count > 0)
            {
                termType.ID    = Convert.ToInt32(dt.Rows[0]["ID"]);
                termType.Name  = dt.Rows[0]["Name"].ToString();
                termType.Price = Convert.ToDecimal(dt.Rows[0]["Price"]);
                if (dt.Rows[0]["Remark"] != null && dt.Rows[0]["Remark"] != DBNull.Value)
                {
                    termType.Remark = dt.Rows[0]["Remark"].ToString();
                }
                else
                {
                    termType.Remark = string.Empty;
                }
            }
            return(termType);
        }
Exemplo n.º 2
0
        private HardwareConfiguration(string data)
        {
            var subcode = data.Substring(0, 2);

            if (subcode != "HG")
            {
                throw new InvalidDataException(
                          string.Format("Expected sub-code of \"{0}\" but got \"{1}\".", "HG", subcode));
            }

            if (!int.TryParse(data.Substring(2, 5), NumberStyles.None, CultureInfo.InvariantCulture, out _firmwareVersion))
            {
                throw new InvalidDataException("Couldn't parse firmware version from hardware configuration data.");
            }

            if (!DateTime.TryParseExact(data.Substring(8, 10), "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out _firmwareDate))
            {
                throw new InvalidDataException("Couldn't parse firmware date from hardware configuration data.");
            }

            // TODO: what does 18 represent?

            _terminalType         = (TerminalTypes)data[19];
            _keyboardType         = (KeyboardTypes)data[20];
            _displayType          = (DisplayTypes)data[21];
            _hostSerialParameters = data.Substring(22, 3);

            byte b;

            if (!byte.TryParse(data.Substring(25, 1), NumberStyles.None, CultureInfo.InvariantCulture, out b))
            {
                throw new InvalidDataException("Couldn't parse host serial baud rate from hardware configuration data.");
            }
            _hostSerialBaudRate = BaudRates.Get(b);

            _terminalId = Util.CharToTerminalId(data[26]);

            // TODO: what does 27 represent?  Maybe the network card type?

            if (!byte.TryParse(data.Substring(28, 1), NumberStyles.None, CultureInfo.InvariantCulture, out _fingerprintUnitType))
            {
                throw new InvalidDataException("Couldn't parse fingerprint unit type from hardware configuration data.");
            }

            _fingerprintUnitMode = (FingerprintUnitModes)data[29];

            if (!int.TryParse(data.Substring(30, 4), NumberStyles.None, CultureInfo.InvariantCulture, out _userDefinedField))
            {
                throw new InvalidDataException("Couldn't parse user defined field from hardware configuration data.");
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// 处理铱星模块发送回来的MO信息
 /// </summary>
 /// <param name="data"></param>
 private void HandleIridiumModelMOPayload(IridiumData data)
 {
     // 如果是正式的协议则以正常的方式处理
     if (data.Length >= TX300Items.header_length)
     {
         // TX300通讯协议首字节必定大于等于17
         // 卫星通讯协议首字节必定等于01
         if (data.Payload[0] >= 17 &&
             ProtocolTypes.IsTX300(data.Payload[2]) &&
             TerminalTypes.IsTX300(data.Payload[3]))
         {
             // 根据卫星号码查询终端的Sim卡号码并将其填入包头结构里
             using (var bll = new TerminalBLL())
             {
                 var terminal = bll.Find(f => f.TB_Satellite.CardNo.Equals(data.IMEI) && f.Delete == false);
                 if (null != terminal)
                 {
                     var sim = terminal.Sim;
                     sim += sim.Length < 11 ? "000" : "";
                     sim  = "0" + sim;
                     var s = CustomConvert.GetBytes(sim);
                     Buffer.BlockCopy(s, 0, data.Payload, 9, s.Length);
                     s = null;
                     // 更新命令的MTMSN状态为返回状态
                     HandleData(new Sockets.AsyncUserDataBuffer()
                     {
                         Buffer       = data.Payload,
                         DataType     = Sockets.AsyncUserDataType.ReceivedData,
                         IP           = "",
                         PackageType  = Sockets.AsyncDataPackageType.SAT,
                         Port         = 0,
                         ReceiveTime  = DateTime.Now,
                         SocketHandle = 0
                     });
                 }
                 else
                 {
                     ShowUnhandledMessage("Unbind satellite report data: " + CustomConvert.GetHex(data.Payload));
                 }
             }
         }
         else
         {
             HandleIridiumNewProtocolPackage(data);
         }
         // 统计铱星的接收数据次数和数据长度
         HandleIridiumMOFlow(data);
     }
     data.Dispose();
 }
Exemplo n.º 4
0
        public static bool UpdateTerminalTypes(TerminalTypes termType)
        {
            string sql = "update TerminalTypes set Name='" + termType.Name + "', Price=" + termType.Price + ", Remark='" + termType.Remark + "' where ID=" + termType.ID;

            try
            {
                SQLDBHelper sqlHelper = new SQLDBHelper();
                int         r         = sqlHelper.ExecuteSql(sql);
                return(r > 0);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Exemplo n.º 5
0
        public static bool InsertTerminalTypes(TerminalTypes termType)
        {
            string sql = "insert into TerminalTypes(Name, Price, Remark) values ('" + termType.Name + "', " + termType.Price + ", '" + termType.Remark + "')";

            try
            {
                SQLDBHelper sqlHelper = new SQLDBHelper();
                int         r         = sqlHelper.ExecuteSql(sql);
                return(r > 0);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Exemplo n.º 6
0
        private TranslateResult GetTerminalTranslatedCode(ILexer lexer, TerminalTypes terminalType)
        {
            var terminals = _terminalCache[terminalType];

            var result = new TranslateResult()
            {
                Code = " "
            };
            var token = lexer.GetNextToken();

            if (token.Type != TokenType.Keyword)
            {
                result.ErrorMessage = string.Format(ErrorMessageFormat, GetKeywordList(terminals), token.Text);

                return(result);
            }

            if (!terminals.ContainsKey((token.Text.ToLower())))
            {
                result.ErrorMessage = $@"Keyword not defined: {token.Text}";
            }
            else
            {
                var terminal = terminals[token.Text.ToLower()];

                if (terminal.SupportingKeywords != null)
                {
                    // consume supporting keywords
                    for (var i = 0; i < terminal.SupportingKeywords.Length; i++)
                    {
                        var supportingKeyword = terminal.SupportingKeywords[i];

                        token = lexer.GetNextToken();

                        if (token.Type != TokenType.Keyword)
                        {
                            result.ErrorMessage = string.Format(ErrorMessageFormat, supportingKeyword, token.Text);

                            return(result);
                        }
                    }
                }
                result.Code = terminal.TranslateTo;
            }
            return(result);
        }
Exemplo n.º 7
0
        private void ShowTerminals()
        {
            var totalRecords = 0;
            var pageIndex    = "" == hidPageIndex.Value ? 1 : int.Parse(hidPageIndex.Value);
            var list         = TerminalInstance.FindPageList <TB_Terminal>(pageIndex, PageSize, out totalRecords,
                                                                           f => f.Delete == false && f.HasBound == false && f.Type == TerminalType, "Number");
            var totalPages = totalRecords / PageSize + (totalRecords % PageSize > 0 ? 1 : 0);

            string html = "";

            if (totalRecords < 1)
            {
                html = "<tr><td colspan=\"6\">No records</tr>";
            }
            else
            {
                var cnt = (pageIndex - 1) * PageSize;
                var n   = (int?)null;
                foreach (var obj in list)
                {
                    cnt++;
                    var id = Utility.UrlEncode(Utility.Encrypt(obj.id.ToString()));
                    html += "<tr>" +
                            "<td style=\"text-align: center;\"><input type=\"radio\" name=\"satId\" id=\"cb_" + id + "\" /></td>" +
                            "<td style=\"text-align: center;\">" + cnt + "</td>" +
                            "<td><a>" + obj.Number + "</a></td>" +
                            "<td>" + obj.Sim + "</td>" +
                            "<td>" + (n == obj.Satellite ? "-" : obj.TB_Satellite.CardNo) + "</td>" +
                            "<td>" + TerminalTypes.GetTerminalType(obj.Type.Value) + "</td>" +
                            "<td></td>" +
                            "</tr>";
                }
            }
            tbodyBody.InnerHtml  = html;
            divPagging.InnerHtml = "";
            if (totalRecords > 0)
            {
                ShowPaggings(pageIndex, totalPages, totalRecords, "./terminals.aspx", divPagging);
            }
        }
Exemplo n.º 8
0
        public static List <TerminalTypes> GetMoreTerminalTypes(string where = "(1=1)")
        {
            List <TerminalTypes> termTypes = new List <TerminalTypes>();
            string    sql = "select * from TerminalTypes where " + where;
            DataTable dt  = null;

            try
            {
                SQLDBHelper sqlHelper = new SQLDBHelper();
                dt = sqlHelper.Query(sql);
            }
            catch (Exception e)
            {
                throw e;
            }
            if (dt != null && dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    TerminalTypes termType = new TerminalTypes();
                    termType.ID    = Convert.ToInt32(dt.Rows[i]["ID"]);
                    termType.Name  = dt.Rows[i]["Name"].ToString();
                    termType.Price = Convert.ToDecimal(dt.Rows[i]["Price"]);
                    if (dt.Rows[i]["Remark"] != null && dt.Rows[i]["Remark"] != DBNull.Value)
                    {
                        termType.Remark = dt.Rows[i]["Remark"].ToString();
                    }
                    else
                    {
                        termType.Remark = string.Empty;
                    }
                    termTypes.Add(termType);
                }
            }
            return(termTypes);
        }
Exemplo n.º 9
0
        private HardwareConfiguration(string data)
        {
            var subcode = data.Substring(0, 2);
            if (subcode != "HG")
                throw new InvalidDataException(
                    string.Format("Expected sub-code of \"{0}\" but got \"{1}\".", "HG", subcode));

            if (!int.TryParse(data.Substring(2, 5), NumberStyles.None, CultureInfo.InvariantCulture, out _firmwareVersion))
                throw new InvalidDataException("Couldn't parse firmware version from hardware configuration data.");

            if (!DateTime.TryParseExact(data.Substring(8, 10), "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out _firmwareDate))
                throw new InvalidDataException("Couldn't parse firmware date from hardware configuration data.");

            // TODO: what does 18 represent?

            _terminalType = (TerminalTypes)data[19];
            _keyboardType = (KeyboardTypes)data[20];
            _displayType = (DisplayTypes)data[21];
            _hostSerialParameters = data.Substring(22, 3);

            byte b;
            if (!byte.TryParse(data.Substring(25, 1), NumberStyles.None, CultureInfo.InvariantCulture, out b))
                throw new InvalidDataException("Couldn't parse host serial baud rate from hardware configuration data.");
            _hostSerialBaudRate = BaudRates.Get(b);

            _terminalId = Util.CharToTerminalId(data[26]);

            // TODO: what does 27 represent?  Maybe the network card type?

            if (!byte.TryParse(data.Substring(28, 1), NumberStyles.None, CultureInfo.InvariantCulture, out _fingerprintUnitType))
                throw new InvalidDataException("Couldn't parse fingerprint unit type from hardware configuration data.");

            _fingerprintUnitMode = (FingerprintUnitModes)data[29];

            if (!int.TryParse(data.Substring(30, 4), NumberStyles.None, CultureInfo.InvariantCulture, out _userDefinedField))
                throw new InvalidDataException("Couldn't parse user defined field from hardware configuration data.");
        }
        /// <summary>
        /// 导出终端列表到excel
        /// </summary>
        /// <param name="bll"></param>
        /// <param name="excel"></param>
        private void ExportTerminalsToExcel(ExcelHandlerBLL bll, TB_ExcelHandler excel)
        {
            string      source = "", data = "";
            Application app   = null;
            Workbook    book  = null;
            Worksheet   sheet = null;

            try
            {
                app         = new Application();
                book        = app.Workbooks.Open(EXCEL_PATH + EXCEL_TERMINALS);
                sheet       = (Worksheet)book.ActiveSheet;
                app.Visible = false;
                app.AlertBeforeOverwriting = false;
                app.DisplayAlerts          = false;

                using (var tbll = new TerminalBLL())
                {
                    using (var ebll = new EquipmentBLL())
                    {
                        int line = 2;
                        int cnt  = 0;
                        var n    = (int?)null;
                        var list = tbll.FindList(f => f.Delete == false);
                        foreach (var obj in list)
                        {
                            var x = line + cnt;
                            sheet.Cells[x, 1] = (cnt + 1);
                            sheet.Cells[x, 2] = obj.Number;
                            sheet.Cells[x, 3] = n == obj.Satellite ? "-" : obj.TB_Satellite.CardNo;
                            sheet.Cells[x, 4] = string.IsNullOrEmpty(obj.Firmware) ? "-" : obj.Firmware;
                            sheet.Cells[x, 5] = obj.Revision;
                            sheet.Cells[x, 6] = TerminalTypes.GetTerminalType(obj.Type.Value);
                            sheet.Cells[x, 7] = obj.ProductionDate.Value.ToString("yyyy/MM/dd");
                            var e = ebll.Find(d => d.Terminal == obj.id && d.Deleted == false);
                            sheet.Cells[x, 8] = null == e ? "-" : ebll.GetFullNumber(e);

                            var link = EverdigmUtils.GetOnlineStyle(obj.OnlineStyle, obj.OnlineTime, false);
                            link = link.Substring(link.IndexOf('>') + 1);
                            link = link.Substring(0, link.IndexOf('<'));
                            sheet.Cells[x, 9]  = string.IsNullOrEmpty(link) ? "-" : link;
                            sheet.Cells[x, 10] = null == obj.OnlineTime ? "-" : obj.OnlineTime.Value.ToString("yyyy/MM/dd HH:mm");
                            cnt++;
                        }
                    }
                }

                // 另存为别的
                var date = excel.CreateDate.Value.ToString("yyyyMMdd");
                var path = Path.Combine(WEB_PATH, "files\\xls\\", date);
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                source = path + "\\Terminals2Excel_" + excel.CreateDate.Value.ToString("yyyyMMdd") + ".xlsx";
                if (File.Exists(source))
                {
                    File.Delete(source);
                }
                book.SaveAs(source);
            }
            catch (Exception e)
            {
                data = e.StackTrace;
                ShowUnhandledMessage(format("{0}Terminal to Excel handler error: {1}{2}{3}", Now, e.Message, Environment.NewLine, e.StackTrace));
            }
            finally
            {
                // 关闭book
                if (null != book)
                {
                    book.Close();
                    book = null;
                }
                // 关闭application
                if (null != app)
                {
                    app.Quit();
                    app = null;
                }
                // 释放内存
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
            var target = "../" + source.Replace(WEB_PATH, "").Replace("\\", "/");

            bll.Update(f => f.id == excel.id, act =>
            {
                act.Handled = true;
                act.Status  = (byte)(string.IsNullOrEmpty(data) ? 0 : 1);
                act.Target  = target;
                act.Data    = data;
            });
        }
Exemplo n.º 11
0
        private TerminalStatus(string data)
        {
            if (!byte.TryParse(data.Substring(0, 1), NumberStyles.None, CultureInfo.InvariantCulture, out _hardwareModel))
                throw new InvalidDataException("Couldn't parse hardware model from terminal status data.");

            if (!byte.TryParse(data.Substring(1, 1), NumberStyles.None, CultureInfo.InvariantCulture, out _hardwareRevision))
                throw new InvalidDataException("Couldn't parse hardware revision from terminal status data.");

            if (!int.TryParse(data.Substring(2, 5), NumberStyles.None, CultureInfo.InvariantCulture, out _firmwareVersion))
                throw new InvalidDataException("Couldn't parse firmware version from terminal status data.");

            if (!DateTime.TryParseExact(data.Substring(7, 10), "yyMMddHHmm", CultureInfo.InvariantCulture, DateTimeStyles.None, out _timestamp))
                throw new InvalidDataException("Couldn't parse timestamp from terminal status data.");

            _activeFunction = data[17];

            _buffersFull = SynelNumericFormat.Convert(data.Substring(18, 3));
            _buffersFaulty = SynelNumericFormat.Convert(data.Substring(21, 3));
            _buffersTransmitted = SynelNumericFormat.Convert(data.Substring(24, 3));
            _buffersEmpty = SynelNumericFormat.Convert(data.Substring(27, 3));

            if (data[34] == 'K')
            {
                int mem;
                if (!int.TryParse(data.Substring(30, 4), NumberStyles.None, CultureInfo.InvariantCulture, out mem))
                    throw new InvalidDataException("Couldn't parse memory used from terminal status data.");
                _memoryUsed = mem * 1024; // assuming 'K' means KiB rather than KB
            }
            else
            {
                if (!int.TryParse(data.Substring(30, 4), NumberStyles.None, CultureInfo.InvariantCulture, out _memoryUsed))
                    throw new InvalidDataException("Couldn't parse memory used from terminal status data.");
            }

            _terminalType = (TerminalTypes)data[35];
            _poweredOn = data[36] == '1';

            // TODO: what does 37-38 represent?

            _userDefinedField = data.Substring(39, 4);
            
            _transportType = data[43] == 'T' ? TransportType.Tcp : data[43] == 'U' ? TransportType.Udp : 0;

            int i;
            if (!int.TryParse(data.Substring(44, 2), NumberStyles.None, CultureInfo.InvariantCulture, out i))
                throw new InvalidDataException("Couldn't parse the polling interval from terminal status data.");
            _pollingInterval = TimeSpan.FromSeconds(i);

            _fingerprintUnitMode = (FingerprintUnitModes)data[46];
        }
Exemplo n.º 12
0
        private void ShowTerminalsBinded(int pageIndex)
        {
            var totalRecords = 0;
            // 表达式
            Expression <Func <TB_Equipment, bool> > expression = PredicateExtensions.True <TB_Equipment>();

            // 必须是绑定了终端的设备
            expression = expression.And(f => f.Deleted == false && f.Terminal != (int?)null);

            // 设备type
            //var type = ddlEquipmentType.SelectedValue;
            //if (!string.IsNullOrEmpty(type))
            //{
            //    expression = expression.And(a => a.TB_EquipmentModel.Type == ParseInt(type));
            //}

            // 设备model
            //var model = selModel.Value;
            //if (!string.IsNullOrEmpty(model)) { expression = expression.And(a => a.Model == ParseInt(model)); }

            // 是否绑定卫星
            // 是否绑定卫星 -1:ignore,0:not,1:bound
            var sat = int.Parse(selectedSatellite.Value);

            spanSatellite.InnerHtml = "Satellite:" + GotSelectedType(sat);
            if (sat >= 0)
            {
                if (sat == 0)
                {
                    expression = expression.And(a => a.TB_Terminal.Satellite == null);
                }
                else
                {
                    expression = expression.And(a => a.TB_Terminal.Satellite != null);
                }
            }

            // 号码查询
            var query = txtNumber.Value.Trim();

            if (!string.IsNullOrEmpty(query))
            {
                expression = expression.And(a => a.Number.Contains(query) || a.TB_Terminal.Number.Contains(query) || a.TB_Terminal.TB_Satellite.CardNo.Contains(query));
            }

            var list       = EquipmentInstance.FindPageList <TB_Equipment>(pageIndex, PageSize, out totalRecords, expression, "Number");
            var totalPages = totalRecords / PageSize + (totalRecords % PageSize > 0 ? 1 : 0);

            string html = "";

            if (totalRecords < 1)
            {
                html = "<tr><td colspan=\"13\">No records, You can change condition and try again or " +
                       " <a href=\"./terminal_register.aspx\">ADD</a> new one.</td></tr>";
            }
            else
            {
                var cnt = (pageIndex - 1) * PageSize;
                foreach (var obj in list)
                {
                    cnt++;
                    var id = Utility.UrlEncode(Utility.Encrypt(obj.id.ToString()));
                    html += "<tr>" +
                            //"<td style=\"text-align: center;\" class=\"in-tab-txt-rb\"><input type=\"checkbox\" id=\"cb_" + id + "\" /></td>" +
                            "<td style=\"text-align: center;\" class=\"in-tab-txt-rb\">" + cnt + "</td>" +
                            "<td class=\"in-tab-txt-rb\" style=\"text-align: left !important;\"><a href=\"./terminal_register.aspx?key=" + id + "\" >" + CheckQueryString(obj.TB_Terminal.Number) + "</a></td>" +
                            "<td class=\"in-tab-txt-rb\" style=\"text-align: left !important; cursor: pointer;\" title=\"Click to show advanced options\">" + CheckQueryString(TerminalInstance.GetSatellite(obj.TB_Terminal, true)) + "</td>" +
                            "<td class=\"in-tab-txt-rb\">" + obj.TB_Terminal.Firmware + "</td>" +
                            "<td class=\"in-tab-txt-rb\">" + obj.TB_Terminal.Revision.ToString() + "</td>" +
                            "<td class=\"in-tab-txt-rb\" style=\"text-align: left !important;\">" + TerminalTypes.GetTerminalType(obj.TB_Terminal.Type.Value) + "</td>" +
                            "<td class=\"in-tab-txt-rb\" style=\"text-align: left !important;\">" + obj.TB_Terminal.ProductionDate.Value.ToString("yyyy/MM/dd") + "</td>" +
                            "<td class=\"in-tab-txt-rb\">yes</td>" +
                            "<td class=\"in-tab-txt-rb\" style=\"text-align: left !important;\">" + CheckQueryString(GetEquipment(obj.TB_Terminal, obj)) + "</td>" +
                            "<td class=\"in-tab-txt-b\">" + Utility.GetOnlineStyle(obj.OnlineStyle, obj.OnlineTime, false) + "</td>" +
                            //"<td class=\"in-tab-txt-rb\">" + obj.TB_Terminal.Sim + "</td>" +
                            "<td class=\"in-tab-txt-b\"></td>" +
                            "</tr>";
                }
            }
            ShowFooter(totalRecords, pageIndex, totalPages, html);
        }
Exemplo n.º 13
0
        private TerminalStatus(string data)
        {
            if (!byte.TryParse(data.Substring(0, 1), NumberStyles.None, CultureInfo.InvariantCulture, out _hardwareModel))
            {
                throw new InvalidDataException("Couldn't parse hardware model from terminal status data.");
            }

            if (!byte.TryParse(data.Substring(1, 1), NumberStyles.None, CultureInfo.InvariantCulture, out _hardwareRevision))
            {
                throw new InvalidDataException("Couldn't parse hardware revision from terminal status data.");
            }

            if (!int.TryParse(data.Substring(2, 5), NumberStyles.None, CultureInfo.InvariantCulture, out _firmwareVersion))
            {
                throw new InvalidDataException("Couldn't parse firmware version from terminal status data.");
            }

            if (!DateTime.TryParseExact(data.Substring(7, 10), "yyMMddHHmm", CultureInfo.InvariantCulture, DateTimeStyles.None, out _timestamp))
            {
                throw new InvalidDataException("Couldn't parse timestamp from terminal status data.");
            }

            _activeFunction = data[17];

            _buffersFull        = SynelNumericFormat.Convert(data.Substring(18, 3));
            _buffersFaulty      = SynelNumericFormat.Convert(data.Substring(21, 3));
            _buffersTransmitted = SynelNumericFormat.Convert(data.Substring(24, 3));
            _buffersEmpty       = SynelNumericFormat.Convert(data.Substring(27, 3));

            if (data[34] == 'K')
            {
                int mem;
                if (!int.TryParse(data.Substring(30, 4), NumberStyles.None, CultureInfo.InvariantCulture, out mem))
                {
                    throw new InvalidDataException("Couldn't parse memory used from terminal status data.");
                }
                _memoryUsed = mem * 1024; // assuming 'K' means KiB rather than KB
            }
            else
            {
                if (!int.TryParse(data.Substring(30, 4), NumberStyles.None, CultureInfo.InvariantCulture, out _memoryUsed))
                {
                    throw new InvalidDataException("Couldn't parse memory used from terminal status data.");
                }
            }

            _terminalType = (TerminalTypes)data[35];
            _poweredOn    = data[36] == '1';

            // TODO: what does 37-38 represent?

            _userDefinedField = data.Substring(39, 4);

            _transportType = data[43] == 'T' ? TransportType.Tcp : data[43] == 'U' ? TransportType.Udp : 0;

            int i;

            if (!int.TryParse(data.Substring(44, 2), NumberStyles.None, CultureInfo.InvariantCulture, out i))
            {
                throw new InvalidDataException("Couldn't parse the polling interval from terminal status data.");
            }
            _pollingInterval = TimeSpan.FromSeconds(i);

            _fingerprintUnitMode = (FingerprintUnitModes)data[46];
        }