Add sampl_t and lsampl_t array_class()es to comedi.i.
authorIan Abbott <abbotti@mev.co.uk>
Mon, 20 Dec 2010 14:50:21 +0000 (14:50 +0000)
committerIan Abbott <abbotti@mev.co.uk>
Mon, 20 Dec 2010 14:50:21 +0000 (14:50 +0000)
This makes it easier (possible?) to setup comedi_insn_struct and
comedi_cmd_struct instances.

Patch from W. Trevor King.

swig/comedi.i

index 581997542927fd31cd2e0d03c220377774cfa600..5da6160d91d206d007e20c9ac5091d1735afdd30 100644 (file)
@@ -55,8 +55,6 @@ static unsigned int cr_aref(unsigned int a){
 }
 %}
 
-%array_class(unsigned int, chanlist);
-
 #ifdef SWIGRUBY
 %typemap(argout) comedi_cmd *INOUT(VALUE info) {
     $result = output_helper($result, $arg);
@@ -66,3 +64,19 @@ static unsigned int cr_aref(unsigned int a){
 %include "comedi.h"
 %include "comedilib.h"
 
+/* These typedefs work around limitations in SWIG's array_class().
+ * Without them, you get errors like:
+ * >>> import comedi
+ * >>> cmd = comedi.comedi_cmd_struct()
+ * >>> data = comedi.sampl_array(3)
+ * >>> cmd.data = data
+ * Traceback (most recent call last):
+ *   ...
+ * TypeError: in method 'comedi_cmd_struct_data_set', argument 2 of type 'sampl_t *'
+ */
+typedef unsigned short sampl_array;
+typedef unsigned int lsampl_array;
+
+%array_class(unsigned int, chanlist);
+%array_class(sampl_t, sampl_array);
+%array_class(lsampl_t, lsampl_array);