2015-01-27 3 views
0

저는 xamarin android의 직렬 칩에 CP2102 USB와 통신하기위한 응용 프로그램을 작성했습니다. 나는 succssesfully 장치를 열고 인터페이스를 주장하기위한 전제를 부여 할 수 있습니다. 나는 장치를 연 후에 나는 엔드 포인트 인터페이스를 주장하고 얻을 코드 줄을 사용 UsbDeviceConnection ControlTransfer()는 -1을 반환합니다.

for (int i = 0; i < mDevice.InterfaceCount; i++) 
       { 
        UsbInterface usbIface = mDevice.GetInterface(i); 
        if (mConnection.ClaimInterface(usbIface, true)) 
        { 
         Log.Debug(TAG, "claimInterface " + i + " SUCCESS"); 
        } 
        else 
        { 
         Log.Debug(TAG, "claimInterface " + i + " FAIL"); 
        } 
       } 

       UsbInterface dataIface = mDevice.GetInterface(mDevice 
         .InterfaceCount - 1); 
       for (int i = 0; i < dataIface.EndpointCount; i++) 
       { 
        UsbEndpoint ep = dataIface.GetEndpoint(i); 
        if (ep.Type == UsbAddressing.XferBulk) 
        { 
         if (ep.Direction == UsbAddressing.In) 
         { 
          mReadEndpoint = ep; 
         } 
         else 
         { 
          mWriteEndpoint = ep; 
         } 
        } 
       } 

가 그럼 난 장치와 통신하기 위해 ControlTransfer을 사용하려고하지만 항상 -1을 반환합니다. 이 내가 설정을 설정하기 위해 작성한 코드 :

int r = mConnection.ControlTransfer(UsbAddressing.Out, 0x00, 0x0001, 0, null, 0, 5000); 

는 R 항상 -1 나는 자바 안드로이드에서이 명령을 실행하면 장치가 완벽하게 작동하지만, 통신에 오류가 있음을 나타냅니다 :

mConnection.controlTransfer(0x41, 0x00, 0x0001, 0, null, 0, 5000); 

답변

0

확인 문제는 UsbAddressing.Out입니다. 0입니다.이 유형의 요청은 칩 세트의 문서에 따라 0x41이어야합니다. 믿음을 말하면 나는이 질문을 전혀해서는 안됩니다. Xamarin에서이 유형의 칩을 사용하는 것은 맞춤 요청 유형을 보낼 수 없으므로 불가능합니다. Java로 코드를 작성하고 JNI를 사용하여 코드를 가져와야합니다. 내가 아는 한 유일한 해결책입니다. 나는 이것이 주된 이유 중 하나라고 생각한다. xamarinusbserial project 그들은 JNI도 사용했다.

xamarin의 누군가가이 게시물을 읽었 으면합니다. 상업용 응용 프로그램으로 작업 할 때 이러한 문제에 직면하는 것은 너무 귀찮습니다.