Firefly开源社区

打印 上一主题 下一主题

device name

21

积分

0

威望

0

贡献

技术小白

积分
21

device name

发表于 2015-7-29 14:40:49      浏览:8397 | 回复:7        打印      只看该作者   [复制链接] 楼主
请问要怎么修改DEVICE NAME(不用NVDS configurator)
我直接修改#define CFG_LOCAL_NAME "FireBLE HRPS"
是无效的
只能透过NVDS configurator才行

另外我要一上电就可以广播
是要怎么做?

我是这样用的
while(1)
    {
        ke_schedule();


        if(adv_F)
        {

            adv_F = 0;

               // start adv
            app_gap_adv_start_req(GAP_GEN_DISCOVERABLE|GAP_UND_CONNECTABLE,
                    app_env.adv_data, app_set_adv_data(GAP_GEN_DISCOVERABLE),
                    app_env.scanrsp_data, app_set_scan_rsp_data(app_get_local_service_flag()),
                    GAP_ADV_FAST_INTV1, GAP_ADV_FAST_INTV2);
         }

这是正确的方式吗?

回复

使用道具 举报

21

积分

0

威望

0

贡献

技术小白

积分
21
发表于 2015-8-12 19:47:06        只看该作者  推荐
nvds_tag_len_t name_length = 31 - 5; // The maximum length of Advertising data is 31 Octets

    //if (NVDS_OK != nvds_get(NVDS_TAG_DEVICE_NAME, &name_length, &app_env.adv_data[5]))
    //{
        // NVDS is empty, use default name
        name_length = strlen(QN_LOCAL_NAME);
        strcpy((char *)&app_env.adv_data[5], QN_LOCAL_NAME);
   // }
    //else
    //{
    //    name_length--; // Discard '\0'
    //}


这是我后来修改的
这样设备名就可以在程式里头定义
非常感谢安安
回复

使用道具 举报

46

积分

0

威望

0

贡献

游客

积分
46
发表于 2015-7-29 17:12:30        只看该作者  沙发
不用这么麻烦,在app_config.h里面有个宏定义“QN_DEMO_AUTO”打开就行了,一上电就广播,改名字的话,程序首先会从NVDS读取名字是不是空,如果是空的才会用这里的CFG_LOCAL_NAME的名字的;否则从直接从NVDS中读取名字,再广播出去,你要改可以在广播前把名字改了:)
回复

使用道具 举报

21

积分

0

威望

0

贡献

技术小白

积分
21
发表于 2015-7-29 17:52:14        只看该作者  板凳
QN_DEMO_AUTO 可以用了~~谢谢


所以现在是NVDS有名字才从NVDS读
改CFG_LOCAL_NAME是没用的??
那我要怎么清空NVDS
?
我想从程序直接控制DEVICE NAME
回复

使用道具 举报

400

积分

0

威望

0

贡献

注册会员

Rank: 8Rank: 8

积分
400
QQ
发表于 2015-7-30 09:34:15        只看该作者  地板
1.其实BLE完成初始化的条件并不是进入main函数的while(1)中(系统在调度了几个消息之后才完成的初始化,前几次进入while(1)时初始化都是没完成的),真正完成初始化并且可以运行是在打印BLE is Ready这句话的地方。那个地方你可以看到只要开启QN_DEMO_AUTO宏定义就可以上电广播了。
2.设备名默认从NVDS中写入,但是软件也可以修改,可以用app_gap_set_devname_req修改设备名。
没个性,不签名!
回复

使用道具 举报

21

积分

0

威望

0

贡献

技术小白

积分
21
发表于 2015-7-31 18:08:04        只看该作者  5#
我还是不太了解 我在广播前改名字

               app_gap_set_devname_req("asd123",6);
               
                app_gap_adv_start_req(GAP_GEN_DISCOVERABLE|GAP_UND_CONNECTABLE,
        app_env.adv_data, app_set_adv_data(GAP_GEN_DISCOVERABLE),
        app_env.scanrsp_data, app_set_scan_rsp_data(app_get_local_service_flag()),
        GAP_ADV_FAST_INTV1, GAP_ADV_FAST_INTV2);

