![]() |
Midnight Sun Firmware
|
steering Firmware More...
Classes | |
| struct | ButtonCallbacks |
| Button Callbacks. More... | |
| struct | ButtonConfig |
| Button configuration structure. More... | |
| struct | Button |
| Button instance structure. More... | |
| struct | LEDPixels |
| struct | ButtonLEDManager |
| struct | ButtonManager |
| Button Manager structure. More... | |
| struct | Note |
| struct | SteeringConfig |
| Steering configuration data. More... | |
| struct | SteeringStorage |
| Steering storage. More... | |
Macros | |
| #define | BUTTON_LED_MANAGER_BITS_PER_LED (24U) |
| #define | BUTTON_LED_MANAGER_DMA_BUF_LEN (512U) |
| #define | BUTTON_LED_MANAGER_COLOR_RED { 255, 0, 0 } |
| #define | BUTTON_LED_MANAGER_COLOR_GREEN { 0, 255, 0 } |
| #define | BUTTON_LED_MANAGER_COLOR_BLUE { 0, 0, 255 } |
| #define | BUTTON_LED_MANAGER_COLOR_YELLOW { 255, 200, 0 } |
| #define | BUTTON_LED_MANAGER_COLOR_ORANGE { 255, 100, 0 } |
| #define | BUTTON_LED_MANAGER_COLOR_PURPLE { 160, 0, 255 } |
| #define | BUTTON_LED_MANAGER_COLOR_CYAN { 0, 255, 255 } |
| #define | BUTTON_LED_MANAGER_COLOR_WHITE { 255, 255, 255 } |
| #define | BUTTON_LED_MANAGER_COLOR_PINK { 255, 80, 150 } |
| #define | BUTTON_LED_MANAGER_COLOR_OFF { 0, 0, 0 } |
| #define | BUTTON_MANAGER_DEBUG 1 |
| #define | STEERING_BUTTON_DEBOUNCE_PERIOD_MS 5U |
| Steering button debounce period millisecond. | |
| #define | STEERING_CRUISE_MAX_SPEED_KMH 80U |
| Maximum cruise control spesed in kilometers per hour. | |
| #define | STEERING_CRUISE_MIN_SPEED_KMH 40U |
| Minimum cruise control speed in kilometers per hour. | |
| #define | STEERING_CAN_RX { .port = GPIO_PORT_B, .pin = 8 } |
| Steering CAN RX Port. | |
| #define | STEERING_CAN_TX { .port = GPIO_PORT_B, .pin = 9 } |
| Steering CAN TX Port. | |
| #define | STEERING_LEFT_TURN_BUTTON { .port = GPIO_PORT_B, .pin = 12 } |
| Steering left turn button. | |
| #define | STEERING_RIGHT_TURN_BUTTON { .port = GPIO_PORT_A, .pin = 6 } |
| Steering right turn button. | |
| #define | STEERING_HAZARDS_BUTTON { .port = GPIO_PORT_C, .pin = 5 } |
| Steering hazards button. | |
| #define | STEERING_NEUTRAL_BUTTON { .port = GPIO_PORT_B, .pin = 2 } |
| Steering neutral button. | |
| #define | STEERING_DRIVE_BUTTON { .port = GPIO_PORT_B, .pin = 1 } |
| Steering drive button. | |
| #define | STEERING_REVERSE_BUTTON { .port = GPIO_PORT_E, .pin = 7 } |
| Steering reverse button. | |
| #define | STEERING_HORN_BUTTON { .port = GPIO_PORT_A, .pin = 7 } |
| Steering horn button. | |
| #define | STEERING_REGEN_BUTTON { .port = GPIO_PORT_E, .pin = 8 } |
| Steering horn button. | |
| #define | STEERING_CC_UP_BUTTON { .port = GPIO_PORT_B, .pin = 13 } |
| Steering cruise control up button. | |
| #define | STEERING_CC_DOWN_BUTTON { .port = GPIO_PORT_B, .pin = 14 } |
| Steering cruise control down button. | |
| #define | STEERING_LEFT_TURN_LED { .port = GPIO_PORT_B, .pin = 6 } |
| Left turn LED. | |
| #define | STEERING_RIGHT_TURN_LED { .port = GPIO_PORT_B, .pin = 7 } |
| Right turn LED. | |
| #define | STEERING_DISPLAY_CTRL { .port = GPIO_PORT_A, .pin = 0 } |
| Display control (Push-pull to control display state) | |
| #define | STEERING_DISPLAY_CURRENT_CTRL { .port = GPIO_PORT_A, .pin = 1 } |
| Display current control (PWM to control % of current) | |
| #define | STEERING_RGB_LIGHTS_PWM_PIN { .port = GPIO_PORT_A, .pin = 2 } |
| PWM pin for RGB LED control. | |
| #define | STEERING_BUZZER_PWM_PIN { .port = GPIO_PORT_D, .pin = 12 } |
| PWM pin for the buzzer. | |
Typedefs | |
| typedef struct Button | Button |
| Button instance structure. | |
| typedef struct ButtonLEDManager | ButtonLEDManager |
| typedef struct ButtonManager | ButtonManager |
| Button Manager structure. | |
Enumerations | |
| enum | ButtonState { BUTTON_IDLE , BUTTON_PRESSED } |
| Button states representing current input. More... | |
| enum | NoteFrequency { NOTE_REST = 0 , NOTE_C3 = 131 , NOTE_CS3 = 139 , NOTE_D3 = 147 , NOTE_DS3 = 156 , NOTE_E3 = 165 , NOTE_F3 = 175 , NOTE_FS3 = 185 , NOTE_G3 = 196 , NOTE_GS3 = 208 , NOTE_A3 = 220 , NOTE_AS3 = 233 , NOTE_B3 = 247 , NOTE_C4 = 262 , NOTE_CS4 = 277 , NOTE_D4 = 294 , NOTE_DS4 = 311 , NOTE_E4 = 330 , NOTE_F4 = 349 , NOTE_FS4 = 370 , NOTE_G4 = 392 , NOTE_GS4 = 415 , NOTE_A4 = 440 , NOTE_AS4 = 466 , NOTE_B4 = 494 , NOTE_C5 = 523 , NOTE_CS5 = 554 , NOTE_D5 = 587 , NOTE_DS5 = 622 , NOTE_E5 = 659 , NOTE_F5 = 698 , NOTE_FS5 = 740 , NOTE_G5 = 784 , NOTE_GS5 = 831 , NOTE_A5 = 880 , NOTE_AS5 = 932 , NOTE_B5 = 988 , NOTE_C6 = 1047 , NOTE_CS6 = 1109 , NOTE_D6 = 1175 , NOTE_DS6 = 1245 , NOTE_E6 = 1319 , NOTE_F6 = 1397 , NOTE_FS6 = 1480 , NOTE_G6 = 1568 , NOTE_GS6 = 1661 , NOTE_A6 = 1760 , NOTE_AS6 = 1865 , NOTE_B6 = 1976 , NOTE_C7 = 2093 , NOTE_CS7 = 2217 , NOTE_D7 = 2349 , NOTE_DS7 = 2489 , NOTE_E7 = 2637 , NOTE_F7 = 2794 , NOTE_FS7 = 2960 , NOTE_G7 = 3136 , NOTE_GS7 = 3322 , NOTE_A7 = 3520 , NOTE_AS7 = 3729 , NOTE_B7 = 3951 , NOTE_C8 = 4186 } |
| enum | DriveState { DRIVE_STATE_INVALID = 0 , DRIVE_STATE_NEUTRAL , DRIVE_STATE_DRIVE , DRIVE_STATE_REVERSE } |
| Drive states representing the current output. More... | |
| enum | DriveStateRequest { DRIVE_STATE_REQUEST_NONE = 0 , DRIVE_STATE_REQUEST_D , DRIVE_STATE_REQUEST_N , DRIVE_STATE_REQUEST_R } |
| Requests made to control the drive state. More... | |
| enum | LightsSignalState { LIGHTS_SIGNAL_STATE_OFF = 0 , LIGHTS_SIGNAL_STATE_LEFT , LIGHTS_SIGNAL_STATE_RIGHT , LIGHTS_SIGNAL_STATE_HAZARD } |
| Light signal states representing the current output. More... | |
| enum | LightsSignalRequest { LIGHTS_SIGNAL_REQUEST_OFF = 0 , LIGHTS_SIGNAL_REQUEST_LEFT , LIGHTS_SIGNAL_REQUEST_RIGHT , LIGHTS_SIGNAL_REQUEST_HAZARD } |
| Requests made to control the light signals. More... | |
| enum | SteeringButtons { STEERING_BUTTON_HAZARDS , STEERING_BUTTON_DRIVE , STEERING_BUTTON_NEUTRAL , STEERING_BUTTON_REVERSE , STEERING_BUTTON_REGEN , STEERING_BUTTON_LEFT_LIGHT , STEERING_BUTTON_RIGHT_LIGHT , STEERING_BUTTON_HORN , STEERING_BUTTON_CRUISE_CONTROL_UP , STEERING_BUTTON_CRUISE_CONTROL_DOWN , NUM_STEERING_BUTTONS } |
| Steering buttons. | |
Functions | |
| StatusCode | button_init (Button *button, ButtonConfig *config) |
| Initialize a button instance. More... | |
| StatusCode | button_update (Button *button) |
| Update the Button state based on the given GPIO state. More... | |
| StatusCode | button_led_manager_init (SteeringStorage *storage) |
| Initialize the button LED manager. More... | |
| StatusCode | button_led_manager_set_color (SteeringButtons button, LEDPixels color_code) |
| Update a button's LED color (marks for update but doesn't transmit immediately) More... | |
| StatusCode | button_led_manager_update (void) |
| Force immediate update of all LEDs (call after setting colors) More... | |
| bool | button_led_manager_is_busy (void) |
| Check if the LED manager is currently transmitting data. More... | |
| StatusCode | button_led_manager_clear_all (void) |
| Set all LEDs to off (black) More... | |
| StatusCode | button_manager_init (SteeringStorage *storage) |
| Initialize the button manager. More... | |
| StatusCode | button_manager_reset (void) |
| Reset the button manager state. More... | |
| StatusCode | button_manager_update (void) |
| Update the button manager. More... | |
| StatusCode | buzzer_init (void) |
| Initialize the buzzer. More... | |
| StatusCode | buzzer_beep (void) |
| Play a simple beep at 3.5kHz. More... | |
| StatusCode | buzzer_play_melody (Note *melody) |
| Play a custom melody. More... | |
| StatusCode | buzzer_play_startup (void) |
| Play predefined startup melody. More... | |
| StatusCode | buzzer_play_error (void) |
| Play predefined error melody. More... | |
| StatusCode | buzzer_play_success (void) |
| Play predefined success melody. More... | |
| StatusCode | buzzer_stop (void) |
| Stop any currently playing sound. More... | |
| bool | buzzer_is_playing (void) |
| Check if a melody is currently playing. More... | |
| StatusCode | display_init (SteeringStorage *storage) |
| Initialize the display. More... | |
| void | drive_state_manager_init (void) |
| Initialize the drive state manager. | |
| void | drive_state_manager_request (DriveStateRequest req) |
| Make a request to change the drive state. More... | |
| void | drive_state_manager_update (void) |
| Update the drive state based on the current request. | |
| DriveState | drive_state_manager_get_state (void) |
| Get the current state of the drive controller. More... | |
| void | lights_signal_manager_init (void) |
| Initialize state variables and timer. | |
| void | lights_signal_manager_request (LightsSignalRequest req) |
| Make a request to change the signal state. More... | |
| void | lights_signal_manager_update (void) |
| Update the signal state based on the current request. | |
| LightsSignalState | lights_signal_manager_get_state (void) |
| Get the current state of the signal lights. More... | |
| StatusCode | party_mode_init (SteeringStorage *storage) |
| Initialize party mode system. More... | |
| StatusCode | party_mode_run (void) |
| Run party mode. More... | |
| bool | party_mode_active (void) |
| Check if party mode is active. More... | |
| float | estimate_remaining_range_km (void) |
| Estimate remaining kilometres based on cell voltage. More... | |
| StatusCode | steering_init (SteeringStorage *storage, SteeringConfig *config) |
| Initialize the steering interface. More... | |
steering Firmware
Csteering Firmware.
| #define BUTTON_MANAGER_DEBUG 1 |
Set to 1 to enable debug prints
| enum ButtonState |
| enum DriveState |
| enum DriveStateRequest |
| enum LightsSignalRequest |
| enum LightsSignalState |
| StatusCode button_init | ( | Button * | button, |
| ButtonConfig * | config | ||
| ) |
Initialize a button instance.
| button | Pointer to the Button instance to initialize |
| config | Pointer to the ButtonConfig structure |
| StatusCode button_led_manager_clear_all | ( | void | ) |
Set all LEDs to off (black)
| StatusCode button_led_manager_init | ( | SteeringStorage * | storage | ) |
Initialize the button LED manager.
| storage | Pointer to the SteeringStorage instance |
| bool button_led_manager_is_busy | ( | void | ) |
Check if the LED manager is currently transmitting data.
| StatusCode button_led_manager_set_color | ( | SteeringButtons | button, |
| LEDPixels | color_code | ||
| ) |
Update a button's LED color (marks for update but doesn't transmit immediately)
| button | Button selector for modification |
| color_code | RGB color code for the button LED |
| StatusCode button_led_manager_update | ( | void | ) |
Force immediate update of all LEDs (call after setting colors)
| StatusCode button_manager_init | ( | SteeringStorage * | storage | ) |
Initialize the button manager.
| storage | Pointer to the SteeringStorage instance |
| StatusCode button_manager_reset | ( | void | ) |
Reset the button manager state.
| StatusCode button_manager_update | ( | void | ) |
Update the button manager.
| manager | Pointer to the ButtonManager instance |
| StatusCode button_update | ( | Button * | button | ) |
| StatusCode buzzer_beep | ( | void | ) |
Play a simple beep at 3.5kHz.
| StatusCode buzzer_init | ( | void | ) |
Initialize the buzzer.
| bool buzzer_is_playing | ( | void | ) |
Check if a melody is currently playing.
| StatusCode buzzer_play_error | ( | void | ) |
Play predefined error melody.
| StatusCode buzzer_play_melody | ( | Note * | melody | ) |
Play a custom melody.
| melody | Array of Note structures, terminated by {NOTE_REST, 0} |
| StatusCode buzzer_play_startup | ( | void | ) |
Play predefined startup melody.
| StatusCode buzzer_play_success | ( | void | ) |
Play predefined success melody.
| StatusCode buzzer_stop | ( | void | ) |
Stop any currently playing sound.
| StatusCode display_init | ( | SteeringStorage * | storage | ) |
Initialize the display.
| storage | Pointer to the SteeringStorage instance |
| DriveState drive_state_manager_get_state | ( | void | ) |
Get the current state of the drive controller.
| void drive_state_manager_request | ( | DriveStateRequest | req | ) |
Make a request to change the drive state.
| req | The requested drive state |
| float estimate_remaining_range_km | ( | void | ) |
Estimate remaining kilometres based on cell voltage.
| min_cell_voltage | Minimum cell voltage from the battery telemetry |
| LightsSignalState lights_signal_manager_get_state | ( | void | ) |
Get the current state of the signal lights.
| void lights_signal_manager_request | ( | LightsSignalRequest | req | ) |
Make a request to change the signal state.
| req | The requested light signal state |
| bool party_mode_active | ( | void | ) |
Check if party mode is active.
| StatusCode party_mode_init | ( | SteeringStorage * | storage | ) |
Initialize party mode system.
| storage | Pointer to the steering storage |
| StatusCode party_mode_run | ( | void | ) |
Run party mode.
| StatusCode steering_init | ( | SteeringStorage * | storage, |
| SteeringConfig * | config | ||
| ) |
Initialize the steering interface.
| storage | Pointer to the steering storage |
| config | Pointer to the steering config |