C_RESULT ardrone_tool_update_custom (void) { static int a=0; printf("%d\n",a); if ( ++a < 200 ) { ardrone_tool_set_ui_pad_start(1); } else { ardrone_tool_input_start_reset(); } return C_OK; }
void initControlData(void) { ctrldata.framecounter = 0; ctrldata.needAnimation = FALSE; vp_os_memset(ctrldata.needAnimationParam, 0, sizeof(ctrldata.needAnimationParam)); ctrldata.needVideoSwitch = -1; ctrldata.needLedAnimation = FALSE; vp_os_memset(ctrldata.needLedAnimationParam, 0, sizeof(ctrldata.needLedAnimationParam)); resetControlData(); ardrone_tool_input_start_reset(); navdata_write_to_file(FALSE); ctrldata.navdata_connected = FALSE; }
C_RESULT ardrone_academy_navdata_process( const navdata_unpacked_t* const pnd ) { static bool_t prevCameraIsReady = FALSE; static bool_t prevDroneUsbRecording = FALSE; if (C_OK == TRYLOCK_ND_MUTEX ()) { input_state_t* input_state = ardrone_tool_input_get_state(); bool_t recordIsReady = ! ardrone_academy_navdata_get_record_ready(); bool_t recordIsInProgress = ardrone_academy_navdata_get_record_state(); // Save ARDrone State navdata_state.lastState = pnd->ardrone_state; // Save remaining USB time navdata_state.usbFreeTime = pnd->navdata_hdvideo_stream.usbkey_remaining_time; bool_t currentDroneUsbRecording = (NAVDATA_HDVIDEO_USBKEY_IS_RECORDING == (NAVDATA_HDVIDEO_USBKEY_IS_RECORDING & pnd->navdata_hdvideo_stream.hdvideo_state)); // Check for record stop from drone if (navdata_state.usbRecordInProgress) { if (TRUE == prevDroneUsbRecording && FALSE == currentDroneUsbRecording) { navdata_state.droneStoppedUsbRecording = TRUE; navdata_state.record_state = RECORD_STATE_NEEDED; } } prevDroneUsbRecording = currentDroneUsbRecording; ardrone_academy_check_take_off_timeout (); // Take off and Emergency management if(navdata_state.takeoff_state == TAKEOFF_STATE_NEEDED) { if(pnd->ardrone_state & ARDRONE_EMERGENCY_MASK) { navdata_state.needSetEmergency = TRUE; } else { if(recordIsInProgress) { if(!(pnd->ardrone_state & ARDRONE_USER_FEEDBACK_START)) ardrone_tool_set_ui_pad_start(1); else ardrone_tool_set_ui_pad_start(0); navdata_state.takeoff_state = TAKEOFF_STATE_IDLE; } else { navdata_state.takeoff_state = TAKEOFF_STATE_WAIT_USERBOX; ardrone_academy_navdata_userbox_switch(); } } } if(navdata_state.needSetEmergency) { ardrone_tool_set_ui_pad_select(1); navdata_state.needSetEmergency = FALSE; } if(pnd->ardrone_state & ARDRONE_EMERGENCY_MASK) { if(!navdata_state.wasEmergency && (input_state->user_input & (1 << ARDRONE_UI_BIT_SELECT))) { ardrone_tool_set_ui_pad_select(0); } navdata_state.isEmergency = TRUE; navdata_state.isTakeOff = FALSE; if(!navdata_state.internalRecordInProgress && !navdata_state.usbRecordInProgress && (navdata_state.userbox_state == USERBOX_STATE_STARTED)) { PRINT("Emergency !! Stopping userbox...\n"); ardrone_academy_navdata_userbox_switch(); } ardrone_tool_input_start_reset(); } else // Not emergency landing { if(navdata_state.wasEmergency && (input_state->user_input & (1 << ARDRONE_UI_BIT_SELECT))) { ardrone_tool_set_ui_pad_select(0); } if(!(pnd->ardrone_state & ARDRONE_TIMER_ELAPSED)) navdata_state.isEmergency = FALSE; if(input_state->user_input & (1 << ARDRONE_UI_BIT_START)) { navdata_state.isTakeOff = (pnd->ardrone_state & ARDRONE_USER_FEEDBACK_START) ? TRUE : FALSE; } else { navdata_state.isTakeOff = FALSE; } } navdata_state.wasEmergency = (pnd->ardrone_state & ARDRONE_EMERGENCY_MASK) ? TRUE : FALSE; // Video record management bool_t usbRecordEnable = FALSE; if(navdata_state.record_state == RECORD_STATE_NEEDED && TAKEOFF_STATE_IDLE == navdata_state.takeoff_state) { bool_t continueRecord = TRUE; bool_t nextInternalRecordState = FALSE; if (IS_LEAST_ARDRONE2) { static codec_type_t oldCodec; codec_type_t cancelCodec; if (recordIsReady && ! navdata_state.usbRecordInProgress && !navdata_state.internalRecordInProgress) // We want to enable recording { if ((ARDRONE_USB_MASK == (pnd->ardrone_state & ARDRONE_USB_MASK)) && (0 < pnd->navdata_hdvideo_stream.usbkey_remaining_time) && (TRUE == ardrone_control_config.video_on_usb)) { usbRecordEnable = TRUE; } // Set the "non-record codec" to the codec defined as the application default oldCodec = ardrone_application_default_config.video_codec; cancelCodec = oldCodec; ardrone_control_config.video_codec = (TRUE == usbRecordEnable) ? usbRecordCodec : deviceWifiRecordCodec; PRINT ("Set codec %d -> %d\n", oldCodec, ardrone_control_config.video_codec); nextInternalRecordState = TRUE; } else // We want to disable recording { cancelCodec = ardrone_control_config.video_codec; ardrone_control_config.video_codec = oldCodec; PRINT ("Reset codec %d -> %d\n", cancelCodec, oldCodec); } bool_t addEventSucceeded = ARDRONE_TOOL_CONFIGURATION_ADDEVENT (video_codec, &ardrone_control_config.video_codec, NULL); if (FALSE == addEventSucceeded) { PRINT ("Unable to send codec switch ... retry later\n"); ardrone_control_config.video_codec = cancelCodec; continueRecord = FALSE; } } else if (IS_ARDRONE1) { nextInternalRecordState = !recordIsInProgress; } if (TRUE == continueRecord) { navdata_state.internalRecordInProgress = nextInternalRecordState; switch (navdata_state.userbox_state) { case USERBOX_STATE_STOPPED: navdata_state.record_state = RECORD_STATE_WAIT_USERBOX; navdata_state.usbRecordInProgress = usbRecordEnable; ardrone_academy_navdata_userbox_switch(); break; case USERBOX_STATE_STARTED: if(navdata_state.isTakeOff) { if(! recordIsReady) { PRINT("Userbox is started and record is started => Stop record\n"); ardrone_academy_navdata_recorder_enable(FALSE, navdata_state.userbox_time); navdata_state.usbRecordInProgress = FALSE; } else { PRINT("Userbox is started and record is stopped => Start record\n"); if (FALSE == usbRecordEnable) { // Only activate the local recorder if we don't record on USB ardrone_academy_navdata_recorder_enable(TRUE, navdata_state.userbox_time); navdata_state.usbRecordInProgress = FALSE; } else { navdata_state.usbRecordInProgress = TRUE; } } navdata_state.record_state = RECORD_STATE_IDLE; } else { navdata_state.record_state = RECORD_STATE_WAIT_USERBOX; ardrone_academy_navdata_userbox_switch(); } break; case USERBOX_STATE_STARTING: navdata_state.usbRecordInProgress = usbRecordEnable; navdata_state.record_state = RECORD_STATE_WAIT_USERBOX; break; case USERBOX_STATE_STOPPING: navdata_state.usbRecordInProgress = usbRecordEnable; // Should never be here PRINT ("Don't know what to do for USERBOX_STATE_STOPPING\n"); VP_OS_ASSERT (0 == 1); // Debug handler break; } } } // Screenshot management prevCameraIsReady = navdata_state.cameraIsReady; navdata_state.cameraIsReady = (pnd->ardrone_state & ARDRONE_CAMERA_MASK) ? TRUE : FALSE; if (TRUE == navdata_state.cameraIsReady && FALSE == prevCameraIsReady) { academy_download_resume (); } if((navdata_state.screenshot_state == SCREENSHOT_STATE_NEEDED) && navdata_state.cameraIsReady) { static char param[ARDRONE_DATE_MAXSIZE + 64]; static char date[ARDRONE_DATE_MAXSIZE]; time_t t = time(NULL); ardrone_time2date(t, ARDRONE_FILE_DATE_FORMAT, date); navdata_state.screenshot_state = SCREENSHOT_STATE_INPROGRESS; sprintf(param, "%d,%d,%d,%s", USERBOX_CMD_SCREENSHOT, 0, 0, date); ARDRONE_TOOL_CONFIGURATION_ADDEVENT(userbox_cmd, param, ardrone_academy_navdata_screenshot_cb); } // USB management navdata_state.usbIsReady = (pnd->ardrone_state & ARDRONE_USB_MASK) ? TRUE : FALSE; UNLOCK_ND_MUTEX (); } return C_OK; }