Esempio n. 1
0
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);
            }

        }
}
Esempio n. 2
0
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);
        }
    }
}