Cleaned up mixing of spaces/tabs for indentation probably done by emacs.
[comedilib.git] / demo / common.c
index c22470ba4be44123135bd093fe6298c5f81825ec..8be9fc7cd254e3e74e7cc0e5b4fef2836f5c63f5 100644 (file)
@@ -140,3 +140,130 @@ void dump_cmd(FILE *out,comedi_cmd *cmd)
                cmd->stop_arg);
 }
 
+int arm(comedi_t *device, unsigned subdevice, lsampl_t source)
+{
+       comedi_insn insn;
+       lsampl_t data[2];
+       int retval;
+
+       memset(&insn, 0, sizeof(comedi_insn));
+       insn.insn = INSN_CONFIG;
+       insn.subdev = subdevice;
+       insn.chanspec = 0;
+       insn.data = data;
+       insn.n = sizeof(data) / sizeof(data[0]);
+       data[0] = INSN_CONFIG_ARM;
+       data[1] = source;
+
+       retval = comedi_do_insn(device, &insn);
+       if(retval < 0)
+       {
+               fprintf(stderr, "%s: error:\n", __FUNCTION__);
+               comedi_perror("comedi_do_insn");
+               return retval;
+       }
+       return 0;
+}
+
+/* This resets the count to zero and disarms the counter.  The counter output
+ is set low. */
+int reset_counter(comedi_t *device, unsigned subdevice)
+{
+       comedi_insn insn;
+       lsampl_t data[1];
+       int retval;
+
+       memset(&insn, 0, sizeof(comedi_insn));
+       insn.insn = INSN_CONFIG;
+       insn.subdev = subdevice;
+       insn.chanspec = 0;
+       insn.data = data;
+       insn.n = sizeof(data) / sizeof(data[0]);
+       data[0] = INSN_CONFIG_RESET;
+
+       retval = comedi_do_insn(device, &insn);
+       if(retval < 0)
+       {
+               fprintf(stderr, "%s: error:\n", __FUNCTION__);
+               comedi_perror("comedi_do_insn");
+               return retval;
+       }
+       return 0;
+}
+
+int set_counter_mode(comedi_t *device, unsigned subdevice, lsampl_t mode_bits)
+{
+       comedi_insn insn;
+       lsampl_t data[2];
+       int retval;
+
+       memset(&insn, 0, sizeof(comedi_insn));
+       insn.insn = INSN_CONFIG;
+       insn.subdev = subdevice;
+       insn.chanspec = 0;
+       insn.data = data;
+       insn.n = sizeof(data) / sizeof(data[0]);
+       data[0] = INSN_CONFIG_SET_COUNTER_MODE;
+       data[1] = mode_bits;
+
+       retval = comedi_do_insn(device, &insn);
+       if(retval < 0)
+       {
+               fprintf(stderr, "%s: error:\n", __FUNCTION__);
+               comedi_perror("comedi_do_insn");
+               return retval;
+       }
+       return 0;
+}
+
+int set_clock_source(comedi_t *device, unsigned subdevice, lsampl_t clock, lsampl_t period_ns)
+{
+       comedi_insn insn;
+       lsampl_t data[3];
+       int retval;
+
+       memset(&insn, 0, sizeof(comedi_insn));
+       insn.insn = INSN_CONFIG;
+       insn.subdev = subdevice;
+       insn.chanspec = 0;
+       insn.data = data;
+       insn.n = sizeof(data) / sizeof(data[0]);
+       data[0] = INSN_CONFIG_SET_CLOCK_SRC;
+       data[1] = clock;
+       data[2] = period_ns;
+
+       retval = comedi_do_insn(device, &insn);
+       if(retval < 0)
+       {
+               fprintf(stderr, "%s: error:\n", __FUNCTION__);
+               comedi_perror("comedi_do_insn");
+               return retval;
+       }
+       return 0;
+}
+
+int set_gate_source(comedi_t *device, unsigned subdevice, lsampl_t gate_index, lsampl_t gate_source)
+{
+       comedi_insn insn;
+       lsampl_t data[3];
+       int retval;
+
+       memset(&insn, 0, sizeof(comedi_insn));
+       insn.insn = INSN_CONFIG;
+       insn.subdev = subdevice;
+       insn.chanspec = 0;
+       insn.data = data;
+       insn.n = sizeof(data) / sizeof(data[0]);
+       data[0] = INSN_CONFIG_SET_GATE_SRC;
+       data[1] = gate_index;
+       data[2] = gate_source;
+
+       retval = comedi_do_insn(device, &insn);
+       if(retval < 0)
+       {
+               fprintf(stderr, "%s: error:\n", __FUNCTION__);
+               comedi_perror("comedi_do_insn");
+               return retval;
+       }
+       return 0;
+}