Я пытаюсь настроить датчик неонода, выполнив ControlTransfer через USB. Мой перевод не удается, даже если я дал разрешение моему устройству Android (на плате hikey 960) на USB, и соединение из моих журналов отладки оказалось успешным. Я использую Unity и изменяю UnityPlayerActivity.
В действии UnityPlayer у меня есть:
public UsbManager getUSBManager(){
return (UsbManager)getSystemService(Context.USB_SERVICE);
}
public UsbDevice getUSBManagerDevices(){
UsbManager Manager = (UsbManager)getSystemService(Context.USB_SERVICE);
UsbDevice Device;
HashMap<String, UsbDevice> deviceList = Manager.getDeviceList();
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
int i = 0;
while(deviceIterator.hasNext()) {
System.out.print("inside while");
UsbDevice device = deviceIterator.next();
if(i!=0) {
Device = device;
if(!Manager.hasPermission(device)) {
String ACTION_USB_PERMISSION = "com.Immersion.LRA2n1";
PendingIntent intent = PendingIntent.getBroadcast(this, 0,
new Intent(ACTION_USB_PERMISSION), 0);
Manager.requestPermission(device, intent);
}
}
i++;
}
return Device;
}
В Unity / C # у меня есть:
private static bool ReversedTouchScreen;
private AndroidJavaObject Device;
private AndroidJavaObject USBManager;
private static AndroidJavaObject currentActivity
{
get
{
return new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
}
}
public void SetDevice()
{
USBManager = currentActivity.Call<AndroidJavaObject>("getUSBManager");
AndroidJavaObject[] UsbDevices = currentActivity.Call<AndroidJavaObject[]>("getUSBManagerDevices");
device = UsbDevices[0];
Debug.Log(UsbDevices.Length);
}
public bool ReverseTouchScreen()
{
if (USBManager.Call<bool>("hasPermission", device))
{
Debug.Log("Permission granted");
AndroidJavaObject USBConnection1 = USBManager.Call<AndroidJavaObject>("openDevice", device);
Debug.Log("opening device");
byte[] message = new byte[257];
message[0] = 0xEE;
message[1] = 0x0E;
message[2] = 0x40;
message[3] = 0x02;
message[4] = 0x02;
message[5] = 0x00;
message[6] = 0x73;
message[7] = 0x08;
message[8] = 0xA2;
message[9] = 0x06;
message[10] = 0x84;
message[11] = 0x01;
message[12] = 0xFF;
message[13] = 0x85;
message[14] = 0x01;
message[15] = 0xFF;
if (USBConnection1 != null)
{
if(!USBConnection1.Call<bool>("claimInterface",device.Call<AndroidJavaObject>("getInterface",0),true))
{
Debug.Log("failed to claim interface");
return false;
}
int requestType = 0x00 | (0x01 << 5) | 0x01;
int RequestTransfer1 = USBConnection1.Call<int>("controlTransfer", requestType, 0x09, 0x0301, 0x0000, message, message.Length, 0);
Debug.Log("Transfer complete");
Debug.Log("Request transfer resulted in : " + RequestTransfer1);
}
else
{
Debug.Log("Unable to open device");
}
return true;
}
return false;
}
void Start () {
SetDevice();
}
// Update is called once per frame
void Update () {
if (!ReversedTouchScreen)
{
ReversedTouchScreen = ReverseTouchScreen();
}
}
Есть идеи, в чем может быть моя проблема? Я никогда не делал controlTransfer раньше, и я новичок в программировании Android, поэтому, возможно, я упускаю что-то очевидное. Любая помощь приветствуется.