/** * Calculate ADCS boot counter and save in flash. The boot counter is available * in global variable adcs_boot_counter. * @return The status of Flash memory and if the boot counter is valid */ adcs_error_status increment_boot_counter() { adcs_boot_cnt = 0; uint8_t adcs_boot_cnt_8[4] = { 0 }; uint32_t flash_read_address = BOOT_CNT_BASE_ADDRESS; for (uint8_t i = 0; i < 4; i++) { if (flash_read_byte(&adcs_boot_cnt_8[i], flash_read_address) == FLASH_NORMAL) { flash_read_address = flash_read_address + BOOT_CNT_OFFSET_ADDRESS; } else { return ERROR_FLASH; } } cnv8_32(adcs_boot_cnt_8, &adcs_boot_cnt); adcs_boot_cnt++; if (flash_erase_block4K(BOOT_CNT_BASE_ADDRESS) == FLASH_ERROR) { return ERROR_FLASH; } cnv32_8(adcs_boot_cnt, &adcs_boot_cnt_8); if (flash_write_page(adcs_boot_cnt_8, sizeof(adcs_boot_cnt_8), BOOT_CNT_BASE_ADDRESS) == FLASH_ERROR) { return FLASH_ERROR; } return error_propagation(ERROR_OK); }
SAT_returnState hk_report_parameters(HK_struct_id sid, tc_tm_pkt *pkt) { // uint16_t v5_current_avg; // uint16_t v3_3_current_avg; // int16_t battery_voltage; // uint16_t battery_current_plus; // uint16_t battery_current_minus; // int16_t battery_temp; // int32_t cpu_temperature; // EPS_battery_tempsense_health batterypack_health_status; pkt->data[0] = (HK_struct_id)sid; if(sid == HEALTH_REP) { pkt->data[1] = (uint8_t)(eps_board_state.battery_voltage - ADC_VALUE_3V_BAT_VOLTAGE) ; pkt->data[2] = (int8_t)((int8_t)eps_board_state.battery_current_plus - (int8_t)eps_board_state.battery_current_minus); pkt->data[3] = (uint8_t)(eps_board_state.v3_3_current_avg ); pkt->data[4] = (uint8_t)(eps_board_state.v5_current_avg); pkt->data[5] = (uint8_t)(eps_board_state.battery_temp); pkt->data[6] = (uint8_t)(eps_board_state.cpu_temperature); pkt->len = 7; } else if(sid == EX_HEALTH_REP) { uint16_t size = 1; cnv32_8( HAL_sys_GetTick(), &pkt->data[1]); size += 4; /*batterypack health status*/ pkt->data[size] = (uint8_t)(eps_board_state.batterypack_health_status); size += 1; /* heater status*/ EPS_switch_control_status heaters_status = EPS_get_control_switch_status(BATTERY_HEATERS); pkt->data[size] = (uint8_t)heaters_status; size += 1; /*power module top*/ cnv16_8( power_module_top.voltage, &pkt->data[size]); size += 2; cnv16_8( power_module_top.current, &pkt->data[size]); size += 2; pkt->data[size] = (uint8_t)power_module_top.pwm_duty_cycle; size += 1; /*power module bottom*/ cnv16_8( power_module_bottom.voltage, &pkt->data[size]); size += 2; cnv16_8( power_module_bottom.current, &pkt->data[size]); size += 2; pkt->data[size] = (uint8_t)power_module_bottom.pwm_duty_cycle; size += 1; /*power module left*/ cnv16_8( power_module_left.voltage, &pkt->data[size]); size += 2; cnv16_8( power_module_left.current, &pkt->data[size]); size += 2; pkt->data[size] = (uint8_t)power_module_left.pwm_duty_cycle; size += 1; /*power module right*/ cnv16_8( power_module_right.voltage, &pkt->data[size]); size += 2; cnv16_8( power_module_right.current, &pkt->data[size]); size += 2; pkt->data[size] = (uint8_t)power_module_right.pwm_duty_cycle; size += 1; /* deployment status*/ EPS_deployment_status deployment_status = EPS_check_deployment_status(); pkt->data[size] = (uint8_t)deployment_status; size += 1; /* battery voltage safety */ pkt->data[size] = (uint8_t)(eps_board_state.EPS_safety_battery_mode ); size += 1; /* battery voltage safety */ pkt->data[size] = (uint8_t)(eps_board_state.EPS_safety_temperature_mode ); size += 1; /*edo vale fash*/ pkt->len = size; } return SATR_OK; }