private void CmbMessageId_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (_lastSelectedMsgId != CmbMessageId.SelectedIndex) { _argTemplates.Clear(); SpArguments.Children.Clear(); _selectedMsgTemplate = null; if (CmbMessageId.SelectedIndex >= 0) { var selectedMsgTemplates = (from item in _msgTemplates where (item.MessageIdForCApi == (string)CmbMessageId.SelectedItem && item.MessageType == FlMessageCategory.Command) select item).SingleOrDefault(); if (string.IsNullOrEmpty(selectedMsgTemplates?.MessageIdForCApi) != true) { _selectedMsgTemplate = selectedMsgTemplates; if (_selectedMsgTemplate.Arguments?.Count > 0) { foreach (var arg in _selectedMsgTemplate.Arguments) { UcArgumentTemplate argTemplate = new UcArgumentTemplate(arg.Name); _argTemplates.Add(argTemplate); SpArguments.Children.Add(argTemplate); } } } } } }
private void BtnSendMessage_Click(object sender, RoutedEventArgs e) { if ((string.IsNullOrEmpty(TbDeviceId.Text) == true) || (uint.TryParse(TbDeviceId.Text, out uint deviceId) != true)) { MessageBox.Show("Invalid device ID."); return; } if (_selectedMsgTemplate != null) { bool validArguments = false; BtnSendMessage.IsEnabled = false; switch (_selectedMsgTemplate.MessageId) { case FlMessageId.ReadHardwareVersion: validArguments = true; ReadHardwareVersion(deviceId); break; case FlMessageId.ReadFirmwareVersion: validArguments = true; ReadFirmwareVersion(deviceId); break; case FlMessageId.WriteGpio: { UcArgumentTemplate argGpioNum = (UcArgumentTemplate)SpArguments.Children[0]; UcArgumentTemplate argGpioValue = (UcArgumentTemplate)SpArguments.Children[1]; if (string.IsNullOrEmpty(argGpioNum.ArgValue) == true) { MessageBox.Show("Invalie port number."); break; } if (string.IsNullOrEmpty(argGpioValue.ArgValue) == true) { MessageBox.Show("Invalie port value."); break; } if (byte.TryParse(argGpioNum.ArgValue, out byte gpioNum) != true) { MessageBox.Show("Invalie port number."); break; } if (byte.TryParse(argGpioValue.ArgValue, out byte gpioValue) != true) { MessageBox.Show("Invalie port value."); break; } if (gpioValue != 0 && gpioValue != 1) { MessageBox.Show("Invalie port value."); break; } validArguments = true; WriteGpio(deviceId, gpioNum, gpioValue); } break; case FlMessageId.ReadGpio: { UcArgumentTemplate argGpioNum = (UcArgumentTemplate)SpArguments.Children[0]; if (string.IsNullOrEmpty(argGpioNum.ArgValue) == true) { MessageBox.Show("Invalie port number."); break; } if (byte.TryParse(argGpioNum.ArgValue, out byte gpioNum) != true) { MessageBox.Show("Invalie port number."); break; } validArguments = true; ReadGpio(deviceId, gpioNum); } break; case FlMessageId.ReadTemperature: case FlMessageId.ReadHumidity: case FlMessageId.ReadTempAndHum: { UcArgumentTemplate argSensorNum = (UcArgumentTemplate)SpArguments.Children[0]; if (string.IsNullOrEmpty(argSensorNum.ArgValue) == true) { MessageBox.Show("Invalie sensor number."); break; } if (byte.TryParse(argSensorNum.ArgValue, out byte sensorNum) != true) { MessageBox.Show("Invalie port number."); break; } validArguments = true; if (_selectedMsgTemplate.MessageId == FlMessageId.ReadTemperature) { ReadTemperature(deviceId, sensorNum); } else if (_selectedMsgTemplate.MessageId == FlMessageId.ReadHumidity) { ReadHumidity(deviceId, sensorNum); } else if (_selectedMsgTemplate.MessageId == FlMessageId.ReadTempAndHum) { ReadTempAndHum(deviceId, sensorNum); } } break; case FlMessageId.BootMode: { UcArgumentTemplate artBootMode = (UcArgumentTemplate)SpArguments.Children[0]; if (byte.TryParse(artBootMode.ArgValue, out byte bootMode) != true) { MessageBox.Show("Invalid boot mode."); break; } validArguments = true; BootMode(deviceId, bootMode); } break; case FlMessageId.Reset: { validArguments = true; Reset(deviceId); } break; } if (_currentParserType == ParserType.Binary) { NextSequenceNumber(); } if (validArguments == true) { BtnSendMessage.IsEnabled = true; } } else { MessageBox.Show("No Message Selected."); } }