#ifndef __FML_SINGLE_LINE_SIMPLEX_H__ #define __FML_SINGLE_LINE_SIMPLEX_H__ #ifdef __cplusplus extern "C" { #endif /*Includes ------------------------------------------------------*/ #include #include #include #include #include "nrf_drv_gpiote.h" #include "app_error.h" #include "SEGGER_RTT.h" #include "usr_config.h" /*Private macro ------------------------------------------------*/ #define FML_SINGLE_LINE_SIMPLEX_PIN PIN_CHARGING //IO引脚 #define FML_SINGLE_LINE_SIMPLEX_SEND_ONE_BIT_TIEMS 12000 //发送一位的等待时间 单位:us //一个字节4.3-4.8ms #define FML_SINGLE_LINE_SIMPLEX_BASICS_T FML_SINGLE_LINE_SIMPLEX_SEND_ONE_BIT_TIEMS //基础时间 单位:us #define FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T (1*FML_SINGLE_LINE_SIMPLEX_BASICS_T) //校准码时间 单位:us #define FML_SINGLE_LINE_SIMPLEX_BOOT_CODE_T (10*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T) //引导码时间 单位:us #define FML_SINGLE_LINE_SIMPLEX_LOW_LEVEL_T (1*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T) //低电平时间 单位:us #define FML_SINGLE_LINE_SIMPLEX_HIGHT_LEVEL_T (3*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T) //高电平时间 单位:us #define FML_SINGLE_LINE_SIMPLEX_END_CODE_T (5*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T) //结束码时间 单位:us /*STRUCTION -----------------------------------------------------*/ typedef enum { FML_SINGLE_LINE_SIMPLEX_ROLE_HOST = 1, //角色 —— 主机 FML_SINGLE_LINE_SIMPLEX_ROLE_SLAVE = 0 //角色 —— 从机 } FML_SINGLE_LINE_SIMPLEX_ROLE_e; typedef void (*fml_single_line_half_duplex_receive_cb)(void); /*API -------------------------------------------------------*/ /** @brief 初始化单线单工驱动 @param role - [in] 角色 @return 错误代码 - [out] -1失败,0成功 */ int fml_single_line_simplex_Init(FML_SINGLE_LINE_SIMPLEX_ROLE_e role); /** @brief 取消初始化单线单工驱动 @param 无 @return 错误代码 - [out] -1失败,0成功 */ int fml_single_line_simplex_UnInit(void); /** @brief 单线单工阻塞IO传输 —— 发送 @param p_send - [in] 需要发送数据的指向地址 @param len - [in] 数据长度 @return 错误代码 - [out] -1失败,0成功 */ int fml_single_line_simplex_transfer(char *p_send, int len); /** @brief 单线单工PWM传输 —— 发送 @param byte - [in] 发送的字节 @return 错误代码 - [out] -1失败,0成功 */ int fml_single_line_simplex_pwm_transfer_onebyte(char byte); /** @brief 单线单工PWM传输是否完成 —— 发送 @param 无 @return 错误代码 - [out] -1失败,0成功 */ int fml_single_line_simplex_pwm_transfer_is_done(void); /** @brief 单线单工传输 —— 接收 @param p_receive - [in] 需要接收数据的指向地址 @param len - [in] 数据长度 @return 返回的长度 */ int fml_single_line_simplex_receive(char *p_receive, uint32_t len); /** @brief 单线单工传输 —— 接收回调 @param cb - [in] 回调地址 @return 错误代码 - [out] -1失败,0成功 */ int fml_single_line_simplex_receive_time_callback(fml_single_line_half_duplex_receive_cb cb); #ifdef __cplusplus } #endif #endif