Skip to content

Commit

Permalink
pr feedback updates 2
Browse files Browse the repository at this point in the history
  • Loading branch information
devAdhiraj committed Jan 11, 2024
1 parent d8e8663 commit 1a3d773
Show file tree
Hide file tree
Showing 15 changed files with 100 additions and 104 deletions.
1 change: 1 addition & 0 deletions libraries/ms-common/inc/exported_enums.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ typedef enum {
// POWER DISTRIBUTION (TODO)
typedef enum {
EE_POWER_OFF_STATE = 0,
EE_POWER_TRANSMIT_CLOSE_RELAYS,
EE_POWER_ON_STATE,
EE_POWER_DRIVE_STATE,
} PowerDistributionPowerState;
Expand Down
2 changes: 1 addition & 1 deletion libraries/ms-common/src/fsm.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ void _fsm_task(void *context) {
LOG_DEBUG("FSM timeout\n");
}
// Indicate that a fsm_cycle is finished
send_task_end(); // TODO: should it send task end if fsm times out?
send_task_end();
}
}

Expand Down
2 changes: 1 addition & 1 deletion projects/fsm_demo/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
#include "fsm1.h"
#include "fsm2.h"
#include "log.h"
#include "tasks.h"
#include "master_task.h"
#include "tasks.h"

// TASK(master_task, TASK_STACK_512) {
// while (true) {
Expand Down
4 changes: 2 additions & 2 deletions projects/leds/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ TASK(leds_task, TASK_STACK_512) {
}

