//
// ExF1Ctrl ver. 0.1.
//
// This program can be used to interface the Casio EX-F1 over USB.
// Firmware rev. 2.00 is required. This version is available here:
// http://support.casio.com/download.php?rgn=4&cid=001&pid=573
//
// Written by Jens Skovgaard Olsen (info@feischmeckerfoosball.com)
//
#include "exf1ctrl.h"
int change_status(int status, int code, int device_num)
{
FILE *file;
char *dev_name = malloc(1000);
sprintf(dev_name, "STATUS_%i", device_num+1);
file = fopen(dev_name ,"w"); /* apend file (add text to
a file or create a file if it does not exist.*/
fprintf(file,"%i",code); /*writes*/
fclose(file);
if(status == 1)
exit(code);
}
int main(int argc, char** argv)
{
char input[64], com, name[32], tname[32];
int arg, nargs, addr, val, i;
float arg1, arg2;
/*
printf(" \n");
printf(" ********************************************************************\n");
printf(" * *\n");
printf(" * ExF1Ctrl ver. 0.1 *\n");
printf(" * ----------------- *\n");
printf(" * This program is able to interface to the Casio EX-F1 over USB. *\n");
printf(" * Firmware rev. 2.00 is required and the camera must be put in *\n");
printf(" * remote control mode before being connected to the host. *\n");
printf(" * -- *\n");
printf(" * Jens Skovgaard Olsen *\n");
printf(" * info@feinschmeckerfoosball.com *\n");
printf(" * *\n");
printf(" ********************************************************************\n");
printf(" \n");
printf(" Hint: a [x] sets aperture (x = 1-10).\n");
printf(" 1: F2.7 (default).\n");
printf(" 2: F3.0.\n");
printf(" 3: F3.3.\n");
printf(" 4: F3.8.\n");
printf(" 5: F4.2.\n");
printf(" 6: F4.7.\n");
printf(" 7: F5.3.\n");
printf(" 8: F6.0.\n");
printf(" 9: F6.7.\n");
printf(" 10: F7.5.\n");
printf(" \n");
printf(" Hint: c [x] sets mode / movie mode (x = 1-9).\n");
printf(" 1: Single shot (default).\n");
printf(" 2: Continuous shutter.\n");
printf(" 3: Prerecord still image.\n");
printf(" 4: Movie (STD).\n");
printf(" 5: Prerecord movie (STD).\n");
printf(" 6: Movie (HD).\n");
printf(" 7: Prerecord movie (HD).\n");
printf(" 8: Movie (HS).\n");
printf(" 9: Prerecord movie (HS).\n");
printf("\n");
printf(" Hint: e [x] sets exposure (x = 1-4).\n");
printf(" 1: M.\n");
printf(" 2: Auto (default).\n");
printf(" 3: A.\n");
printf(" 4: S.\n");
printf("\n");
printf(" Hint: f [x] sets focus (x = 1-4).\n");
printf(" 1: Auto (default).\n");
printf(" 2: Macro.\n");
printf(" 3: Infinity.\n");
printf(" 4: Manual.\n");
printf("\n");
printf(" Hint: h activates half press.\n");
printf("\n");
printf(" Hint: i [x] sets iso (x = 1-6).\n");
printf(" 1: Auto (default).\n");
printf(" 2: 100.\n");
printf(" 3: 200.\n");
printf(" 4: 400.\n");
printf(" 5: 800.\n");
printf(" 6: 1600.\n");
printf("\n");
printf(" Hint: q quits this program.\n");
printf("\n");
printf(" Hint: m [x [y]] records a x second long movie called y.\n");
printf("\n");
printf(" Hint: s [x [y [z]]] activates shutter and stores a picture called x\n");
printf(" and a thumbnail called y. If the continous shutter is enabled\n");
printf(" (modes 2 and 3), z determines the shutter duration.\n");
printf("\n");
printf(" Hint: v [x [y]] focus y steps. x=in focuses in and x=out focuses out.\n");
printf(" Continous focus is used if y is not defined.\n");
printf("\n");
printf(" Hint: z [x [y]] zooms y steps. x=in zooms in and x=out zooms out.\n");
printf(" Continous zoom is used if y is not defined.\n");
printf("\n");
printf("\n");
printf("> Initializing camera... \n");
fflush(stdout);
*/
//!!! vyber cisla zarizeni
int device_num;
if( argc > 1) {
device_num = argv[1][0]-'0'-1;
}
else
device_num = 0;
/* printf( "%c \n" , argv[2][0] );*/
// zapise na disk zpravu o tom, že to nastavuje foťák
change_status(0, 1, device_num);
if( argc == 3 && argv[2][0]=='r') {
printf("Cleaning\n");
if (!init_camera(device_num))
change_status(1, 0, device_num);
exit_camera();
change_status(1, 0, device_num);
}
// char * dev_name[1];
//
//
// printf(dev_name);
// printf("\n");
// // strcpy(dev_name);
// printf( strcat("-", dev_name));
//
if (!init_camera(device_num))
change_status(1, 0, device_num);
printf("Camera started\n");
while (1)
{
printf("> ");
gets(input);
sscanf(input, "%c", &com);
switch (com) {
case 'S':
nargs = sscanf(input, "%c %f %f", &com, &arg1, &arg2);
printf("> HS video config ... \n");
setup_HS_movie(arg1, arg2);
change_status(0,0, device_num); //nastaveni bylo dokonceno !!!!
break;
case 'a':
nargs = sscanf(input, "%c %d", &com, &arg);
printf("> Configuring aperture... \n");
switch (arg) {
case 1:
setup_aperture(DATA_APERTURE_F2_7);
break;
case 2:
setup_aperture(DATA_APERTURE_F3_0);
break;
case 3:
setup_aperture(DATA_APERTURE_F3_3);
break;
case 4:
setup_aperture(DATA_APERTURE_F3_8);
break;
case 5:
setup_aperture(DATA_APERTURE_F4_2);
break;
case 6:
setup_aperture(DATA_APERTURE_F4_7);
break;
case 7:
setup_aperture(DATA_APERTURE_F5_3);
break;
case 8:
setup_aperture(DATA_APERTURE_F6_0);
break;
case 9:
setup_aperture(DATA_APERTURE_F6_7);
break;
case 10:
setup_aperture(DATA_APERTURE_F7_5);
break;
default:
printf("> Unknown aperture setting. \n");
}
break;
case 'c':
nargs = sscanf(input, "%c %d", &com, &arg);
printf("> Configuring shutter mode / movie mode... \n");
switch (arg) {
case 1:
setup_shutter(SHUTTER_NORMAL, FALSE);
break;
case 2:
setup_shutter(SHUTTER_CONTINOUS, FALSE);
break;
case 3:
setup_shutter(SHUTTER_NORMAL, TRUE);
break;
case 4:
setup_movie(MOVIE_STD, FALSE);
break;
case 5:
setup_movie(MOVIE_STD, TRUE);
break;
case 6:
setup_movie(MOVIE_HD, FALSE);
break;
case 7:
setup_movie(MOVIE_HD, TRUE);
break;
case 8:
setup_movie(MOVIE_HS, FALSE);
break;
case 9:
setup_movie(MOVIE_HS, TRUE);
break;
default:
printf("> This mode is yet to be supported. \n");
}
break;
case 'e':
nargs = sscanf(input, "%c %d", &com, &arg);
printf("> Configuring exposure... \n");
switch (arg) {
case 1:
setup_exposure(DATA_EXPOSURE_M);
break;
case 2:
setup_exposure(DATA_EXPOSURE_AUTO);
break;
case 3:
setup_exposure(DATA_EXPOSURE_A);
break;
case 4:
setup_exposure(DATA_EXPOSURE_S);
break;
default:
printf("> Unknown focus setting. \n");
}
break;
case 'f':
nargs = sscanf(input, "%c %d", &com, &arg);
printf("> Configuring focus... \n");
switch (arg) {
case 1:
setup_focus(DATA_FOCUS_AF);
break;
case 2:
setup_focus(DATA_FOCUS_MACRO);
break;
case 3:
setup_focus(DATA_FOCUS_INFINITY);
break;
case 4:
setup_focus(DATA_FOCUS_MANUAL);
break;
default:
printf("> Unknown exposure setting. \n");
}
break;
case 'h':
printf("> Half press... \n");
half_shutter();
break;
case 'i':
nargs = sscanf(input, "%c %d", &com, &arg);
printf("> Configuring ISO... \n");
switch (arg) {
case 1:
setup_iso(DATA_IS0_AUTO);
break;
case 2:
setup_iso(DATA_IS0_100);
break;
case 3:
setup_iso(DATA_IS0_200);
break;
case 4:
setup_iso(DATA_IS0_400);
break;
case 5:
setup_iso(DATA_IS0_800);
break;
case 6:
setup_iso(DATA_IS0_1600);
break;
default:
printf("> Unknown ISO setting. \n");
}
break;
case 'm':
nargs = sscanf(input, "%c %d %s", &com, &arg, &name);
printf("> Recording... \n");
if (nargs == 3)
{
char *dev_name = malloc(1000);
sprintf(dev_name, "%s-%i.MOV", name, device_num+1);
movie(dev_name , arg);
}
else if (nargs == 2)
movie("CIMG001.MOV", arg);
else
movie("CIMG001.MOV", -1);
break;
case 'q':
exit_camera();
change_status(1, 0, device_num);
case 's':
nargs = sscanf(input, "%c %s %s %d", &com, &name, &tname, &arg);
printf("> Taking picture... \n");
switch (nargs) {
case 1:
shutter("CIMG001.jpg", "CIMG001_thumb.jpg", -1);
break;
case 2:
shutter(strcat(name,".jpg"), strcat(name, "_thumb.jpg"), -1);
break;
case 3:
shutter(strcat(name,".jpg"), strcat(tname,".jpg"), -1);
break;
case 4:
shutter(strcat(name,".jpg"), strcat(tname,".jpg"), arg);
break;
}
break;
case 'v':
nargs = sscanf(input, "%c %s %d", &com, &name, &arg);
printf("> Focusing... \n");
switch (nargs) {
case 1:
focus(TRUE, TRUE);
break;
case 2:
if (strcmp(name, "in") == 0)
focus(TRUE, TRUE);
else if (strcmp(name, "out") == 0)
focus(FALSE, TRUE);
else
printf("> Unrecognized parameter: %s!\n", name);
break;
case 3:
if (strcmp(name, "in") == 0)
for (i=0; i<arg; i++)
focus(TRUE, FALSE);
else if (strcmp(name, "out") == 0)
for (i=0; i<arg; i++)
focus(FALSE, FALSE);
else
printf("> Unrecognized parameter: %s!\n", name);
break;
}
break;
case 'x':
nargs = sscanf(input, "%c %x %x", &com, &addr, &val);
if (nargs == 3) {
printf("> Setting property 0x%X to 0x%X... \n", addr, val);
exf1Cmd(CMD_WRITE, addr, val);
}
else
printf("> Three arguments required... \n");
break;
case 'z':
nargs = sscanf(input, "%c %s %d", &com, &name, &arg);
printf("> Zooming... \n");
switch (nargs) {
case 1:
zoom(TRUE, TRUE);
break;
case 2:
if (strcmp(name, "in") == 0)
zoom(TRUE, TRUE);
else if (strcmp(name, "out") == 0)
zoom(FALSE, TRUE);
else
printf("> Unrecognized parameter: %s!\n", name);
break;
case 3:
if (strcmp(name, "in") == 0)
for (i=0; i<arg; i++)
zoom(TRUE, FALSE);
else if (strcmp(name, "out") == 0)
for (i=0; i<arg; i++)
zoom(FALSE, FALSE);
else
printf("> Unrecognized parameter: %s!\n", name);
break;
}
break;
default:
printf("> Unrecognized command: %s \n", input);
break;
}
}
change_status(1, 0, device_num);
}