但LIGHTBLUE上名字会有2个
一个是NVDS上的
另一个是我设定的
为啥会这样

另外修改设备名
是每次广播都要修改还是只修改一次就行?

IMG_0323.jpg (202.66 KB, 下载次数: 504)

IMG_0323.jpg
回复

使用道具 举报

400

积分

0

威望

0

贡献

注册会员

Rank: 8Rank: 8

积分
400
QQ
发表于 2015-8-3 11:47:27        只看该作者  6#
ffl86 发表于 2015-7-31 18:08
我还是不太了解 我在广播前改名字

               app_gap_set_devname_req("asd123",6);
  1. #if (BLE_PERIPHERAL)
  2. uint8_t app_set_adv_data(uint16_t disc_mode)
  3. {
  4.     uint8_t len;
  5.     /* "\x02\x01\x0?\x08\x08NXP BLE" */
  6.    
  7.     // Advertising data, BLE only, general discovery mode and short device name
  8.     app_env.adv_data[0] = 0x02;
  9.     app_env.adv_data[1] = GAP_AD_TYPE_FLAGS;
  10.     if (GAP_GEN_DISCOVERABLE == (disc_mode & GAP_GEN_DISCOVERABLE))
  11.     {
  12.         /// Mode in general discoverable
  13.         app_env.adv_data[2] = 0x06;
  14.     }
  15.     else if (GAP_LIM_DISCOVERABLE == (disc_mode & GAP_LIM_DISCOVERABLE))
  16.     {
  17.         /// Mode in limited discoverable
  18.         app_env.adv_data[2] = 0x05;
  19.     }
  20.     else
  21.     {
  22.         /// Mode in non-discoverable
  23.         app_env.adv_data[2] = 0x04;
  24.     }
  25. #if (defined(CFG_EACI))
  26.     app_env.adv_data[3] = device_name.namelen + 1;
  27.     app_env.adv_data[4] = 0x09;
  28.     memcpy((char *)&app_env.adv_data[5], device_name.name, device_name.namelen);
  29.     len = 5 + device_name.namelen;
  30. #else
  31.     nvds_tag_len_t name_length = 31 - 5; // The maximum length of Advertising data is 31 Octets

  32.     if (NVDS_OK != nvds_get(NVDS_TAG_DEVICE_NAME, &name_length, &app_env.adv_data[5]))
  33.     {
  34.         // NVDS is empty, use default name
  35.         name_length = strlen(QN_LOCAL_NAME);
  36.         strcpy((char *)&app_env.adv_data[5], QN_LOCAL_NAME);
  37.     }
  38.     else
  39.     {
  40.         name_length--; // Discard '\0'
  41.     }
  42.     app_env.adv_data[3] = name_length + 1;
  43.     app_env.adv_data[4] = GAP_AD_TYPE_SHORTENED_NAME;
  44.     len = 5 + name_length;
  45. #endif
复制代码

这就是一切秘密。1.此函数设置广播信息内容,广播中有设备名字段,首选广播NVDS中的设备名,如果设备名,NVDS为空,那么广播软件设置的QN_LOCAL_NAME(其实你自己搜一下QN_LOCAL_NAME调用 的地方就很轻松发现这一段信息.)
2.设备名:设备名一般存放在NVDS中,具体的设置你如果看不到,那么久说明是封装到内核了,也不用纠结为何看不到,他就在NVDS中,你改了,它自然就变了,如果NVDS为空,那么会默认为Quintic BLE或者NXP BLE,不服可以找原厂修改。
3.如果你非要用软件指定,参考广播内容设定,取消NVDS读取,直接利用app_gap_set_devname_req函数指定设备名,然后将QN_LOACL_NAME广播出去,那么设备名和广播中的设备名都会是QN_LOCAL_NAME了。
没个性,不签名!
回复

使用道具 举报

19

积分

0

威望

0

贡献

游客

积分
19
发表于 2015-10-7 22:30:11        只看该作者  8#
谢谢分享。。学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表