protected async override void OnResume() { Log.Info(TAG, "OnResume"); base.OnResume(); var portInfo = Intent.GetParcelableExtra(EXTRA_TAG) as UsbSerialPortInfo; int vendorId = portInfo.VendorId; int deviceId = portInfo.DeviceId; int portNumber = portInfo.PortNumber; Log.Info(TAG, string.Format("VendorId: {0} DeviceId: {1} PortNumber: {2}", vendorId, deviceId, portNumber)); var drivers = await DeviceListActivity.FindAllDriversAsync(usbManager); var driver = drivers.Where((d) => d.Device.VendorId == vendorId && d.Device.DeviceId == deviceId).FirstOrDefault(); if (driver == null) { throw new Exception("Driver specified in extra tag not found."); } port = driver.Ports [portNumber]; if (port == null) { titleTextView.Text = "No serial device."; return; } Log.Info(TAG, "port=" + port); titleTextView.Text = "Serial device: " + port.GetType().Name; serialIoManager = new SerialInputOutputManager(port) { BaudRate = 115200, DataBits = 8, StopBits = StopBits.One, Parity = Parity.None, }; serialIoManager.DataReceived += (sender, e) => { RunOnUiThread(() => { UpdateReceivedData(e.Data); }); }; serialIoManager.ErrorReceived += (sender, e) => { RunOnUiThread(() => { var intent = new Intent(this, typeof(DeviceListActivity)); StartActivity(intent); }); }; Log.Info(TAG, "Starting IO manager .."); try { serialIoManager.Open(usbManager); } catch (Java.IO.IOException e) { titleTextView.Text = "Error opening device: " + e.Message; return; } }
async Task OnItemClick(object sender) { for (int i = 0; i < adapter.Count; i++) { selectedPortTest = adapter.GetItem(i); // Поиск устройства if (selectedPortTest.Driver.Device.VendorId == 6790 && selectedPortTest.Driver.Device.DeviceId == 1003) { ItemPort = i; } // } selectedPort = adapter.GetItem(ItemPort); var permissionGranted = await usbManager.RequestPermissionAsync(selectedPort.Driver.Device, this); if (permissionGranted) { //MessageBox("Доступ к USB получен!"); int vendorId = selectedPort.Driver.Device.VendorId; int deviceId = selectedPort.Driver.Device.DeviceId; int portNumber = 0; var drivers = await FindAllDriversAsync(usbManager); var driver = drivers.Where((d) => d.Device.VendorId == vendorId && d.Device.DeviceId == deviceId).FirstOrDefault(); if (driver == null) { throw new Exception("Driver specified in extra tag not found."); } port = driver.Ports[portNumber]; if (port == null) { MessageBox("No serial device."); return; } serialIoManager = new SerialInputOutputManager(port) { BaudRate = 115200, DataBits = 8, StopBits = StopBits.One, Parity = Parity.None, }; serialIoManager.DataReceived += (sender, e) => { RunOnUiThread(() => { UpdateReceivedData(e.Data); }); }; serialIoManager.ErrorReceived += (sender, e) => { RunOnUiThread(() => { var intent = new Intent(this, typeof(MainActivity)); StartActivity(intent); }); }; try { serialIoManager.Open(usbManager); } catch (Java.IO.IOException e) { MessageBox("Error opening device: " + e.Message); return; } } }
private async void StartReceiving() { if (App.UsbManager == null || App.PortInfo == null) { ToastService.ToastShortMessage(AppResources.No_Device); return; } var driver = await FindDriversService.GetSpecificDriverAsync(App.UsbManager, App.PortInfo); if (driver != null) { _port = driver.Ports[App.PortInfo.PortNumber]; } else { ToastService.ToastShortMessage(AppResources.No_Driver); return; } CurrentDeviceName = _port.GetType().Name; NotifyPropertyChanged(nameof(CurrentDeviceName)); _serialIoManager = new SerialInputOutputManager(_port) { BaudRate = CurrentSettings.BaudRate, DataBits = CurrentSettings.DataBits, StopBits = CurrentSettings.StopBits, Parity = CurrentSettings.Parity }; _serialIoManager.DataReceived += (sender, e) => { Device.BeginInvokeOnMainThread(() => { UpdateReceivedData(e.Data); }); }; _serialIoManager.ErrorReceived += (sender, e) => { Device.BeginInvokeOnMainThread(() => { ToastService.ToastShortMessage(AppResources .Received_Error); }); }; ToastService.ToastShortMessage(AppResources.Port_Listening); try { _serialIoManager.Open(App.UsbManager); } catch (Exception) { ToastService.ToastShortMessage( $"{AppResources.Open_Failed}: {CurrentDeviceName}"); } finally { NotifyPropertyChanged(nameof(PortCommand)); NotifyPropertyChanged(nameof(PortStatus)); } }
protected async override void OnResume() { base.OnResume(); var portInfo = Intent.GetParcelableExtra(EXTRA_TAG) as UsbSerialPortInfo; int vendorId = portInfo.VendorId; int deviceId = portInfo.DeviceId; int portNumber = portInfo.PortNumber; var drivers = await FindAllDriversAsync(usbManager); var driver = drivers.Where((d) => d.Device.VendorId == vendorId && d.Device.DeviceId == deviceId).FirstOrDefault(); if (driver == null) { throw new Exception("Driver specified in extra tag not found."); } port = driver.Ports[portNumber]; if (port == null) { bluetoothData1.Text = "No serial device."; return; } serialIoManager = new SerialInputOutputManager(port) { //BaudRate = 115200, BaudRate = 9600, DataBits = 8, StopBits = StopBits.One, Parity = Parity.None, }; serialIoManager.DataReceived += (sender, e) => { RunOnUiThread(() => { UpdateReceivedData(e.Data); if (received_data == 0) { received_data = 1; } if (buffer[0] >= 0) { receive_buffer[receive_buffer_counter] = buffer[0]; // (byte)nextByte; //Load them in the received_buffer array. } //Search for the start signature in the received data stream. if (receive_byte_previous == 'J' && receive_buffer[receive_buffer_counter] == 'B') { receive_buffer_counter = 0; //Reset the receive_buffer_counter counter if the start signature if found. receive_start_detect++; //Increment the receive_start_detect to check for a full data stream reception. if (receive_start_detect >= 2) { Set_data(); latLongJMCdrone = new LatLng(-l_lat_gps / 1000000.0, -l_lon_gps / 1000000.0); if (start == 0) { wayPointArray[0] = latLongJMCdrone; } if (home_gps_set == 0 && number_used_sats > minSats && start == 2) { home_gps_set = 1; home_lat_gps = l_lat_gps; home_lon_gps = l_lon_gps; homeLatLong = new LatLng(-home_lat_gps / 1000000.0, -home_lon_gps / 1000000.0); wayPointArray[0] = homeLatLong; } if (home_gps_set == 1 && start == 0) { home_gps_set = 0; } if (fixCameraHomePoint / fixCameraHomePointDivisor != 1 || boolDragEnd || floatingButton2_clicked || floatingButton3_clicked || floatingButton4_clicked || number_used_sats == 0 || flight_mode >= 5) { mapFragment.GetMapAsync(this);//update Map } if (number_used_sats == 0) { Toast.MakeText(this, "No GPS signal", ToastLength.Long).Show(); progressBar1.SetProgress(1 + myRandowInt.Next(2, 5), false); fixCameraHomePointDivisor = 1; fixCameraHomePoint = 2; } if (number_used_sats > 0 && number_used_sats <= minSats) { progressBar1.SetProgress(number_used_sats * 7 + myRandowInt.Next(0, 5), false); fixCameraHomePoint = 6; } if (number_used_sats > minSats) { fixCameraHomePoint = 7; progressBar1.SetProgress(80 + myRandowInt.Next(5, 20), false); } if (flight_mode == 1) { bluetoothData1.Text = "1-Auto level"; } if (flight_mode == 2) { bluetoothData1.Text = "2-Altitude hold"; } if (flight_mode == 3) { bluetoothData1.Text = "3-GPS hold"; } if (flight_mode == 4) { bluetoothData1.Text = "4-RTH active"; } if (flight_mode == 5) { bluetoothData1.Text = "5-RTH I"; //5-RTH Increase altitude } if (flight_mode == 6) { bluetoothData1.Text = "6-RTH R"; //6-RTH Returning to home position } if (flight_mode == 7) { bluetoothData1.Text = "7-RTH L"; //7-RTH Landing } if (flight_mode == 8) { bluetoothData1.Text = "8-RTH F"; //8-RTH finished } if (flight_mode == 9) { bluetoothData1.Text = "9-Fly waypoint"; } bluetoothData2.Text = (latLongJMCdrone.Latitude).ToString(); bluetoothData3.Text = (latLongJMCdrone.Longitude).ToString(); bluetoothData4.Text = number_used_sats.ToString(); bluetoothData5.Text = start.ToString(); bluetoothData6.Text = actual_compass_heading.ToString(); bluetoothData7.Text = battery_voltage.ToString(); bluetoothData8.Text = los_distance.ToString("0.") + " m"; fixCameraHomePointDivisor = fixCameraHomePoint; } } else { //If there is no start signature detected. receive_byte_previous = receive_buffer[receive_buffer_counter]; //Safe the current received byte for the next loop. receive_buffer_counter++; //Increment the receive_buffer_counter variable. if (receive_buffer_counter > 48) { receive_buffer_counter = 0; //Reset the receive_buffer_counter variable when it becomes larger than 38. } } if (flight_mode == 9) { fixWayPoint = true; } if (flight_mode == 3 && fixWayPoint == false) { WriteData(send_buffer); } if (start == 2 && flight_mode == 3 && flyWayPointCounter <= addWayPointCounter + 1 && floatingButton3_clicked && fixWayPoint) { int latitude; int longitude; fixWayPoint = false; flyWayPointCounter++; floatingButton1.Hide(); floatingButton2.Hide(); floatingButton3.Hide(); floatingButton4.Hide(); if (flyWayPointCounter == addWayPointCounter + 1) { // +1 para retornar a origem !!!! floatingButton3_clicked = false; flyWayPointCounter = 0; floatingButton1.Show(); floatingButton2.Show(); floatingButton3.Show(); floatingButton4.Show(); latitude = (int)(homeLatLong.Latitude * 1000000.0); if (latitude < 0) { latitude *= -1; // deve ser um valor positivo// nao sei porque //deve ser por causa do sketch translatebyte do codigo arduino!!!! } longitude = (int)(homeLatLong.Longitude * 1000000.0); if (longitude > 0) { longitude *= -1; // deve ser um valor negativo// nao sei porque //deve ser por causa do sketch translatebyte do codigo arduino!!!! } } else { latitude = (int)(wayPointArray[flyWayPointCounter].Latitude * 1000000.0); if (latitude < 0) { latitude *= -1; // deve ser um valor positivo// nao sei porque //deve ser por causa do sketch translatebyte do codigo arduino!!!! } longitude = (int)(wayPointArray[flyWayPointCounter].Longitude * 1000000.0); if (longitude > 0) { longitude *= -1; // deve ser um valor negativo// nao sei porque //deve ser por causa do sketch translatebyte do codigo arduino!!!! } } send_buffer[0] = (byte)'W'; send_buffer[1] = (byte)'P'; send_buffer[5] = (byte)(latitude >> 24); send_buffer[4] = (byte)(latitude >> 16); send_buffer[3] = (byte)(latitude >> 8); send_buffer[2] = (byte)latitude; send_buffer[9] = (byte)(longitude >> 24); send_buffer[8] = (byte)(longitude >> 16); send_buffer[7] = (byte)(longitude >> 8); send_buffer[6] = (byte)longitude; send_buffer[10] = (byte)'-'; check_byte = 0; for (temp_byte = 2; temp_byte <= 10; temp_byte++) { check_byte ^= send_buffer[temp_byte]; } send_buffer[11] = check_byte; WriteData(send_buffer); } }); }; serialIoManager.ErrorReceived += (sender, e) => { RunOnUiThread(() => { var intent = new Intent(this, typeof(MainActivity)); StartActivity(intent); }); }; try { serialIoManager.Open(usbManager); } catch (Java.IO.IOException e) { bluetoothData1.Text = "Error opening device: " + e.Message; return; } }
// Réception de données Li-Fi avec port série micro USB private async Task OpenLiFiReceiverPort() { UsbManager UsbSerialManager = AppActivity.ApplicationContext.GetSystemService(Context.UsbService) as UsbManager; var Table = UsbSerialProber.DefaultProbeTable; Table.AddProduct(0x1b4f, 0x0008, Java.Lang.Class.FromType(typeof(CdcAcmSerialDriver))); // IOIO OTG var Prober = new UsbSerialProber(Table); var Drivers = await Prober.FindAllDriversAsync(UsbSerialManager); LiFiReceiverPort = null; foreach (var Driver in Drivers) // On cherche notre driver (le récepteur Li-Fi) { foreach (var Port in Driver.Ports) { if (HexDump.ToHexString((short)Port.Driver.Device.VendorId) == "0403" && HexDump.ToHexString((short)Port.Driver.Device.ProductId) == "6015") { LiFiReceiverPort = Port; } } } if (LiFiReceiverPort == null) // Si il n'est pas branché on affiche un message { AppActivity.RunOnUiThread(() => { ReceiverStatus.Text = "Récepteur Li-Fi absent"; }); } else { var IsPermissionGranted = await UsbSerialManager.RequestPermissionAsync(LiFiReceiverPort.Driver.Device, AppActivity.ApplicationContext); if (IsPermissionGranted) // On demande la permission à l'utilisateur d'utiliser le récepteur (Android) { SerialIOManager = new SerialInputOutputManager(LiFiReceiverPort) // Configuration du port série { BaudRate = 115200, DataBits = 8, StopBits = StopBits.One, Parity = Parity.None }; SerialIOManager.DataReceived += (source, args) => // Thread de réception de données { ReceivedSerialData = Encoding.UTF8.GetString(args.Data); // Données recu }; SerialIOManager.ErrorReceived += (source, args) => // Thread si il y a une erreur { AppActivity.RunOnUiThread(() => { ReceiverStatus.Text = "Récepteur Li-Fi absent"; // On affiche un message de débranchement SerialIOManager.Close(); }); }; try { SerialIOManager.Open(UsbSerialManager); // On ouvre le port AppActivity.RunOnUiThread(() => { ReceiverStatus.Text = "Récepteur Li-Fi opérationnel"; }); } catch (Java.IO.IOException Exception) { AppActivity.RunOnUiThread(() => { ReceiverStatus.Text = "Erreur récepteur Li-Fi: " + Exception.Message; }); } } else { AppActivity.RunOnUiThread(() => { ReceiverStatus.Text = "Permission requise"; }); } } }