fml_single_line_simplex.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #ifndef __FML_SINGLE_LINE_SIMPLEX_H__
  2. #define __FML_SINGLE_LINE_SIMPLEX_H__
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. /*Includes ------------------------------------------------------*/
  7. #include <stdint.h>
  8. #include <stdio.h>
  9. #include <stdbool.h>
  10. #include <string.h>
  11. #include "nrf_drv_gpiote.h"
  12. #include "app_error.h"
  13. #include "SEGGER_RTT.h"
  14. #include "usr_config.h"
  15. /*Private macro ------------------------------------------------*/
  16. #define FML_SINGLE_LINE_SIMPLEX_PIN PIN_CHARGING //IO引脚
  17. #define FML_SINGLE_LINE_SIMPLEX_SEND_ONE_BIT_TIEMS 12000 //发送一位的等待时间 单位:us //一个字节4.3-4.8ms
  18. #define FML_SINGLE_LINE_SIMPLEX_BASICS_T FML_SINGLE_LINE_SIMPLEX_SEND_ONE_BIT_TIEMS //基础时间 单位:us
  19. #define FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T (1*FML_SINGLE_LINE_SIMPLEX_BASICS_T) //校准码时间 单位:us
  20. #define FML_SINGLE_LINE_SIMPLEX_BOOT_CODE_T (10*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T) //引导码时间 单位:us
  21. #define FML_SINGLE_LINE_SIMPLEX_LOW_LEVEL_T (1*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T) //低电平时间 单位:us
  22. #define FML_SINGLE_LINE_SIMPLEX_HIGHT_LEVEL_T (3*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T) //高电平时间 单位:us
  23. #define FML_SINGLE_LINE_SIMPLEX_END_CODE_T (5*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T) //结束码时间 单位:us
  24. /*STRUCTION -----------------------------------------------------*/
  25. typedef enum
  26. {
  27. FML_SINGLE_LINE_SIMPLEX_ROLE_HOST = 1, //角色 —— 主机
  28. FML_SINGLE_LINE_SIMPLEX_ROLE_SLAVE = 0 //角色 —— 从机
  29. } FML_SINGLE_LINE_SIMPLEX_ROLE_e;
  30. typedef void (*fml_single_line_half_duplex_receive_cb)(void);
  31. /*API -------------------------------------------------------*/
  32. /**
  33. @brief 初始化单线单工驱动
  34. @param role - [in] 角色
  35. @return 错误代码 - [out] -1失败,0成功
  36. */
  37. int fml_single_line_simplex_Init(FML_SINGLE_LINE_SIMPLEX_ROLE_e role);
  38. /**
  39. @brief 取消初始化单线单工驱动
  40. @param 无
  41. @return 错误代码 - [out] -1失败,0成功
  42. */
  43. int fml_single_line_simplex_UnInit(void);
  44. /**
  45. @brief 单线单工阻塞IO传输 —— 发送
  46. @param p_send - [in] 需要发送数据的指向地址
  47. @param len - [in] 数据长度
  48. @return 错误代码 - [out] -1失败,0成功
  49. */
  50. int fml_single_line_simplex_transfer(char *p_send, int len);
  51. /**
  52. @brief 单线单工PWM传输 —— 发送
  53. @param byte - [in] 发送的字节
  54. @return 错误代码 - [out] -1失败,0成功
  55. */
  56. int fml_single_line_simplex_pwm_transfer_onebyte(char byte);
  57. /**
  58. @brief 单线单工PWM传输是否完成 —— 发送
  59. @param 无
  60. @return 错误代码 - [out] -1失败,0成功
  61. */
  62. int fml_single_line_simplex_pwm_transfer_is_done(void);
  63. /**
  64. @brief 单线单工传输 —— 接收
  65. @param p_receive - [in] 需要接收数据的指向地址
  66. @param len - [in] 数据长度
  67. @return 返回的长度
  68. */
  69. int fml_single_line_simplex_receive(char *p_receive, uint32_t len);
  70. /**
  71. @brief 单线单工传输 —— 接收回调
  72. @param cb - [in] 回调地址
  73. @return 错误代码 - [out] -1失败,0成功
  74. */
  75. int fml_single_line_simplex_receive_time_callback(fml_single_line_half_duplex_receive_cb cb);
  76. #ifdef __cplusplus
  77. }
  78. #endif
  79. #endif