Exemple #1
0
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);
}
Exemple #2
0
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);
}