抱歉我的英语不好。 我正在使用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");
}
请帮忙。
答案 0 :(得分:0)
好的。我正在回答我自己的问题。我失去了发出扫描仪LED指示灯的命令。我设法得到它。此外还需要做以下事情:
波特率:9600。
数据位:8
奇偶校验:无
停止位:1
pl2303driver.jar在这里真的很有帮助。