关于FireBLE的client学习--第一天

本文主要是参照例程,来学习使用FireBLE作为client。
在例程中,prj_client是作为主机的例程,其实就是qppc,需要和qpps配套测试。作为client,client可以扫描周边的BLE设备,即可以直接从广播中获取设备对外表达的信息(无连接模式,比如ibeacon),也可以对设备发起连接,在连接后可以扫描设备具备的服务、特征,并且对特征值进行读写,也能接收设备主动发送过来的通知,更深入的是一些安全配对、加密的事情。实际上这就是蓝牙中使用最频繁的一些操作,我们今天从扫描设备开始。
1.无连接模式
对于无连接模式,从机相当于是小贩叫卖,他并不是针对某一位客人呼叫,并且他会间隔性的大声的向人群告知他要表达的信息。他是主动的。我们是行人,我们可能是市场调查的,尽管我们队小贩的叫卖没兴趣,但是我们会记录下来对我们有用的信息,也许是统计有多人是买袜子的,也许是统计街上一共有多少人叫卖,也许是统计街上买卖物品种类以及数量的分布。此时client要做的就是从广播中得到有用信息。在例程中有如下菜单:
*------------------------
* QN BLE Main Menu
* 1. GAP   Menu
* 2. GATT  Menu
* 3. SMP   Menu
* h. QPPC  Menu
* r. Upper Menu
* s. Show  Menu
*------------------------
第一项为GAP菜单,“GAP Role Profile:在GAP剧本里所处的4个角色:广播Advertise,主机central,从机Peripheral,观察者Observer。”看到这里有点晕吗?我天生理解不太好,有一点晕,client和central是一个东西吗?不是!client是属于ATT层的角色定义,而central是属于GAP层的角色定义。client和server的区别是,server以属性的方式提供数据,client对server进行读和写。从机central则是扮演主动发起扫描,主动向从机发送连接请求。从机Peripheral则是发起广播,或者被动等待连接。尽管如此,可以看出,这两者是脱不了关系的了,基本上client在GAP上都扮演client的角色,当然它也能作为一个观察者Observer,server则基本在GAP上扮演从机Peripheral和广播Advertise的角色。
打开GAP菜单,是如下界面:

*------------------------
* 1. Inquiry Start
* 2. Inquiry Stop
* 5. Create Connection
* 6. Disconnection
* 7. Pair Request
* 8. UnPair
*------------------------

* QN BLE GAP Menu

第一项是开启扫描,我们追踪代码。选择了inquiry选项后,程序进入了如下:


    case '1':
        app_gap_dev_inq_req(GAP_GEN_INQ_TYPE, QN_ADDR_TYPE);
        break;
app_menu_show_xxx是某一级目录的菜单,app_menu_handler_xxx是某一级目录的操作菜单,另外还有一个比较重要的是app_menu_handler_gap_dev_select是对扫描出来的设备选择函数。函数中直接执行了
app_gap_dev_inq_req(GAP_GEN_INQ_TYPE, QN_ADDR_TYPE);

函数进行设备扫描,其中,参数GAP_GEN_INQ_TYPE为普通查询方式,另外还可选择带限制的查询方式(GAP_LIM_INQ_TYPE)以及已知设备查询方式(GAP_KNOWN_DEV_INQ_TYPE),参数QN_ADDR_TYPE被定义为ADDR_PUBLIC,另外可选择为随机地址(ADDR_RAND)。函数扫描查询了地址类型为ADDR_PUBLIC的所有设备。


扫描结束之后,接下来应该是建立连接了。在GAP菜单中键入5建立连接,程序跳至app_menu_show

    case menu_gap_create_connection:
        app_menu_show_gap_inq_record();
        break;

函数中显示了刚才查询到的设备记录,用于需要对设备进行选择,选择后进入app_menu_handler_gap_dev_select,确认需要连接设备的idx,并且存入app_env.select_idx

        app_env.select_idx = app_env.input[0] - '0';

然后对选择的设备进行连接

        case menu_gap_create_connection:
            if (app_get_link_nb() != BLE_CONNECTION_MAX)
            {
                app_gap_le_create_conn_req(&app_env.inq_addr[app_env.select_idx], app_env.addr_type[app_env.select_idx], QN_ADDR_TYPE, 
                                           GAP_INIT_CONN_MIN_INTV, GAP_INIT_CONN_MAX_INTV, GAP_CONN_SUPERV_TIMEOUT);
            }
            else
            {
                QPRINTF("Connection Limit Exceeded\r\n");
            }
            break;

连接设备是需要填入设备地址、设备



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值