protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.main); UsbSerialDeviceManager = new UsbSerialDeviceManager(this, "Aid.UsbSerialExamples.Aid.UsbSerialExamples.USB_PERMISSION", true); UsbSerialPortList = new List <UsbSerialPort>(); DeviceListListView = (ListView)FindViewById(Resource.Id.deviceList); Adapter = new MyArrayAdapter(this, Android.Resource.Layout.SimpleExpandableListItem2, UsbSerialPortList); DeviceListListView.Adapter = Adapter; UsbSerialDeviceManager.DeviceAttached += (object sender, UsbSerialDeviceEventArgs e) => { RefreshDeviceList(); }; UsbSerialDeviceManager.DeviceDetached += (object sender, UsbSerialDeviceEventArgs e) => { RefreshDeviceList(); }; UsbSerialDeviceManager.Start(); DeviceListListView.ItemClick += (sender, e) => { int position = e.Position; Log.Debug(TAG, "Pressed item " + position); if (Adapter.Count <= position) { Log.Warn(TAG, "Illegal position."); return; } UsbSerialPort port = Adapter.GetItem(position); ShowConsoleActivity(port); }; }
protected override void OnResume() { base.OnResume(); Log.Debug(TAG, "Resumed, port=" + UseUsbSerialPort); if (UseUsbSerialPort == null) { TitleTextView.Text = "No serial device."; } else { try { UseUsbSerialPort.Baudrate = TransfarRate; UseUsbSerialPort.Open(); TransfarRateValueTextView.SetText(TransfarRate.ToString(), TextView.BufferType.Normal); } catch (Exception e) { Log.Error(TAG, "Error setting up device: " + e.Message, e); TitleTextView.Text = "Error opening device: " + e.Message; try { UseUsbSerialPort.Close(); } catch (Exception) { // Ignore. } UseUsbSerialPort = null; return; } TitleTextView.Text = "Serial device: " + DeviceName; } RequestedOrientation = ScreenOrientation.Portrait; }
async Task OnItemClick(object sender, AdapterView.ItemClickEventArgs e) { Log.Info(TAG, "Pressed item " + e.Position); if (e.Position >= adapter.Count) { Log.Info(TAG, "Illegal position."); return; } // request user permission to connect to device // NOTE: no request is shown to user if permission already granted selectedPort = adapter.GetItem(e.Position); var permissionGranted = await usbManager.RequestPermissionAsync(selectedPort.Driver.Device, this); if (permissionGranted) { // start the SerialConsoleActivity for this device /*var newIntent = new Intent(this, typeof(SerialConsoleActivity)); * newIntent.PutExtra(SerialConsoleActivity.EXTRA_TAG, new UsbSerialPortInfo(selectedPort)); * StartActivity(newIntent);*/ var newIntent = new Intent(this, typeof(TempModTestActivity)); newIntent.PutExtra(TempModTestActivity.EXTRA_TAG, new UsbSerialPortInfo(selectedPort)); StartActivity(newIntent); this.Finish(); } }
protected override void OnResume() { base.OnResume(); Log.Debug(TAG, "Resumed, port=" + mUsbSerialPort); if (mUsbSerialPort == null) { mTitleTextView.Text = "No serial device."; } else { try { mUsbSerialPort.Baudrate = 19200; mUsbSerialPort.Open(); } catch (Exception e) { Log.Error(TAG, "Error setting up device: " + e.Message, e); mTitleTextView.Text = "Error opening device: " + e.Message; try { mUsbSerialPort.Close(); } catch (Exception) { // Ignore. } mUsbSerialPort = null; return; } mTitleTextView.Text = "Serial device: " + mUsbSerialPort.GetType().Name; } }
public SerialInputOutputManager(UsbSerialPort port) { this.port = port; BaudRate = DEFAULT_BAUDRATE; Parity = DEFAULT_PARITY; DataBits = DEFAULT_DATABITS; StopBits = DEFAULT_STOPBITS; }
public UsbSerialPortInfo(UsbSerialPort port) { var device = port.Driver.Device; VendorId = device.VendorId; DeviceId = device.DeviceId; PortNumber = port.PortNumber; }
/** * Starts the activity, using the supplied driver instance. * * @param context * @param driver */ static public void Show(Context context, UsbSerialPort port) { UseUsbSerialPort = port; Intent intent = new Intent(context, typeof(SerialConsoleActivity)); intent.AddFlags(ActivityFlags.SingleTop | ActivityFlags.NoHistory); context.StartActivity(intent); }
private async void SerialButton_Click(object sender, EventArgs e) { /////////////SerialActivity/////////// selectedPort = adapter.GetItem(0); var permissionGranted = await usbManager.RequestPermissionAsync(selectedPort.Driver.Device, this); if (permissionGranted) { var newIntent = new Intent(this, typeof(NavigationSerialActivity)); newIntent.PutExtra(NavigationSerialActivity.EXTRA_TAG, new UsbSerialPortInfo(selectedPort)); StartActivity(newIntent); } }
/// <summary> /// Initializes a new instance of the UsbSerialPort class. /// </summary> /// <param name="device"> /// UsbDevice, whose functions should be compatible with CdcControl and CdcData. /// </param> /// <returns> /// The result of Promise contains a new UsbSerialPort instance. It contains null, if failed. /// </returns> public static Windows.Foundation.IAsyncOperation <UsbSerialPort> CreateAsync( Windows.Devices.Usb.UsbDevice device ) { return(Task.Run(async() => { var that = new UsbSerialPort(device); var success = await that.TryInitialize(); if (success) { return that; } else { return null; } } ).AsAsyncOperation <UsbSerialPort>()); }
/// <summary> /// Initializes a new instance of the UsbSerialPort class. /// </summary> /// <param name="device"> /// UsbDevice, whose functions should be compatible with CdcControl and CdcData. /// </param> /// <returns> /// The result of Promise contains a new UsbSerialPort instance. It contains null, if failed. /// </returns> public static Windows.Foundation.IAsyncOperation<UsbSerialPort> CreateAsync( Windows.Devices.Usb.UsbDevice device ) { return Task.Run(async () => { var that = new UsbSerialPort(device); var success = await that.TryInitialize(); if (success) { return that; } else { return null; } } ).AsAsyncOperation<UsbSerialPort>(); }
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; } } }
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; } }
private void ShowConsoleActivity(UsbSerialPort port) { SerialConsoleActivity.Show(this, port); }
protected override void OnResume() { base.OnResume(); #region USB adatkapcsoalt beállítása //Először elkérjük a komplett USB managert this.m_UsbManager = GetSystemService(Context.UsbService) as UsbManager; //Megkeressük a legelső (egyetlen) USB eszközt List <IUsbSerialDriver> devices = FindAllDriversAsync(this.m_UsbManager); IUsbSerialDriver hardware = devices.FirstOrDefault(); if (hardware != null) { this.m_SerialPort = hardware.Ports.FirstOrDefault(); if (this.m_SerialPort != null) { //Ha találtunk eszközt, hozzáférést érünk az eszközhöz PendingIntent pi = PendingIntent.GetBroadcast(this, 0, new Intent("ACTION_USB_PERMISSION"), 0); this.m_UsbManager.RequestPermission(this.m_SerialPort.Driver.Device, pi); //if(task.Result == true) { //Ha megkaptuk a hozzáférést akkor megynitjuk az eszközt mint sorosport this.m_SerialIO = new SerialInputOutputManager(this.m_SerialPort) { BaudRate = 9600, DataBits = 8, StopBits = StopBits.One, Parity = Parity.None, }; this.m_SerialIO.DataReceived += (sender, e) => { this.RunOnUiThread(() => { this.OnReceiveSerialData(e.Data); }); }; this.m_SerialIO.ErrorReceived += (sender, e) => { this.RunOnUiThread(() => { var intent = new Intent(this, typeof(MainActivity)); StartActivity(intent); }); }; try { this.m_SerialIO.Open(this.m_UsbManager); this.m_Web.EvaluateJavascript("ext_stateChanged('OK')", null); return; } catch (Java.IO.IOException e) { this.m_Web.EvaluateJavascript("ext_stateChanged('ERROR')", null); return; } } } } this.m_Web.EvaluateJavascript("ext_stateChanged('Unknown')", null); #endregion }
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() { 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 MainActivity.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 = 9600, 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); }); }; Log.Info(TAG, "Starting IO manager .."); try { serialIoManager.Open(usbManager); } catch (Java.IO.IOException e) { titleTextView.Text = "Error opening device: " + e.Message; return; } }
public AndroidSerialPort(UsbManager usbManager, UsbSerialPort port, Context ctx) { this.usbManager = usbManager; this.port = port; this.ctx = ctx; }