void stateCalcSpeedEnu_f(void) { if (bit_is_set(state.speed_status, SPEED_ENU_F)) return; int errno = 0; if (state.ned_initialized_f) { if (bit_is_set(state.speed_status, SPEED_NED_F)) { VECT3_ENU_OF_NED(state.enu_speed_f, state.ned_speed_f); } else if (bit_is_set(state.speed_status, SPEED_ENU_I)) { ENU_FLOAT_OF_BFP(state.enu_speed_f, state.enu_speed_i); } else if (bit_is_set(state.speed_status, SPEED_NED_I)) { SPEEDS_FLOAT_OF_BFP(state.ned_speed_f, state.ned_speed_i); SetBit(state.pos_status, SPEED_NED_F); VECT3_ENU_OF_NED(state.enu_speed_f, state.ned_speed_f); } else if (bit_is_set(state.speed_status, SPEED_ECEF_F)) { enu_of_ecef_vect_f(&state.enu_speed_f, &state.ned_origin_f, &state.ecef_speed_f); } else if (bit_is_set(state.speed_status, SPEED_ECEF_I)) { /* transform ecef_I -> ecef_f -> enu_f , set status bits */ SPEEDS_FLOAT_OF_BFP(state.ecef_speed_f, state.ecef_speed_i); SetBit(state.speed_status, SPEED_ECEF_F); enu_of_ecef_vect_f(&state.enu_speed_f, &state.ned_origin_f, &state.ecef_speed_f); } else { /* could not get this representation, set errno */ errno = 1; } } else if (state.utm_initialized_f) { if (bit_is_set(state.speed_status, SPEED_NED_F)) { VECT3_ENU_OF_NED(state.enu_speed_f, state.ned_speed_f); } else if (bit_is_set(state.speed_status, SPEED_ENU_I)) { ENU_FLOAT_OF_BFP(state.enu_speed_f, state.enu_speed_i); } else if (bit_is_set(state.speed_status, SPEED_NED_I)) { SPEEDS_FLOAT_OF_BFP(state.ned_speed_f, state.ned_speed_i); SetBit(state.pos_status, SPEED_NED_F); VECT3_ENU_OF_NED(state.enu_speed_f, state.ned_speed_f); } else { /* could not get this representation, set errno */ errno = 2; } } else { /* ned coordinate system not initialized, set errno */ errno = 3; } if (errno) { //struct EnuCoor_f _enu_zero = {0}; //return _enu_zero; } /* set bit to indicate this representation is computed */ SetBit(state.speed_status, SPEED_ENU_F); }
void ned_of_ecef_vect_f(struct NedCoor_f* ned, struct LtpDef_f* def, struct EcefCoor_f* ecef) { struct EnuCoor_f enu; enu_of_ecef_vect_f(&enu, def, ecef); ENU_OF_TO_NED(*ned, enu); }