信标diss设置设备名称

21个员额/0个新员额
最后一篇文章
安东尼42.
离线
最后一次见到:5年10个月前
加入:2015-07-17 08:21
信标diss设置设备名称

你好,

  • 如何添加写开发名称和读取ori dev name特征
  • 为什么写开发名称和读开发名称使用相同的索引?

    DIS_IDX_IEEE_CHAR,
    DIS_IDX_IEEE_VAL,
    dis_idx_pnp_id_char,
    DIS_IDX_PNP_ID_VAL,
    请注意,

    //PnP-ID特征声明
    [DIS_IDX_PNP_ID_CHAR]={ATT_DECL_特征,PERM(RD,ENABLE),sizeof(diss_PNP_ID_CHAR),
    sizeof (diss_pnp_id_char), (uint8_t *) &diss_pnp_id_char},
    // PnP ID特征值
    [DIS_IDX_PNP_ID_VAL]={ATT_CHAR_PNP_ID,PERM(RD,ENABLE),DIS_PNP_ID_LEN,0,NULL},

    //读写dev name特征声明
    [DIS_IDX_PNP_ID_CHAR]={ATT_DECL_特征,PERM(RD,ENABLE),sizeof(diss_PNP_ID_CHAR),
    sizeof (diss_pnp_id_char), (uint8_t *) &diss_pnp_id_char},
    //读写dev name特征值
    [DIS_IDX_PNP_ID_VAL]={ATT_CHAR_PNP_ID,PERM(RD,ENABLE),DIS_PNP_ID_LEN,0,NULL},

    //读取Dev名称特征声明
    [DIS_IDX_PNP_ID_CHAR]={ATT_DECL_特征,PERM(RD,ENABLE),sizeof(diss_PNP_ID_CHAR),
    sizeof (diss_pnp_id_char), (uint8_t *) &diss_pnp_id_char},
    //读取设备名称特征值
    [DIS_IDX_PNP_ID_VAL]={ATT_CHAR_PNP_ID,PERM(RD,ENABLE),DIS_PNP_ID_LEN,0,NULL},

    • 另一个问题:我可以在diss中添加一个128位的特征吗?

    为什么?智能手机应用程序需要从128bit uuid中读取写开发名称。
    我是否可以基于原始代码进行更改,或者我是否必须重写代码,如spotar_create_db_req_handler() ?
    谢谢你!

    关键词:
    设备:
    MT_对话框
    离线
    最后一次见到:6个月4周前
    工作人员
    加入:2015-06-08 11:34
    嗨antony42,

    嗨antony42,

    我猜你想把这个设备的名字从智能手机改成智能手机,对吗?您必须将权限更改为适当的特征,并为特定IDX处理da的写命令,使用SAMPLE128作为引用(gattc_write_cmd_ind_handler)。我认为您可以,但是您要更改由SIG定义的概要文件。

    谢谢你的对话

    安东尼42.
    离线
    最后一次见到:5年10个月前
    加入:2015-07-17 08:21
    嗨,mt_dialog,

    嗨,mt_dialog,
    绝对正确!

  • 实际上我需要从智能手机配置多个参数,包括:dev名称,信标uuid,主要ID,次要ID,测量功率,adv间隔,用户定义
  • 我需要把这些信息保存到flash中。
    你能给我一些建议吗?
    谢谢!

    MT_对话框
    离线
    最后一次见到:6个月4周前
    工作人员
    加入:2015-06-08 11:34
    嗨antony42,

    嗨antony42,

    我建议您不要更改DISS配置文件(您可能与其他设备存在兼容性问题),而是可以将其包含到您的服务中,并创建一个新的自定义配置文件(SAMPLE128教程)如前所述,DISS是一项由bluetooth SIG定义的服务。您可以使用Beacon项目来处理消息的广告。

    谢谢你的对话

    安东尼42.
    离线
    最后一次见到:5年10个月前
    加入:2015-07-17 08:21
    嗨MT_dialog,

    嗨MT_dialog,
    我尝试了,但在初始化数据时,我无法获得正确的句柄索引。
    另一个问题:
    为什么产品标题以下结构中的不同与AN-B-010 Page10不同?
    来自beacon ref项目:
    #定义x1f000 PRODUCT_HEADER_POSITION 0
    // Suota的产品标题
    struct product_header
    {
    uint8_t签名[2];
    uint8_t版本[2];
    uint32_t保留[4];
    uint32_t config_offset;
    };
    struct product_header p_header;
    spi_flash_read_data((uint8_t*)&p_header, (unsigned long)PRODUCT_HEADER_POSITION, (unsigned long)sizeof(struct product_header));

    app_config_header_offset = p_header.config_offset;

    我打印数据,看起来像:
    0x70 0x52 0x0 0x1 0x0 0x80 0x0 0x0 0x0 0x30 0x1 0x0 0xff 0xff 0xff 0xff
    与AN-B-010相同(签名7052,版本0100,偏移1,偏移2)
    但是p_header.config_offset=?
    结构配置头也不同于AN-B-010

    谢谢你!

    MT_对话框
    离线
    最后一次见到:6个月4周前
    工作人员
    加入:2015-06-08 11:34
    嗨Antony42.

    嗨Antony42.

    “不一样”是什么意思?在“偏移#2”字段下看不到其他字段?这是因为Beacon应用程序没有使用其他字段。您不能读取config_offset,因为您必须在SPI中加载头才能读取它,您可以使用Smart Snippets专有头程序员来设置config_offset和信标配置。

    谢谢MT_dialog。

    安东尼42.
    离线
    最后一次见到:5年10个月前
    加入:2015-07-17 08:21
    嗨MT_dialog,

    嗨MT_dialog,

    在UM-B-019(信标参考)9.7.1内存映射:
    配置存储使用双映像引导加载程序的内存映射
    产品标题中“保留”字段(字节偏移量12)的前四个字节,如中所述
    [6]的6.1节,定义配置区域的内存地址。地址必须指向
    SPI闪存扇区的开始,且同一扇区中不得存储任何其他信息。
    [6]的第6.1节在哪里
    UM表示使用“保留”字段的前四个字节来存储配置地址,

  • 什么产品的头.config\u偏移量?
  • 我需要添加什么字段到以下头txt文件?
  • struct product_header
    {
    uint8_t签名[2];
    uint8_t版本[2];
    uint32_t保留[4];
    uint32_t config_offset;
    };
    现在我的头文件(.txt文件)是:
    2签名产品标题签名。必须包含0x7052
    2 version产品报头版本
    4偏移量1 LE格式的图像标题#1的内存偏移量
    4 offset2 LE格式图像头2的内存偏移量
    用专用头程序员打开并设置正确的值7052,0001,00800000,00300100。

    谢谢你!

    MT_对话框
    离线
    最后一次见到:6个月4周前
    工作人员
    加入:2015-06-08 11:34
    嗨antony42,

    嗨antony42,

    产品标题应为辅助引导程序标题的形式。您可以使用12byte offset(bdaddress)或放置一些填充,并使用17byte(保留)偏移量以放置配置标题格式的地址。product_header.config_offset将包含驻留的偏移量,它位于配置标题的地址。您应该在product_header.txt中添加额外的字段,以便放置配置头文件的地址。配置偏移将指向配置标题。配置数据位于字节偏移64中的配置标题下方。

    谢谢你的对话

    安东尼42.
    离线
    最后一次见到:5年10个月前
    加入:2015-07-17 08:21
    嗨mt_dialog,

    嗨mt_dialog,
    我不太明白。

    1. 第二个引导加载程序中的标题是:
    2. //产品标题结构
      typedef struct __productHeader {
      uint8签名[2];
      UINT8版本[2];
      uint32_t offset1;
      uint32_t offset2;
      }s_头;

    3. 航标编号为:
    4. // Suota的产品标题
      struct product_header
      {
      uint8_t签名[2];
      uint8_t版本[2];
      uint32_t保留[4];
      uint32配置偏移量//为什么这与上面不同?
      };

    5. 在AN-B-010第10页中:
    6. 似乎是一个完整的版本。
      在此文件中保留12-31
      32-37 BD地址......

  • 当我试图在product_header.txt中添加一个字段时,它警告错误,“最多只支持4个参数!”,那么该怎么做呢?
  • 我是否可以在程序中使用固定地址,以便始终从0x1f000+sizeof(struct product_头)读取配置数据?
  • 谢谢你!

    MT_对话框
    离线
    最后一次见到:6个月4周前
    工作人员
    加入:2015-06-08 11:34
    嗨Antony42.

    嗨Antony42.

    以上2个结构是不同的,因为在信标中,我们没有指定图像偏移,我们只添加一些
    填充UINT32_T保留[4]。

    1-uint32_t for image offset1, 2-uint32_t for image offset2, 3-4 uint32_t for dbaddress和一些额外的
    保留数据。

    在信标应用程序中,如果启用了CONFIGURATION,则必须在产品中添加一个额外字段
    header…例如configOffset。然后,在制作产品_header.txt后,您可以从smart
    片段工具并将值添加到相应的字段。app_read_config_header会找到
    Product_Header并读取配置标题的Config_offset ......从App_Read_Config
    数据将用配置数据填充相应的结构。您可以将产品标题设置为
    对应的结构如下:

    创建product_header.txt文件并添加以下字段

    2字符串签名产品标题签名(7052)
    2字符串版本产品标题版本
    16 Integer Reserved预留填充
    4 Integer ConfigOffset Config

    是的,我想你可以使用一个硬编码的地址,并从那里读取配置数据。

    谢谢你的对话

    安东尼42.
    离线
    最后一次见到:5年10个月前
    加入:2015-07-17 08:21
    嗨mt_dialog,

    嗨mt_dialog,

    1. 我想将LED添加到信标,当连接的设备然后打开LED时。
      我在app_connection_func中调用LED_ON(),设置PIN低,
      但是led只闪了一次,我找不到io输出设置的高?
    2. 在app_button_press_callback ()

      app_adv_stop ();
      开关(应用程序模式)
      {
      案例GAPM_ADV_NON_CONN:

      app_advertise_mode = GAPM_ADV_UNDIRECT;
      打破;

      案例GAPM_ADV_UNDIRECT:
      app_advertise_mode = gapm_adv_non_conn;
      打破;
      }
      这将改变广告模式,但它不会调用app_adv_start(),因此当广告模式将改变?

    3. 我什么时候需要定义CFG_CONNECTABLE_ADV_MODE ?
      你能解释更多关于app\u asynch\u trm()的信息吗

      此Func还有代码:
      开关(应用程序模式)
      {
      案例GAPM_ADV_NON_CONN:

      app_advertise_mode = GAPM_ADV_UNDIRECT;
      打破;

      案例GAPM_ADV_UNDIRECT:
      app_advertise_mode = gapm_adv_non_conn;
      打破;
      }
      我需要添加到按钮来更改广告模式。

    4. 当我在应用程序按钮中设置计时器(500ms)时,按下回调键,
      计时器立即被触发,然后我设置了一个标志,
      在下文中,工作正常,为什么?
      app_adv_undirective_complete
      {
      if(标志){
      set_timer ();
      flag=false;
      }
      在计时器处理程序中,我清除了另一个计时器,不好,
      设置上面的另一个标志,我成功清除了计时器,为什么?

    谢谢,
    安东尼

    MT_对话框
    离线
    最后一次见到:6个月4周前
    工作人员
    加入:2015-06-08 11:34
    嗨,安东尼,

    嗨,安东尼,

    您可以在da14580_config.h中定义您的设备将以可连接方式工作,检查您正在使用的开发工具包并定义cfg_connectable_adv_mode.在那里。如果定义了CFG_connectable_ADV_模式,则设备将在可连接和不可连接模式之间旋转。如果未定义,则必须使用按钮来更改adv模式(有一个已定义)。我假设您正在使用睡眠,当您的设备唤醒时,引脚返回到periph_init()函数命令的状态……如果您想保持按钮点亮,必须放置一个变量,该变量将记住LED的先前状态,并在每次da唤醒时设置响应值。如果您定义了正如我提到的,CFG_CONNECTABLE_ADV_MODE非连接模式和可连接模式之间的设备周期。设备再次开始发布,因为app_adv_undirect_complete()是由app_adv_stop()发出的检查app_task.c case GAPM_ADV_UNDIRECT;GAPM_ADV_NON_CONN。如果你试图从外部中断设置定时器,请建议在app_button_press_cb()函数的SmartTag参考设计,并检查这也是FAQhttp://support.dialog-semicondiondiondum/faq-page#n1508..

    谢谢你的对话

    安东尼42.
    离线
    最后一次见到:5年10个月前
    加入:2015-07-17 08:21
    嗨mt_dialog.

    嗨mt_dialog.

    1. 在app_adv_undirect_complete ():
      调用app_timer_set(app_restart_adv_timer,task_app,timer_ticks)重新启动adv,
      这是定期宣传的方法吗?
      我在这个函数中设置了一个断点,似乎这个函数没有被调用,但是app\u adv\u stop()可以。
    2. 如您所提到的,“由于APP_ADV_UNDIRECT_COMPLETE(),该设备再次启动广告
      从App_adv_stop()发出,
      现在我需要在数组中存储10个不同的adv数据,并宣传阵列[0],然后阵列[1] ...
      每个都是32字节。
      我认为将代码添加到app_adv_undirect_complete()是一个不错的选择,
      我可以单独设置adv间隔,并在APP_RESTART_ADV_TIMER处理程序中更改adv数据。
      那么如何让app_adv_undirect_complete()在每个广告之后被调用?
      这是可能还是其他更好的解决方案?

    谢谢,
    安东尼

    MT_对话框
    离线
    最后一次见到:6个月4周前
    工作人员
    加入:2015-06-08 11:34
    嗨,安东尼,

    嗨,安东尼,

    app_adv_undirect()将在adv_stop()完成后立即执行,并设置计时器以便再次开始广告,刚刚测试过,请在if语句上设置断点。是,您可以在广告停止时更改广告数据。每次停止广告时,都会调用app_adv_undirect_complete。

    谢谢你的对话

    安东尼42.
    离线
    最后一次见到:5年10个月前
    加入:2015-07-17 08:21
    嗨mt_dialog.

    嗨mt_dialog.

    在应用程序\u重新启动\u adv\u计时器\u处理程序中:
    app_adv_start();
    app_adv_stop ();//我可以在这里添加它来调用app_adv_undirect_complete吗?
    返回(已消耗的热量);

    • 我需要广告adv_data_array1一次,在x毫秒后,广告adv_data_array2一次,…
    • 我如何知道一个广告已经完成了?
      我应该什么时候调用app_adv_stop()?

    谢谢,
    安东尼

    MT_对话框
    离线
    最后一次见到:6个月4周前
    工作人员
    加入:2015-06-08 11:34
    嗨antony42,

    嗨antony42,

    当DA靴子您可以启动并启动计时器时,当定时器过去时,您可以调用app_adv_stop(),当广告停止时,app_adv_undirect_complete将执行(此函数在调用app_adv_stop之后执行opp_adv_stop是未连接的广告或不可连接之后)然后你可以调用app_adv_start();如果您喜欢填充广告字符串的位置,您可以在App_adv_Func()中更改广告字符串。

    谢谢你的对话

    安东尼42.
    离线
    最后一次见到:5年10个月前
    加入:2015-07-17 08:21
    嗨MT_dialog,

    嗨MT_dialog,
    谢谢你的回复,我会尝试一下。
    当我调用app_adv_start()时,广告开始,而不是一次,它是连续的,

    1. 在内核中有一个定时器来重新启动广告,对吗?
    2. 如何保证广告数据1只有一次,然后广告数据2,数据3…

    谢谢,
    安东尼

    MT_对话框
    离线
    最后一次见到:6个月4周前
    工作人员
    加入:2015-06-08 11:34
    嗨,安东尼,

    嗨,安东尼,

    广告程序是连续的,这意味着,如果您不发送取消命令,广告将继续。如果要在3个广告字符串之间旋转,可以在advertising功能中设置切换框,检查当前广告模式并切换到下一个模式(每个模式加载不同的广告字符串)。设置播发字符串时,还将设置一个计时器,指定设备在特定模式下播发的时间。当计时器超时时,更改广告模式,调用app_adv_stop.并在收到广告已停止的指示时重新启动广告。

    谢谢你的对话

    安东尼42.
    离线
    最后一次见到:5年10个月前
    加入:2015-07-17 08:21
    嗨MT_dialog,

    嗨MT_dialog,

    非常感谢!
    它现在正在工作。

    在app_adv_undirect_complete()
    {
    app_set_timer(x,y);
    app_adv_start();
    }

    在Timer Handler()
    {
    app_adv_stop ();
    }

    我将计时器设置为与反向间隔相同的值(100ms),
    从嗅探器中我可以看到,每个adv数据只做一次广告!

    谢谢,
    安东尼

    安东尼42.
    离线
    最后一次见到:5年10个月前
    加入:2015-07-17 08:21
    嗨MT_dialog,

    嗨MT_dialog,

    谢谢你的回复。
    现在它可以正常工作,我在button_press_callback()中设置标志,并在app_adv_undirect_complete()中设置/清除计时器。
    我也发现了两个旧但有用的主题:
    http://support.dialog-semicondiondiondum/ketcerset-not-execute why.
    http://support.dialog-semiconductor.com/problem-about-wakeup-timer-inter..。

    顺便说一下,如果我使用ext sleep,就不需要使用__attribute__((section("retention_mem_area0"),zero_init)
    这是正确的吗?

    谢谢,
    安东尼

    mhv_dialog.
    离线
    最后一次见到:1个月3周前
    工作人员
    加入:15 2013-12-06
    你好,

    你好,

    那是正确的。在延长睡眠中,保留包含全局变量的RAM中的所有数据。

    主题锁定