从Android触发Prolific Barcode Scanner设备

时间:2014-02-18 07:32:00

标签: java android

抱歉我的英语不好。 我正在使用Prolific设备,我需要传递命令和读取数据。我想读取和写入数据到COM端口。 我引用了pl2303driver.jar库中给出的代码,我在这里提供了SDK

http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=230&pcid=41

如果我从条形码扫描仪扫描某些东西,我可以从com端口读取该数据。 如果我向设备写入一些数据写入方法返回写入的字节数。没问题。 但是我想将命令发送到能够点亮条形码扫描器并扫描条形码的设备。 我使用USB串行终端精简版应用程序。如果我发出命令#55#30#41#AA,USB串行终端精简版会触发条码扫描器。 我想在我的应用程序中使用同样的东西。我尝试使用#55#30#41#AA,0x55​​,0x30,0x41,0xAA命令在Documentation.But它们不起作用。 我想我缺少会触发条形码扫描器的特殊命令。 我在这里发布一些代码。

PL2303Driver mSerial;
private static final String ACTION_USB_PERMISSION = "com.prolific.pl2303hxdsimpletest.USB_PERMISSION"; 

mSerial = new PL2303Driver((UsbManager) getSystemService(Context.USB_SERVICE),this,  ACTION_USB_PERMISSION); 

方法读取代码:

private void readDataFromSerial()
{
    int len;
    byte[] rbuf = new byte[4096];
    StringBuffer sbHex=new StringBuffer();

    Log.d(TAG, "Enter readDataFromSerial");

if(null==mSerial)
    return;        

    if(!mSerial.isConnected()) 
        return;

    len = mSerial.read(rbuf);
    if(len<0) 
    {
        Log.d(TAG, "Fail to bulkTransfer(read data)");
        return;
    }

    if (len > 0)
    {           
           if (SHOW_DEBUG) 
           {
               Log.d(TAG, "read len : " + len);
           }                

           for (int j = 0; j < len; j++)
           {                   
                sbHex.append((char) (rbuf[j]&0x000000FF));
           }              
           etRead.setText(sbHex.toString());    
           Toast.makeText(this, "len="+len, Toast.LENGTH_SHORT).show();
    }
     else 
     {      
         if (SHOW_DEBUG) 
         {
             Log.d(TAG, "read len : 0 ");
         }
         etRead.setText("empty");
         return;
     }

    try 
    {
        Thread.sleep(50);
    } 
    catch (InterruptedException e)
    {
        e.printStackTrace();
    }

    Log.d(TAG, "Leave readDataFromSerial"); 
}

编写代码方法:

   private void writeDataToSerial() 
   {

        Log.d(TAG, "Enter writeDataToSerial");

    if(null==mSerial)
        return;

        if(!mSerial.isConnected()) 
            return;

        String strWrite = etWrite.getText().toString(); //  

         if (SHOW_DEBUG) 
          {
            Log.d(TAG, "PL2303Driver Write(" + strWrite.length() + ") : " + strWrite);
         }

        int res = mSerial.write(strWrite.getBytes(), strWrite.length());
    if( res<0 )
         {
        Log.d(TAG, "setup: fail to controlTransfer: "+ res);
        return;
    } 

    Toast.makeText(this, "Write length: "+strWrite.length()+" bytes", Toast.LENGTH_SHORT).show(); 


    if (SHOW_DEBUG) 
    {
             Log.d(TAG, "PL2303Driver Write 2(" + strWrite.length() + ") : " + strWrite);
       }
    Log.d(TAG, "Leave writeDataToSerial");
    }

请帮忙。

1 个答案:

答案 0 :(得分:0)

好的。我正在回答我自己的问题。我失去了发出扫描仪LED指示灯的命令。我设法得到它。此外还需要做以下事情:

波特率:9600。

数据位:8

奇偶校验:无

停止位:1

pl2303driver.jar在这里真的很有帮助。