apps/hello/hello.c

Go to the documentation of this file.
00001 #include <stdio.h>
00002 //
00003 #include <sys/socket.h>
00004 #include <netinet/in.h>
00005 
00006 
00007 #include <sys/ioctl.h>
00008 #include <fcntl.h>
00009 #include <stdio.h>
00010 #include <stdlib.h>
00011 #include <ctype.h>
00012 #include <errno.h>
00013 #include <unistd.h>
00014 #include <string.h>
00015 
00016 //#include <asm/cmoscama.h>
00017 #include <asm/elphel/c313a.h>
00018 
00019 static int dfd;
00020 #if 0
00021 static unsigned long ishad;
00022 #endif
00023 
00024 static char * usage = "rev R1_0_2\n"
00025                         "Usage: hello \n-r\n-w addr(0..f) data (0..ffffffff)\n" \
00026                         "-sr RA - read abstract sensor register\n"\
00027                         "-sr    - read all 64 abstract sensor registers\n"\
00028                         "-sw RA RD - write abstract sensor register\n"\
00029                         "-it delays - set delays for i2c (!=0) low byte - SCL high, byte1 - SCL low,\n"\
00030                         "                                 byte2 - salve->master, byte3 master->slave\n"\
00031                         "-ir BUS SA RA - read i2c register RA from slave SA bus number BUS\n"\
00032                         "-iw BUS SA RA DATA - write i2c register on BUS, slave address SA, register RA data DATA\n"\
00033                         "-ir - read all relevant i2c registers from slave 0x60/0x66\n"\
00034                         "-iw - write all relevant i2c registers from slave 0x60/0x66\n"\
00035                         "-IR SA RA - read 16-bit i2c register RA from slave SA bus number 0\n"\
00036                         "-IW SA RA DATA - write 16-bit i2c register on bus 0, slave address SA, register RA data DATA\n"\
00037                         "-IR - read all relevant 16-bit i2c registers from slave 0xba\n"\
00038                         "-ds INDEX - read DMA descriptors as long words (4/descriptor)\n"\
00039                         "-db INDEX - read DMA buffer\n"\
00040                         "-xs - reset zr32112, start exposure (will remove MRST also)\n"\
00041                         "-xe - end exposure, start DMA\n"\
00042                         "-xx - stop DMA\n"\
00043                         "-x - stop DMA/start exposure/wait keypress/end exposure\n"\
00044                         " -nr address number_of_words - read data from KAI11000 board\n"\
00045                         " -nw address {data1...dataN} - write data to KAI11000 board\n"\
00046                         " -mi init (reset on-off) MCP board, write sync table\n"\
00047                         " -mr address number_of_words - read data from MCP board\n"\
00048                         " -mw address {data1...dataN} - write data to MCP board\n"\
00049                         " -md program demo sequence\n"\
00050                         " -ml loop reenabling external sync till <cntrl-C>\n"\
00051                         " -Mi (userspace processing) init (reset on-off) MCP board, write sync table\n"\
00052                         " -Mr (userspace processing) address number_of_words - read data from MCP board\n"\
00053                         " -Mw (userspace processing) address {data1...dataN} - write data to MCP board\n"\
00054                         " -Md (userspace processing) program demo sequence\n"\
00055                         " -Ml (userspace processing) loop reenabling external sync till <cntrl-C>\n"\
00056                         " -z exposure - set exposure time, start waiting for xtrn (0-stop)\n"\
00057                         " -z - return camera sequencer status:\n"\
00058                         "    0- stopped, 1(5ms),2 - waiting trig, 3 -exposure, 4 - readout,6 - done)\n"\
00059                         " -c bit(0..1f of CR) op(0 -nop, 1 - clr, 2 - set, 3 - toggle)\n"\
00060                         " -req_io - return present of IO exctension board: 0 - not found, 1 - found\n";
00061 
00062 
00063 
00064 # if 0
00065 
00066 void    initMCP(void) {// should be open O_RDWR - make sure external reset is off
00067 
00068   int i;
00069   ishad = (unsigned long) ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_CR_SHADOW), NULL);
00070   if ((ishad & 0x4000) == 0) { // reset was on
00071     i=ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0W (1) ), (ishad = ((ishad & MCPOtherBits) | MCPReset)));
00072     i=ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0W (1) ), (ishad = ((ishad & MCPOtherBits) | MCPNoReset)));
00073   }
00074 
00075 }
00076 
00077 void    resetMCP(void) {
00078 
00079   int i;
00080   ishad = (unsigned long) ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_CR_SHADOW), NULL);
00081   i=ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0W (1) ), (ishad = ((ishad & MCPOtherBits) | MCPReset)));
00082   i=ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0W (1) ), (ishad = ((ishad & MCPOtherBits) | MCPNoReset)));
00083 
00084 }
00085 
00086 
00087 void    MCPSendDibit(int dibit) {
00088         // 0- "start", 1 - "0", 2 - "1", 3 - "act"
00089 
00090   int i;
00091   if (dibit & 2) i=ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0W (1) ), (ishad ^= MCPToggleB) );
00092   else           i=ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0W (1) ), (ishad ^= MCPToggleA) );
00093   if (dibit & 1) i=ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0W (1) ), (ishad ^= MCPToggleB) );
00094   else           i=ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0W (1) ), (ishad ^= MCPToggleA) );
00095 
00096 }
00097 
00098 int     MCPSendGetDibit(int dibit) {
00099         // 0- "start", 1 - "0", 2 - "1", 3 - "act" - returns dibit read
00100   int i,d;
00101 
00102 //  int ii;
00103  
00104 //  ii = ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0R(1)), NULL);
00105 //  printf("dibit:  %x ",ii);
00106   d = (ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0R(1)), NULL) >>2) & 1;
00107 
00108  
00109   if (dibit & 2) i=ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0W (1) ), (ishad ^= MCPToggleB) );
00110   else           i=ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0W (1) ), (ishad ^= MCPToggleA) );
00111 
00112 //  ii = ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0R(1)), NULL);
00113 //  printf("%x\r\n",ii);
00114 
00115 
00116   d |= (ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0R(1)), NULL) >>1) & 2;
00117 
00118   if (dibit & 1) i=ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0W (1) ), (ishad ^= MCPToggleB) );
00119   else           i=ioctl(dfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0W (1) ), (ishad ^= MCPToggleA) );
00120   return d;
00121  return dibit;
00122 }
00123 
00124 int MCPSendA (int wnr, int a) { // wnr 0 - read, 1 - write
00125   int   d;
00126   initMCP();
00127   MCPSendDibit(0);      // start
00128   d=MCPSendGetDibit((wnr & 1)+1);       // "0" - read, "1" - write
00129 // later - check "in control" here...
00130   do { // at least one 0/1 should be sent
00131      MCPSendDibit((a & 1)+1);
00132      a = (a >> 1);
00133 //     printf ("a= %x\r\n",a);
00134   } while (a);
00135   if (wnr) MCPSendDibit(3);     // act
00136   return d;
00137 }
00138 
00139 void MCPWriteD (int d) {
00140   while (d) {
00141      MCPSendDibit((d & 1)+1);
00142      d = (d >> 1);
00143   }
00144   MCPSendDibit(3);      // act
00145 }
00146 
00147 int MCPReadD (void) { // will always read 12 bit data
00148   int d;
00149   MCPSendDibit(3);      // act
00150   d  = MCPSendGetDibit(1); // while sending 0
00151   d |= MCPSendGetDibit(1) <<  2; 
00152   d |= MCPSendGetDibit(1) <<  4; 
00153   d |= MCPSendGetDibit(1) <<  6; 
00154   d |= MCPSendGetDibit(1) <<  8; 
00155   d |= MCPSendGetDibit(1) << 10; 
00156   return d;
00157 }
00158 
00159 void MCPWriteSyncTab(void) { // write 256x4 sync table
00160   int   i,d;
00161   MCPSendA(1,MCPwrsynctb);      // synctab
00162   for (i=0;i<256;i++) {
00163     d=-1;
00164 /*
00165     if      ((i & 0b11111111) == 0b11111111) d = 0b0000;
00166     else if ((i & 0b11111111) == 0b00000000) d = 0b1000;
00167     else if ((i & 0b00000011) == 0b00000010) d = 0b0001;
00168     else if ((i & 0b00000011) == 0b00000001) d = 0b1001;
00169     else if ((i & 0b00000111) == 0b00000100) d = 0b0010;
00170     else if ((i & 0b00000111) == 0b00000011) d = 0b1010;
00171     else if ((i & 0b00001111) == 0b00001000) d = 0b0011;
00172     else if ((i & 0b00001111) == 0b00000111) d = 0b1011;
00173     else if ((i & 0b00011111) == 0b00010000) d = 0b0100;
00174     else if ((i & 0b00011111) == 0b00001111) d = 0b1100;
00175     else if ((i & 0b00111111) == 0b00100000) d = 0b0101;
00176     else if ((i & 0b00111111) == 0b00011111) d = 0b1101;
00177     else if ((i & 0b01111111) == 0b01000000) d = 0b0110;
00178     else if ((i & 0b01111111) == 0b00111111) d = 0b1110;
00179     else if ((i & 0b11111111) == 0b10000000) d = 0b0111;
00180     else if ((i & 0b11111111) == 0b01111111) d = 0b1111;
00181 */
00182     if      ((i & 0xff) == 0xff) d = 0x0;
00183     else if ((i & 0xff) == 0x00) d = 0x8;
00184     else if ((i & 0x03) == 0x02) d = 0x1;
00185     else if ((i & 0x03) == 0x01) d = 0x9;
00186     else if ((i & 0x07) == 0x04) d = 0x2;
00187     else if ((i & 0x07) == 0x03) d = 0xa;
00188     else if ((i & 0x0f) == 0x08) d = 0x3;
00189     else if ((i & 0x0f) == 0x07) d = 0xb;
00190     else if ((i & 0x1f) == 0x10) d = 0x4;
00191     else if ((i & 0x1f) == 0x0f) d = 0xc;
00192     else if ((i & 0x3f) == 0x20) d = 0x5;
00193     else if ((i & 0x3f) == 0x1f) d = 0xd;
00194     else if ((i & 0x7f) == 0x40) d = 0x6;
00195     else if ((i & 0x7f) == 0x3f) d = 0xe;
00196     else if ((i & 0xff) == 0x80) d = 0x7;
00197     else if ((i & 0xff) == 0x7f) d = 0xf;
00198 
00199     if (d<0) {printf ("incomplete case in MCPWriteSyncTab\r\n");return;}
00200     MCPWriteD (d);
00201     printf("%1x",d); if ((i & 0x1f) == 0x1f) printf ("\r\n");
00202   }
00203 }
00204 
00205 
00206 void MCPDemoSequencer(void) { // program some demo/reasonable sequencer parameters
00207 /* 2-pulse sequence:
00208     1-st pulse - delay 0, duration 10
00209     2-nd pulse - delay 1000, duration 10000
00210 */ 
00211     MCPSendA(1,MCPwrseq);       // sequencer table
00212     MCPWriteD (  0x09);         // first word - ON-OFF-NOP-NOP
00213     MCPWriteD (0x0018);         // delay after first word (in 40-ns steps) up to 15 bits+ "extend" bit =16bits
00214     MCPWriteD (  0x04);         // second word - NOP-ON-NOP-NOP
00215     MCPWriteD (0x00f9);         // delay after second word
00216     MCPWriteD (  0x38);         // third word - NOP-OFF-END-NOP
00217 
00218 // program sync delay mask (to prevent "glitches" - needs adjustment?
00219     MCPSendA(1,MCPwrsmsk);      //
00220     MCPWriteD (  0x2);          // 4-step 0..3
00221 
00222 // write "on" support period
00223     MCPSendA(1,MCPwrsup);       //
00224     MCPWriteD (  0x1);          // 4-step 0..3
00225 
00226 // set all minimal delays
00227     MCPSendA(1,MCPwrdlys);      //
00228     MCPWriteD (  0x0);
00229     MCPWriteD (  0x0);
00230     MCPWriteD (  0x0);
00231     MCPWriteD (  0x0);
00232     MCPWriteD (  0x0);
00233     MCPWriteD (  0x0);
00234     MCPWriteD (  0x0);
00235     MCPWriteD (  0x0);
00236 // program inverter
00237     MCPSendA(1,MCPwinv);        //
00238     MCPWriteD (  0x1000);       // wait 200usec
00239     MCPWriteD (  0x4048);       // 1-st transistor on for 3.6usec
00240     MCPWriteD (  0x8048);       // 2-nd transistor on for 3.6usec
00241     MCPWriteD (  0xc000);       // restart sequence
00242 // turn it on
00243     MCPSendA(1,MCPwinvctl);     //
00244     MCPWriteD ( 4);             // always on (to resetting after trigger)
00245 
00246 // that's all for now...  
00247         
00248 
00249 }
00250 #endif
00251 
00252 int main (int argc, char *argv[]) {
00253 #define zr_init_size 72
00254         short MCP_buf[MCP_W_size+MCP_R_size];
00255 /*     unsigned int zr_inits[zr_init_size]= \
00256         {0x0100, // |0x80 - test ramp, |0x01 - video
00257          0x0203,0x0303,0x0400,0x0500,0x0600,0x0700,0x08a1,
00258          0x0981,0x1204,0x13fe,0x1400,0x1500,0x1600,
00259          0x2080,0x2100,0x2200,
00260          0x8001,0x8100,0x820a,0x830c,
00261          0x8602,0x871f,0x8801,0x8907,
00262          0x8a1f,0x8b0c,0x8c03,0x8d1f,
00263          0x8e08,0x8f1f,0x900a,0x9111,   
00264          0x9208,0x931f,0x9406,0x950a,   
00265          0x961f,0x9701,0x980f,0x9900,   
00266          0x9a1f,0x9b02,0x9c0f,0x9f07,   
00267          0xa01f,0xa101,0xa20a,0xa30f,   
00268          0xa417,0xa500,0xa61f,0xa70f,   
00269          0xa80a,0xa90f,0xaa17,0xab02,   
00270          0xac1f,0xad07,0xae00,0xaf03,   
00271          0xb017,0xb30c,0xb41f,0xb500,   
00272          0xb600,0xb700,0xb800,0xb900,   
00273          0xba00,0xbb00,0xbc01      };   
00274 
00275 */      
00276 
00277 //    char c;
00278  
00279     char * cp;
00280         int i,j;
00281         int devfd;
00282 //      unsigned long data[5];
00283 //      int     sdata[5];
00284 //      unsigned long *data= (unsigned long *) &sdata[0];
00285 
00286         unsigned long a,d, bus, sa, ra, rd;
00287 //      unsigned long t1,t2;
00288 //      int mcpd;
00289         int mcpa;
00290         if (argc<2) {printf(usage); return 0;}
00291         if (argv[1][0] != '-'){printf(usage); return 0;}
00292 
00293 //#if 0
00294         if(strstr(argv[1], "-req_io")) {
00295                 int io_present = 0;
00296                 devfd = open("/dev/ccami2c", O_RDONLY);
00297                 io_present = ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_EXT_BOARD_PRESENT), 0);
00298                 close(devfd);
00299                 if(io_present == 0)
00300                         printf("0\n");
00301                 else
00302                         printf("1\n");
00303                 return 0;
00304         }
00305         if (argv[1][1] == 'n') { // MCP control - new, using read/write file
00306           if ((argv[1][2] == 'r') || (argv[1][2] == 'R')) { // MCP read registers "-MR address number_of_words"
00307             if (argc<3) {printf(" should be -nr address {number_of_words}\r\n");return 0;}
00308             mcpa= strtol (argv[2],&cp,16);
00309             if ((dfd = open("/dev/sensorfpgacomm", O_RDONLY))<0) {printf("open sensorfpgacomm returned %d\r\n",dfd); return -1;};
00310 
00311             i=1;
00312             if (argc>3) i=strtol (argv[3],&cp,16);
00313                 j=lseek(dfd,mcpa<<1,0);
00314                 if (j<0) return j;
00315                 j=read(dfd,&MCP_buf[mcpa],i<<1);
00316                 printf("read returned %d\r\n",j);
00317                 if (j<0) return j;
00318                 i=j>>1;
00319             for (j=0;j<i;j++) {
00320               if ((j & 7) == 0) {
00321                 if (j > 0) printf ("\r\n");
00322                 printf("%3x: ",mcpa+j);
00323               } else printf (" ");
00324               printf("%3x",MCP_buf[mcpa+j]);
00325             }
00326             printf("\r\n");
00327             close(dfd);
00328             return 0;
00329           }
00330           if ((argv[1][2] == 'w') || (argv[1][2] == 'W')) { // MCP write registers "-MW address word1..wordN"
00331             if (argc<3) {printf(" should be -nw address {data1...dataN}\r\n");return 0;}
00332             mcpa= strtol (argv[2],&cp,16);
00333                 i=mcpa;
00334                 for (j=3;(j<argc) && (i>=0) && (i<MCP_W_size);j++) MCP_buf[i++]= strtol (argv[j],&cp,16);
00335                 i=i-mcpa;       //count
00336                 if (i==0) return 0;     //nothing to write
00337             if ((dfd = open("/dev/sensorfpgacomm", O_WRONLY))<0) {printf("open sensorfpgacomm returned %d\r\n",dfd); return -1;};
00338                 j=lseek(dfd,mcpa<<1,0);
00339                 if (j<0) return j;
00340                 j=write(dfd,&MCP_buf[mcpa],i<<1);
00341                 printf("write returned %d\r\n",j);
00342                 if (j<0) return j;
00343                 close(dfd);
00344             return 0;
00345           }
00346           printf(" only -nr ,-nw are implemented\r\n");
00347           return 0;
00348         }
00349 
00350 //#endif
00351 
00352   
00353 #if 0
00354         if (argv[1][1] == 'M'){ // MCP control - old (ioctl)
00355           if ((argv[1][2] == 'r') || (argv[1][2] == 'R')) { // MCP read registers "-MR address number_of_words"
00356             if (argc<3) {printf(" should be -NR address {number_of_words}\r\n");return 0;}
00357             mcpa= strtol (argv[2],&cp,16);
00358             dfd = open("/dev/ccam_dma.raw", O_RDWR);
00359             mcpd= MCPSendA (0, mcpa);
00360             printf ("Multiprocessor status= %x\r\n",mcpd);
00361             i=1;
00362             if (argc>3) i=strtol (argv[3],&cp,16);
00363             for (j=0;j<i;j++) {
00364               if ((j & 7) == 0) {
00365                 if (j > 0) printf ("\r\n");
00366                 printf("%3x: ",mcpa+j);
00367               } else printf (" ");
00368               mcpd=MCPReadD ();
00369               printf("%3x",mcpd);
00370             }
00371             printf("\r\n");
00372             close(dfd);
00373             return 0;
00374           }
00375           if ((argv[1][2] == 'w') || (argv[1][2] == 'W')) { // MCP write registers "-MW address word1..wordN"
00376             if (argc<3) {printf(" should be -NW address {data1...dataN}\r\n");return 0;}
00377             mcpa= strtol (argv[2],&cp,16);
00378             dfd = open("/dev/ccam_dma.raw", O_RDWR);
00379             mcpd= MCPSendA (1, mcpa);
00380             printf ("Multiprocessor status= %x\r\n",mcpd);
00381             for (j=3;j<argc;j++) {
00382               mcpd= strtol (argv[j],&cp,16);
00383               MCPWriteD (mcpd);
00384             }
00385             close(dfd);
00386             return 0;
00387           }
00388           if ((argv[1][2] == 'i') || (argv[1][2] == 'I')) {
00389             dfd = open("/dev/ccam_dma.raw", O_RDWR);
00390             resetMCP();
00391             MCPWriteSyncTab();
00392             close(dfd);
00393             return 0;
00394           }
00395           if ((argv[1][2] == 'd') || (argv[1][2] == 'D')) {
00396             dfd = open("/dev/ccam_dma.raw", O_RDWR);
00397             resetMCP();
00398             MCPWriteSyncTab();
00399             MCPDemoSequencer();
00400             close(dfd);
00401             return 0;
00402           }
00403 
00404           if ((argv[1][2] == 'l') || (argv[1][2] == 'L')) {
00405             printf("Turn off external trigger to exit\r\n");
00406             dfd = open("/dev/ccam_dma.raw", O_RDWR);
00407 // enable outputs
00408             mcpd= MCPSendA (1, MCPctlgate+1);
00409             MCPWriteD (0);
00410             j=0;
00411             while (1) {
00412 // enable sequencer
00413               mcpd= MCPSendA (1, MCPctlseq+1);
00414               MCPWriteD (0);
00415 // wait sequencer over
00416               i=1000;
00417               do {
00418                 mcpd= MCPSendA (0, 0);
00419                 i--;
00420               } while ((!(MCPReadD () & 0x4)) && (i>0));
00421               if (i == 0) {
00422 // disable sequencer
00423                 mcpd= MCPSendA (1, MCPctlseq+0);
00424                 MCPWriteD (0);
00425 
00426                 if (j==0) printf("No external trigger - it should be running\r\n");
00427                 close(dfd);
00428                 return 0;
00429               }
00430               j++;
00431               
00432             }
00433 
00434             close(dfd);
00435             return 0;
00436           }
00437 
00438           printf(" only -Mr ,-Mw, -Mi, -Md and -Ml are implemented\r\n");
00439           return 0;
00440         }
00441 #endif
00442 //      short MCP_buf[MCP_W_size+MCP_R_size];
00443 
00444 //#if 0
00445         if (argv[1][1] == 'm') { // MCP control - new, using read/write file
00446           if ((argv[1][2] == 'r') || (argv[1][2] == 'R')) { // MCP read registers "-MR address number_of_words"
00447             if (argc<3) {printf(" should be -nr address {number_of_words}\r\n");return 0;}
00448             mcpa= strtol (argv[2],&cp,16);
00449             if ((dfd = open("/dev/ccammcp", O_RDONLY))<0) {printf("open ccammcp returned %d\r\n",dfd); return -1;};
00450 
00451             i=1;
00452             if (argc>3) i=strtol (argv[3],&cp,16);
00453                 j=lseek(dfd,mcpa<<1,0);
00454                 if (j<0) return j;
00455                 j=read(dfd,&MCP_buf[mcpa],i<<1);
00456                 printf("read returned %d\r\n",j);
00457                 if (j<0) return j;
00458                 i=j>>1;
00459             for (j=0;j<i;j++) {
00460               if ((j & 7) == 0) {
00461                 if (j > 0) printf ("\r\n");
00462                 printf("%3x: ",mcpa+j);
00463               } else printf (" ");
00464               printf("%3x",MCP_buf[mcpa+j]);
00465             }
00466             printf("\r\n");
00467             close(dfd);
00468             return 0;
00469           }
00470 
00471 
00472           if ((argv[1][2] == 'w') || (argv[1][2] == 'W')) { // MCP write registers "-MW address word1..wordN"
00473             if (argc<3) {printf(" should be -nw address {data1...dataN}\r\n");return 0;}
00474             mcpa= strtol (argv[2],&cp,16);
00475                 i=mcpa;
00476                 for (j=3;(j<argc) && (i>=0) && (i<MCP_W_size);j++) MCP_buf[i++]= strtol (argv[j],&cp,16);
00477                 i=i-mcpa;       //count
00478                 if (i==0) return 0;     //nothing to write
00479             if ((dfd = open("/dev/ccammcp", O_WRONLY))<0) {printf("open ccammcp returned %d\r\n",dfd); return -1;};
00480                 j=lseek(dfd,mcpa<<1,0);
00481                 if (j<0) return j;
00482                 j=write(dfd,&MCP_buf[mcpa],i<<1);
00483                 printf("write returned %d\r\n",j);
00484                 if (j<0) return j;
00485                 close(dfd);
00486             return 0;
00487           }
00488 #if 0
00489 
00490 
00491           if ((argv[1][2] == 'i') || (argv[1][2] == 'I')) {
00492             dfd = open("/dev/ccamrw", O_RDWR);
00493             resetMCP();
00494             close(dfd);
00495             return 0;
00496           }
00497           if ((argv[1][2] == 'd') || (argv[1][2] == 'D')) {      // old variant
00498             dfd = open("/dev/ccam_dma.raw", O_RDWR);
00499             resetMCP();
00500             MCPWriteSyncTab();
00501             MCPDemoSequencer();
00502             close(dfd);
00503             return 0;
00504           }
00505 
00506 
00507           if ((argv[1][2] == 'l') || (argv[1][2] == 'L')) {
00508             printf("Turn off external trigger to exit\r\n");
00509             dfd = open("/dev/ccam_dma.raw", O_RDWR);
00510 // enable outputs
00511             mcpd= MCPSendA (1, MCPctlgate+1);
00512             MCPWriteD (0);
00513             j=0;
00514             while (1) {
00515 // enable sequencer
00516               mcpd= MCPSendA (1, MCPctlseq+1);
00517               MCPWriteD (0);
00518 // wait sequencer over
00519               i=1000;
00520               do {
00521                 mcpd= MCPSendA (0, 0);
00522                 i--;
00523               } while ((!(MCPReadD () & 0x4)) && (i>0));
00524               if (i == 0) {
00525 // disable sequencer
00526                 mcpd= MCPSendA (1, MCPctlseq+0);
00527                 MCPWriteD (0);
00528 
00529                 if (j==0) printf("No external trigger - it should be running\r\n");
00530                 close(dfd);
00531                 return 0;
00532               }
00533               j++;
00534               
00535             }
00536 
00537             close(dfd);
00538             return 0;
00539           }
00540 #endif
00541           printf(" only -mr ,-mw, -mi, -md and -ml are implemented\r\n");
00542           return 0;
00543         }
00544 
00545 //#endif
00546 #if 0
00547 
00548         if ((argv[1][1] == 'r') || (argv[1][1] == 'R')) { // read all ports
00549           devfd = open("/dev/ccam_dma.raw", O_RDONLY);
00550           printf ("open returned - %x\r\n",devfd);
00551           for (i=0;i<4;i++) {
00552             sdata[i] = ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0R(i)), NULL);
00553           }
00554           sdata[4] = (i=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_CR_SHADOW), NULL));
00555 
00556           close(devfd);
00557 // could not make ioctl to return 32 bits - all negative become -1
00558 // so I'll throw away bit 30 and use it to return bit 31
00559            data[4]=(data[4] & 0x3fffffff) |((data[4] & 0x40000000) << 1);
00560 //      return (long ) ((ccam_cr_shadow & 0x3fffffff) | ((ccam_cr_shadow >>1) & 0x40000000));
00561 
00562 
00563 //        printf ("data[4]= %lx sdata[4]= %lx sdata[4]>>1 =  %lx i/10= %lx i - decimal= %d\r\n",
00564 //                      data[4], sdata[4], sdata[4]>>1, i/10,i);
00565 //
00566 //        printf ("data[4]= %x sdata[4]= %x sdata[4]>>1 = %x\r\n",
00567 //
00568 //                      data[4], sdata[4], sdata[4]>>1);
00569 
00570           printf ("data %lx %lx %lx %lx\nshadow CR %lx\r\n",
00571                    data[0],
00572                    data[1],
00573                    data[2],
00574                    data[3],
00575                    data[4]);
00576           return 0;
00577 
00578         }
00579 
00580         if ((argv[1][1] == 'w') || (argv[1][1] == 'w')) { // write port
00581           if (argc<4) {printf("Needs more args...\r\n"); return 0;}
00582           a=(strtol (argv[2],&cp,16) & 0xf);
00583           d=strtol (argv[3],&cp,16);
00584           printf ("command arguments got - %lx %lx\r\n", a,  d);
00585           devfd = open("/dev/ccam_dma.raw", O_WRONLY);
00586           printf ("open returned - %x\r\n",devfd);
00587           i=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CSP0W (a) ), d);
00588           printf ("ioctl returned - %x\r\n",i);
00589           close(devfd);
00590           printf ("devfd closed\r\n");
00591 
00592           return 0;
00593         }
00594 #endif
00595         if ((argv[1][1] == 's') || (argv[1][1] == 'S')) { // sensor registers r/w
00596           if ((argv[1][2] == 'r') || (argv[1][2] == 'R')) {
00597             if (argc<3) { // dumping all 64 registers
00598                 devfd = open("/dev/ccam_dma.raw", O_RDONLY);
00599                 printf ("open returned - %x\r\n",devfd);
00600                 for (i=0;i<0x40;i++) {
00601                   if ((i & 0x0f)==0) printf("\r\n%2x:",i);
00602                   d=ioctl(devfd, _CCCMD( CCAM_RPARS , i ), 0);
00603                   printf(" %4lx", d);
00604                 }
00605                 printf ("\r\n");
00606                 close(devfd);
00607                 printf ("devfd closed\r\n");
00608                 return 0;
00609             }
00610             a= strtol (argv[2],&cp,16);
00611             devfd = open("/dev/ccam_dma.raw", O_RDONLY);
00612             printf ("open returned - %x\r\n",devfd);
00613             d=ioctl(devfd, _CCCMD( CCAM_RPARS , a ), 0);
00614             printf ("sensor register %lx = %lx\r\n", a,d);
00615             close(devfd);
00616             printf ("devfd closed\r\n");
00617             return 0;
00618 
00619           } else if  ((argv[1][2] == 'w') || (argv[1][2] == 'W')) {
00620             if (argc<4) {printf("Needs more args...\r\n"); return 0;}
00621             a= strtol (argv[2],&cp,16);
00622             d= strtol (argv[3],&cp,16);
00623             devfd = open("/dev/ccam_dma.raw", O_WRONLY);
00624             printf ("open returned - %x\r\n",devfd);
00625             i=ioctl(devfd, _CCCMD( CCAM_WPARS , a ), d);
00626             printf ("ioctl (%x,%lx,%lx) returned - %x\r\n",devfd, _CCCMD( CCAM_WPARS , a ), d, i);
00627 
00628             close(devfd);
00629             printf ("devfd closed\r\n");
00630             return 0;
00631           }
00632         }
00633 
00634 /* Micron sensor 16-bit i2c accesses */
00635   
00636         if (argv[1][1] == 'I') { // i2c operations
00637           if ((argv[1][2] == 'r') || (argv[1][2] == 'R')) {
00638             if (argc<3) { // dumping all i2c registers from zoran chip
00639               devfd = open("/dev/ccam_dma.raw", O_WRONLY);
00640                 j=ioctl(devfd, _CCCMD( CCAM_RPARS , P_SENSOR ), 0);
00641                 printf ("P_SENSOR - %x\r\n",j);
00642               close(devfd);
00643                 bus=0;
00644                 devfd = open("/dev/ccami2c", O_RDONLY);
00645                 printf ("open returned - %x\r\n",devfd);
00646 
00647 // read sensor type
00648     sa=0xba; //MI1300
00649     if (j==52) sa=0x90; //maybe will change later to 0xba as other sensors
00650     j= 256;
00651     printf("dumping all i2c data from slave address %lx\r\n",sa);
00652 
00653 //              for (i=0;i<256;i++) {
00654                 for (i=0;i<j;i++) {
00655                   if ((i & 0x0f)==0) printf("\r\n%2x:",i);
00656                   d=ioctl(devfd, _IO(CMOSCAM_IOCTYPE,I2C_16_READREG), I2C_16_READARG ( sa, i));
00657                   printf(" %4lx", d);
00658                 }
00659                 printf ("\r\n");
00660                 close(devfd);
00661                 printf ("devfd closed\r\n");
00662                 return 0;
00663             }
00664             if (argc<4) {printf("Needs more args...\r\n"); return 0;}
00665 
00666             sa= (strtol (argv[2],&cp,16) & 0xff);
00667             ra= (strtol (argv[3],&cp,16) & 0xff);
00668             devfd = open("/dev/ccami2c", O_RDONLY);
00669             printf ("open returned - %x\r\n",devfd);
00670 
00671             d=ioctl(devfd, _IO(CMOSCAM_IOCTYPE,I2C_16_READREG), I2C_16_READARG (sa, ra)) ;
00672             printf ("i2c 16-bit register = %lx\r\n", d);
00673             close(devfd);
00674           printf ("devfd closed\r\n");
00675             return 0;
00676           } else if  ((argv[1][2] == 'w') || (argv[1][2] == 'W')) {
00677 
00678             if (argc<5) {printf("Needs more args...\r\n"); return 0;}
00679             sa= (strtol (argv[2],&cp,16) & 0xff);
00680             ra= (strtol (argv[3],&cp,16) & 0xff);
00681             rd= (strtol (argv[4],&cp,16) & 0xffff);
00682             devfd = open("/dev/ccami2c", O_WRONLY);
00683             printf ("open returned - %x\r\n",devfd);
00684 
00685             d=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, I2C_16_WRITEREG ),I2C_16_WRITEARG(sa, ra, rd));
00686             printf ("i2c returned - %lx\r\n",d);//168
00687             close(devfd);  printf ("devfd closed\r\n");
00688 
00689             return 0;
00690           } else if  ((argv[1][2] == 't') || (argv[1][2] == 'T')) {
00691                  rd=0;
00692                  if (argc>2)    rd= strtol (argv[2],&cp,16);
00693             devfd = open("/dev/ccami2c", O_RDWR);
00694             printf ("open returned - %x\r\n",devfd);
00695             d=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, I2C_DELAYS ), rd);
00696             printf ("i2c timing is - %lx\r\n",d);//168
00697             close(devfd);  printf ("devfd closed\r\n");
00698 
00699             return 0;
00700           } // if  ((argv[1][2] == 'w') ...
00701 
00702 
00703 /* Zoran/Kodak normal i2c accesses */
00704   
00705         } else if (argv[1][1] == 'i') { // i2c operations
00706           if ((argv[1][2] == 'r') || (argv[1][2] == 'R')) {
00707             if (argc<3) { // dumping all i2c registers from zoran chip
00708               devfd = open("/dev/ccam_dma.raw", O_WRONLY);
00709                 j=ioctl(devfd, _CCCMD( CCAM_RPARS , P_SENSOR ), 0);
00710                 printf ("P_SENSOR - %x\r\n",j);
00711               close(devfd);
00712 
00713 
00714                 bus=0;
00715                 devfd = open("/dev/ccami2c", O_RDONLY);
00716                 printf ("open returned - %x\r\n",devfd);
00717 
00718 // read sensor type
00719         if ((j!=4) && (j!=5) && (j!=8) && (j!=9)) {
00720 //        if (j >= 32) {
00721           sa=0x66; // KODAk
00722           if ((j>=0x24) && (j<0x28)) j=256; //KAC5000
00723           else j=192; //KAC1310
00724         } else {
00725                   sa=0x60; // ZORAN
00726           j=16;    // length
00727         }
00728                 printf("dumping all i2c data from slave address %lx\r\n",sa);
00729 
00730 //              for (i=0;i<256;i++) {
00731                 for (i=0;i<j;i++) {
00732                   if ((i & 0x0f)==0) printf("\r\n%2x:",i);
00733                   d=ioctl(devfd, _IO(CMOSCAM_IOCTYPE,I2C_READREG), I2C_READARG ( bus,  sa, i));
00734                   printf(" %2lx", d);
00735                 }
00736                 printf ("\r\n");
00737                 close(devfd);
00738                 printf ("devfd closed\r\n");
00739                 return 0;
00740             }
00741             if (argc<5) {printf("Needs more args...\r\n"); return 0;}
00742 
00743             bus=(strtol (argv[2],&cp,16) & 0x1);
00744             sa= (strtol (argv[3],&cp,16) & 0xff);
00745             ra= (strtol (argv[4],&cp,16) & 0xff);
00746             devfd = open("/dev/ccami2c", O_RDONLY);
00747             printf ("open returned - %x\r\n",devfd);
00748 
00749             d=ioctl(devfd, _IO(CMOSCAM_IOCTYPE,I2C_READREG), I2C_READARG (bus, sa, ra)) ;
00750             printf ("i2c register = %lx\r\n", d);
00751             close(devfd);
00752           printf ("devfd closed\r\n");
00753 
00754             return 0;
00755           } else if  ((argv[1][2] == 'w') || (argv[1][2] == 'W')) {
00756   
00757             if (argc<3) { // writing defaults to zoran chip
00758                 printf("initializing zoran/fpga\r\n");
00759                 return 0;
00760             }
00761 
00762             if (argc<6) {printf("Needs more args...\r\n"); return 0;}
00763             bus=(strtol (argv[2],&cp,16) & 0x1);
00764             sa= (strtol (argv[3],&cp,16) & 0xff);
00765             ra= (strtol (argv[4],&cp,16) & 0xff);
00766             rd= (strtol (argv[5],&cp,16) & 0xff);
00767             devfd = open("/dev/ccami2c", O_WRONLY);
00768             printf ("open returned - %x\r\n",devfd);
00769 
00770             d=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, I2C_WRITEREG ),I2C_WRITEARG(bus, sa, ra, rd));
00771             printf ("i2c returned - %lx\r\n",d);//168
00772             close(devfd);  printf ("devfd closed\r\n");
00773 
00774             return 0;
00775           } else if  ((argv[1][2] == 't') || (argv[1][2] == 'T')) {
00776                  rd=0;
00777                  if (argc>2)    rd= strtol (argv[2],&cp,16);
00778             devfd = open("/dev/ccami2c", O_RDWR);
00779             printf ("open returned - %x\r\n",devfd);
00780             d=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, I2C_DELAYS ), rd);
00781             printf ("i2c timing is - %lx\r\n",d);//168
00782             close(devfd);  printf ("devfd closed\r\n");
00783 
00784             return 0;
00785           } // if  ((argv[1][2] == 'w') ...
00786 
00787 // #define CCAM_DMA_SIZE 445830
00788 // #define CCAM_DESCR_SIZE (( CCAM_DMA_SIZE >> 14)+1)
00789 #if 0
00790         } else if ((argv[1][1] == 'd') || (argv[1][1] == 'D')) {
00791             if ((argv[1][2] == 's') || (argv[1][2] == 'S')) {
00792               if (argc<3) { // read all
00793                 devfd = open("/dev/ccam_dma.raw", O_RDONLY);
00794                 printf ("open returned - %x\r\n",devfd);
00795                 for (i=0; i< CCAM_DESCR_SIZE; i++) {
00796                   for (j=0;j<4;j++) sdata[j]= \
00797                         ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_MONITOR_DMA_DESCR ), (i<<2)+j);
00798                   printf ("%2x: %8lx %8lx %8lx %8lx\r\n",i,data[0],data[1],data[2],data[3]);
00799                 }
00800                 close(devfd);  printf ("devfd closed\r\n");
00801                 return 0;
00802               } else {
00803                 a=(strtol (argv[2],&cp,16));
00804                 devfd = open("/dev/ccam_dma.raw", O_RDONLY);
00805                 printf ("open returned - %x\r\n",devfd);
00806                 d=(unsigned long) ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_MONITOR_DMA_DESCR ), a);
00807                 printf ("DMA descriptor [%lx:%lx] = %lx\r\n", (a>>2), (a & 3),  d);
00808                 close(devfd);  printf ("devfd closed\r\n");
00809                 return 0;
00810               }
00811             }
00812             if ((argv[1][2] == 'b') || (argv[1][2] == 'B')) {
00813               if (argc<3) a=0;
00814               else a=(strtol (argv[2],&cp,16));
00815               devfd = open("/dev/ccam_dma.raw", O_RDONLY);
00816               printf ("open returned - %x\r\n",devfd);
00817               for (i=0; i< 20; i++) {
00818                 for (j=0;j<4;j++) sdata[j]= \
00819                   ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_MONITOR_DMA_BUFFER ), a+(i<<2)+j);
00820                 printf ("%6lx: %8lx %8lx %8lx %8lx\r\n",a+(i <<2),data[0],data[1],data[2],data[3]);
00821               }
00822               close(devfd);  printf ("devfd closed\r\n");
00823               return 0;
00824             }
00825 #endif
00826         } else if  (argv[1][1] == 'z'){
00827           if (argc<3) {
00828               if ((devfd = open("/dev/ccam_dma.raw", O_RDONLY))<=0) return -1; // may use ccam_dma.raw
00829               printf ("open returned - %x\r\n",devfd);
00830               i=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_MONITOR_SEQ ), 0);
00831          errno=0;
00832               j=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_MONITOR_SEQ ), 1);
00833               if (j==-1) j=-errno;
00834               printf ("Cam-sequencer state - %x,  count= %x\r\n",i,j);
00835               close(devfd);
00836               return 0;
00837           } else {
00838               j= strtol (argv[2],&cp,16);
00839 
00840               if ((devfd = open("/dev/ccam_dma.raw", O_WRONLY))<=0) return -1; // may use ccam_dma.raw
00841 /*
00842               printf ("open returned - %x\r\n",devfd);
00843                   if (j) {
00844                     ioctl(devfd, _CCCMD(CCAM_WPARS , P_EXPOS ),    j);
00845                 ioctl(devfd, _CCCMD(CCAM_WPARS , P_UPDATE ),   1); // 1 - at once, 2 - later
00846                 i=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_SET_EXT_EXPOSURE ), 1);
00847                   } else
00848                     i=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_SET_EXT_EXPOSURE ), 0);
00849               printf ("ioctl returned - %x\r\n",i);
00850 */
00851               i=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_SET_EXT_EXPOSURE ), j);
00852               close(devfd);
00853               return 0;
00854           }
00855         } else if  (argv[1][1] == 'Z') {
00856           if (argc<3) {
00857               if ((devfd = open("/dev/ccam_dma.raw", O_RDONLY))<=0) return -1; // may use ccam_dma.raw
00858               printf ("open returned - %x\r\n",devfd);
00859               i=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_MONITOR_SEQ ), 0);
00860               j=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_MONITOR_SEQ ), 1);
00861               printf ("(CLI) Cam-sequencer state - %x,  count= %x\r\n",i,j);
00862               close(devfd);
00863               return 0;
00864           } else {
00865               j= strtol (argv[2],&cp,16);
00866 
00867               if ((devfd = open("/dev/ccam_dma.raw", O_WRONLY))<=0) return -1; // may use ccam_dma.raw
00868                   if (j) {
00869                     ioctl(devfd, _CCCMD(CCAM_WPARS , P_EXPOS ),    j);
00870                 ioctl(devfd, _CCCMD(CCAM_WPARS , P_UPDATE ),   1); // 1 - at once, 2 - later
00871                 i=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_SET_EXT_EXPOSURE ), 1);
00872                   } else
00873                     i=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_SET_EXT_EXPOSURE ), 0);
00874               i=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_SET_EXT_EXPOSURE ), j);
00875               printf ("ioctl returned - %x\r\n",i);
00876               close(devfd);
00877               return 0;
00878           }
00879         } else if  ((argv[1][1] == 'c') || (argv[1][1] == 'c')){
00880 
00881           if (argc<3) {printf("Needs more args (bit #, [op])\r\n"); return 0;}
00882           a=(strtol (argv[2],&cp,16) & 0x1f);
00883           d=0;
00884           if (argc>3) d=(strtol (argv[3],&cp,16) & 0x3);
00885           if ((devfd = open("/dev/ccam_dma.raw", O_RDWR))<0) return -1;
00886           i=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_CR_MODIFY), d | (a<<2));
00887           j=ioctl(devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_CR_MODIFY), 0 | (a<<2));
00888           printf ("CR[%lx]=%x (was %x)\r\n",a,j,i);
00889           close(devfd);
00890           printf ("devfd closed\r\n");
00891 
00892           return 0;
00893 
00894 
00895 //#define IO_CCAM_SET_EXT_EXPOSURE  0x06 >0 - in 10us, ==0 - stop
00896 //#define IO_CCAM_MONITOR_SEQ       0x07
00897 #if 0
00898         
00899         } else if  ((argv[1][1] == 'x') || (argv[1][1] == 'X')) {
00900               if  (argv[1][1] == 'X')     devfd = open("/dev/ccam_dma.raw", O_WRONLY);
00901               else devfd = open("/dev/ccam_dma.raw", O_WRONLY);
00902               printf ("open returned - %x\r\n",devfd);
00903               switch (argv[1][2]){ // s/e/x
00904                case ('x'):
00905                case ('X'):{
00906                 d= (unsigned long) ioctl (devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_STOP_DMA ), NULL);
00907                 printf ("Stop DMA returned %lx\r\n", d);
00908                 close(devfd);  printf ("devfd closed\r\n");
00909                 return 0;
00910                }
00911                case ('s'):
00912                case ('S'):{
00913                 d= ioctl (devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_EXPOS_START ), NULL);
00914                 printf ("START EXPOSURE returned %lx\r\n", d);
00915                 close(devfd);  printf ("devfd closed\r\n");
00916                 return 0;
00917                }
00918 
00919                case ('e'):
00920                case ('E'):{
00921                 d= ioctl (devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_EXPOS_END ), NULL);
00922                 printf ("END EXPOSURE returned %lx\r\n", d);
00923                 close(devfd);  printf ("devfd closed\r\n");
00924                 return 0;
00925                }
00926                default: {
00927                 printf ("getting picture..\r\n");
00928                 if (argc<3) t1=10000; // 100 msec exposure
00929                 else t1=(strtol (argv[2],&cp,10));
00930                 if (argc<4) t2=1000; // 10 msec pre-erase
00931                 else t2=(strtol (argv[3],&cp,10));
00932                 if (argc<5) a=2; // 10 msec pre-erase
00933                 else a=(strtol (argv[4],&cp,10));
00934                 d= ioctl (devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_STOP_DMA ), NULL);
00935 
00936                 for (i=0;i<a;i++){
00937                         d= ioctl (devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_EXPOS_START ), t2);
00938 //                      printf ("Stop DMA returned %lx\r\n", d);
00939                 }
00940 //              d= ioctl (devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_EXPOS_START ), NULL);
00941 //              printf ("START EXPOSURE returned %lx\r\n", d);
00942 //              printf ("press any key to continue...");
00943 //              c=getchar ();
00944 //              printf ("OK\r\n");
00945 // +            d= ioctl (devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_EXPOS_END ), NULL);
00946 
00947 //              printf ("_IO(CMOSCAM_IOCTYPE, IO_CCAM_EXPOSE )= %lx\r\n", _IO(CMOSCAM_IOCTYPE, IO_CCAM_EXPOSE ) );
00948 
00949                 d= ioctl (devfd, _IO(CMOSCAM_IOCTYPE, IO_CCAM_EXPOSE ), t1);
00950 
00951 //              printf ("END EXPOSURE returned %lx\r\n", d);
00952                 close(devfd);  printf ("devfd closed\r\n");
00953                 return 0;
00954 
00955                } // default
00956 
00957               } // switch
00958 #endif
00959 
00960         } // if  ((argv[1][1] == 'x')...
00961 
00962         printf(usage);
00963         return 0;       
00964 }
00965 

Generated on Thu Aug 7 16:18:59 2008 for elphel by  doxygen 1.5.1