Initial sync implementation
Implemented system sync with crank and cam state and simple error handling
This commit is contained in:
@@ -4,22 +4,63 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#include "cmsis_os2.h"
|
||||
#include "macros.h"
|
||||
#include "main.h"
|
||||
#include "ring_buffer.h"
|
||||
#include "tasks.h"
|
||||
#ifdef DEBUG
|
||||
#include "SEGGER_RTT.h"
|
||||
#endif
|
||||
|
||||
void crankHandler(void *argument) {
|
||||
for (;;) {
|
||||
osThreadFlagsWait(0x01, osFlagsWaitAny, osWaitForever);
|
||||
#ifdef DEBUG
|
||||
SEGGER_RTT_printf(0, "Crank pulse detected at: %lu\n\r",
|
||||
ringBufferRead(&state_g.crank_RB, 0));
|
||||
#endif /* ifdef DEBUG */
|
||||
if (state_g.sync == SYNC_OK) {
|
||||
// TODO complete algorithm for scheduling spark
|
||||
DEBUG_LOG("Crank pulse detected at: %lu\n\r",
|
||||
ringBufferRead(&state_g.crank_RB, 0));
|
||||
// FILTER
|
||||
|
||||
// INCREMENT SWITCH
|
||||
switch (state_g.crank_state) {
|
||||
case CYCLE_COMPRESSION: {
|
||||
if (state_g.cam_state != CAM_TRIGD) {
|
||||
DEBUG_LOG("Cam miss detected, sync dynamite incoming\n\r");
|
||||
state_g.cam_miss_ctr++;
|
||||
if (state_g.cam_miss_ctr > MAX_CAM_MISS) {
|
||||
state_g.sync_state = SYNC_NOT_OK;
|
||||
state_g.crank_state = CYCLE_UNKNOWN;
|
||||
break;
|
||||
}
|
||||
}
|
||||
state_g.crank_state = CYCLE_COMBUSTION;
|
||||
DEBUG_LOG("Crank state incremented\n\r");
|
||||
state_g.cam_state = CAM_IDLE;
|
||||
break;
|
||||
}
|
||||
case CYCLE_COMBUSTION:
|
||||
case CYCLE_EXHAUST:
|
||||
case CYCLE_INTAKE: {
|
||||
if (state_g.cam_state == CAM_TRIGD) {
|
||||
state_g.sync_state = SYNC_NOT_OK;
|
||||
state_g.crank_state = CYCLE_UNKNOWN;
|
||||
state_g.cam_state = CAM_IDLE;
|
||||
break;
|
||||
}
|
||||
state_g.crank_state++;
|
||||
DEBUG_LOG("Crank state incremented\n\r");
|
||||
break;
|
||||
}
|
||||
case CYCLE_UNKNOWN: {
|
||||
if (state_g.sync_state == SYNC_PENDING &&
|
||||
state_g.cam_state == CAM_TRIGD) {
|
||||
state_g.crank_state = CYCLE_COMBUSTION;
|
||||
state_g.cam_state = CAM_IDLE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// SPARK SCHEDULE
|
||||
if (state_g.crank_state == CYCLE_COMPRESSION &&
|
||||
state_g.sync_state == SYNC_OK) {
|
||||
DEBUG_LOG("Spark schedule reached, congrats\n\r");
|
||||
// TODO: schedule spark
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user