120 lines
3.0 KiB
C
120 lines
3.0 KiB
C
/**
|
||
******************************************************************************
|
||
* @file rf433_rx_app.h
|
||
* @brief RF433 RX应用层接口
|
||
******************************************************************************
|
||
*/
|
||
|
||
#ifndef __RF433_RX_APP_H__
|
||
#define __RF433_RX_APP_H__
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
#include "rf433.h"
|
||
#include <stdint.h>
|
||
#include <stdbool.h>
|
||
|
||
/* ============================================================================
|
||
* 数据类型定义
|
||
* ============================================================================ */
|
||
|
||
/**
|
||
* @brief RX状态机状态
|
||
*/
|
||
typedef enum {
|
||
RX_STATE_INIT = 0, /**< 初始化状态 */
|
||
RX_STATE_RECEIVING, /**< 接收中状态 */
|
||
RX_STATE_IDLE, /**< 空闲状态 */
|
||
} rx_state_t;
|
||
|
||
/**
|
||
* @brief RX统计结构体
|
||
*/
|
||
typedef struct {
|
||
uint32_t total_received; /**< 总接收次数 */
|
||
uint32_t total_expected; /**< 总期望次数 */
|
||
uint32_t lost_packets; /**< 丢包数 */
|
||
uint8_t lost_percent; /**< 丢包率(%) */
|
||
} rf433_rx_stats_t;
|
||
|
||
/**
|
||
* @brief RX应用结构体
|
||
*/
|
||
typedef struct {
|
||
rx_state_t state; /**< 当前状态 */
|
||
rf433_rx_stats_t stats; /**< 统计信息 */
|
||
uint32_t tx_current_number; /**< TX当前序号 */
|
||
uint32_t tx_total_number; /**< TX总次数 */
|
||
uint32_t tx_number_record; /**< TX序号记录 */
|
||
rf433_register_t config; /**< RF433配置 */
|
||
bool is_running; /**< 是否正在运行 */
|
||
} rf433_rx_app_t;
|
||
|
||
/* ============================================================================
|
||
* API函数声明
|
||
* ============================================================================ */
|
||
|
||
/**
|
||
* @brief 初始化RX应用层
|
||
* @param config RF433配置参数
|
||
* @retval RF433_OK 成功
|
||
* @retval RF433_ERROR 参数错误
|
||
*/
|
||
rf433_error_t rf433_rx_app_init(const rf433_register_t *config);
|
||
|
||
/**
|
||
* @brief 启动RX自动接收
|
||
* @retval RF433_OK 成功
|
||
*/
|
||
rf433_error_t rf433_rx_app_start(void);
|
||
|
||
/**
|
||
* @brief 停止RX自动接收
|
||
* @retval RF433_OK 成功
|
||
*/
|
||
rf433_error_t rf433_rx_app_stop(void);
|
||
|
||
/**
|
||
* @brief RX任务函数(在主循环中调用)
|
||
*/
|
||
void rf433_rx_app_task(void);
|
||
|
||
/**
|
||
* @brief 获取RX状态
|
||
* @return 当前RX状态
|
||
*/
|
||
rx_state_t rf433_rx_app_get_state(void);
|
||
|
||
/**
|
||
* @brief 获取RX统计信息
|
||
* @param stats 统计信息结构体指针
|
||
* @retval RF433_OK 成功
|
||
* @retval RF433_ERROR 参数错误
|
||
*/
|
||
rf433_error_t rf433_rx_app_get_stats(rf433_rx_stats_t *stats);
|
||
|
||
/**
|
||
* @brief 重置RX统计信息
|
||
*/
|
||
void rf433_rx_app_reset_stats(void);
|
||
|
||
/**
|
||
* @brief 解析数据包
|
||
* @param data 数据包指针
|
||
* @param length 数据包长度
|
||
* @param tx_total 输出:TX总次数
|
||
* @param tx_current 输出:TX当前序号
|
||
* @retval RF433_OK 解析成功
|
||
* @retval RF433_ERROR 数据包格式错误
|
||
*/
|
||
rf433_error_t rf433_rx_app_parse_packet(const uint8_t *data, uint16_t length,
|
||
uint32_t *tx_total, uint32_t *tx_current);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* __RF433_RX_APP_H__ */
|