【解決方法】xamarin.android でシリアルポートにデータを読み書きする方法は?


親愛なるみんな

私は Xamarin.Android の初心者です
デバイスは、OTG 機能を使用して My Android スマートフォンに接続されています。 Xamarin c#(Visual Studio 2017)でシリアルポート経由でアクセスしたい。

私を案内してください。 ご協力いただきありがとうございます

私が試したこと:

UsbManager、UsbDevice、および UsbInterface クラスに関するトピックを読みましたが、コード例とビデオ チュートリアルが見つかりません。

解決策 1

解決策 2

UsbManager usbManager = (UsbManager)Forms.Context.GetSystemService(Context.UsbService);
MesageDataEvent?.Invoke(“受信した UsbManaager”);

UsbDevice usbDevice = usbManager.DeviceList.Values.First();

UsbInterface usbInterface = usbDevice.GetInterface(0);
MesageDataEvent?.Invoke(“受信した usbInterface”);

UsbEndpoint エンドポイント = usbInterface.GetEndpoint(0);
MesageDataEvent?.Invoke(“受信エンドポイント”);

int portNumber = endpoint.EndpointNumber;
MesageDataEvent?.Invoke(“受信ポート番号”);

var drivers = await FindAllDriversAsync(usbManager);
MesageDataEvent?.Invoke(“受信したドライバ”);

var driver = drivers.FirstOrDefault();
MesageDataEvent?.Invoke($”受信したドライバー {driver.ToString()}”);

selectedPort = driver.GetPort();
MesageDataEvent?.Invoke($”Received selectedPort{selectedPort.ToString()} + {selectedPort.GetType().ToString()} + {selectedPort.PortNumber.ToString()}”);

UsbDeviceConnection 接続 = null;

試す
{
var permissionGranted = await usbManager.RequestPermissionAsync(usbDevice, MainActivity.Instance);
MesageDataEvent?.Invoke(permissionGranted.ToString());
場合 (権限付与)
{
var tr = usbManager.HasPermission(usbDevice);
MesageDataEvent?.Invoke($”Received {tr.ToString()}”);

接続 = usbManager.OpenDevice(usbDevice);
MesageDataEvent?.Invoke($”受信したドライバー {connection.ToString()}”);

UsbEndpoint end = usbDevice.GetInterface(0).GetEndpoint(0);

connection.ClaimInterface(usbInterface, true);

selectedPort.Open(接続);
MesageDataEvent?.Invoke(“デバイス接続を開く”);

serialIoManager = 新しい SerialInputOutputManager(selectedPort)
{
ボーレート = 9600、
データビット = 8、
StopBits = StopBits.One、
パリティ = Parity.None、
};

MesageDataEvent?.Invoke(“開く”);

試す
{
serialIoManager.DataReceived += (送信者, e) =>
{
MessageDataEvent?.Invoke($”Listen{e.Data}”);
試す
{
UpdateReceivedData(e.Data);
リッスン (e.Data);
}
catch (Exception ex) { MesageDataEvent?.Invoke(ex.ToString()); }
};
}
キャッチ (例外 e)
{
MesageDataEvent?.Invoke($”{e.ToString()}”);
}

MessageDataEvent?.Invoke($”iii”);

試す
{
MesageDataEvent?.Invoke($”eerr”);
serialIoManager.Open(usbManager);
}
キャッチ (例外 e)
{
MesageDataEvent?.Invoke($”{e.ToString()} Set deviceConnection”);
}
}
}

コメント

タイトルとURLをコピーしました