void internal_trigger() { ///assert(cmd!=NULL); //printf("triggering...");fflush(stdout); static comedi_insn ins[2]; static comedi_insnlist il; lsampl_t d1, d2; int ret; il.n_insns=1; il.insns=ins; memset(ins, 0, 2*sizeof(comedi_insn)); d1 = 0; d2 = 0; if(cmd && cmd->chanlist_len) { ins[0].insn=INSN_INTTRIG; ins[0].subdev=0; ins[0].data = &d1; ins[0].n = 1; } ret=comedi_do_insnlist(it,&il); if(ret<0){ comedi_perror("error triggering "); } //printf("done\n");fflush(stdout); }
void do_toggle(void) { #if 1 comedi_insnlist il; comedi_insn insn[3]; lsampl_t data[6]; int mask = 0xff; count++; il.n_insns = 3; il.insns = insn; memset(insn,0,3*sizeof(comedi_insn)); insn[0].insn = INSN_BITS; insn[0].n = 2; insn[0].data = data+0; insn[0].subdev = out_subd; data[0] = mask; //data[1] = count; data[1] = 0xfc; insn[1].insn = INSN_WAIT; insn[1].n = 1; insn[1].data = data+2; data[2] = 100000-1; insn[2].insn = INSN_BITS; insn[2].n = 2; insn[2].data = data+4; insn[2].subdev = out_subd; data[4] = mask; //data[5] = count; data[5] = 0xff; comedi_do_insnlist(device,&il); #else unsigned int data; unsigned int mask = 0xff; count++; data = count; comedi_dio_bitfield(device,out_subd,mask,&data); #endif }
void write_bits(int subdevice, int bits) { comedi_insnlist il; comedi_insn insn[5]; lsampl_t data[10]; int mask = (1<<chan_dat)|(1<<chan_clk); int i; int bit; int ret; il.n_insns = 5; il.insns = insn; memset(insn,0,sizeof(insn)); /* clock low, set data */ insn[0].insn = INSN_BITS; insn[0].n = 2; insn[0].data = data + 0; insn[0].subdev = subdevice; /* wait 1 */ insn[1].insn = INSN_WAIT; insn[1].n = 1; insn[1].data = data + 2; /* clock high, same data */ insn[2].insn = INSN_BITS; insn[2].n = 2; insn[2].data = data + 4; insn[2].subdev = subdevice; /* wait 1 */ insn[3].insn = INSN_WAIT; insn[3].n = 1; insn[3].data = data + 6; /* clock low, same data */ insn[4].insn = INSN_BITS; insn[4].n = 2; insn[4].data = data + 8; insn[4].subdev = subdevice; for(i=0;i<8;i++){ bit=1<<(7-i); //printf("writing %d\n",bit&bits); data[0] = mask; data[1] = (bits&bit)?(1<<chan_dat):0; data[2] = wait1; data[3] = 0; data[4] = mask; data[5] = ((bits&bit)?(1<<chan_dat):0)|(1<<chan_clk); data[6] = wait2; data[7] = 0; data[8] = mask; data[9] = (bits&bit)?(1<<chan_dat):0; ret = comedi_do_insnlist(device,&il); // printf("comedi_do_insnlist returned %d\n",ret); } }