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