| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #include "bsp/gpio.h"
- #include "app/sox/sense_measure.h"
- #include "libs/shark_task.h"
- #include "state.h"
- static bms_state_t _bms_state;
- struct means_task {
- shark_task_t _task;
- u32 delay;
- u8 index;
- };
- static void init_pack_current_task(void);
- static void init_cell_task(void);
- static void init_temp_task(void);
- void bms_state_init(void){
- measure_system_init();
- init_pack_current_task();
- init_cell_task();
- init_temp_task();
- }
- bms_state_t * bms_state_get(void){
- return &_bms_state;
- }
- /***********************************************************************/
- static struct means_task _pack_current_task;
- static u32 pack_current_task_handler(void);
- static void init_pack_current_task(void){
- _pack_current_task._task.handler = pack_current_task_handler;
- _pack_current_task.delay = 60;
- _pack_current_task.index = 0;
- shark_task_add(&_pack_current_task._task);
- }
- static u32 pack_current_task_handler(void){
- _bms_state.load_current = get_pack_current();
- return _pack_current_task.delay;
- }
- /***********************************************************************/
- static struct means_task _cell_task;
- static u32 cell_task_handler(void);
- static void init_cell_task(void){
- _cell_task._task.handler = cell_task_handler;
- _cell_task.delay = 60;
- _cell_task.index = 0;
- shark_task_add(&_cell_task._task);
- }
- static u32 cell_task_handler(void){
- _bms_state.cell_vol[_cell_task.index] = get_cell_voltage(_cell_task.index);
- _cell_task.index = (_cell_task.index + 1) % CELLS_NUM;
-
- return _cell_task.delay;
- }
- /***********************************************************************/
- static struct means_task _temp_task;
- static u32 temp_task_handler(void);
- static void init_temp_task(void){
- _temp_task._task.handler = temp_task_handler;
- _temp_task.delay = 5 * 1000;
- _temp_task.index = 0;
- _bms_state.pcb_temp = 0xFF;
- _bms_state.pack_temp[0] = 0xFF;
- _bms_state.pack_temp[1] = 0xFF;
- _bms_state.pack_temp[2] = 0xFF;
- shark_task_add(&_temp_task._task);
- }
- static u32 temp_task_handler(void){
- switch(_temp_task.index) {
- case 0:
- _bms_state.pcb_temp = get_pcb_temperature();
- break;
- case 1:
- case 2:
- case 3:
- _bms_state.pack_temp[_temp_task.index - 1] = get_pack_temperature(_temp_task.index - 1);
- break;
- default:
- break;
- }
- _temp_task.index = (_temp_task.index + 1) % (PACK_TEMPS_NUM + 1);
- if (_bms_state.pack_temp[0] == 0xFF || _bms_state.pack_temp[0] == 0xFF || _bms_state.pack_temp[1] == 0xFF
- || _bms_state.pack_temp[2] == 0xFF){
- return 0;//read all temps ASAP
- }
- return _temp_task.delay;
- }
|