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

ANT 开发指南

1 概述

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

2 功耗

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

img

PAN1081 EVB 核心板功耗测试数据

3 协议栈介绍

  • 协议栈支持多通道,最多同时开启5个通道,通道的开启需要先执行初始化函数,然后执行open函数,即可完成通道的开启。同时,我们需要注册一个事件的回调函数,用于协议栈向上层报告事件。事件的处理建议放在线程中完成,回调函数只做简单的操作,例如释放信号量等。这是因为回调函数是在中断中执行的,长时间占用中断会导致系统性能变差。

  • 协议栈支持如下通道类型

    Bidirectional Slave Channel

    Bidirectional Master Channel

    Shared Bidirectional Slave Channel

    Shared Bidirectional Master Channel

    Slave Receive Only Channel (diagnostic)

    Master Transmit Only Channel (legacy)

  • 协议栈仅支持如下数据类型

    Broadcast Data

    Acknowledged Data

4 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_get_channel_id 函数实现了获取当前通道的Channel ID。如果当前的通道时SLAVE时,我们在配对成功后就可以调用此函数来获取当前配对设备的Channel ID。

/**
 * @brief Function for Getting the channel id of the specified channel.
 *
 * @param channel_num         channel number.
 * @param p_channel_config    point to the channel struct.
 */
void ant_get_channel_id(uint8_t channel_num, ant_channel_config_t *p_channel_config);
  • 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);

5 ANT+开发流程

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

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

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