private void SendResponseBtn_Click(object sender, EventArgs e) { byte destinationID = 0x00; UInt16 msgTimeOut = 0x00; byte retryCount = 0x00; byte messageType = 0; /* data channel request */ byte serviceType = 0; /* unicast service */ // reset data // channelResponseListView.Items.Clear(); signalRssiLabel.Text = "---"; responseReceiveTimeLabel.Text = "---"; byte msgLength = (byte)(1 + channelsToReadCbList.CheckedItems.Count); if (msgLength < 2) { MessageBox.Show("Lütfen en az 1 adet kanal giriniz..."); return; } byte[] msgData = new byte[msgLength]; byte[] packageData = new byte[msgLength + 7]; try { destinationID = Convert.ToByte(destinationUnitTb.Text); msgTimeOut = Convert.ToUInt16(timeoutInMilisTb.Text); retryCount = Convert.ToByte(msgRetryCountTb.Text); msgData[0] = 0; msgData[0] = (byte)(msgData[0] | (byte)channelsToReadCbList.CheckedItems.Count); /* kanal sayisi...*/ for (int i = 0; i < channelsToReadCbList.CheckedItems.Count; i++) { var checkItemTemp = (KeyValuePair <DeviceChannelTypes, string>)channelsToReadCbList.CheckedItems[i]; msgData[1 + i] = Convert.ToByte(DeviceChannelsDict.FirstOrDefault(x => x.Value == checkItemTemp.Value).Key); } } catch (Exception ee) { MessageBox.Show("Girdiğiniz değerleri kontrol ediniz " + ee.Message); return; } packageData[0] = (byte)(destinationID); packageData[1] = messageType; packageData[2] = serviceType; packageData[3] = (byte)(msgTimeOut >> 8); packageData[4] = (byte)(msgTimeOut & 0xFF); packageData[5] = retryCount; packageData[6] = msgLength; Array.Copy(msgData, 0, packageData, 7, msgLength); EthernetManager.Instance.SendRemoteDeviceCmd(Ethernet_MessageIDs_t.INCOMING_CMD_LORA_SEND_PACKAGE_REQUEST, (ushort)(msgLength + 7), packageData); }
/* parser functions */ private void parseDataChannelResponse(byte[] data, int rssi) { byte channelCount = (byte)(data[0] & 0x7F); byte operationType = (byte)((data[0] & 0x80) >> 7); if (0 == operationType) /* read result */ { float[] channelValues = new float[channelCount]; DeviceChannelStatus[] channelStatus = new DeviceChannelStatus[channelCount]; DeviceChannelTypes[] channelIDs = new DeviceChannelTypes[channelCount]; /* clear listView */ channelResponseListView.Items.Clear(); for (int i = 0; i < channelCount; i++) { channelIDs[i] = (DeviceChannelTypes)data[1 + i * 6]; channelStatus[i] = (DeviceChannelStatus)data[6 + i * 6]; byte[] floatByteArrayTemp = new byte[4]; Array.Copy(data, (2 + i * 6), floatByteArrayTemp, 0, 4); channelValues[i] = System.BitConverter.ToSingle(floatByteArrayTemp, 0); /* list view binding */ string[] channelDataRow = new string[3]; DeviceChannelsDict.TryGetValue(channelIDs[i], out channelDataRow[0]); channelDataRow[1] = channelValues[i].ToString(); channelDataRow[2] = channelStatus[i].ToString(); // KAANBAK status string list tanimla ListViewItem channelDataItem = new ListViewItem(channelDataRow); channelResponseListView.Invoke((MethodInvoker) delegate { channelResponseListView.Items.Add(channelDataItem); /* fill labels */ signalRssiLabel.Text = rssi.ToString(); responseReceiveTimeLabel.Text = string.Format("{0:00}:{1:00}:{2:00}", DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second); }); } } else if (1 == operationType) /* write result */ { } }