返回官网官方微博

麦步社区-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: MAI 表盘
查看: 7887|回复: 8
打印 上一主题 下一主题

蓝牙状态判断的代码示例,请需要的同学参考或完善

[复制链接]

8

主题

53

帖子

405

麦力

精华
1
阅读权限
100
在线时间
44 小时

麦步极客实验室

跳转到指定楼层
楼主
发表于 2016-1-9 01:02:13 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式


之前蓝牙状态一直说os未支持,直到前几天Timex表盘发布时实现了蓝牙状态的功能,其作者diablozhu开源了这个代码。
经他提醒后来发现:
enum BleStatus{
BLE_STATUS_ADVERTISING, // 广播
BLE_STATUS_CONNECTED, // 被连接
BLE_STATUS_USING, // 使用中(发送数据中)
BLE_STATUS_CLOSE // 该状态蓝牙被关闭 (这个在测试中好像无论什么状态总是返回真,不知哪里出了问题。)
};




晚上我也研究一差不多一个通宵了,前期一直没搞定,后来直接使用了diablozhu的部分代码,并作一两句一两句增加代码、安装测试的方式,终于完成了多显表盘的蓝牙状态功能。后来发现蓝牙状态通讯时也是一个状态,参数中有一个断开,但用了断开参数好像决断不准,无论连接状态如何,断开总是true。还有一些函数或参数不支持,有些能编译但安装不了,有些也不能编译。虽然后来也列了一个可用函数列表,但总之现在调试代码还是非常麻烦。

最后使用了以下代码:

  1. /*蓝牙状态更改*/
  2.         GBitmap bitmap_ble_con;
  3.         GBitmap bitmap_ble_discon;
  4.         GRect frame_ble = {{MWD_BLE_ORIGIN_X, MWD_BLE_ORIGIN_Y}, {MWD_BLE_SIZE_H, MWD_BLE_SIZE_W}};
  5.         res_get_user_bitmap(RES_BITMAP_BLE_CONNECTED, &bitmap_ble_con);
  6.         res_get_user_bitmap(RES_BITMAP_BLE_DISCONNECTED, &bitmap_ble_discon);
  7.         LayerBitmap layer_bitmap_ble_con = { bitmap_ble_con,frame_ble,GAlignCenter };
  8.         LayerBitmap layer_bitmap_ble_discon = { bitmap_ble_discon,frame_ble,GAlignCenter };
  9.         enum BleStatus ble_sta;
  10.         ble_sta = maibu_get_ble_status();  //获取蓝牙状态
  11.         if (ble_sta != BLE_STATUS_CONNECTED && ble_sta != BLE_STATUS_USING) {
  12.                 if (g_official_bledis == 0)
  13.                 {
  14.                 P_Layer layer_ble_new = app_layer_create_bitmap(&layer_bitmap_ble_discon);
  15.                 app_layer_set_bg_color(layer_ble_new, GColorBlack);
  16.                 g_app_mwd_ble_layer_id = app_window_replace_layer(p_window, p_ble_layer, layer_ble_new);
  17.                 app_window_update(p_window);
  18.                 g_official_bledis = 1;
  19.                 maibu_service_vibes_pulse(VibesPulseTypeShort,1); //调用短振动1次,本想用一次长振动,当时测试无效。
  20.                 }
  21.         }
  22.         else if (ble_sta = BLE_STATUS_CONNECTED) {
  23.                 if (g_official_bledis == 1)
  24.                 {
  25.                 P_Layer layer_ble_new = app_layer_create_bitmap(&layer_bitmap_ble_con);
  26.                 app_layer_set_bg_color(layer_ble_new, GColorBlack);
  27.                 g_app_mwd_ble_layer_id = app_window_replace_layer(p_window, p_ble_layer, layer_ble_new);
  28.                 app_window_update(p_window);
  29.                 g_official_bledis = 0;
  30.                 }
  31.         }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信 WeiboWeibo
收藏收藏1 分享分享 顶2 踩

8

主题

53

帖子

405

麦力

精华
1
阅读权限
100
在线时间
44 小时

麦步极客实验室

沙发
 楼主| 发表于 2016-1-10 19:45:46 | 显示全部楼层
diablozhu 发表于 2016-1-9 20:39
确实BLE_STATUS_CLOSE 这个状态有点奇怪,所以后来就改成那样了
还有1秒检测是不是有些太频繁了,对续航有 ...

是啊,不清楚这个检测对耗电的影响有多大,与即时性之间的权衡什么样才是最佳的。可能需要长时间的对比测试才知道。希望官方也有这方面的数据。
最好是蓝牙状态由系统级的事件来判断,看sdk后期应该会加上这个。

enum SysEventType
{
        SysEventTypeTimeChange,                //时间更改
        SysEventTypeBleConnected,           //被连接
        SysEventTypeBleDisconnected          //断开连接
};


typedef void(*AppServiceSysEventCallback)(enum SysEventType type, void *context);

void maibu_service_sys_event_subscribe(AppServiceSysEventCallback sys_event_callback);

void maibu_set_app_exit_time(uint32_t time);
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|麦步官方论坛 ( 粤ICP备12052190号  

GMT+8, 2024-5-3 19:30 , Processed in 0.066845 second(s), 25 queries .

Powered by Discuz! X3.2

© 2012-2021 Comsenz Inc.

快速回复 返回顶部 返回列表