void vTask10HZ(void *pvParameters) { for(;;) { vTaskDelay( 100 / portTICK_RATE_MS ); // calculate osd_curr_consumed_mah(simulation) osd_curr_consumed_mah += (osd_curr_A * 0.00027777778f); // calculate osd_total_trip_dist(simulation) if (osd_groundspeed > 1.0f) osd_total_trip_dist += (osd_groundspeed * 0.1f); // jmmods > for calculation of trip , Groundspeed is better than airspeed //trigger video switch if(eeprom_buffer.params.PWM_Video_en) { triggerVideo(); } //trigger panel switch if(eeprom_buffer.params.PWM_Panel_en) { triggerPanel(); } //if no mavlink update for 2 secs, show waring and request mavlink rate again if(GetSystimeMS() > (lastMAVBeat + 2200)) { heatbeat_start_time = 0; waitingMAVBeats = 1; } if(enable_mav_request == 1) { for(int n = 0; n < 3; n++){ request_mavlink_rates();//Three times to certify it will be readed vTaskDelay(50/portTICK_RATE_MS); } enable_mav_request = 0; waitingMAVBeats = 0; lastMAVBeat = GetSystimeMS(); } if(enable_mission_count_request == 1) { request_mission_count(); enable_mission_count_request = 0; } if(enable_mission_item_request == 1) { request_mission_item(current_mission_item_req_index); } } }
void update_mission_counts() { bool should_request_mission_count = false; bool should_request_mission_item = false; uint16_t TEMP_current_mission_item_request_index = -1; // These updates happen as early as Mavlink since the Mavlink task // looks at these values to determine when to query / re-query for Mission waypoints. // Lock access to Mavlink OSDState via mutex if (xSemaphoreTake(osd_state_mavlink_mutex, portMAX_DELAY) == pdTRUE ) { if (mavlink_osd_state.enable_mission_count_request == 1) { should_request_mission_count = true; mavlink_osd_state.enable_mission_count_request = 0; } if (mavlink_osd_state.enable_mission_item_request == 1) { should_request_mission_item = true; TEMP_current_mission_item_request_index = mavlink_osd_state.current_mission_item_req_index; } // Release the Mavlink mutex ASAP xSemaphoreGive(osd_state_mavlink_mutex); // These are Mavlink calls, and might be slow, so we take pains to do them // outside the possession of the mutex to prevent any potential pend. if (should_request_mission_count == true) { request_mission_count(); } if (should_request_mission_item == true){ request_mission_item(TEMP_current_mission_item_request_index); } } }