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