当前文档版本为 v0.7.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

ANT 开发指南

1 概述

本文档将介绍ANT协议栈的使用以及功耗情况,以供开发者参阅。

2 功耗

以下功耗数据是以ant_ble_hrm的sample工程测量的。

img

不同工作模式下的功耗数据

3 API

  • ant_channel_init 函数实现了通道的初始化。通道初始化是通信的前提。

/**
 * @brief Function for initializing the channel.
 *
 * @param channel_config       Pointer to the channel configuration structure.
 * @return uint8_t    0 SUCCESS, other FAIL.
 */
uint8_t ant_channel_init(ant_channel_config_t *channel_config);
  • ant_channel_open 函数实现了通道的开启,调用此函数后通道将开始发起通信。

/**
 * @brief Function for open the channel.
 *
 * @param channel_num      channel number.
 * @return uint8_t    0 SUCCESS, other FAIL.
 */
uint8_t ant_channel_open(uint8_t channel_num);
  • ant_set_tx_power 函数实现了发射功率的设置。

/**
 * @brief Function for Setting TX power.
 *
 * @param power     power value.
 */
void ant_set_tx_power(int8_t power);
  • ant_broadcast_message_tx 函数实现了发送广播数据。

/**
 * @brief Function for transmitting message with broadcast.
 *
 * @param channel_number      channel number.
 * @param data                data of send.
 * @param len                 data of length.
 * @return uint8_t     0 SUCCESS, other FAIL.
 */
uint8_t ant_broadcast_message_tx(uint8_t channel_number, uint8_t *data, uint8_t len);
  • ant_acknowledge_message_tx 函数实现了发送确认数据。

/**
 * @brief Function for transmitting message with acknowledge.
 *
 * @param channel_number      channel number.
 * @param data                data of send.
 * @param len                 data of length.
 * @return uint8_t     0 SUCCESS, other FAIL.
 */
uint8_t ant_acknowledge_message_tx(uint8_t channel_number, uint8_t *data, uint8_t len);
  • ant_evt_handle_register 函数是回调注册函数,在系统初始时将利用此函数注册处理发送完成消息和接收消息的回调函数。

/**
 * @brief Function for registering the event handler.
 *
 * @param evt          Pointer to the event instance.
 */
void ant_evt_handle_register(panchip_ant_evt_observer_t *evt);
  • ant_set_period_compensation 函数实现了调整发送周期的功能。因系统可能在各种原因的作用下导致周期偏移,此时可以利用此函数进行通道周期的调整。一般情况下此函数不需要调用,除非出现了周期与预期设置的不符。参数value的单位为30.5us。

    注意事项

    如需要调用此函数,必须在通道初始化之前调用。

    接口使用方法:

    ​ 通常我们的时间是以32768来计算,所以一个count的时间约定为30.5us。我们按照profile的规定设置周期值,例如设置period为4084,则发包间隔为4084 * 30.5 = 124.562ms

    ​ 我们可以通过IO测量EVENT_TX_COMPLETED事件的间隔来获取当前系统实际的发包间隔。如与上述时间不对应则可以用此接口来调整发包间隔以满足协议规定的时间宽度。

    ​ 如果我们当前测量的实际发包间隔为122.12ms,则存在124.562-122.12 = 2.442ms的误差,转换为count值就是2442 / 30.5=80

    ​ 因数据包实际发送到事件发生需要一定的系统调度,所以我们一般预留2-3个count的时间,此时可以调用接口来设置补偿值。ant_set_period_compensation(83);

    ​ 如果调整之后还是和协议规定的时间有出入,可能还需要对补偿值进行一些微调来使得时间满足要求。

/**
 * @brief Function for compensating period to avoid cycles that you do not expect.
 * @note  Do not call this interface normally, unless the sending cycle is not
 *        as good as you want. A positive value indicates that the period duration
 *        is increased, while a negative value decreases the period duration.
 *
 * @param value  compensation value.
 */
void ant_set_period_compensation(int value);
  • ant_plus_key_set 函数实现了ANT+网络密钥的设置

/**
 * @brief Function for set ant plus key.
 *
 * @param[in] network_number     network number.
 * @return uint8_t  0 SUCCESS, other FAIL.
 */
uint8_t ant_plus_key_set(uint8_t network_number);
  • ant_public_key_set 函数实现了公共网络密钥的设置

/**
 * @brief Function for set ant public key.
 *
 * @param network_number         network number.
 * @return uint8_t  0 SUCCESS, other FAIL.
 */
uint8_t ant_public_key_set(uint8_t network_number);

4 ANT+开发流程

  • 通常,开发一个ANT+的工程需要先建立一个自己的工程目录,可以把现有的ANT sample拷贝一份作为自己的工程目录。ANT+的sample放置在samples_panchip/ant_plus目录中。

  • 工程建好后,需要有profile支持,目前SDK提供了心率、踏频、功率、雷达四种profile,如果开发的设备不是这四种设备则需要自己开发一个profile,profile的开发详情请参照文档如何添加 ANT+ Profile进行。

  • profile建好之后,就可以在应用层添加自己的业务逻辑了。ANT的使用请参照相关的sample文档进行。