void trigger_ext_periodic( void ) { if (trig_ext_valid == TRUE) { uint8_t ac_id = 0; uint8_t turb_id = TURBINE_ID; uint32_t sync_itow, cycle_time; sync_itow = gps_tow_from_sys_ticks(trigger_t0); cycle_time = MSEC_OF_SYS_TIME_TICKS(delta_t0); DOWNLINK_SEND_WINDTURBINE_STATUS_(DefaultChannel, DefaultDevice, &ac_id, &turb_id, &sync_itow, &cycle_time ); trig_ext_valid = FALSE; } }
int parse_acinfo_dl() { uint8_t sender_id = SenderIdOfPprzMsg(dl_buffer); uint8_t msg_id = IdOfPprzMsg(dl_buffer); if (sender_id > 0) { switch (msg_id) { case DL_GPS_SMALL: { uint32_t multiplex_speed = DL_GPS_SMALL_multiplex_speed(dl_buffer); // decode compressed values int16_t course = (int16_t)((multiplex_speed >> 21) & 0x7FF); // bits 31-21 course in decideg if (course & 0x400) { course |= 0xF800; // fix for twos complements } course *= 2; // scale course by resolution int16_t gspeed = (int16_t)((multiplex_speed >> 10) & 0x7FF); // bits 20-10 ground speed cm/s if (gspeed & 0x400) { gspeed |= 0xF800; // fix for twos complements } int16_t climb = (int16_t)(multiplex_speed & 0x3FF); // bits 9-0 z climb speed in cm/s if (climb & 0x200) { climb |= 0xFC00; // fix for twos complements } set_ac_info_lla(sender_id, DL_GPS_SMALL_lla_lat(dl_buffer), DL_GPS_SMALL_lla_lon(dl_buffer), (int32_t)DL_GPS_SMALL_alt(dl_buffer) * 10, course, gspeed, climb, gps_tow_from_sys_ticks(sys_time.nb_tick)); } break; case DL_GPS: { set_ac_info(sender_id, DL_GPS_utm_east(dl_buffer), DL_GPS_utm_north(dl_buffer), DL_GPS_alt(dl_buffer), DL_GPS_utm_zone(dl_buffer), DL_GPS_course(dl_buffer), DL_GPS_speed(dl_buffer), DL_GPS_climb(dl_buffer), DL_GPS_itow(dl_buffer)); } break; case DL_GPS_LLA: { set_ac_info_lla(sender_id, DL_GPS_LLA_lat(dl_buffer), DL_GPS_LLA_lon(dl_buffer), DL_GPS_LLA_alt(dl_buffer), DL_GPS_LLA_course(dl_buffer), DL_GPS_LLA_speed(dl_buffer), DL_GPS_LLA_climb(dl_buffer), DL_GPS_LLA_itow(dl_buffer)); } break; default: return 0; } } else { switch (msg_id) {