void ecef_of_lla_i(struct EcefCoor_i *out, struct LlaCoor_i *in) { #if USE_SINGLE_PRECISION_LLA_ECEF /* convert our input to floating point */ struct LlaCoor_f in_f; in_f.lon = RAD_OF_EM7DEG((float)in->lon); in_f.lat = RAD_OF_EM7DEG((float)in->lat); in_f.alt = M_OF_MM((float)in->alt); /* calls the floating point transformation */ struct EcefCoor_f out_f; ecef_of_lla_f(&out_f, &in_f); /* convert the output to fixed point */ out->x = (int32_t)CM_OF_M(out_f.x); out->y = (int32_t)CM_OF_M(out_f.y); out->z = (int32_t)CM_OF_M(out_f.z); #else // use double precision by default /* convert our input to floating point */ struct LlaCoor_d in_d; in_d.lon = RAD_OF_EM7DEG((double)in->lon); in_d.lat = RAD_OF_EM7DEG((double)in->lat); in_d.alt = M_OF_MM((double)in->alt); /* calls the floating point transformation */ struct EcefCoor_d out_d; ecef_of_lla_d(&out_d, &in_d); /* convert the output to fixed point */ out->x = (int32_t)CM_OF_M(out_d.x); out->y = (int32_t)CM_OF_M(out_d.y); out->z = (int32_t)CM_OF_M(out_d.z); #endif }
void ecef_of_lla_i(struct EcefCoor_i* out, struct LlaCoor_i* in) { /* convert our input to floating point */ struct LlaCoor_d in_d; in_d.lon = RAD_OF_EM7RAD((double)in->lon); in_d.lat = RAD_OF_EM7RAD((double)in->lat); in_d.alt = M_OF_MM((double)in->alt); /* calls the floating point transformation */ struct EcefCoor_d out_d; ecef_of_lla_d(&out_d, &in_d); /* convert the output to fixed point */ out->x = (int32_t)CM_OF_M(out_d.x); out->y = (int32_t)CM_OF_M(out_d.y); out->z = (int32_t)CM_OF_M(out_d.z); }