public void RefreshActiveSerialNexstarDevices() { _logger.LogInformation("Clearing old devices."); ActiveNexStarDevicePortNames.Clear(); _logger.LogInformation("Starting probe for NexStar devices."); string[] portNames = SerialPort.GetPortNames(); foreach (string portName in portNames) { SerialPortController testController = new SerialPortController(portName); VersionCommand versionCommandCommand = new VersionCommand(); try { testController.RunCommand(versionCommandCommand); if (versionCommandCommand.RawResultBytes != null) { ActiveNexStarDevicePortNames.Add(portName); _logger.LogInformation($"NexStar device found on port '{portName}'."); } } catch (TimeoutException) { _logger.LogInformation($"Probe timeout for port '{portName}'."); //ignore timeouts here, we are expecting some devices to not respond. } finally { testController.CloseSerialConnection(); } } _logger.LogInformation($"Probe finished found {ActiveNexStarDevicePortNames.Count} devices."); }
public void Excute() { OnPreExecute(); //会调用重写的方法 SerialPortController mSerialPortController = SerialPortController.GetInstance(); //这个类只会new一次 mSerialPortController.PortName = Param.PortName; mSerialPortController.BaudRate = Param.BaudRate; mSerialPortController.Initialization((object sender, EventArgs e) => { SerialPortEventArgs mSerialPortEventArgs = e as SerialPortEventArgs; //通知异常 OnPostExecute(default(T), new Exception(mSerialPortEventArgs.ErrorMessage)); }, (object sender, EventArgs e) => { SerialPortEventArgs mSerialPortEventArgs = e as SerialPortEventArgs; recvByteArray = mSerialPortEventArgs.Data; if (null != MyProtocol && null != mSerialPortEventArgs) { //会调用重写的方法 OnPostExecute(MyProtocol.Decode(mSerialPortEventArgs.Data) as T, null); } else { //通知异常 OnPostExecute(default(T), new Exception("返回数据为空")); } }, MyProtocol); if (RequestProtocol != null && RequestProtocol.GetCommand() != SerialPortConst.COMMAND_EMPTY_VIRTUAL) { mSerialPortController.SendCommand(RequestProtocol.Encode()); Console.WriteLine("-----------------send value-----------------\n" + Util.ToHexString(RequestProtocol.Encode())); } }
/// <summary> /// Перехватывает событие SerialPortDetectorThreadWrapper.onCompleted /// Это событие как определяет порт нужного устройства, так и фиксирует порты других устройств /// </summary> private void OnDetectionCompleted(object sender, LowLevelUtils.SerialPortDetectorEventArgs args) { if (args.Result) { Debug.Log($"Found! {args.Controller}"); _serialPortController = args.Controller; _serialPortController.onMessageReceived += OnMessageReceived; foreach (var wrapper in _threadWrappers.Where(wr => !wr.RequestCanceled)) { wrapper.CancelRequest(); } foreach (var cameraBaseController in CameraBaseControllers) { cameraBaseController.Initialize(); } } ((LowLevelUtils.SerialPortDetectorThreadWrapper)sender).onCompleted -= OnDetectionCompleted; if (++_wrappersInvokedCount == _threadWrappers.Count) { foreach (var wrapper in _threadWrappers) { wrapper.Dispose(); } _threadWrappers.Clear(); } }
public void moveForward(SerialPortController sp, Master ms, int rpm) { if (Config.num_of_thrusters != 5 && Config.num_of_thrusters != 3) { return; } int[] idx = new int[2]; if (Config.num_of_thrusters == 5) // select motors to run: lowerleft, lowerright -> motorIdex[3,4] { idx[0] = Config.motorIdx[3]; idx[1] = Config.motorIdx[4]; } else if (Config.num_of_thrusters == 3) { idx[0] = Config.motorIdx[1]; idx[1] = Config.motorIdx[2]; } int[] rpmToSet = new int[Config.max_num_of_thrusters]; for (int i = 0; i < Config.max_num_of_thrusters; ++i) { if (i == idx[0] || i == idx[1]) { rpmToSet[i] = rpm; } else { rpmToSet[i] = 0; } } sp.sendDownstreamPacket(ms.setAllRPM(rpmToSet[0], rpmToSet[1], rpmToSet[2], rpmToSet[3], rpmToSet[4], rpmToSet[5])); curStatus = OPS.FORWARD; }
public void OnRight(SerialPortController sp, Master ms) { if (Config.num_of_thrusters == 5) { curRPM = Config.max_rpm / 10; Debug.LogFormat("current RPM: %d\n", curRPM); moveRight(sp, ms, curRPM); } }
public int MachineRot = 0; //기계에서 받아오는 핸들 회전 값 임시 변수 //public CharacterController Bike; void Awake() { spController = gameObject.GetComponent <SerialPortController>(); if (spController == null) { spController = new SerialPortController(); } //DontDestroyOnLoad(this.gameObject); }
// Use this for initialization void Start() { min_index = (int)roller_slider.minValue; max_index = (int)roller_slider.maxValue; current_index = 3; roller_slider.value = current_index; spController = player.GetComponent <SerialPortController> (); }
// Change the serial port name private void lstSerialPorts_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { SerialPortController.PortName = (string)lstSerialPorts.SelectedItem; } catch (ArgumentNullException) { SerialPortController.StopReceivingData(); } }
/// <summary> /// The driver class for the main form and its event handelers. /// </summary> public MainForm() { /* Initialize UI */ InitializeComponent(); // VS Studio Autogen code this.panelDashboard.Visible = true; this.panelScanMain.Visible = false; this.panelExport.Visible = false; /* Initialize models and controllers */ this.databaseModel = new DatabaseModel(this); this.exportModel = new ExportModel(); this.serialPortController = new SerialPortController(this, databaseModel); this.networkController = new NetworkController(this, databaseModel); }
// Send a string with new line to the serial port device private void btnSendLine_Click(object sender, RoutedEventArgs e) { // Set the timeout SerialPortController.WriteTimeout = 1000; // Send the string try { SerialPortController.Write(txtSendLine.Text, (MessageEnding)cbMessageEnding.SelectedItem); } catch (System.Exception ex) { MessageBox.Show("Failed in sending string:\n" + ex.Message); } }
/// <summary> /// 串行端口控制器配置变更事件处理器。 /// </summary> /// <param name="sender">触发该事件的对象。</param> /// <param name="e">事件参数。</param> protected void _ctrlConfigChangedHandler() { // Check if the serial port is ready if (SerialPortController.IsReady) { // Serial port ready // Start receiving data SerialPortController.StartReceivingData(); } else { // Serial port not ready // Stop receiving data SerialPortController.StopReceivingData(); } }
public void goDown(SerialPortController sp, Master ms, int rpm) { int[] rpmToSet = new int[Config.max_num_of_thrusters]; for (int i = 0; i < Config.max_num_of_thrusters; ++i) { if (i == Config.motorIdx[0]) { rpmToSet[i] = rpm; } else { rpmToSet[i] = 0; } } sp.sendDownstreamPacket(ms.setAllRPM(rpmToSet[0], rpmToSet[1], rpmToSet[2], rpmToSet[3], rpmToSet[4], rpmToSet[5])); curStatus = OPS.DOWN; }
public void changeSpeed(OPS status, SerialPortController sp, Master ms) { switch (status) { case OPS.UP: goUp(sp, ms, curRPM); break; case OPS.DOWN: goDown(sp, ms, curRPM); break; case OPS.FORWARD: moveForward(sp, ms, curRPM); break; case OPS.BACKWARD: moveBackward(sp, ms, curRPM); break; case OPS.LEFT_TURN: turnLeft(sp, ms, curRPM); break; case OPS.RIGHT_TURN: turnRight(sp, ms, curRPM); break; case OPS.LEFT: if (Config.num_of_thrusters == 5) { moveLeft(sp, ms, curRPM); } break; case OPS.RIGHT: if (Config.num_of_thrusters == 5) { moveRight(sp, ms, curRPM); } break; default: break; } }
public void OnRealMonsterMode(SerialPortController sp, Master ms) { int randRPM = UnityEngine.Random.Range(0, 1000); for (int i = 0; i < 10; ++i) { randRPM = UnityEngine.Random.Range(0, 1000) % 11384 + 5000; if (UnityEngine.Random.Range(0, 1000) % 2 == 0) { sp.sendDownstreamPacket(ms.setAllRPM(randRPM, randRPM, randRPM, randRPM, randRPM, 0)); } else { randRPM = -randRPM; sp.sendDownstreamPacket(ms.setAllRPM(randRPM, randRPM, randRPM, randRPM, randRPM, 0)); } Debug.LogFormat("rpm: %d\n", randRPM); } }
/// <summary> /// 设置四个螺旋桨的油门输出。(上位机模式) /// </summary> /// <param name="throttle1">第1号螺旋桨的油门输出。</param> /// <param name="throttle2">第2号螺旋桨的油门输出。</param> /// <param name="throttle3">第3号螺旋桨的油门输出。</param> /// <param name="throttle4">第4号螺旋桨的油门输出。</param> /// <returns>返回一个 bool 值表示指令是否成功送出。</returns> /// <exception cref="System.ArgumentOutOfRangeException">当油门输出不在 0 至 255 范围内时抛出该异常。</exception> public static bool SetThrottleOutputs_PC(int throttle1, int throttle2, int throttle3, int throttle4) { // =================== [ Sent Data Structure ] =================== // // // // '@', '0x04', [Throttle: 4*uint16_t (1,2,3,4)], '\r', '\n' // // // // =============================================================== // // Check the ranges of the throttles if (throttle1 < 0 || throttle1 > 255 || throttle2 < 0 || throttle2 > 255 || throttle3 < 0 || throttle3 > 255 || throttle4 < 0 || throttle4 > 255) { throw new ArgumentOutOfRangeException("Miniquad_Controller.Miniquad.Communication.SetThrottleOutputs_PC: The value of throttle must be between 0 and 255."); } // Construct the message head bytes _sentDataInPrincipalComputerMode[0] = BitConverter.GetBytes('@')[0]; _sentDataInPrincipalComputerMode[1] = BitConverter.GetBytes(4)[0]; // Construct the message content bytes BitConverter.GetBytes((UInt16)throttle1).CopyTo(_sentDataInPrincipalComputerMode, 2); BitConverter.GetBytes((UInt16)throttle2).CopyTo(_sentDataInPrincipalComputerMode, 4); BitConverter.GetBytes((UInt16)throttle3).CopyTo(_sentDataInPrincipalComputerMode, 6); BitConverter.GetBytes((UInt16)throttle4).CopyTo(_sentDataInPrincipalComputerMode, 8); // Construct the message ending bytes _sentDataInPrincipalComputerMode[10] = BitConverter.GetBytes('\r')[0]; _sentDataInPrincipalComputerMode[11] = BitConverter.GetBytes('\n')[0]; // Send the message try { SerialPortController.Write(_sentDataInPrincipalComputerMode, 0, 12); return(true); } catch (System.Exception) { return(false); } }
protected virtual void Dispose(bool disposing) { if (!_isDisposed) { if (disposing) { onCompleted = null; _serialPortController.onDetected -= Detect; if (_result) { _serialPortController = null; } else { _serialPortController.Dispose(); } } _isDisposed = true; } }
public void moveRight(SerialPortController sp, Master ms, int rpm) { if (Config.num_of_thrusters != 5) { return; } // select motors to run: upperleft, lowerleft -> motorIdex[1,3] int[] idx = { Config.motorIdx[1], Config.motorIdx[3] }; int[] rpmToSet = new int[Config.max_num_of_thrusters]; for (int i = 0; i < Config.max_num_of_thrusters; ++i) { if (i == idx[0] || i == idx[1]) { rpmToSet[i] = rpm; } else { rpmToSet[i] = 0; } } sp.sendDownstreamPacket(ms.setAllRPM(rpmToSet[0], rpmToSet[1], rpmToSet[2], rpmToSet[3], rpmToSet[4], rpmToSet[5])); curStatus = OPS.RIGHT; }
public void ExitTask() { SerialPortController.GetInstance().ClosePort(); }
void Awake() { instance = this; }
public UserControls() { InitializeComponent(); // pass ImageViewModel from the UserControl's DataContext ctrl = new SerialPortController(DataContext as ImageViewModel); }
public void OngetAllCurrent(SerialPortController sp, Master ms) { sp.sendDownstreamPacket(ms.getAllCurrent()); }
public void OngetBatteryVolts(SerialPortController sp, Master ms) { sp.sendDownstreamPacket(ms.getBatteryVolts()); }
public void StopscanPeriodically(SerialPortController sp, Master ms) { sp.sendDownstreamPacket(ms.scanPeriodically(0x16, 0x0c, 0)); sp.sendDownstreamPacket(ms.scanPeriodically(0x17, 0x0c, 0)); }
/// <summary> /// 接收并显示飞行器的当前状态。 /// </summary> protected void _receiveRobotStatus() { // Get the latest Miniquad status if (Miniquad.Miniquad.RefreshStatus(SerialPortController.ReceivedDataBuffer)) { // Get the status MiniquadStatus status = Miniquad.Miniquad.Status; // Get the throttle outputs (PC mode) int[] throttles = Miniquad.Miniquad.GetAdjustedThrottleOutputs_PC(); // Check the existence of the status if (status != null) { // Clear the buffer SerialPortController.ClearReceivedDataBuffer(); // Quaternion lblQuaternion.Dispatcher.Invoke(new Action(() => { lblQuaternion.Content = status.Quaternion.W.ToString("0.00") + ", " + status.Quaternion.X.ToString("0.00") + ", " + status.Quaternion.Y.ToString("0.00") + ", " + status.Quaternion.Z.ToString("0.00"); })); // Euler Angle lblEulerAngle.Dispatcher.Invoke(new Action(() => { lblEulerAngle.Content = status.EulerAngle.Psi.ToString("0.00") + ", " + status.EulerAngle.Theta.ToString("0.00") + ", " + status.EulerAngle.Phi.ToString("0.00"); })); // Rotation lblRotation.Dispatcher.Invoke(new Action(() => { lblRotation.Content = status.Rotation.X.ToString("0.00") + ", " + status.Rotation.Y.ToString("0.00") + ", " + status.Rotation.Z.ToString("0.00"); })); // Acceleration lblAcceleration.Dispatcher.Invoke(new Action(() => { lblAcceleration.Content = status.Acceleration.X.ToString("0.00") + ", " + status.Acceleration.Y.ToString("0.00") + ", " + status.Acceleration.Z.ToString("0.00"); })); // Gravity lblGravity.Dispatcher.Invoke(new Action(() => { lblGravity.Content = status.Gravity.X.ToString("0.00") + ", " + status.Gravity.Y.ToString("0.00") + ", " + status.Gravity.Z.ToString("0.00"); })); // Yaw Pitch Roll lblYawPitchRoll.Dispatcher.Invoke(new Action(() => { lblYawPitchRoll.Content = status.YawPitchRoll.Yaw.ToString("0.00") + ", " + status.YawPitchRoll.Pitch.ToString("0.00") + ", " + status.YawPitchRoll.Roll.ToString("0.00"); })); // Temperature //lblTemperature.Content = "null"; // Throttles lblThrottles.Dispatcher.Invoke(new Action(() => { lblThrottles.Content = status.Propeller1.Throttle.ToString() + ", " + status.Propeller2.Throttle.ToString() + ", " + status.Propeller3.Throttle.ToString() + ", " + status.Propeller4.Throttle.ToString(); //lblThrottles.Content = // throttles[0].ToString() + ", " + // throttles[1].ToString() + ", " + // throttles[2].ToString() + ", " + // throttles[3].ToString(); })); // Auto controlled by algorithm if (_isAotoControlled) { Miniquad.Miniquad.SetThrottleOutputs_PC(throttles[0], throttles[1], throttles[2], throttles[3]); } } } }
public SerialPortDetectorThreadWrapper(string portName, bool sendOnCompletedToMainThread = true) : base(sendOnCompletedToMainThread) { _serialPortController = SerialPortParams.NewSerialPort(portName); _serialPortController.onDetected += Detect; }
private void OnLoad(object sender, RoutedEventArgs e) { serialPortController = new SerialPortController(false); txtPortName.Text = serialPortController.PortName; txtBaudRate.Text = serialPortController.Baudrate.ToString(); }
public void InitialVariables() { otherController = new OtherController(); ovalPictureBox.BackgroundImageLayout = ImageLayout.Zoom; serialPortController = new SerialPortController(true); serialPortController.PortOpen += () => { // System.Windows.MessageBox.Show("port open"); this.Dispatcher.Invoke(() => { imageSerialportStatus.Source = new BitmapImage(new Uri("/Resource/SerialPortSuccess.png", UriKind.Relative)); }); }; serialPortController.PortClose += () => { // System.Windows.MessageBox.Show("port closed"); this.Dispatcher.Invoke(() => { imageSerialportStatus.Source = new BitmapImage(new Uri("/Resource/SerialPortFail.png", UriKind.Relative)); }); }; serialPortController.NewDataReceived += (string data) => { if (data.Substring(data.Length - 1, 1) == "\r") { data = data.Substring(0, data.Length - 1); } //System.Windows.MessageBox.Show(data); switch (data) { case "LIVE": new Task(() => LivePreView()).Start(); break; case "SAVE": if (pedalController.SaveOnSave) { SaveToGallery(); } if (pedalController.SetImageRightOnSave) { SetImageRight(); } break; case "FREEZE": CaptureJpeg(); StopLivePreView(); if (pedalController.SaveOnFreeze) { SaveToGallery(); } break; } }; dvrControl = new DvrController(); galleryController = new GalleryController(); pedalController = new PedalController(); captureController = new CaptureController(); patientDbContext = new PatientDbContext(); dgTodayWorkBench.DataContext = patientDbContext.Patients.ToList(); pateintTodayForm.nowRefresh += LoadTodayPatientTable; pateintTodayForm.onSelectPatient += (int Id, string fullName) => { mainTabControl.SelectedIndex = 1; PatientId = Id; galleryController.CreateAndOpenGalley(Id); galleryControl.setGalleryId(Id); patientWorkBenchName.Text = fullName; //picCapture.Source = null; partBottom.Visibility = Visibility.Collapsed; }; galleryControl.onChangeSelectedItem += (BitmapImage bitmapImage) => { this.Dispatcher.Invoke(() => { //ellipseGeometry.Center = new Point(bitmapImage.Width / 2, bitmapImage.Height / 2); //int startX = (int)(bitmapImage.Width - bitmapImage.Height) / 2; //int endX = (int)(bitmapImage.Width + startX); ////CroppedBitmap croppedBitmap = new CroppedBitmap(bitmapImage, new Int32Rect(startX, 0, endX, (int)bitmapImage.Height)); //croppedBitmap.SourceRect = new Int32Rect(startX, 0, endX, (int)bitmapImage.Height); picCapture.Source = bitmapImage; }); }; }
public void OnTurnRight(SerialPortController sp, Master ms) { curRPM = Config.max_rpm / 10; Debug.LogFormat("current RPM: %d\n", curRPM); turnRight(sp, ms, curRPM); }
public void ClearAllEvent() { SerialPortController.GetInstance().ClearAllEvent(); }
public void OnMonsterMode(SerialPortController sp, Master ms) { sp.sendDownstreamPacket(ms.setAllRPM(5000, 5000, 5000, 5000, 5000, 0)); }