SocketCanPump::SocketCanPump(double nominal_frequency, double bitrate, size_t channels, size_t nominal_pump_size, bool virtual_can) : CanPump(nominal_frequency, bitrate, channels, nominal_pump_size) { initialize_devices(virtual_can); }
static void PLATFORM_main_task(void* pvParameters) { subsystem_t *ss = pvParameters; g_previous_mode = SM_OFF; g_mode = g_next_mode = SM_BOOTING; retval_t rv; initialize_nvram(); increment_reboot_counter(); saved_last_boot_reason = nvram.platform.last_boot_reason; PLATFORM_save_boot_reason("Unexpected reboot"); rv = board_init_scheduler_running(); FUTURE_HOOK_1(PM_board_init_failure, &rv); if (rv != RV_SUCCESS) { /* XXX save in subsystem status, report in beacons */ } display_boot_banner(); initialize_devices(); PLATFORM_ss_is_ready(ss); PLATFORM_ss_expect_heartbeats(ss, HEARTBEAT_MAIN_TASK); start_ss_tasks(); if (!wait_all_ss_ready(PM_SS_BOOT_TIMEOUT_MS / portTICK_RATE_MS)) { report_ss_states_and_hang(true); } while (1) { PLATFORM_ss_is_alive(ss, HEARTBEAT_MAIN_TASK); if (g_mode != g_next_mode) { FUTURE_HOOK_3(platform_mode_change, ss, &g_mode, &g_next_mode); mode_change_synchronous(g_next_mode, PM_SS_MODE_CHANGE_TIMEOUT_MS); PLATFORM_ss_is_ready(ss); } switch (PLATFORM_current_satellite_mode()) { case SM_BOOTING: PLATFORM_request_mode_change(SM_INITIALIZING); break; case SM_INITIALIZING: if (are_all_vital_ready()) { PLATFORM_request_mode_change(SM_SURVIVAL); } else { /* Do nothing. Ground Control will decide what to do */ } default: break; } check_and_update_heartbeat_watchdog(); vTaskDelay(PM_MODE_CHANGE_DETECT_TIME_SLOT_MS / portTICK_RATE_MS); } }
bool initialize_system(void) { if (!initialize_ports() || !initialize_devices() || !initialize_interrupts() || !initialize_timers() || !initialize_menu_tree()) return (false); return (true); }
int main() { initialize_devices(); while (true) do_background_task(); }