private void ReadDataReminder(BasicMessage msg) { int bytesToRead = msg.MSG_RESPONSE[2] - msg.minResponseLength; if (bytesToRead > 0) { List<byte> data = ReadBytes(bytesToRead); msg.MSG_RESPONSE.AddRange(data); } }
private void ParseResponseData(BasicMessage msg) { List<string> text = new List<string>(); List<byte> data = GetResponseDataFromResposeMessage(msg.MSG_RESPONSE); if (msg is PollMessage) { ushort z1z2 = (ushort)(data[0] << 8); if (data.Count == 2) z1z2 += data[1]; try { string stateName = Enum.GetName(typeof(DeviceState), z1z2); (msg as PollMessage).state = (DeviceState)Enum.Parse(typeof(DeviceState), stateName); } catch (ArgumentException) { (msg as PollMessage).state = DeviceState.Unknown_state; } msg.TEXT_RESPONSE.Add((msg as PollMessage).state.ToString().Replace("_", " ")); } else if (msg is IdentificationMessage) { List<byte> PartNumer = data.GetRange(0, 15); StringBuilder str = new StringBuilder(); foreach (byte b in PartNumer) { str.Append(Convert.ToChar(b)); } (msg as IdentificationMessage).PartNumber = str.ToString(); msg.TEXT_RESPONSE.Add("Part Number: " + str.ToString()); List<byte> SerialNumber = data.GetRange(15, 12); str = new StringBuilder(); foreach (byte b in SerialNumber) { str.Append(Convert.ToChar(b)); } (msg as IdentificationMessage).SerialNumber = str.ToString(); msg.TEXT_RESPONSE.Add("Serial Number: " + str.ToString()); List<byte> AssetNumber = data.GetRange(27, 7); str = new StringBuilder(); (msg as IdentificationMessage).AssetNumber = AssetNumber; foreach (byte b in AssetNumber) { str.AppendFormat("{0:X2}", b); } msg.TEXT_RESPONSE.Add("Asset Number: " + str.ToString()); } else if (msg is GetStatusMessage) { StringBuilder billtype = new StringBuilder(); StringBuilder billsecuritylevels = new StringBuilder(); List<byte> BillType = data.GetRange(0, 3); List<byte> BillSecurityLevels = data.GetRange(3, 3); for (int i = 0; i < 3; i++) { billtype.AppendFormat("{0:X2}", BillType[i]); billsecuritylevels.AppendFormat("{0:X2}", BillSecurityLevels[i]); } msg.TEXT_RESPONSE.Add("Bill Type: " + billtype.ToString()); msg.TEXT_RESPONSE.Add("Bill Security Levels: " + billsecuritylevels.ToString()); (msg as GetStatusMessage).BillType = BillType; (msg as GetStatusMessage).BillSecurityLevels = BillSecurityLevels; } else if (msg is GetBillTableMessage) { int denomination = 0; byte denominationCode1 = 0; byte denominationCode2 = 0; StringBuilder countryCode = new StringBuilder(3); List<byte> bill = new List<byte>(5); for (int i = 0; i < 24; i++) { denominationCode1 = 0; denominationCode2 = 0; countryCode = new StringBuilder(3); bill = data.GetRange(i * 5, 5); denominationCode1 = bill[0]; for (int j = 1; j <= 3; j++) countryCode.Append(Convert.ToChar(bill[j])); denominationCode2 = bill[4]; denomination = denominationCode1 * ParseDenomination(denominationCode2); msg.TEXT_RESPONSE.Add("Bill type " + i + ":\t" + denomination.ToString() + " " + countryCode.ToString()); } } }
public void SendMessage(BasicMessage message) { message.MSG_RESPONSE = new List<byte>(); message.TEXT_RESPONSE = new List<string>(); message.responseType = RESPONSE_TYPE.DATA; List<byte> msg = message.MSG; port.Write(msg.ToArray(), 0, msg.Count); }
private bool IsACKorNAKorILLEGALCOMMAND(BasicMessage msg) { if (msg.MSG_RESPONSE.Count == msg.MSG_RESPONSE[2]) { List<byte> data = msg.MSG_RESPONSE; ushort CRC = GetCRC(data); if ((CRC == ACK.CRC) && (data[3] == ACK.DATA[0])) { msg.responseType = RESPONSE_TYPE.ACK; msg.TEXT_RESPONSE.Add("ACK"); return true; } else if ((CRC == NAK.CRC) && (data[3] == NAK.DATA[0])) { msg.responseType = RESPONSE_TYPE.NAK; msg.TEXT_RESPONSE.Add("NAK"); return true; } else if ((CRC == ILLEGAL_COMMAND.CRC) && (data[3] == ILLEGAL_COMMAND.DATA[0])) { msg.responseType = RESPONSE_TYPE.ILLEGAL_COMMAND; msg.TEXT_RESPONSE.Add("Illegal Command"); return true; } } return false; }
public void GetResponse(BasicMessage msg) { List<byte> data = new List<byte>(); data = ReadBytes(msg.minResponseLength); msg.MSG_RESPONSE = data; if (!IsACKorNAKorILLEGALCOMMAND(msg)) { msg.responseType = RESPONSE_TYPE.DATA; ReadDataReminder(msg); ParseResponseData(msg); } }