Bluetooth 如何从条形码扫描仪MT2070发送数据
摩托罗拉的MT2070条码扫描器有问题。我使用.NETUpdate 2的EMDK 2.6从扫描的条形码创建字符串,然后将其传输到主机pc。但传输失败 MT2070使用Windows CE5.0运行,并通过蓝牙连接至支架STB2078。但每次发送失败,结果代码都是E_错误模式 问题是,我不理解错误的_模式意味着什么,我将其设置为解码,而通过原始数据,源意味着什么Bluetooth 如何从条形码扫描仪MT2070发送数据,bluetooth,barcode-scanner,motorola-emdk,Bluetooth,Barcode Scanner,Motorola Emdk,摩托罗拉的MT2070条码扫描器有问题。我使用.NETUpdate 2的EMDK 2.6从扫描的条形码创建字符串,然后将其传输到主机pc。但传输失败 MT2070使用Windows CE5.0运行,并通过蓝牙连接至支架STB2078。但每次发送失败,结果代码都是E_错误模式 问题是,我不理解错误的_模式意味着什么,我将其设置为解码,而通过原始数据,源意味着什么 ScannerServicesClient scannerServices; scannerServic
ScannerServicesClient scannerServices;
scannerServices = new ScannerServicesClient();
SCANNERSVC_MODE mode;
if(scannerServices.Connect(true))
{
Logger("start service with decode rights"); // primitiv method to see what happen
scannerServices.GetMode(out mode);
if (mode != SCANNERSVC_MODE.SVC_MODE_DECODE)
{
mode = SCANNERSVC_MODE.SVC_MODE_DECODE;
if (scannerServices.SetMode(mode) != RESULTCODE.E_OK)
{
Logger("cant set mode: " + mode.ToString());
}
}
// wanna know which connection is use
string connection = "";
switch (scannerServices.HostParameters.CurrentConnection)
{
case SCANNERSVC_DATA_CONNECTION.NO_CONNECTION:
connection = "Not connected";
break;
case SCANNERSVC_DATA_CONNECTION.BLUETOOTH:
connection = scannerServices.HostParameters.BluetoothConnection.ToString();
break;
case SCANNERSVC_DATA_CONNECTION.RS232:
connection = scannerServices.HostParameters.RS232Connection.ToString();
break;
case SCANNERSVC_DATA_CONNECTION.USB_CABLE:
connection = scannerServices.HostParameters.USBConnection.ToString();
break;
}
Logger(connection);
ScannerHostParameters scnHost = new ScannerHostParameters(scannerServices);
//example hello
string input = "hello"; //what should send
byte[] output = new byte[input.Length]; //field with converted data
byte source = 0; //<-- what mean source? i sum all byte-value but this cant be correct
for (int i = 0; i < input.Length; ++i)
{
output[i] = Convert.ToByte(input[i]);
source += output[i];
}
RawData rawData = new RawData(output, input.Length, source);
//RawParameters rawParam = new RawParameters();
//rawParam.BaudRate = RawParameters.RawBaudRates.RAWSERIAL_9600;
//rawParam.Type = RawParameters.RawHostType.Auto;
RESULTCODE result = scannerServices.SendRawData(rawData, 2000);
if(result == RESULTCODE.E_OK)
{
Logger("successful send");
}
else
{
Logger("Send failed: " + result.ToString());
}
Logger("ScannerService kill");
scannerServices.Disconnect();
}
Logger("\n");
scannerServices.Dispose();
scannerServices = null;
谢谢你的帮助!很抱歉,我的英语在您正在设置模式的某个地方-我在设置模式后立即执行此操作您将要执行以下操作:
//set raw mode
if (RESULTCODE.E_OK != scannerServices.SetAttributeByte((ushort)ATTRIBUTE_NUMBER.ATT_MIA_HOSTNUM, (byte)ENUM_HOSTS.HOST_RAW))
{
throw new Exception("Can't set RAW mode");
scannerServices.Disconnect();
scannerServices.Dispose();
return;
}
如果您有:
RawData rawData = new RawData(output, input.Length, source);
您可以将源保留为0:
RawData rawData = new RawData(output, input.Length, 0);
不幸的是,在编程方面,我并不是最棒的,所以我只是在让扫描器正常工作的过程中遇到了麻烦。文档不是很好,事实上我发现它严重缺乏。甚至摩托罗拉的员工似乎也不太了解它,也不知道如何编程。他们至少在一点上给了我错误的信息
我对扫描仪使用CDC COM端口仿真模式,以便它显示在设备管理器的端口下。我需要扫描仪与使用COM端口的旧程序一起工作。为此,还需要一个驱动程序
根据您使用扫描仪的方式,上述操作可能有效,也可能无效。您确定在传输之前已成功读取条形码吗?是的,我确定。因为我让条形码显示在文本框中。一切都很好。你好,谢谢你的回答。我发现我需要根据蓝牙将扫描仪与支架配对。之后,我用usb电缆将支架连接到主机pc。如果发现支架为Com端口,我已使用文档中的ScanItem扫描RS232 Modus条形码。在这之后,一切都可以很好地与连接,所以我可以使用SendLabel,它的工作非常好。