/**
 * 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);

}
示例#2
0
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;
}