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);

