finally fix 2's compliment bug in asynchronous
authorDavid Schleef <ds@schleef.org>
Wed, 14 Jun 2000 07:02:02 +0000 (07:02 +0000)
committerDavid Schleef <ds@schleef.org>
Wed, 14 Jun 2000 07:02:02 +0000 (07:02 +0000)
comedi/drivers/ni_atmio.c
comedi/drivers/ni_mio_common.c
comedi/drivers/ni_stc.h

index d0c16f3c7d132cdb27977c28d8236412c366b2b3..b82f64b6ea304e253ee784a73eaf8ab2954c11ea 100644 (file)
@@ -269,6 +269,9 @@ typedef struct{
        unsigned short gpct_command1;
        unsigned short gpct_input_select0;
        unsigned short gpct_input_select1;
+
+       int ai_chanlistptr;
+       int ai_chanlist[512];
 }ni_private;
 #define devpriv ((ni_private *)dev->private)
 
index a083921e52e0094f4fb58d9e975b80af57355081..d55f0fa68aa2628082b70d96a8a0d7e61d8f45b4 100644 (file)
@@ -334,10 +334,21 @@ static void ni_ai_fifo_read(comedi_device *dev,comedi_subdevice *s,
                sampl_t *data,int n)
 {
        int i;
+       sampl_t d;
+       int j;
+       int range;
 
+       j=devpriv->ai_chanlistptr;
        for(i=0;i<n;i++){
-               data[i]=ni_readw(ADC_FIFO_Data_Register);
+               d=ni_readw(ADC_FIFO_Data_Register);
+               range=CR_RANGE(devpriv->ai_chanlist[j]);
+               if(range>=8)d^=0x800;
+               d&=0xfff;
+               data[i]=d;
+               j++;
+               if(j>=s->cur_trig.n_chan)j=0;
        }
+       devpriv->ai_chanlistptr=j;
 }
 
 
@@ -539,7 +550,7 @@ static void ni_load_channelgain_list(comedi_device *dev,unsigned int n_chan,unsi
                
                /* fix the external/internal range differences */
                range=ni_gainlkup[boardtype.gainlkup][range];
-               list[i]=CR_PACK(chan,range,aref);
+               devpriv->ai_chanlist[i]=CR_PACK(chan,range,aref);
 
                hi=ni_modebits1[aref]|(chan&ni_modebits2[aref]);
                ni_writew(hi,Configuration_Memory_High);
index 1582a5a252e89ccc5241bbd23fefb7dc7e4af416..6cef7f4306f5b3ff7f8693e808b032450850017f 100644 (file)
@@ -493,7 +493,7 @@ typedef struct ni_board_struct{
        
        int has_8255;
 
-        int n_gpct;            /* CLO */
+        int n_gpct;
 
        struct caldac_struct **caldac;
 }ni_board;