Listing 2. Code Snippet Demonstrating More Advanced Scanning by Using Commands and Triggers /* Goal: Set up Comedi to acquire 2 channels, and scan each set twice. Perform the acquisition after receiving a trigger signal on a digital line. */ comedi_cmd c, *cmd=&c; unsigned int chanlist[2]; /* CR_PACK is a special Comedi macro used to setup a channel, a range, and a ground reference */ chanlist[0] = CR_PACK(0,0,0); chanlist[1] = CR_PACK(1,0,0); /* Which subdevice should be used? */ /* Subdevice 0 is analog input on most boards */ cmd->subdev = 0; cmd->chanlist = chanlist; cmd->chanlist_len = n_chan; /* Start command when an external digital line is triggered. Use digital channel specified in start_arg */ cmd->start_src = TRIG_EXT; cmd->start_arg = 3; /* begin scan immediately following trigger */ cmd->scan_begin_src = TRIG_FOLLOW; cmd->scan_begin_arg = 0; /* begin conversion immediately following scan */ cmd->convert_src = TRIG_NOW; /* end scan after acquiring scan_end_arg channels */ cmd->scan_end_src = TRIG_COUNT; cmd->scan_end_arg = 2; /* Stop the command after stop_arg scans */ cmd->stop_src = TRIG_COUNT; cmd->stop_arg = 2; /* Start the command */ comedi_cmd(device, cmd);