summaryrefslogtreecommitdiffstats
path: root/libk8055
diff options
context:
space:
mode:
Diffstat (limited to 'libk8055')
-rw-r--r--libk8055/main.c437
1 files changed, 176 insertions, 261 deletions
diff --git a/libk8055/main.c b/libk8055/main.c
index cb8d4b0..4a22514 100644
--- a/libk8055/main.c
+++ b/libk8055/main.c
@@ -1,37 +1,37 @@
/* $Id: main.c,v 1.3 2007/03/15 14:37:58 pjetur Exp $
- ***************************************************************************
- * Copyright (C) 2004 by Nicolas Sutre *
- * nicolas.sutre@free.fr *
- * *
- * Copyright (C) 2005 by Bob Dempsey *
- * bdempsey_64@msn.com *
- * *
- * Copyright (C) 2005 by Julien Etelain and Edward Nys *
- * Converted to C *
- * Commented and improved by Julien Etelain <julien.etelain@utbm.fr> *
- * Edward Nys <edward.ny@utbm.fr> *
- * *
- * Copyleft (L) 2005 by Sven Lindberg *
- * k8055@k8055.mine.nu *
- * Give it up already :) Simplified (read improved..) and included *
- * with k8055 lib and with a functional man page *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- ***************************************************************************/
-
+ ****************************************************************************
+ * Copyright (C) 2004 by Nicolas Sutre *
+ * nicolas.sutre@free.fr *
+ * *
+ * Copyright (C) 2005 by Bob Dempsey *
+ * bdempsey_64@msn.com *
+ * *
+ * Copyright (C) 2005 by Julien Etelain and Edward Nys *
+ * Converted to C *
+ * Commented and improved by Julien Etelain <julien.etelain@utbm.fr> *
+ * Edward Nys <edward.ny@utbm.fr> *
+ * *
+ * Copyleft (L) 2005 by Sven Lindberg *
+ * k8055@k8055.mine.nu *
+ * Give it up already :) Simplified (read improved..) and included *
+ * with k8055 lib and with a functional man page *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ****************************************************************************/
+
#include <string.h>
#include <stdio.h>
#include <usb.h>
@@ -44,251 +44,166 @@
#define true 1
int debug = 0;
-
int ia1 = -1;
int ia2 = -1;
int id8 = -1;
int ipid = 0;
-
int numread = 1;
-
-int dbt1 = -1; // (-1 => not to set)
-int dbt2 = -1; // (-1 => not to set)
-
+int dbt1 = -1;
+int dbt2 = -1;
int resetcnt1 = false;
int resetcnt2 = false;
-
int delay = 0;
-/*
- Convert a string on n chars to an integer
- Return 1 on sucess
- 0 on failure (non number)
-*/
-int Convert_StringToInt(char *text, int *i)
-{
- return sscanf(text, "%d", i);
+inline int str2int( char* text, int* i ) {
+ return sscanf( text, "%d", i );
}
-/*
- Write help to standard output
-*/
-void display_help ( char *params[] ) {
-
- printf("K8055 version %s MrBrain Build\n",version());
- printf("Copyright (C) 2004 by Nicolas Sutre\n");
- printf("Copyright (C) 2005 by Bob Dempsey\n");
- printf("Copyright (C) 2005 by Julien Etelain and Edward Nys\n");
- printf("Copyleft (L) 2005 by Sven Lindberg\n");
- printf("\n");
- printf("Syntax : %s [-p:(number)] [-d:(value)] [-a1:(value)] [-a2:(value)]\n",params[0]);
- printf(" [-num:(number) [-delay:(number)] [-dbt1:(value)]\n");
- printf(" [-dbt2:(value)] [-reset1] [-reset2] [-debug]\n");
- printf(" -p:(number) Set board number\n");
- printf(" -d:(value) Set digital output value (8 bits in decimal)\n");
- printf(" -a1:(value) Set analog output 1 value (0-255)\n");
- printf(" -a2:(value) Set analog output 2 value (0-255)\n");
- printf(" -num:(number) Set number of measures\n");
- printf(" -delay:(number) Set delay between two measure (in msec)\n");
- printf(" -dbt1:(value) Set debounce time for counter 1 (in msec)\n");
- printf(" -dbt2:(value) Set debounce time for counter 2 (in msec)\n");
- printf(" -reset1 Reset counter 1\n");
- printf(" -reset2 Reset counter 2\n");
- printf(" -debug Activate debug mode\n");
- printf("Example : %s -p:1 -d:147 -a1:25 -a2:203\n",params[0]);
- printf("\n");
- printf("Output : (timestamp);(digital);(analog 1);(analog 2);(counter 1);(counter 2)\n");
- printf("Note : timestamp is the number of msec when data is read since program start\n");
- printf("Example : 499;16;128;230;9;8\n");
- printf("499 : Measure done 499 msec after program start\n");
-
+static void display_help ( char* params[] ) {
+ printf( "K8055 version %s MrBrain Build\n",version() );
+ printf( "Copyright (C) 2004 by Nicolas Sutre\n" );
+ printf( "Copyright (C) 2005 by Bob Dempsey\n" );
+ printf( "Copyright (C) 2005 by Julien Etelain and Edward Nys\n" );
+ printf( "Copyleft (L) 2005 by Sven Lindberg\n" );
+ printf( "\n" );
+ printf( "Syntax : %s [-p:(number)] [-d:(value)] [-a1:(value)] [-a2:(value)]\n",params[0] );
+ printf( " [-num:(number) [-delay:(number)] [-dbt1:(value)]\n" );
+ printf( " [-dbt2:(value)] [-reset1] [-reset2] [-debug]\n" );
+ printf( " -p:(number) Set board number\n" );
+ printf( " -d:(value) Set digital output value (8 bits in decimal)\n" );
+ printf( " -a1:(value) Set analog output 1 value (0-255)\n" );
+ printf( " -a2:(value) Set analog output 2 value (0-255)\n" );
+ printf( " -num:(number) Set number of measures\n" );
+ printf( " -delay:(number) Set delay between two measure (in msec)\n" );
+ printf( " -dbt1:(value) Set debounce time for counter 1 (in msec)\n" );
+ printf( " -dbt2:(value) Set debounce time for counter 2 (in msec)\n" );
+ printf( " -reset1 Reset counter 1\n" );
+ printf( " -reset2 Reset counter 2\n" );
+ printf( " -debug Activate debug mode\n" );
+ printf( "Example : %s -p:1 -d:147 -a1:25 -a2:203\n",params[0] );
+ printf( "\n" );
+ printf( "Output : (timestamp);(digital);(analog 1);(analog 2);(counter 1);(counter 2)\n" );
+ printf( "Note : timestamp is the number of msec when data is read since program start\n" );
+ printf( "Example : 499;16;128;230;9;8\n" );
+ printf( "499 : Measure done 499 msec after program start\n" );
}
-
-/*
- Read arguments, and store values
- Return true if arguments are valid
- else return false
-*/
-int read_param(int argc,char *params[])
-{
- int erreurParam = false;
- int i;
-
- ipid = 0;
-
- for (i=1; i<argc;i++)
- {
- if ( !strncmp(params[i],"-p:",3) &&
- !Convert_StringToInt(params[i]+3,&ipid) ) erreurParam = true;
- else
- if ( !strncmp(params[i],"-a1:",4) &&
- !Convert_StringToInt(params[i]+4,&ia1) ) erreurParam = true;
- else
- if ( !strncmp(params[i],"-a2:",4) &&
- !Convert_StringToInt(params[i]+4,&ia2) ) erreurParam = true;
- else
- if ( !strncmp(params[i],"-d:",3) &&
- !Convert_StringToInt(params[i]+3,&id8) ) erreurParam = true;
- else
- if ( !strncmp(params[i],"-num:",5) &&
- !Convert_StringToInt(params[i]+5,&numread) ) erreurParam = true;
- else
- if ( !strncmp(params[i],"-delay:",7) &&
- !Convert_StringToInt(params[i]+7,&delay) ) erreurParam = true;
- else
- if ( !strncmp(params[i],"-dbt1:",6) &&
- !Convert_StringToInt(params[i]+6,&dbt1) ) erreurParam = true;
- else
- if ( !strncmp(params[i],"-dbt2:",6) &&
- !Convert_StringToInt(params[i]+6,&dbt2) ) erreurParam = true;
- else
- if ( !strcmp(params[i],"-debug") ){
- debug = 1;
- set_debug_on();
- }
- else
- if ( !strcmp(params[i],"-reset1") ) resetcnt1 = true;
- else
- if ( !strcmp(params[i],"-reset2") ) resetcnt2 = true;
- else
- if ( !strcmp(params[i],"--help") ) {
- display_help(params);
- return false;
- }
-
- }
-
-
- /*
- Send parameters to standart error
- */
- if ( debug )
- fprintf(stderr,"Parameters : Card=%d Analog1=%d Analog2=%d Digital=%d\n",ipid,ia1,ia2,id8);
-
- if (ipid<0 || ipid>3){
- printf("Invalid board address!\n");
- return -1;
- }
-
-
- if (erreurParam)
- {
-
- printf("Invalid or incomplete options\n");
-
- display_help(params);
- return false;
- }
-
-
- return true;
+int read_param( int argc, char* params[] ) {
+ int erreurParam = false;
+ int i;
+ ipid = 0;
+ for ( i=1; i<argc; i++ ) {
+ if ( !strncmp( params[i],"-p:",3 ) &&
+ !str2int( params[i]+3,&ipid ) ) erreurParam = true;
+ else if ( !strncmp( params[i],"-a1:",4 ) &&
+ !str2int( params[i]+4,&ia1 ) ) erreurParam = true;
+ else if ( !strncmp( params[i],"-a2:",4 ) &&
+ !str2int( params[i]+4,&ia2 ) ) erreurParam = true;
+ else if ( !strncmp( params[i],"-d:",3 ) &&
+ !str2int( params[i]+3,&id8 ) ) erreurParam = true;
+ else if ( !strncmp( params[i],"-num:",5 ) &&
+ !str2int( params[i]+5,&numread ) ) erreurParam = true;
+ else if ( !strncmp( params[i],"-delay:",7 ) &&
+ !str2int( params[i]+7,&delay ) ) erreurParam = true;
+ else if ( !strncmp( params[i],"-dbt1:",6 ) &&
+ !str2int( params[i]+6,&dbt1 ) ) erreurParam = true;
+ else if ( !strncmp( params[i],"-dbt2:",6 ) &&
+ !str2int( params[i]+6,&dbt2 ) ) erreurParam = true;
+ else if ( !strcmp( params[i],"-debug" ) ) {
+ debug = 1;
+ set_debug_on();
+ } else if ( !strcmp( params[i],"-reset1" ) ) resetcnt1 = true;
+ else if ( !strcmp( params[i],"-reset2" ) ) resetcnt2 = true;
+ else if ( !strcmp( params[i],"--help" ) ) {
+ display_help( params );
+ return false;
+ }
+ }
+ if ( debug )
+ fprintf( stderr,"Parameters : Card=%d Analog1=%d Analog2=%d Digital=%d\n",ipid,ia1,ia2,id8 );
+ if ( ipid<0 || ipid>3 ) {
+ printf( "Invalid board address!\n" );
+ return -1;
+ }
+ if ( erreurParam ) {
+ printf( "Invalid or incomplete options\n" );
+ display_help( params );
+ return false;
+ }
+ return true;
}
-/*
- Give current timestamp in miliseconds
-*/
inline unsigned long int time_msec ( void ) {
- struct timeval t; struct timezone tz;
- gettimeofday (&t,&tz);
- return (1000*t.tv_sec)+(t.tv_usec/1000);
+ struct timeval t;
+ struct timezone tz;
+ gettimeofday ( &t,&tz );
+ return ( 1000*t.tv_sec )+( t.tv_usec/1000 );
}
-
-int main (int argc,char *params[])
-{
- int i,result;
- long d=0;
- long a1=0,a2=0;
- long c1=0, c2=0;
- unsigned long int start,mstart=0,lastcall=0;
-
- start = time_msec();
-
- /*
- Load parameters
- If parameters are valid continue
- */
-
- if (read_param(argc,params))
- {
- /*
- Initialise USB system
- and enable debug mode
-
- if ( debug )
- usb_set_debug(2);
- */
- /*
- Search the device
- */
+int main ( int argc,char* params[] ) {
+ int i,result;
+ long d=0;
+ long a1=0,a2=0;
+ long c1=0, c2=0;
+ unsigned long int start,mstart=0,lastcall=0;
+ start = time_msec();
+ if ( read_param( argc,params ) ) {
+ /*
+ * Initialise USB system
+ * and enable debug mode
+ */
+ if ( debug )
+ usb_set_debug( 2 );
struct k8055_dev dev;
- if ( open_device(&dev, ipid)<0 ) {
- printf("Could not open the k8055 (port:%d)\nPlease ensure that the device is correctly connected.\n",ipid);
- return (-1);
-
- } else {
-
- if ( resetcnt1 )
- reset_counter(&dev,1);
- if ( resetcnt2 )
- reset_counter(&dev,2);
- if ( dbt1 != -1 )
- set_counter_debounce_time(&dev,1,dbt1);
- if ( dbt2 != -1 )
- set_counter_debounce_time(&dev,2,dbt1);
-
- if ((ia1!=-1) && (ia2!=-1) && (id8!=-1)) {
- result = set_all_values(&dev,id8,ia1,ia2);
- if (debug) printf("SetAllValues=%d - Digital:%d, analog1:%d, analog2:%d\n",result,id8,ia1,ia2);
- }
- else if ((id8 != -1) && (ia1!=-1)) {
- result = set_all_values(&dev,id8,ia1,0);
- if (debug) printf("SetAllValues=%d - Digital:%d, analog1:%d\n",result,id8,ia1);
- }
- else if ((id8 != -1) && (ia2!=-1)) {
- result = set_all_values(&dev,id8,0,ia2);
- if (debug) printf("SetAllValues=%d - Digital:%d, analog2:%d\n",result,id8,ia2);
- }
- else if ((ia1 != -1) && (ia2!=-1)) {
- result = set_all_values(&dev,0,ia1,ia2);
- if (debug) printf("SetAllValues=%d - analog1:%d, analog2:%d\n",result,ia1,ia2);
- }
- else {
- if (ia1!=-1) {
- result=output_analog_channel(&dev,1,ia1);
- if (debug) printf("Set analog1:%d=>%d\n",ia1,result);
- }
- if (ia2!=-1) {
- result=output_analog_channel(&dev,2,ia2);
- if (debug) printf("Set analog2:%d=>%d\n",ia2,result);
- }
- if (id8!=-1) {
- result=write_all_digital(&dev,(long)id8);
- if (debug) printf("Set digital:%d=>%d\n",id8,result);
- }
- }
-
- mstart = time_msec(); // Measure start
- for (i=0; i<numread; i++) {
-
- if ( delay ) {
- // Wait until next measure
- while ( time_msec()-mstart < i*delay );
- }
- read_all_values( &dev,&d,&a1,&a2,&c1,&c2);
-
-/* ReadAllAnalog(&a1,&a2);
- d=ReadAllDigital();
- c1=ReadCounter(1);
- c2=ReadCounter(2);
-*/
- lastcall = time_msec();
- printf("%d;%d;%d;%d;%d;%d\n", (int)(lastcall-start),(int)d, (int)a1, (int)a2,(int)c1,(int)c2 );
- }
-
- close_device(&dev);
- }
- }
- return 0;
+ if ( open_device( &dev, ipid )<0 ) {
+ printf( "Could not open the k8055 (port:%d)\nPlease ensure that the device is correctly connected.\n",ipid );
+ return ( EXIT_FAILURE );
+ } else {
+ if ( resetcnt1 )
+ reset_counter( &dev,1 );
+ if ( resetcnt2 )
+ reset_counter( &dev,2 );
+ if ( dbt1 != -1 )
+ set_counter_debounce_time( &dev,1,dbt1 );
+ if ( dbt2 != -1 )
+ set_counter_debounce_time( &dev,2,dbt1 );
+ if ( ( ia1!=-1 ) && ( ia2!=-1 ) && ( id8!=-1 ) ) {
+ result = set_all_values( &dev,id8,ia1,ia2 );
+ if ( debug ) printf( "SetAllValues=%d - Digital:%d, analog1:%d, analog2:%d\n",result,id8,ia1,ia2 );
+ } else if ( ( id8 != -1 ) && ( ia1!=-1 ) ) {
+ result = set_all_values( &dev,id8,ia1,0 );
+ if ( debug ) printf( "SetAllValues=%d - Digital:%d, analog1:%d\n",result,id8,ia1 );
+ } else if ( ( id8 != -1 ) && ( ia2!=-1 ) ) {
+ result = set_all_values( &dev,id8,0,ia2 );
+ if ( debug ) printf( "SetAllValues=%d - Digital:%d, analog2:%d\n",result,id8,ia2 );
+ } else if ( ( ia1 != -1 ) && ( ia2!=-1 ) ) {
+ result = set_all_values( &dev,0,ia1,ia2 );
+ if ( debug ) printf( "SetAllValues=%d - analog1:%d, analog2:%d\n",result,ia1,ia2 );
+ } else {
+ if ( ia1!=-1 ) {
+ result=output_analog_channel( &dev,1,ia1 );
+ if ( debug ) printf( "Set analog1:%d=>%d\n",ia1,result );
+ }
+ if ( ia2!=-1 ) {
+ result=output_analog_channel( &dev,2,ia2 );
+ if ( debug ) printf( "Set analog2:%d=>%d\n",ia2,result );
+ }
+ if ( id8!=-1 ) {
+ result=write_all_digital( &dev,( long )id8 );
+ if ( debug ) printf( "Set digital:%d=>%d\n",id8,result );
+ }
+ }
+ mstart = time_msec();
+ for ( i=0; i<numread; i++ ) {
+ if ( delay ) {
+ while ( time_msec()-mstart < i*delay );
+ }
+ read_all_values( &dev,&d,&a1,&a2,&c1,&c2 );
+ lastcall = time_msec();
+ printf( "%d;%d;%d;%d;%d;%d\n", ( int )( lastcall-start ),( int )d, ( int )a1, ( int )a2,( int )c1,( int )c2 );
+ }
+ close_device( &dev );
+ }
+ }
+ return EXIT_SUCCESS;
}