user_charge.c 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #include "user_charge.h"
  2. #include "user_config.h"
  3. #include "user_adc.h"
  4. #include "my_math.h"
  5. tmosTaskID user_charge_task_id = INVALID_TASK_ID;
  6. static vUser_charge_upload_stat_func xUpload_stat = NULL;
  7. static uint16_t user_charge_task_process_event(uint8_t task_id, uint16_t events);
  8. /*******************************************************************************
  9. * @函数名称 charge_gpio_init
  10. * @函数说明 GPIO初始化
  11. * @输入参数 无
  12. * @输出参数 无
  13. * @返回参数 无
  14. *******************************************************************************/
  15. static void charge_gpio_init(void)
  16. {
  17. GPIO_InitTypeDef GPIO_InitStructure = {0};
  18. CHARGE_GPIO_RCC_ENABLE;
  19. GPIO_InitStructure.GPIO_Pin = CHARGE_LEFT_PIN;
  20. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  21. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  22. GPIO_Init(CHARGE_LEFT_GPIO, &GPIO_InitStructure);
  23. CHARGE_LEFT_OFF;
  24. GPIO_InitStructure.GPIO_Pin = CHARGE_RIGHT_PIN;
  25. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  26. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  27. GPIO_Init(CHARGE_RIGHT_GPIO, &GPIO_InitStructure);
  28. CHARGE_RIGHT_OFF;
  29. }
  30. /*******************************************************************************
  31. * @函数名称 prvUser_charge_upload_stat
  32. * @函数说明 上报充电状态
  33. * @输入参数 idx:左边或者右边
  34. stat:充电状态
  35. * @输出参数 无
  36. * @返回参数 无
  37. *******************************************************************************/
  38. static void prvUser_charge_upload_stat(uint8_t idx, bool stat)
  39. {
  40. if(xUpload_stat != NULL)
  41. {
  42. xUpload_stat(idx, stat);
  43. }
  44. }
  45. /*******************************************************************************
  46. * @函数名称 user_charge_task_process_event
  47. * @函数说明 task的event处理回调函数,需要在注册task时候,传进去
  48. * @输入参数 task_id:任务ID
  49. events:事件
  50. * @输出参数 无
  51. * @返回参数 无
  52. *******************************************************************************/
  53. static uint16_t user_charge_task_process_event(uint8_t task_id, uint16_t events)
  54. {
  55. //event 处理
  56. if(events & (1 << CHARGE_QUEUE_LEFT_OPEN))
  57. {
  58. CHARGE_LEFT_ON;
  59. prvUser_charge_upload_stat(LEFT_IDX, true);
  60. return (events ^ (1 << CHARGE_QUEUE_LEFT_OPEN)); //异或的方式清除该事件运行标志,并返回未运行的事件标志
  61. }
  62. if(events & (1 << CHARGE_QUEUE_LEFT_CLOSE))
  63. {
  64. CHARGE_LEFT_OFF;
  65. prvUser_charge_upload_stat(LEFT_IDX, false);
  66. return (events ^ (1 << CHARGE_QUEUE_LEFT_CLOSE)); //异或的方式清除该事件运行标志,并返回未运行的事件标志
  67. }
  68. if(events & (1 << CHARGE_QUEUE_RIGHT_OPEN))
  69. {
  70. CHARGE_RIGHT_ON;
  71. prvUser_charge_upload_stat(RIGHT_IDX, true);
  72. return (events ^ (1 << CHARGE_QUEUE_RIGHT_OPEN)); //异或的方式清除该事件运行标志,并返回未运行的事件标志
  73. }
  74. if(events & (1 << CHARGE_QUEUE_RIGHT_CLOSE))
  75. {
  76. CHARGE_RIGHT_OFF;
  77. prvUser_charge_upload_stat(RIGHT_IDX, false);
  78. return (events ^ (1 << CHARGE_QUEUE_RIGHT_CLOSE)); //异或的方式清除该事件运行标志,并返回未运行的事件标志
  79. }
  80. adc_task_process_event(task_id, events);
  81. return 0;
  82. }
  83. /*******************************************************************************
  84. * @函数名称 set_user_charge_Queue
  85. * @函数说明 开始Charge任务event
  86. * @输入参数 无
  87. * @输出参数 无
  88. * @返回参数 无
  89. *******************************************************************************/
  90. void set_user_charge_Queue(USER_CHARGE_QUEUE_TYPE type)
  91. {
  92. bStatus_t stat = tmos_start_task(user_charge_task_id, (1 << type), MS1_TO_SYSTEM_TIME(1));
  93. }
  94. /*******************************************************************************
  95. * @函数名称 user_charge_init
  96. * @函数说明 Charge初始化
  97. * @输入参数 无
  98. * @输出参数 无
  99. * @返回参数 无
  100. *******************************************************************************/
  101. void user_charge_init(void)
  102. {
  103. charge_gpio_init();
  104. user_charge_task_id = TMOS_ProcessEventRegister(user_charge_task_process_event);
  105. PRINT("user_charge_task_id=%d\n", user_charge_task_id);
  106. }
  107. /*******************************************************************************
  108. * @函数名称 vUser_charge_set_upload_stat_func
  109. * @函数说明 设置上报充电状态的回调函数
  110. * @输入参数 func:函数指针
  111. * @输出参数 无
  112. * @返回参数 无
  113. *******************************************************************************/
  114. void vUser_charge_set_upload_stat_func(vUser_charge_upload_stat_func func)
  115. {
  116. xUpload_stat = func;
  117. }