while (true) {
// #ifdef MS_PLATFORM_X86
// #ifdef MS_PLATFORM_X86
LOG_DEBUG("blink\n");
// #endif
// #endif
for (uint8_t i = 0; i < SIZEOF_ARRAY(leds); i++) {
gpio_toggle_state(&leds[i]);
delay_ms(50);
Expand Down
29 changes: 14 additions & 15 deletions projects/power_distribution/inc/outputs.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,28 +24,28 @@ typedef enum {
SOLAR_SENSE_2,
PEDAL,
STEERING,
LEFT_TURN,
RIGHT_TURN,
DRL_LIGHT,
BRAKE_LIGHT,

CENTER_CONSOLE,
BMS_DCDC,
MCI,
BPS_LIGHT,

SPARE_12V_1,
SPARE_12V_2,
BMS_AUX,
DRIVER_FAN,
REAR_CAM_LCD,
SPARE_5V_DCDC,

TELEMETRY,
SPARE_5V_AUX,
NUM_POWER_FSM_OUTPUTS,
} OutputPowerFsm;

typedef enum {
BPS_LIGHT = NUM_POWER_FSM_OUTPUTS,
RIGHT_TURN,
LEFT_TURN,
BRAKE_LIGHT,
NUM_OUTPUTS,
} Output;
} OutputLights;

typedef enum {
OUTPUT_STATE_OFF = 0,
Expand All @@ -57,15 +57,14 @@ typedef enum {
typedef enum {
OUTPUT_GROUP_ALL = 0, // Reserved Value
// Lights
OUTPUT_GROUP_LEFT_TURN,
OUTPUT_GROUP_RIGHT_TURN,
OUTPUT_GROUP_HAZARD,
OUTPUT_GROUP_LIGHTS_LEFT_TURN,
OUTPUT_GROUP_LIGHTS_RIGHT_TURN,
OUTPUT_GROUP_LIGHTS_HAZARD,
// Power States
OUTPUT_GROUP_BMS_RELAYS,
OUTPUT_GROUP_POWER_OFF,
OUTPUT_GROUP_POWER_ON,
OUTPUT_GROUP_DRIVE,
OUTPUT_GROUP_TEST,
OUTPUT_GROUP_POWER_DRIVE,
OUTPUT_GROUP_POWER_FAULT,
NUM_OUTPUT_GROUPS,
} OutputGroup;

Expand All @@ -75,7 +74,7 @@ typedef struct OutputMeasurementConfig {

typedef struct OutputGroupDef {
uint8_t num_outputs;
Output outputs[];
uint8_t outputs[];
} OutputGroupDef;

extern BtsLoadSwitchOutput g_output_config[NUM_OUTPUTS];
Expand Down
5 changes: 3 additions & 2 deletions projects/power_distribution/inc/pd_fault.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
#pragma once

#include "status.h"
#include <stdint.h>

#include "status.h"
/*
* @brief Checks for PD fault states and updates fault bitset CAN message
* @return STATUS_CODE_OK on success or appropriate error code
*/
StatusCode check_pd_fault(void);
uint8_t check_pd_fault(void);
12 changes: 1 addition & 11 deletions projects/power_distribution/inc/power_seq_fsm.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,6 @@
#define BMS_RESPONSE_TIMEOUT_MS 10000
#define MCI_RESPONSE_TIMEOUT_MS 12000

#define DCDC_VALID \
{ GPIO_PORT_A, 15 }

#define check_pd_fault(fsm) \
power_context.fault = prv_fault_check();
// if (power_context.fault != NO_ERROR) {
// fsm_transition(fsm, POWER_STATE_FAULT);
// return;
// }

#define NUM_POWER_STATES 6

DECLARE_FSM(power_seq);
Expand All @@ -36,7 +26,7 @@ typedef struct {
PowerSeqStateId target_state;
PowerSeqStateId latest_state;
TickType_t timer_start_ticks;
GlobalErrorCode fault;
uint8_t fault;
} PowerFsmContext;

StatusCode init_power_seq(void);
12 changes: 6 additions & 6 deletions projects/power_distribution/src/lights_fsm.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,19 +21,19 @@ static void prv_lights_signal_blinker(SoftTimerId id) {
switch (light_id_callback) {
case EE_LIGHT_TYPE_SIGNAL_LEFT:
left_signal_state ^= 1;
pd_set_output_group(OUTPUT_GROUP_LEFT_TURN, left_signal_state);
pd_set_output_group(OUTPUT_GROUP_LIGHTS_LEFT_TURN, left_signal_state);
if (right_signal_state == OUTPUT_STATE_ON) {
right_signal_state = OUTPUT_STATE_OFF;
pd_set_output_group(OUTPUT_GROUP_RIGHT_TURN, right_signal_state);
pd_set_output_group(OUTPUT_GROUP_LIGHTS_RIGHT_TURN, right_signal_state);
}
soft_timer_start(&s_timer_single);
break;
case EE_LIGHT_TYPE_SIGNAL_RIGHT:
right_signal_state ^= 1;
pd_set_output_group(OUTPUT_GROUP_RIGHT_TURN, right_signal_state);
pd_set_output_group(OUTPUT_GROUP_LIGHTS_RIGHT_TURN, right_signal_state);
if (left_signal_state == OUTPUT_STATE_ON) {
left_signal_state = OUTPUT_STATE_OFF;
pd_set_output_group(OUTPUT_GROUP_LEFT_TURN, left_signal_state);
pd_set_output_group(OUTPUT_GROUP_LIGHTS_LEFT_TURN, left_signal_state);
}
soft_timer_start(&s_timer_single);
break;
Expand All @@ -44,13 +44,13 @@ static void prv_lights_signal_blinker(SoftTimerId id) {
}
left_signal_state ^= 1;
right_signal_state ^= 1;
pd_set_output_group(OUTPUT_GROUP_HAZARD, left_signal_state);
pd_set_output_group(OUTPUT_GROUP_LIGHTS_HAZARD, left_signal_state);
soft_timer_start(&s_timer_single);
break;
default:
left_signal_state = OUTPUT_STATE_OFF;
right_signal_state = OUTPUT_STATE_OFF;
pd_set_output_group(OUTPUT_GROUP_HAZARD, left_signal_state);
pd_set_output_group(OUTPUT_GROUP_LIGHTS_HAZARD, left_signal_state);
}
}

Expand Down
16 changes: 8 additions & 8 deletions projects/power_distribution/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,18 +34,18 @@ void pre_loop_init() {
pd_output_init();
pd_sense_init();
adc_init();
pd_set_active_output_group(OUTPUT_GROUP_POWER_OFF);
}

void run_fast_cycle() {}
void run_medium_cycle() {
run_can_rx_cycle();
wait_tasks(1);

fsm_run_cycle(power_seq);
// fsm_run_cycle(lights);
wait_tasks(1);

adc_run();
fsm_run_cycle(power_seq);
fsm_run_cycle(lights);
wait_tasks(2);

run_can_tx_cycle();
wait_tasks(1);
Expand All @@ -56,15 +56,15 @@ void run_slow_cycle() {}
int main() {
tasks_init();
log_init();
gpio_init();
interrupt_init();
gpio_init();
i2c_init(I2C_PORT_1, &i2c_settings);
pca9555_gpio_init(I2C_PORT_1);
can_init(&s_can_storage, &can_settings);
set_master_cycle_time(250); // Give it enough time to run an entire medium cycle
set_medium_cycle_count(2); // adjust medium cycle count to run once per 500ms
// set_master_cycle_time(250); // Give it enough time to run an entire medium cycle
// set_medium_cycle_count(2); // adjust medium cycle count to run once per 500ms
init_power_seq();
// init_lights();
init_lights();

LOG_DEBUG("Welcome to PD!\n");
init_master_task();
Expand Down
25 changes: 21 additions & 4 deletions projects/power_distribution/src/output_config.c
Original file line number Diff line number Diff line change
Expand Up @@ -310,12 +310,29 @@ static OutputGroupDef s_output_group_hazards = {
.outputs = { LEFT_TURN, RIGHT_TURN },
};

static OutputGroupDef s_output_group_power_off = { .num_outputs = 2,
.outputs = { CENTER_CONSOLE, BMS_DCDC } };

static OutputGroupDef s_output_group_power_on = {
.num_outputs = 7,
.outputs = { CENTER_CONSOLE, BMS_DCDC, BMS_AUX, PEDAL, STEERING, SOLAR_SENSE_1, SOLAR_SENSE_2 }
};

static OutputGroupDef s_output_group_power_drive = {
.num_outputs = 13,
.outputs = { CENTER_CONSOLE, BMS_DCDC, BMS_AUX, PEDAL, STEERING, SOLAR_SENSE_1, SOLAR_SENSE_2,
MCI, DRL_LIGHT, DRIVER_FAN, TELEMETRY, REAR_CAM_LCD, SPARE_5V_DCDC }
};

static OutputGroupDef s_output_group_power_fault = {
.num_outputs = 4, .outputs = { CENTER_CONSOLE, BMS_DCDC, PEDAL, STEERING }
};

static OutputGroupDef s_output_group_test = { .num_outputs = 2, .outputs = { STEERING, PEDAL } };

const OutputGroupDef *g_output_group_map[NUM_OUTPUT_GROUPS] = {
[OUTPUT_GROUP_ALL] = NULL, // Special case
[OUTPUT_GROUP_LEFT_TURN] = &s_output_group_left_signal,
[OUTPUT_GROUP_RIGHT_TURN] = &s_output_group_right_signal,
[OUTPUT_GROUP_HAZARD] = &s_output_group_hazards,
[OUTPUT_GROUP_TEST] = &s_output_group_test,
[OUTPUT_GROUP_LIGHTS_LEFT_TURN] = &s_output_group_left_signal,
[OUTPUT_GROUP_LIGHTS_RIGHT_TURN] = &s_output_group_right_signal,
[OUTPUT_GROUP_LIGHTS_HAZARD] = &s_output_group_hazards,
};
2 changes: 1 addition & 1 deletion projects/power_distribution/src/output_current_sense.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ StatusCode pd_sense_output_group(OutputGroup group) {
}

for (uint8_t out = 0; out < grp->num_outputs; out++) {
Output output = grp->outputs[out];
uint8_t output = grp->outputs[out];
status_ok_or_return(prv_set_sense_mux(g_output_config[output].mux_val));
status_ok_or_return(
bts_output_get_current(&g_output_config[output], &(g_output_config[output].reading_out)));
Expand Down
6 changes: 3 additions & 3 deletions projects/power_distribution/src/outputs.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ StatusCode pd_set_output_group(OutputGroup group, OutputState state) {
}

for (uint8_t out = 0; out < grp->num_outputs; out++) {
Output output = grp->outputs[out];
uint8_t output = grp->outputs[out];
if (state == OUTPUT_STATE_ON) {
status_ok_or_return(bts_output_enable_output(&g_output_config[output]));
} else {
Expand All @@ -57,7 +57,7 @@ StatusCode pd_set_active_output_group(OutputGroup group) {
if (grp == NULL) {
return STATUS_CODE_UNINITIALIZED;
}
for (Output output = 0; output < NUM_OUTPUTS; output++) {
for (OutputPowerFsm output = 0; output < NUM_POWER_FSM_OUTPUTS; output++) {
bool found = false;
for (OutputGroup i = 0; i < grp->num_outputs; i++) {
if (grp->outputs[i] == output) {
Expand All @@ -67,7 +67,7 @@ StatusCode pd_set_active_output_group(OutputGroup group) {
}
}
if (!found) {
status_ok_or_return(bts_output_enable_output(&g_output_config[output]));
status_ok_or_return(bts_output_disable_output(&g_output_config[output]));
}
}
return STATUS_CODE_OK;
Expand Down
41 changes: 18 additions & 23 deletions projects/power_distribution/src/pd_fault.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,38 +23,33 @@ static void prv_set_fault_bit(uint8_t mask, bool condition) {
}
}

static StatusCode prv_check_aux_fault(void) {
static bool prv_check_aux_fault(void) {
GpioState aux_gpio_1_state;
GpioState aux_gpio_2_state;
status_ok_or_return(gpio_get_state(&aux_fault_gpio_1, &aux_gpio_1_state));
status_ok_or_return(gpio_get_state(&aux_fault_gpio_2, &aux_gpio_2_state));

bool aux_fault = (aux_gpio_1_state == GPIO_STATE_LOW || aux_gpio_2_state == GPIO_STATE_LOW);
prv_set_fault_bit(EE_PD_STATUS_FAULT_BITSET_AUX_FAULT_MASK, aux_fault);

return STATUS_CODE_OK;
if (!status_ok(gpio_get_state(&aux_fault_gpio_1, &aux_gpio_1_state)) ||
!status_ok(gpio_get_state(&aux_fault_gpio_2, &aux_gpio_2_state))) {
return true;
}
return (aux_gpio_1_state == GPIO_STATE_LOW || aux_gpio_2_state == GPIO_STATE_LOW);
}

static StatusCode prv_check_dcdc_fault(void) {
static bool prv_check_dcdc_fault(void) {
GpioState dcdc_gpio_1_state;
GpioState dcdc_gpio_2_state;
GpioState dcdc_gpio_3_state;
status_ok_or_return(gpio_get_state(&dcdc_fault_gpio_1, &dcdc_gpio_1_state));
status_ok_or_return(gpio_get_state(&dcdc_fault_gpio_2, &dcdc_gpio_2_state));
status_ok_or_return(gpio_get_state(&dcdc_fault_gpio_3, &dcdc_gpio_3_state));

bool dcdc_fault = (dcdc_gpio_1_state == GPIO_STATE_LOW || dcdc_gpio_2_state == GPIO_STATE_LOW ||
dcdc_gpio_3_state == GPIO_STATE_HIGH);
prv_set_fault_bit(EE_PD_STATUS_FAULT_BITSET_DCDC_FAULT_MASK, dcdc_fault);
if (!status_ok(gpio_get_state(&dcdc_fault_gpio_1, &dcdc_gpio_1_state)) ||
!status_ok(gpio_get_state(&dcdc_fault_gpio_2, &dcdc_gpio_2_state)) ||
!status_ok(gpio_get_state(&dcdc_fault_gpio_3, &dcdc_gpio_3_state))) {
return true;
}

return STATUS_CODE_OK;
return (dcdc_gpio_1_state == GPIO_STATE_LOW || dcdc_gpio_2_state == GPIO_STATE_LOW ||
dcdc_gpio_3_state == GPIO_STATE_HIGH);
}

StatusCode check_pd_fault() {
status_ok_or_return(prv_check_aux_fault());
status_ok_or_return(prv_check_dcdc_fault());

uint8_t check_pd_fault(void) {
prv_set_fault_bit(EE_PD_STATUS_FAULT_BITSET_AUX_FAULT_MASK, prv_check_aux_fault());
prv_set_fault_bit(EE_PD_STATUS_FAULT_BITSET_DCDC_FAULT_MASK, prv_check_dcdc_fault());
set_pd_status_fault_bitset(s_fault_bitset);

return STATUS_CODE_OK;
return s_fault_bitset;
}
Loading

0 comments on commit 1a3d773

Please sign in to comment.