蓝牙打印机的连接方法

我的未来我决定 提交于 2020-03-17 07:42:04

一般的手持蓝牙打印机都使用串口协议与主机通信,实现打印。WINCE提供了查找,配对及与蓝牙设备建立串口连接的界面。但那个界面不是很友好,优其对非专业人士来说太过复杂。下文讲述自行开发这样一个程序的方法。

1,准备工作。

蓝牙相关的功能需要使用到socket函数库,所以程序先要调用WSAStartup来初始化socket库。

2,查找蓝牙设备。

调用 WSALookupServiceBegin来启动一次搜索。

然后反复调用WSALookupServiceNext,直到找到想要的设备,或者此函数失败。

最后调用 WSALookupServiceEnd结束本次搜索过程。

示意代码如下。

 WSADATA wsd;
 HANDLE hLookup;

 ZeroMemory(&wsaq, sizeof(wsaq));
 wsaq.dwSize = sizeof(wsaq);
 wsaq.dwNameSpace = NS_BTH;
 wsaq.lpcsaBuffer = NULL;

 iResult = WSALookupServiceBegin (&wsaq, LUP_CONTAINERS, &hLookup);

while(1)

{

 CHAR buf[4096];
 LPWSAQUERYSET pwsaResults = (LPWSAQUERYSET) buf;

  ZeroMemory(pwsaResults, sizeof(WSAQUERYSET));
  pwsaResults->dwSize = sizeof(WSAQUERYSET);
  pwsaResults->dwNameSpace = NS_BTH;
  pwsaResults->lpBlob = NULL;

  DWORD dwSize  = sizeof(buf);

  int iRet = WSALookupServiceNext( hLookup, LUP_RETURN_NAME | LUP_RETURN_ADDR, &dwSize, pwsaResults);

...

}

3。如果已经找到设备,就可以使用BthPairRequest做密码配对,配对成功后查找它支持的服务。

需要用到BthNsLookupServiceBegin,BthNsLookupServiceNext,与BthNsLookupServiceEnd。

如果找到串口,就使用FindRFCOMMChannel来查找串口服务对应的端口号。

与上面三个函数的用法类似。

4,这些信息一旦得到,就可以调用 RegisterDevice来创建一个本地串口设备,使用CreateFile打开,WriteFile向其写数据,完成打印。

有几点需要注意:

1)使用完设备需要删除连接时,一定要调用 BthRevokeLinkKey来删除Link key,否则会造成永远不能连接。

2)蓝牙设备没有打开时RegisterDevice也能成功,就是说RegisterDevice不会引发与蓝牙设备连接,只有CreateFile时才会连接。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!