zoukankan      html  css  js  c++  java
  • 蓝牙打印机的连接方法

    一般的手持蓝牙打印机都使用串口协议与主机通信,实现打印。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时才会连接。

  • 相关阅读:
    K近邻 Python实现 机器学习实战(Machine Learning in Action)
    sklearn-SVC实现与类参数
    从核函数到SVM原理--sklearn-SVM实现
    基于scikit-learn包实现机器学习之KNN(K近邻)-完整示例
    java集合框架
    面向对象第一周心得体会
    java面试总结
    Aaa
    测试
    在Java中执行Tomcat中startup.bat
  • 原文地址:https://www.cnblogs.com/ceblog/p/2121942.html
Copyright © 2011-2022 走看看