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