nrf52832蓝牙4.0动态更新ibeacon广播内容

7 篇文章 0 订阅
2 篇文章 1 订阅

static void timer_handler_update_data(void *p_context)

    if (!(count % AIQBIO_DATA_UPDATE_BATTERY))
    {
        m_adv_aiqbio[AIQBIO_DATA_IDX_BATTERY] = aiqbio_battery_level_in_percent();
#if defined (GPIO_BATTERY_EN)
        // turn off power to protect battery if battery is below 3.2V which is defined in battery_voltage.c
        if (m_adv_aiqbio[AIQBIO_DATA_IDX_BATTERY] == 0)
            nrf_gpio_pin_clear(GPIO_BATTERY_EN);  // output: set BAT_EN low
#endif
    }

    if (m_is_dc_power_on)
    {
        m_adv_aiqbio[AIQBIO_DATA_IDX_HR] = max30003_get_hr();
        m_adv_aiqbio[AIQBIO_DATA_IDX_RESP] = max30003_get_br();
    }
    else
        m_adv_aiqbio[AIQBIO_DATA_IDX_HR] = 0;

#if TMP117_ENABLED
    if (!(count % AIQBIO_DATA_UPDATE_TEMP))
    {
        m_adv_aiqbio[AIQBIO_DATA_IDX_TEMP] = aiqbio_temperature_in_degree_c();

        debug_Main.temperature = m_adv_aiqbio[AIQBIO_DATA_IDX_TEMP];


advertising_update(&m_adv_aiqbio[APP_ADV_DATA_START], QUUPPA_ADV_PACKET_SIZE - APP_ADV_DATA_START);

动态更新广播内容
动态更新广播内容实际就是更新第四节中 manuf_specific_data.data.p_data 的值,
manuf_specific_data.data.p_data = (uint8_t *) p_data;
manuf_specific_data.data.size = QUUPPA_ADV_PACKET_SIZE - APP_ADV_DATA_START;

// Build and set advertising data.
memset(&advdata, 0, sizeof(advdata));

advdata.name_type             = BLE_ADVDATA_NO_NAME;
advdata.flags                 = flags;
advdata.p_manuf_specific_data = &manuf_specific_data;

typedef struct
{
uint16_t service_uuid; /< Service UUID. */
uint8_array_t data; /
< Additional service data. */
} ble_advdata_service_data_t;

/* Advertising data: refer to QUUPPA document “QuuppaTagEmulationSpecification_v1p2.pdf” /
static uint8_t m_adv_quuppa[QUUPPA_ADV_PACKET_SIZE] =
{
QUUPPA_ADV_AD_STRUCTURE1,
QUUPPA_ADV_AD_STRUCTURE2, /
floow by AD Data (Manufacturer Specific data) /
QUUPPA_ADV_COMPANY_ID,
QUUPPA_ADV_PACKET_ID,
QUUPPA_ADV_DEVICE_TYPE,
QUUPPA_ADV_TX_HEADER,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /
Quuppa Tag ID -> BLE device address /,
0x00 /
Checksum: CRC-8 calculated over fields of (1) QUUPPA_ADV_DEVICE_TYPE (2) QUUPPA_ADV_TX_HEADER (3) Quuppa Tag ID /,
QUUPPA_ADV_DF_FIELD /
The DF field consists of 14 fixed octets defined by QUUPPA */
};

然后停止广播,再更新广播内容,再开启广播,这里涉及到三个函数:

advertising_stop():停止广播
static void advertising_start(void) //开启广播
static void advertising_update(uint8_t *p_data, uint16_t size) //更新广播内容

static void radio_notification_interleave(bool active)
advertising_update(&m_adv_quuppa[APP_ADV_DATA_START], QUUPPA_ADV_PACKET_SIZE - APP_ADV_DATA_START);
advertising_update(&m_adv_aiqbio[APP_ADV_DATA_START], QUUPPA_ADV_PACKET_SIZE - APP_ADV_DATA_START);

int main(void)
 ble_radio_notification_init(APP_IRQ_PRIORITY_LOWEST, NRF_RADIO_NOTIFICATION_DISTANCE_5500US, radio_notification_interleave)

;

static void aiqbio_adv_data_init()
{
    uint8_t crc_data[8];

    /* update BLE device address (BDA) to m_adv_aiq/m_adv_quuppa */
    ble_gap_addr_t maddr;
    sd_ble_gap_addr_get(&maddr);
    for (int i = 0; i < 6; i++)
    {
        m_adv_aiqbio[14 - i] = maddr.addr[i];
        m_adv_quuppa[15 - i] = maddr.addr[i];
        crc_data[7 - i] = maddr.addr[i];
        sprintf(debug_Main.maddr, "%02X:%02X:%02X:%02X:%02X:%02X", maddr.addr[5], maddr.addr[4], maddr.addr[3], maddr.addr[2], maddr.addr[1], maddr.addr[0]);
    }

    /* update QUUPPA adv checksum field */
    crc_data[0] = m_adv_quuppa[AIQBIO_QPA_IDX_DEVICETYPE];
    crc_data[1] = m_adv_quuppa[AIQBIO_QPA_IDX_HEADER];
    m_adv_quuppa[AIQBIO_QPA_IDX_CHECKSUM] = crc8(0x00, 0x97, crc_data, 8);

    //sd_ble_gap_adv_data_set(m_adv_quuppa, QUUPPA_ADV_PACKET_SIZE, NULL, 0);
    advertising_update(&m_adv_quuppa[APP_ADV_DATA_START], QUUPPA_ADV_PACKET_SIZE - APP_ADV_DATA_START);
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nRF52832 是一款蓝牙低功耗系统级芯片(SoC),用于物联网(IoT)设备和其他低功耗应用。nRF52832是挪威纳恩索蓝牙公司(Nordic Semiconductor)推出的系列产品之一,其数据手册提供了关于该芯片的详细技术规格和功能描述。 nRF52832 数据手册包含了如下内容: 1. 芯片架构和引脚分布:介绍了nRF52832的内部架构和芯片上引脚的功能,包括GPIO、UART、SPI、I2C、ADC等外设的分配和配置。 2. 功耗和性能:详细说明了nRF52832在不同工作模式下的功耗消耗情况,包括睡眠模式、活动模式和射频发送/接收模式的功耗指标。还介绍了芯片的时钟和定时器功能,以及处理器内核的性能参数。 3. 射频特性:描述了nRF52832的射频发射和接收性能,包括频率范围、功率级别、调制方式、接收灵敏度等参数。同时说明了射频天线的接口和匹配电路设计。 4. 内存和存储器:详细介绍了nRF52832的闪存、RAM和永久存储器(EEPROM)的容量和地址分布,以及存储器映射和访问控制。 5. 外设和接口:列出了nRF52832支持的各种外设和接口,包括GPIO、UART、SPI、I2C、ADC、PWM、NFC、USB等,以及它们的功能和配置选项。 6. 软件开发工具和编程接口:介绍了nRF52832相关的软件开发工具和编程接口,包括开发环境(如Keil、IAR、GCC)和软件库(如nRF5 SDK)。 通过研读nRF52832 数据手册,开发者和工程师可以深入了解该芯片的各项功能和性能,为使用该芯片开发可靠的低功耗蓝牙应用提供技术支持和指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值