WINCE蓝牙异常时,refresh蓝牙模块还是不能正常工作
问题:
客户的蓝牙应用(C#)连接打印机多次打印0123456789的一位条码,在多次打印之后(我测试过在110,207次)无法正常打印,在出现这样的异常的时候(我今天复现过),这时候我用自己写的应用BTC.exe对蓝牙模块复位(也就是refresh=先下电+后上电),这时候通过串口信息可以看出下是成功的,但上电不成功,具体的体现在蓝牙驱动的BcspCommunication::OpenConnection()函数中出错,具体出错的地方如下:
serialPortHandle = CreateFile(portName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (serialPortHandle == INVALID_HANDLE_VALUE)
{
RETAILMSG(1, (TEXT("OpenConnection: %s ERROR!"), portName));
IFDBG(DebugOut(DEBUG_BCSP_ERROR, TEXT("<BcspCommunication::OpenConnection@%s> UNABLE TO OPEN PORT"), name));
return GetLastError();
}
CreateFile函数返回INVALID_HANDLE_VALUE,这样就导致了后面无法正常初始化(平时正常使用,在没有异常的情况下发生时,我应用程序BTC.exe是可以正常复位蓝牙模块的),现在的问题就是:为什么在蓝牙正常使用时,可以正常refresh,在异常时就发生上面的问题呢?
refresh蓝牙模块的代码如下:
BOOL bRet = FALSE;
WCHAR *argPtr = L"card";
hService = CreateFile(L"BTD0:", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if(hService == INVALID_HANDLE_VALUE)
{
NKDbgPrintfW((TEXT("Device not loaded")));
return bRet;
}
if (DeviceIoControl(hService, IOCTL_SERVICE_REFRESH, argPtr, sizeof(WCHAR)*(wcslen (argPtr) + 1), NULL, 0, NULL, NULL))
{
bRet = TRUE;
NKDbgPrintfW(TEXT("RefreshBtService() refresh bt success\r\n"));
}
else
{
bRet = FALSE;
NKDbgPrintfW(TEXT("RefreshBtService() refresh bt fail\r\n"));
}
麻烦大家帮忙看看,此问题该怎么解决?先谢谢了。
[解决办法]
嵌入式的东西很麻烦,其实跟硬件打交道的都一样,usb驱动或者别的驱动Down掉,在Windows平台下除非重启或者把驱动删掉再重新扫描安装,很难原地再次激活它。。。
有高见的楼下请继续
[解决办法]