1c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdlib.h> 2c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <unistd.h> 3c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <sys/types.h> 4c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <sys/stat.h> 5c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <fcntl.h> 6c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <time.h> 7c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <semaphore.h> 8c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <pthread.h> 9c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 10c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <camera/Camera.h> 11c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <camera/ICamera.h> 12c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <media/mediarecorder.h> 13c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 14c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <binder/IPCThreadState.h> 15c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <binder/ProcessState.h> 16c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <binder/IServiceManager.h> 17c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <cutils/properties.h> 18c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <camera/CameraParameters.h> 19c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <sys/wait.h> 21c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 22c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "camera_test.h" 23c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 24c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevusing namespace android; 25c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 26c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern bool stopScript; 27c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern bool hardwareActive; 28c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern sp<Camera> camera; 29c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern CameraParameters params; 30c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern bool recordingMode; 31c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int camera_index; 32c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int rotation; 33c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern const preview_size previewSize []; 34c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern const Vcapture_size VcaptureSize []; 35c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern const capture_Size captureSize[]; 36c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern const outformat outputFormat[]; 37c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern const video_Codecs videoCodecs[]; 38c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern const audio_Codecs audioCodecs[]; 39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern const V_bitRate VbitRate[]; 40c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern const fps_ranges fpsRanges[]; 41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern const fpsConst_Ranges fpsConstRanges[]; 42c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern const fpsConst_RangesSec fpsConstRangesSec[]; 43c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern const Zoom zoom []; 44c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int previewSizeIDX; 45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern bool reSizePreview; 46c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern bool previewRunning; 47c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int captureSizeIDX; 48c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern float compensation; 49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int videoCodecIDX; 50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int outputFormatIDX; 51c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int audioCodecIDX; 52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int VcaptureSizeIDX; 53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int VbitRateIDX; 54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int thumbSizeIDX; 55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int thumbQuality; 56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int jpegQuality; 57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int dump_preview; 58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int ippIDX_old; 59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern const char *capture[]; 60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int capture_mode; 61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int ippIDX; 62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern const char *ipp_mode[]; 63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int tempBracketRange; 64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int iso_mode; 65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int sharpness; 66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int contrast; 67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int zoomIDX; 68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int brightness; 69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int saturation; 70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int fpsRangeIdx; 71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern timeval autofocus_start, picture_start; 72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern const char *cameras[]; 73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern double latitude; 74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern double degree_by_step; 75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern double longitude; 76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern double altitude; 77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern char dir_path[80]; 78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int AutoConvergenceModeIDX; 79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern const char *autoconvergencemode[]; 80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern const char *manualconvergencevalues[]; 81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern const int ManualConvergenceDefaultValueIDX; 82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern size_t length_cam; 83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern char script_name[]; 84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int restartCount; 85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern bool bLogSysLinkTrace; 86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern int bufferStarvationTest; 87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern size_t length_previewSize; 88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern size_t lenght_Vcapture_size; 89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern size_t length_outformat; 90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern size_t length_capture_Size; 91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern size_t length_video_Codecs; 92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern size_t length_audio_Codecs; 93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern size_t length_V_bitRate; 94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern size_t length_Zoom; 95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern size_t length_fps_ranges; 96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern size_t length_fpsConst_Ranges; 97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern size_t length_fpsConst_RangesSec; 98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 9958134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvalastatic const String16 processName("camera_test"); 100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint execute_functional_script(char *script) { 102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char *cmd, *ctx, *cycle_cmd, *temp_cmd; 103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char id; 104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev unsigned int i; 105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int dly; 106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int cycleCounter = 1; 107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int tLen = 0; 108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev unsigned int iteration = 0; 109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int frameR = 20; 111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int frameRateIndex = 0; 112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dump_mem_status(); 116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cmd = strtok_r((char *) script, DELIMITER, &ctx); 118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev while ( NULL != cmd && (stopScript == false)) { 120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev id = cmd[0]; 121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Full Command: %s \n", cmd); 122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Command: %c \n", cmd[0]); 123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch (id) { 125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Case for Suspend-Resume Feature 127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '!': { 128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // STEP 1: Mount Debugfs 129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system("mkdir /debug"); 130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system("mount -t debugfs debugfs /debug"); 131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // STEP 2: Set up wake up Timer - wake up happens after 5 seconds 133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system("echo 10 > /debug/pm_debug/wakeup_timer_seconds"); 134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // STEP 3: Make system ready for Suspend 136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system("echo camerahal_test > /sys/power/wake_unlock"); 137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Release wake lock held by test app 138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" Wake lock released "); 139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system("cat /sys/power/wake_lock"); 140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system("sendevent /dev/input/event0 1 60 1"); 141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system("sendevent /dev/input/event0 1 60 0"); 142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Simulate F2 key press to make display OFF 143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" F2 event simulation complete "); 144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //STEP 4: Wait for system Resume and then simuate F1 key 146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sleep(50);//50s // This delay is not related to suspend resume timer 147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" After 30 seconds of sleep"); 148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system("sendevent /dev/input/event0 1 59 0"); 149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system("sendevent /dev/input/event0 1 59 1"); 150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Simulate F1 key press to make display ON 151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system("echo camerahal_test > /sys/power/wake_lock"); 152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Acquire wake lock for test app 153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '[': 158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("starting camera preview.."); 164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = camera->startPreview(); 165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(ret !=NO_ERROR) 166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("startPreview failed %d..", ret); 168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '+': { 172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cycleCounter = atoi(cmd + 1); 173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cycle_cmd = get_cycle_cmd(ctx); 174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tLen = strlen(cycle_cmd); 175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev temp_cmd = new char[tLen+1]; 176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for (int ind = 0; ind < cycleCounter; ind++) { 178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev strcpy(temp_cmd, cycle_cmd); 179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( execute_functional_script(temp_cmd) != 0 ) 180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev temp_cmd[0] = '\0'; 182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //patch for image capture 184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //[ 185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (ind < cycleCounter - 1) { 186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (hardwareActive == false) { 187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( openCamera() < 0 ) { 188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Camera initialization failed\n"); 189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev initDefaults(); 194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //] 198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ctx += tLen + 1; 201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (temp_cmd) { 203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev delete temp_cmd; 204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev temp_cmd = NULL; 205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (cycle_cmd) { 208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev delete cycle_cmd; 209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cycle_cmd = NULL; 210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '0': 216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev initDefaults(); 218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '1': 222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( startPreview() < 0 ) { 224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while starting preview\n"); 225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '2': 232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopPreview(); 233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recordingMode ) { 235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->disconnect(); 237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera.clear(); 238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopRecording(); 239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev closeRecorder(); 240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 24158134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala camera = Camera::connect(camera_index, 24258134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala processName, 24358134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala Camera::USE_CALLING_UID); 244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == camera.get() ) { 245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sleep(1); 24658134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala camera = Camera::connect(camera_index, 24758134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala processName, 24858134d029dce1f2e0d15b0717491697ed693d150Eino-Ville Talvala Camera::USE_CALLING_UID); 249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == camera.get() ) { 251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setListener(new CameraHandler()); 255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev recordingMode = false; 258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '3': 263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev rotation = atoi(cmd + 1); 264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_ROTATION, rotation); 265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '4': 272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Setting resolution..."); 274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int width, height; 275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for(i = 0; i < length_previewSize ; i++) 276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( strcmp((cmd + 1), previewSize[i].desc) == 0) 278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev width = previewSize[i].width; 280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev height = previewSize[i].height; 281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev previewSizeIDX = i; 282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (i == length_previewSize ) //if the resolution is not in the supported ones 287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char *res = NULL; 289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev res = strtok(cmd + 1, "x"); 290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev width = atoi(res); 291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev res = strtok(NULL, "x"); 292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev height = atoi(res); 293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 295934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman if ( NULL != params.get(KEY_STEREO_CAMERA) ) { 296934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman if ( strcmp(params.get(KEY_STEREO_CAMERA), "true") == 0 ) { 297934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman height *=2; 298934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman } 299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 300934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman 301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Resolution: %d x %d\n", width, height); 302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPreviewSize(width, height); 303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev reSizePreview = true; 304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive && previewRunning ) { 306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->stopPreview(); 307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->startPreview(); 309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else if ( hardwareActive ) { 310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '5': 316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for (i = 0; i < length_capture_Size; i++) { 318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( strcmp((cmd + 1), captureSize[i].name) == 0) 319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( i < length_capture_Size ) { 323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPictureSize(captureSize[i].width, captureSize[i].height); 324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev captureSizeIDX = i; 325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '6': 333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( !recordingMode ) { 335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev recordingMode = true; 337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( startPreview() < 0 ) { 339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while starting preview\n"); 340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( openRecorder() < 0 ) { 345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while openning video recorder\n"); 346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( configureRecorder() < 0 ) { 351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while configuring video recorder\n"); 352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( startRecording() < 0 ) { 357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while starting video recording\n"); 358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '7': 367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev compensation = atof(cmd + 1); 368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_COMPENSATION, (int) (compensation * 10)); 369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '8': 376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_WHITE_BALANCE, (cmd + 1)); 377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '9': 384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for(i = 0; i < length_video_Codecs; i++) 385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( strcmp((cmd + 1), videoCodecs[i].desc) == 0) 387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev videoCodecIDX = i; 389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Video Codec Selected: %s\n", 390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev videoCodecs[i].desc); 391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'v': 397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for(i = 0; i < length_outformat; i++) 398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( strcmp((cmd + 1), outputFormat[i].desc) == 0) 401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev outputFormatIDX = i; 403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Video Codec Selected: %s\n", 404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev videoCodecs[i].desc); 405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '~': 411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPreviewFormat(cmd + 1); 412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '$': 418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPictureFormat(cmd + 1); 419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '-': 424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for(i = 0; i < length_audio_Codecs; i++) 425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( strcmp((cmd + 1), audioCodecs[i].desc) == 0) 427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev audioCodecIDX = i; 429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Selected Audio: %s\n", audioCodecs[i].desc); 430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'A': 436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_index=atoi(cmd+1); 437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // camera_index %= ARRAY_SIZE(cameras); 438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera_index %= length_cam; 439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( camera_index == 2) 440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_STEREO_CAMERA, "true"); 441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_STEREO_CAMERA, "false"); 443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("%s selected.\n", cameras[camera_index]); 445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) { 447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopPreview(); 448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev closeCamera(); 449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev openCamera(); 450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev closeCamera(); 452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev openCamera(); 453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (camera_index == 0) params.setPreviewFrameRate(30); 456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else params.setPreviewFrameRate(27); 457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'a': 462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char * temp_str; 463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev temp_str = strtok(cmd+1,"!"); 465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Latitude %s \n",temp_str); 466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_GPS_LATITUDE, temp_str); 467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev temp_str=strtok(NULL,"!"); 468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Longitude %s \n",temp_str); 469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_GPS_LONGITUDE, temp_str); 470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev temp_str=strtok(NULL,"!"); 471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Altitude %s \n",temp_str); 472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_GPS_ALTITUDE, temp_str); 473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'l': 479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'L': 480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for(i = 0; i < lenght_Vcapture_size; i++) 481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( strcmp((cmd + 1), VcaptureSize[i].desc) == 0) 483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev VcaptureSizeIDX = i; 485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Video Capture Size: %s\n", VcaptureSize[i].desc); 486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case ']': 491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for(i = 0; i < length_V_bitRate; i++) 492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( strcmp((cmd + 1), VbitRate[i].desc) == 0) 494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev VbitRateIDX = i; 496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Video Bit Rate: %s\n", VbitRate[i].desc); 497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case ':': 502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int width, height; 503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for(i = 0; i < length_previewSize ; i++) 504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( strcmp((cmd + 1), previewSize[i].desc) == 0) 506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev width = previewSize[i].width; 508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev height = previewSize[i].height; 509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev thumbSizeIDX = i; 510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (i == length_previewSize ) //if the resolution is not in the supported ones 515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char *res = NULL; 517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev res = strtok(cmd + 1, "x"); 518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev width = atoi(res); 519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev res = strtok(NULL, "x"); 520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev height = atoi(res); 521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, width); 524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, height); 525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '\'': 532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev thumbQuality = atoi(cmd + 1); 533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, thumbQuality); 535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '*': 540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->startRecording(); 542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 't': 545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPreviewFormat((cmd + 1)); 546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'o': 551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev jpegQuality = atoi(cmd + 1); 552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_JPEG_QUALITY, jpegQuality); 553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '&': 561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Enabling Preview Callback"); 562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dump_preview = 1; 563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_ENABLE_MASK); 564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'k': 568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ippIDX_old = atoi(cmd + 1); 569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_IPP, atoi(cmd + 1)); 570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'K': 576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_GBCE, (cmd+1)); 577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 582d7c79eb9444ac2c3933dcf42350bcb0a01ac66c7Tyler Luu case 'F': 583d7c79eb9444ac2c3933dcf42350bcb0a01ac66c7Tyler Luu if ( hardwareActive ) 584d7c79eb9444ac2c3933dcf42350bcb0a01ac66c7Tyler Luu camera->sendCommand(CAMERA_CMD_START_FACE_DETECTION, 0, 0); 585d7c79eb9444ac2c3933dcf42350bcb0a01ac66c7Tyler Luu 586d7c79eb9444ac2c3933dcf42350bcb0a01ac66c7Tyler Luu break; 587d7c79eb9444ac2c3933dcf42350bcb0a01ac66c7Tyler Luu 588d7c79eb9444ac2c3933dcf42350bcb0a01ac66c7Tyler Luu case 'T': 589d7c79eb9444ac2c3933dcf42350bcb0a01ac66c7Tyler Luu 590d7c79eb9444ac2c3933dcf42350bcb0a01ac66c7Tyler Luu if ( hardwareActive ) 591d7c79eb9444ac2c3933dcf42350bcb0a01ac66c7Tyler Luu camera->sendCommand(CAMERA_CMD_STOP_FACE_DETECTION, 0, 0); 592d7c79eb9444ac2c3933dcf42350bcb0a01ac66c7Tyler Luu 593934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman case 'O': 594934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman params.set(KEY_GLBCE, (cmd+1)); 595934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman if ( hardwareActive ) 596934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman camera->setParameters(params.flatten()); 597934cb270ee5cb3bf91deb26654dc6042390e78e8Sundar Raman 598d7c79eb9444ac2c3933dcf42350bcb0a01ac66c7Tyler Luu break; 599d7c79eb9444ac2c3933dcf42350bcb0a01ac66c7Tyler Luu 600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'u': 601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // HQ should always be in ldc-nsf 602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // if not HQ, then return the ipp to its previous state 603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( !strcmp(capture[capture_mode], "high-quality") ) { 604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ippIDX_old = ippIDX; 605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ippIDX = 3; 606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_IPP, ipp_mode[ippIDX]); 607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ippIDX = ippIDX_old; 609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_MODE, (cmd + 1)); 612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'U': 618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_TEMP_BRACKETING, (cmd + 1)); 620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'W': 627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tempBracketRange = atoi(cmd + 1); 629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tempBracketRange %= TEMP_BRACKETING_MAX_RANGE; 630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 == tempBracketRange ) { 631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tempBracketRange = 1; 632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_TEMP_BRACKETING_NEG, tempBracketRange); 635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_TEMP_BRACKETING_POS, tempBracketRange); 636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '#': 643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_BURST, atoi(cmd + 1)); 645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'J': 652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_FLASH_MODE, (cmd+1)); 653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'w': 660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_SCENE_MODE, (cmd + 1)); 661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'B' : 668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_VNF, (cmd + 1)); 669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'C' : 675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_VSTAB, (cmd + 1)); 676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'D': 682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->stopRecording(); 684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'E': 687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(hardwareActive) 688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.unflatten(camera->getParameters()); 689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printSupportedParams(); 690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'i': 693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev iso_mode = atoi(cmd + 1); 694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_ISO, iso_mode); 695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'h': 702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sharpness = atoi(cmd + 1); 703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_SHARPNESS, sharpness); 704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '@': 711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) { 712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev closeCamera(); 714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 >= openCamera() ) { 716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf( "Reconnected to CameraService \n"); 717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'c': 723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev contrast = atoi(cmd + 1); 724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_CONTRAST, contrast); 725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) { 727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'z': 733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'Z': 734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if defined(OMAP_ENHANCEMENT) && defined(TARGET_OMAP3) 736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_ZOOM, atoi(cmd + 1)); 737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else 738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for(i = 0; i < length_Zoom; i++) 740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( strcmp((cmd + 1), zoom[i].zoom_description) == 0) 742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev zoomIDX = i; 744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_ZOOM, zoom[zoomIDX].idx); 749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'j': 757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_EXPOSURE, (cmd + 1)); 758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'b': 765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev brightness = atoi(cmd + 1); 766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_BRIGHTNESS, brightness); 767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 's': 774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev saturation = atoi(cmd + 1); 775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_SATURATION, saturation); 776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'e': 783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_EFFECT, (cmd + 1)); 784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'r': 791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev frameR = atoi(cmd + 1); 793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (camera_index == 0) { 796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for (i = 0; i < length_fpsConst_Ranges; i++) { 797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (frameR == fpsConstRanges[i].constFramerate) 798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev frameRateIndex = i; 799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for (i = 0; i < length_fpsConst_RangesSec; i++) { 803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (frameR == fpsConstRangesSec[i].constFramerate) 804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev frameRateIndex = i; 805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (camera_index == 0) 810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fpsConstRanges[frameRateIndex].range); 811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fpsConstRangesSec[frameRateIndex].range); 813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive && previewRunning ) { 816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->stopPreview(); 817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->startPreview(); 819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else if ( hardwareActive ) { 820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'R': 826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for(i = 0; i < length_fps_ranges; i++) 827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( strcmp((cmd + 1), fpsRanges[i].rangeDescription) == 0) 829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fpsRangeIdx = i; 831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Selected Framerate range: %s\n", fpsRanges[i].rangeDescription); 832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) { 833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, fpsRanges[i].range); 834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.remove(CameraParameters::KEY_PREVIEW_FRAME_RATE); 835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'x': 843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_ANTIBANDING, (cmd + 1)); 844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'g': 851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_FOCUS_MODE, (cmd + 1)); 852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'G': 859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(CameraParameters::KEY_FOCUS_AREAS, (cmd + 1)); 861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.remove(CameraParameters::KEY_FOCUS_AREAS); 866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'f': 868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev gettimeofday(&autofocus_start, 0); 869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->autoFocus(); 872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'p': 876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev gettimeofday(&picture_start, 0); 877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = camera->takePicture(CAMERA_MSG_COMPRESSED_IMAGE|CAMERA_MSG_RAW_IMAGE); 880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret != NO_ERROR ) 882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error returned while taking a picture"); 883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'd': 886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dly = atoi(cmd + 1); 887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sleep(dly); 888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'q': 891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dump_mem_status(); 892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopPreview(); 893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recordingMode ) { 895c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopRecording(); 896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev closeRecorder(); 897c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 898c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev recordingMode = false; 899c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto exit; 901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 902c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '\n': 903c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Iteration: %d \n", iteration); 904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev iteration++; 905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '{': 908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( atoi(cmd + 1) > 0 ) 909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_S3D2D_PREVIEW_MODE, "on"); 910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_S3D2D_PREVIEW_MODE, "off"); 912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'M': 917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_MEASUREMENT, (cmd + 1)); 918c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 919c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 920c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 921c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'm': 922c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 923c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_METERING_MODE, (cmd + 1)); 924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '<': 931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char coord_str[8]; 933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev latitude += degree_by_step; 934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (latitude > 90.0) 935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev latitude -= 180.0; 937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev snprintf(coord_str, 7, "%.7lf", latitude); 939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_GPS_LATITUDE, coord_str); 940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '=': 948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char coord_str[8]; 950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev longitude += degree_by_step; 951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (longitude > 180.0) 952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 953c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev longitude -= 360.0; 954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev snprintf(coord_str, 7, "%.7lf", longitude); 956c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_GPS_LONGITUDE, coord_str); 957c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 962c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 963c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 964c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '>': 965c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 966c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char coord_str[8]; 967c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev altitude += 12345.67890123456789; 968c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (altitude > 100000.0) 969c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 970c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev altitude -= 200000.0; 971c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 972c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev snprintf(coord_str, 7, "%.7lf", altitude); 973c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(params.KEY_GPS_ALTITUDE, coord_str); 974c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 975c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 976c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 977c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 978c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 979c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 980c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 981c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'X': 982c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 983c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char rem_str[50]; 984c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Deleting images from %s \n", dir_path); 985c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(!sprintf(rem_str,"rm %s/*.jpg",dir_path)) 986c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Sprintf Error"); 987c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(system(rem_str)) 988c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Images were not deleted\n"); 989c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 991c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 992c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '_': 993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 994c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev AutoConvergenceModeIDX = atoi(cmd + 1); 995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( AutoConvergenceModeIDX < 0 || AutoConvergenceModeIDX > 4 ) 996c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev AutoConvergenceModeIDX = 0; 997c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_AUTOCONVERGENCE, autoconvergencemode[AutoConvergenceModeIDX]); 998c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( AutoConvergenceModeIDX != 4 ) 999c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_MANUALCONVERGENCE_VALUES, manualconvergencevalues[ManualConvergenceDefaultValueIDX]); 1000c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1001c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1002c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1003c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1004c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1005c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '^': 1006c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1007c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char strtmpval[7]; 1008c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( strcmp (autoconvergencemode[AutoConvergenceModeIDX], AUTOCONVERGENCE_MODE_MANUAL) == 0) { 1009c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sprintf(strtmpval,"%d", atoi(cmd + 1)); 1010c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_MANUALCONVERGENCE_VALUES, strtmpval); 1011c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) 1012c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev camera->setParameters(params.flatten()); 1013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1015c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1016c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1017c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 1018c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Unrecognized command!\n"); 1019c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cmd = strtok_r(NULL, DELIMITER, &ctx); 1023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1025c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevexit: 1026c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (stopScript == true) 1027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1029c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1030c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 1031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1032c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 1033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1034c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1035c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevchar * get_cycle_cmd(const char *aSrc) { 1038c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev unsigned ind = 0; 1039c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char *cycle_cmd = new char[256]; 1040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev while ((*aSrc != '+') && (*aSrc != '\0')) { 1042c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cycle_cmd[ind++] = *aSrc++; 1043c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cycle_cmd[ind] = '\0'; 1045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return cycle_cmd; 1047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t dump_mem_status() { 1050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev system(MEDIASERVER_DUMP); 1051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return system(MEMORY_DUMP); 1052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevchar *load_script(char *config) { 1055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev FILE *infile; 1056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t fileSize; 1057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char *script; 1058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t nRead = 0; 1059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char dir_name[40]; 1060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t count; 1061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char rCount [5]; 1062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev count = 0; 1064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev infile = fopen(config, "r"); 1066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev strcpy(script_name,config); 1068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // remove just the '.txt' part of the config 1070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev while((config[count] != '.') && (count < sizeof(dir_name)/sizeof(dir_name[0]))) 1071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev count++; 1072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n SCRIPT : <%s> is currently being executed \n",script_name); 1074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(strncpy(dir_name,config,count) == NULL) 1075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Strcpy error"); 1076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dir_name[count]=NULL; 1078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(strcat(dir_path,dir_name) == NULL) 1080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Strcat error"); 1081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(restartCount) 1083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sprintf(rCount,"_%d",restartCount); 1085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(strcat(dir_path, rCount) == NULL) 1086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Strcat error RestartCount"); 1087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1089c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n COMPLETE FOLDER PATH : %s \n",dir_path); 1090c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(mkdir(dir_path,0777) == -1) { 1091c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n Directory %s was not created \n",dir_path); 1092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 1093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n Directory %s was created \n",dir_path); 1094c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1095c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\n DIRECTORY CREATED FOR TEST RESULT IMAGES IN MMC CARD : %s \n",dir_name); 1096c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1097c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( (NULL == infile)){ 1098c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while opening script file %s!\n", config); 1099c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NULL; 1100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fseek(infile, 0, SEEK_END); 1103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fileSize = ftell(infile); 1104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fseek(infile, 0, SEEK_SET); 1105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev script = (char *) malloc(fileSize); 1107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == script ) { 1109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Unable to allocate buffer for the script\n"); 1110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NULL; 1112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ((nRead = fread(script, 1, fileSize, infile)) != fileSize) { 1115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while reading script file!\n"); 1116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev free(script); 1118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fclose(infile); 1119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NULL; 1120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fclose(infile); 1123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return script; 1125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint start_logging(char *config, int &pid) { 1128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char dir_name[40]; 1129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t count = 0; 1130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int status = 0; 1131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // remove just the '.txt' part of the config 1133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev while((config[count] != '.') && (count < sizeof(dir_name)/sizeof(dir_name[0]))) 1134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev count++; 1135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(strncpy(dir_name,config,count) == NULL) 1137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Strcpy error"); 1138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dir_name[count]=NULL; 1140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pid = fork(); 1142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pid == 0) 1143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char *command_list[] = {"sh", "-c", NULL, NULL}; 1145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char log_cmd[120]; 1146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // child process to run logging 1147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // set group id of this process to itself 1149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // we will use this group id to kill the 1150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // application logging 1151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setpgid(getpid(), getpid()); 1152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* Start logcat */ 1154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(!sprintf(log_cmd,"logcat > /sdcard/%s/log.txt &",dir_name)) 1155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" Sprintf Error"); 1156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* Start Syslink Trace */ 1158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(bLogSysLinkTrace) { 1159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(!sprintf(log_cmd,"%s /system/bin/syslink_trace_daemon.out -l /sdcard/%s/syslink_trace.txt -f &",log_cmd, dir_name)) 1160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" Sprintf Error"); 1161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev command_list[2] = (char *)log_cmd; 1164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev execvp("/system/bin/sh", command_list); 1165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } if(pid < 0) 1166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("failed to fork logcat\n"); 1168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //wait for logging to start 1172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(waitpid(pid, &status, 0) != pid) 1173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("waitpid failed in log fork\n"); 1175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }else 1177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("logging started... status=%d\n", status); 1178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 1180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint stop_logging(int &pid) 1183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(pid > 0) 1185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(killpg(pid, SIGKILL)) 1187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Exit command failed"); 1189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 1191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("\nlogging for script %s is complete\n logcat saved @ location: %s\n",script_name,dir_path); 1192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (bLogSysLinkTrace) 1193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf(" syslink_trace is saved @ location: %s\n\n",dir_path); 1194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 1197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint execute_error_script(char *script) { 1200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char *cmd, *ctx; 1201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char id; 1202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t stat = NO_ERROR; 1203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cmd = strtok_r((char *) script, DELIMITER, &ctx); 1207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev while ( NULL != cmd ) { 1209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev id = cmd[0]; 1210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch (id) { 1212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '0': { 1214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev bufferStarvationTest = 1; 1215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.set(KEY_BUFF_STARV, bufferStarvationTest); //enable buffer starvation 1216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( !recordingMode ) { 1218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev recordingMode = true; 1220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( startPreview() < 0 ) { 1222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while starting preview\n"); 1223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( openRecorder() < 0 ) { 1228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while openning video recorder\n"); 1229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( configureRecorder() < 0 ) { 1234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while configuring video recorder\n"); 1235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( startRecording() < 0 ) { 1240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while starting video recording\n"); 1241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev usleep(1000000);//1s 1248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopPreview(); 1250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( recordingMode ) { 1252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopRecording(); 1253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev closeRecorder(); 1254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev recordingMode = false; 1256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '1': { 1262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int* tMemoryEater = new int[999999999]; 1263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (!tMemoryEater) { 1265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Not enough memory\n"); 1266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 1268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev delete tMemoryEater; 1269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '2': { 1275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //camera = Camera::connect(); 1276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == camera.get() ) { 1278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Unable to connect to CameraService\n"); 1279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '3': { 1286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int err = 0; 1287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev err = open("/dev/video5", O_RDWR); 1289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (err < 0) { 1291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Could not open the camera device5: %d\n", err ); 1292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return err; 1293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( startPreview() < 0 ) { 1296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Error while starting preview\n"); 1297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -1; 1298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev usleep(1000000);//1s 1301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stopPreview(); 1303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev close(err); 1305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '4': { 1309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) { 1311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPictureFormat("invalid-format"); 1313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPreviewFormat("invalid-format"); 1314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stat = camera->setParameters(params.flatten()); 1316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR != stat ) { 1318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Test passed!\n"); 1319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 1320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Test failed!\n"); 1321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev initDefaults(); 1324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '5': { 1330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) { 1332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPictureSize(-1, -1); 1334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPreviewSize(-1, -1); 1335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stat = camera->setParameters(params.flatten()); 1337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR != stat ) { 1339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Test passed!\n"); 1340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 1341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Test failed!\n"); 1342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev initDefaults(); 1345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case '6': { 1351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( hardwareActive ) { 1353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev params.setPreviewFrameRate(-1); 1355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev stat = camera->setParameters(params.flatten()); 1357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR != stat ) { 1359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Test passed!\n"); 1360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 1361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Test failed!\n"); 1362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev initDefaults(); 1365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case 'q': { 1372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto exit; 1373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: { 1378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("Unrecognized command!\n"); 1379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cmd = strtok_r(NULL, DELIMITER, &ctx); 1385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevexit: 1388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return 0; 1390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1394