Exemplo n.º 1
0
tc_tm_pkt * get_pkt(const uint16_t size) {

    if(size <= PKT_NORMAL) {
        for(uint8_t i = 0; i < POOL_PKT_SIZE; i++) {
            if(pkt_pool.free[i] == true) {
                traceGET_PKT(i);
                pkt_pool.free[i] = false;
                pkt_pool.time[i] = HAL_sys_GetTick();
                pkt_pool.pkt[i].verification_state = SATR_PKT_INIT;
                return &pkt_pool.pkt[i];
            }
        }
    } else {
        for(uint8_t i = 0; i < POOL_PKT_EXT_SIZE; i++) {
            if(pkt_pool.free_ext[i] == true) {
                traceGET_PKT(i + POOL_PKT_SIZE);
                pkt_pool.free_ext[i] = false;
                pkt_pool.time_ext[i] = HAL_sys_GetTick();
                pkt_pool.pkt_ext[i].verification_state = SATR_PKT_INIT;
                return &pkt_pool.pkt_ext[i];
            }
        }
    }
    return NULL;
}
/**
 * Communicate with OBC or other subsystems
 * @return always ERROR_OK that means no error occurs
 */
adcs_error_status update_obc_communication() {
    uint32_t time_sys_tick = 0;

    time_sys_tick = HAL_sys_GetTick();
//    uart_killer(OBC_APP_ID, &adcs_data.obc_uart, time_sys_tick);
    pkt_pool_IDLE(time_sys_tick);
    queue_IDLE(OBC_APP_ID);
    import_pkt(OBC_APP_ID, &adcs_data.obc_uart);
    export_pkt(OBC_APP_ID, &adcs_data.obc_uart);

    return error_propagation(ERROR_OK);
}
Exemplo n.º 3
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;
}