繁体   English   中英

从Android触发多产条形码扫描仪设备

[英]Trigger Prolific Barcode Scanner device from Android

对不起,我的英语不好。 我正在使用需要向其传递命令和读取数据的Prolific设备。我想向com端口读取和写入数据。 我引用了此处提供的SDK附带的pl2303driver.jar库中给出的代码

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

如果我从条形码扫描仪扫描某些内容,则可以从com端口读取该数据。 如果我向设备写入一些数据,则write方法将返回已写入的字节数。 没问题。 但是我想将命令发送到将使条形码扫描仪发光并且将扫描条形码的设备。 我使用了USB Serial Terminal Lite应用程序,如果我给出命令#55#30#41#AA,则USB Serial Terminal Lite会触发条形码扫描仪。 我在我的应用程序中也希望这样做。我尝试使用文档中给出的#55#30#41#AA,0x55​​、0x30、0x41、0xAA命令,但它们不起作用。 我想我缺少会触发条形码扫描仪的特定命令。 我在这里发布一些代码。

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");
    }

请帮忙。

好的,我在回答自己的问题,我丢失了使扫描仪的LED发光的命令,我设法做到了,此外还需要做以下事情:

波特率:9600。

数据位:8

奇偶校验:无

停止位:1

pl2303driver.jar在这里确实很有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM