Hello,

FYI I have extended the libphidget bindings in Bigloo with wrappers for
CPhidgetEncoder [0].

Ludo’.

[0] http://www.phidgets.com/documentation/web/cdoc/group__phidenc.html

changeset:   1653:3c92f86e5caa
branch:      4.1
tag:         tip
parent:      1651:2641868913cd
user:        Ludovic Courtès <[email protected]>
date:        Tue Sep 03 17:39:00 2013 +0200
summary:     phidget: Add bindings for CPhidgetEncoder.

	Modified   api/phidget/examples/motor-control.scm
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/examples/motor-control.scm
--- a/api/phidget/examples/motor-control.scm	Fri Aug 02 07:53:28 2013 +0200
+++ b/api/phidget/examples/motor-control.scm	Tue Sep 03 17:39:00 2013 +0200
@@ -6,7 +6,8 @@
 ;*    -------------------------------------------------------------    */
 ;*    Motor control example                                            */
 ;*    -------------------------------------------------------------    */
-;*    Control motors such as the Phidget Motor Control HC 1064.        */
+;*    Control motors such as the Phidget Motor Control HC 1064,        */
+;*    and check encoders such as the Phidget 1047.                     */
 ;*---------------------------------------------------------------------*/
 
 ;*---------------------------------------------------------------------*/
@@ -16,6 +17,20 @@
    (library pthread phidget)
    (main main))
 
+(define (parse-arguments argv)
+   ;; Return the chosen motor index and encoder index.
+   (match-case argv
+      ((?-)
+       (values 0 0))
+      ((?- ?index)
+       (values (string->number index) 0))
+      ((?- ?motor-index ?encoder-index)
+       (values (string->number motor-index) (string->number encoder-index)))
+      (?-
+       (display "Usage: motor-control [MOTOR-INDEX [ENCODER-INDEX]]\n"
+          (current-error-port))
+       (exit 1))))
+
 ;*---------------------------------------------------------------------*/
 ;*    main ...                                                         */
 ;*---------------------------------------------------------------------*/
@@ -25,42 +40,46 @@
    (define halted
       (make-condition-variable))
 
-   (let ((mc    (instantiate::phidget-motor-control))
-         (index (match-case argv
-                            ((?-)
-                             0)
-                            ((?- ?index)
-                             (string->number index))
-                            (?-
-                             (display "Usage: motor-control MOTOR-INDEX\n"
-                                      (current-error-port))
-                             (exit 1)))))
-     (phidget-open mc)
-     (phidget-wait-for-attachment mc 1000)
+   (receive (motor-index encoder-index)
+      (parse-arguments argv)
+      (let ((mc (instantiate::phidget-motor-control))
+            (e  (instantiate::phidget-encoder)))
+         (phidget-open mc)
+         (phidget-wait-for-attachment mc 1000)
 
-     ;; Note: We actually need to use the CPhidgetEncoder API to access the
-     ;; Phidget 1047 encoders.
-     (tprint "mc=" mc " "
-        (phidget-motor-control-encoder-count mc)
-        " encoders")
+         (phidget-open e)
+         (phidget-wait-for-attachment e 1000)
 
-     (phidget-motor-control-acceleration-set! mc index 4.)
-     (phidget-motor-control-velocity-set! mc index 50.)
-     (phidget-motor-control-braking-set! mc index 0.)
-     (phidget-add-event-listener! mc "velocity"
-        (lambda (event)
-           (with-access::phidget-motorcontrolvelocity-event event
-                 (index velocity)
-              (when (zero? velocity)
-                 (condition-variable-signal! halted))
-              (printf "motor ~a: velocity = ~5d; current = ~12d~%"
-                 index velocity
-                 (phidget-motor-control-current mc index)))))
-     (sleep 1000000)
+         (phidget-encoder-enable! e encoder-index)
+         (tprint "encoder enabled?" (phidget-encoder-enabled? e encoder-index))
 
-     (synchronize lock
-        (phidget-motor-control-velocity-set! mc index 0.)
-        (condition-variable-wait! halted lock))
-     (print "done\n")
-     (phidget-motor-control-braking-set! mc index 100.)
-     #f))
+         ;; Note: We actually need to use the CPhidgetEncoder API to access the
+         ;; Phidget 1047 encoders.
+         (tprint "mc=" mc " "
+            (phidget-motor-control-encoder-count mc)
+            " on-motor encoders; "
+            (with-access::phidget-encoder e (encoder-count)
+               encoder-count)
+            " encoders")
+
+         (phidget-motor-control-acceleration-set! mc motor-index 4.)
+         (phidget-motor-control-velocity-set! mc motor-index 50.)
+         (phidget-motor-control-braking-set! mc motor-index 0.)
+         (phidget-add-event-listener! mc "velocity"
+            (lambda (event)
+               (with-access::phidget-motorcontrolvelocity-event event
+                     (index velocity)
+                  (when (zero? velocity)
+                     (condition-variable-signal! halted))
+                  (printf "motor ~a: velocity = ~5d; current = ~12d; position = ~5d~%"
+                     motor-index velocity
+                     (phidget-motor-control-current mc index)
+                     (phidget-encoder-position e encoder-index)))))
+         (sleep 1000000)
+
+         (synchronize lock
+            (phidget-motor-control-velocity-set! mc motor-index 0.)
+            (condition-variable-wait! halted lock))
+         (print "done\n")
+         (phidget-motor-control-braking-set! mc motor-index 100.)
+         #f)))
	Modified   api/phidget/src/Clib/bglphidget.c
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/src/Clib/bglphidget.c
--- a/api/phidget/src/Clib/bglphidget.c	Fri Aug 02 07:53:28 2013 +0200
+++ b/api/phidget/src/Clib/bglphidget.c	Tue Sep 03 17:39:00 2013 +0200
@@ -55,6 +55,9 @@
 #define EVENT_STEPPERCURRENT 16
 #define EVENT_MOTORCONTROLVELOCITY 17
 #define EVENT_MOTORCONTROLCURRENT 18
+#define EVENT_ENCODERINPUT 19
+#define EVENT_ENCODERPOSITION 20
+#define EVENT_ENCODERINDEX 21
 
 #define INITIAL_MAX_HANDLER 40
 static struct handler *handlers;
@@ -115,6 +118,19 @@
 	 int index;
 	 double current;
       } motorcontrolcurrent;
+      struct {
+	 int index;
+	 int state;
+      } encoderinput;
+      struct {
+	 int index;
+	 int time;
+	 int position;
+      } encoderposition;
+      struct {
+	 int index;
+	 int position;
+      } encoderindex;
    } event;
 };
 
@@ -302,6 +318,29 @@
 	       cb->event.motorcontrolcurrent.current );
 	    break;
 	 }
+	 case EVENT_ENCODERINPUT: {
+	    event = bgl_phidget_event_encoderinput_new(
+	       hdl->obj,
+	       cb->event.encoderinput.index,
+	       cb->event.encoderinput.state );
+	    break;
+	 }
+	 case EVENT_ENCODERINDEX: {
+	    event = bgl_phidget_event_encoderindex_new(
+	       hdl->obj,
+	       cb->event.encoderindex.index,
+	       cb->event.encoderindex.position );
+	    break;
+	 }
+	 case EVENT_ENCODERPOSITION: {
+	    event = bgl_phidget_event_encoderposition_new(
+	       hdl->obj,
+	       cb->event.encoderposition.index,
+	       cb->event.encoderposition.time,
+	       cb->event.encoderposition.position );
+	    break;
+	 }
+
 	 default:
 	    event = BUNSPEC;
 	    C_SYSTEM_FAILURE(
@@ -1520,3 +1559,175 @@
 bgl_phidget_motor_control_get_current( CPhidgetMotorControlHandle phid, int i, obj_t o ) {
    FIELD_INDEXED_GET( phid, Current, CPhidgetMotorControl, double, i, o );
 }
+
+
+
+/*---------------------------------------------------------------------*/
+/*    static int                                                       */
+/*    bgl_encoderinput_handler ...                                     */
+/*---------------------------------------------------------------------*/
+static int
+bgl_encoderinput_handler( CPhidgetEncoderHandle id, void *ptr, int index, int state ) {
+   bgl_phidget_lock();
+
+   if( callback_index == callback_length ) enlarge_callback_array();
+
+   callbacks[ callback_index ].event.encoderinput.index = index;
+   callbacks[ callback_index ].event.encoderinput.state = state;
+   callbacks[ callback_index++ ].handler = (struct handler *)ptr;
+
+   bgl_phidget_signal();
+   bgl_phidget_unlock();
+
+   return 0;
+}
+
+/*---------------------------------------------------------------------*/
+/*    static int                                                       */
+/*    bgl_encoderposition_handler ...                                  */
+/*---------------------------------------------------------------------*/
+static int
+bgl_encoderposition_handler( CPhidgetEncoderHandle id, void *ptr, int index, int time, int pos ) {
+   bgl_phidget_lock();
+
+   if( callback_index == callback_length ) enlarge_callback_array();
+
+   callbacks[ callback_index ].event.encoderposition.index = index;
+   callbacks[ callback_index ].event.encoderposition.time = time;
+   callbacks[ callback_index ].event.encoderposition.position = pos;
+   callbacks[ callback_index++ ].handler = (struct handler *)ptr;
+
+   bgl_phidget_signal();
+   bgl_phidget_unlock();
+
+   return 0;
+}
+
+/*---------------------------------------------------------------------*/
+/*    static int                                                       */
+/*    bgl_encoderindex_handler ...                                     */
+/*---------------------------------------------------------------------*/
+static int
+bgl_encoderindex_handler( CPhidgetEncoderHandle id, void *ptr, int index, int position ) {
+   bgl_phidget_lock();
+
+   if( callback_index == callback_length ) enlarge_callback_array();
+
+   callbacks[ callback_index ].event.encoderindex.index = index;
+   callbacks[ callback_index ].event.encoderindex.position = position;
+   callbacks[ callback_index++ ].handler = (struct handler *)ptr;
+
+   bgl_phidget_signal();
+   bgl_phidget_unlock();
+
+   return 0;
+}
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_add_event_listener ...                       */
+/*---------------------------------------------------------------------*/
+int
+bgl_phidget_encoder_add_event_listener( CPhidgetEncoderHandle id, char *event, obj_t obj, obj_t proc ) {
+   if( !strcmp( event, "input" ) ) {
+      struct handler *hdl = bgl_add_handler( obj, proc, EVENT_ENCODERINPUT );
+
+      return CPhidgetEncoder_set_OnInputChange_Handler(
+	 id, &bgl_encoderinput_handler, hdl );
+   }
+   else if( !strcmp( event, "position" ) ) {
+      struct handler *hdl = bgl_add_handler( obj, proc, EVENT_ENCODERPOSITION );
+
+      return CPhidgetEncoder_set_OnPositionChange_Handler(
+	 id, &bgl_encoderposition_handler, hdl );
+   }
+   else if( !strcmp( event, "index" ) ) {
+      struct handler *hdl = bgl_add_handler( obj, proc, EVENT_ENCODERINDEX );
+
+      return CPhidgetEncoder_set_OnIndex_Handler(
+	 id, &bgl_encoderindex_handler, hdl );
+   }
+}
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_get_input_count ...                          */
+/*---------------------------------------------------------------------*/
+int
+bgl_phidget_encoder_get_input_count( CPhidgetEncoderHandle phid, int i, obj_t o ) {
+  int err, count;
+
+  err = CPhidgetEncoder_getInputCount( phid, &count);
+  return err == EPHIDGET_OK
+    ? count
+    : (bgl_phidget_error( "EncoderCount", err, o ), count);
+}
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_get_encoder_count ...                        */
+/*---------------------------------------------------------------------*/
+int
+bgl_phidget_encoder_get_encoder_count( CPhidgetEncoderHandle phid, int i, obj_t o ) {
+  int err, count;
+
+  err = CPhidgetEncoder_getEncoderCount( phid, &count);
+  return err == EPHIDGET_OK
+    ? count
+    : (bgl_phidget_error( "EncoderCount", err, o ), count);
+}
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_get_input_enabled ...                        */
+/*---------------------------------------------------------------------*/
+int
+bgl_phidget_encoder_get_input_enabled( CPhidgetEncoderHandle phid, int i, obj_t o ) {
+   FIELD_INDEXED_GET( phid, InputState, CPhidgetEncoder, int, i, o );
+}
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_get_position ...                             */
+/*---------------------------------------------------------------------*/
+int
+bgl_phidget_encoder_get_position( CPhidgetEncoderHandle phid, int i, obj_t o ) {
+   FIELD_INDEXED_GET( phid, InputState, CPhidgetEncoder, int, i, o );
+}
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_get_index_position ...                       */
+/*---------------------------------------------------------------------*/
+int
+bgl_phidget_encoder_get_index_position( CPhidgetEncoderHandle phid, int i, obj_t o ) {
+   FIELD_INDEXED_GET( phid, InputState, CPhidgetEncoder, int, i, o );
+}
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_get_enabled ...                             */
+/*---------------------------------------------------------------------*/
+int
+bgl_phidget_encoder_get_enabled( CPhidgetEncoderHandle phid, int i, obj_t o ) {
+   FIELD_INDEXED_GET( phid, InputState, CPhidgetEncoder, int, i, o );
+}
+
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_enable ...                                   */
+/*---------------------------------------------------------------------*/
+void
+bgl_phidget_encoder_enable( CPhidgetEncoderHandle phid, int i ) {
+   CPhidgetEncoder_setEnabled( phid, i, PTRUE );
+}
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_disable ...                                  */
+/*---------------------------------------------------------------------*/
+void
+bgl_phidget_encoder_disable( CPhidgetEncoderHandle phid, int i ) {
+   CPhidgetEncoder_setEnabled( phid, i, PFALSE );
+}
	Modified   api/phidget/src/Clib/bglphidget.h
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/src/Clib/bglphidget.h
--- a/api/phidget/src/Clib/bglphidget.h	Fri Aug 02 07:53:28 2013 +0200
+++ b/api/phidget/src/Clib/bglphidget.h	Tue Sep 03 17:39:00 2013 +0200
@@ -37,6 +37,9 @@
 #define BGL_PHIDGET_MOTOR_CONTROL_BUILTIN( o ) \
    ((CPhidgetMotorControlHandle *)(&(((BgL_phidgetzd2motorzd2controlz00_bglt)o)->BgL_z42builtinz42)))
 
+#define BGL_PHIDGET_ENCODER_BUILTIN( o ) \
+   ((CPhidgetEncoderHandle *)(&(((BgL_phidgetzd2encoderzd2_bglt)o)->BgL_z42builtinz42)))
+
 extern void bgl_phidget_init();
 
 extern int bgl_phidget_manager_add_event_listener(
@@ -69,6 +72,9 @@
 extern obj_t bgl_phidget_event_steppercurrent_new( obj_t, int, double);
 extern obj_t bgl_phidget_event_motorcontrolvelocity_new( obj_t, int, double);
 extern obj_t bgl_phidget_event_motorcontrolcurrent_new( obj_t, int, double);
+extern obj_t bgl_phidget_event_encoderinput_new( obj_t, int, int );
+extern obj_t bgl_phidget_event_encoderindex_new( obj_t, int, int );
+extern obj_t bgl_phidget_event_encoderposition_new( obj_t, int, int, int );
 
 extern obj_t bgl_phidget_get_device_name( CPhidgetHandle );
 extern obj_t bgl_phidget_get_device_type( CPhidgetHandle );
	Modified   api/phidget/src/Llib/pdg.sch
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/src/Llib/pdg.sch
--- a/api/phidget/src/Llib/pdg.sch	Fri Aug 02 07:53:28 2013 +0200
+++ b/api/phidget/src/Llib/pdg.sch	Tue Sep 03 17:39:00 2013 +0200
@@ -4,7 +4,7 @@
 ;*    Author      :  Manuel Serrano                                    */
 ;*    Creation    :  Sun Dec 30 15:28:51 2007                          */
 ;*    Last change :  Thu Oct  4 18:07:52 2012 (serrano)                */
-;*    Copyright   :  2007-12 Manuel Serrano                            */
+;*    Copyright   :  2007-13 Inria                                     */
 ;*    -------------------------------------------------------------    */
 ;*    Direct use of PHIDGET functions                                  */
 ;*=====================================================================*/
@@ -486,7 +486,7 @@
 	 (::$pdg-phidget)
 	 "(CPhidgetMotorControlHandle)")
       (macro $pdg-phidget-motor-control-add-event-listener!::int
-	 (::$pdg-manager ::string ::obj ::procedure)
+	 (::$pdg-motor-control ::string ::obj ::procedure)
 	 "bgl_phidget_motor_control_add_event_listener")
 
       ($pdg-phidget-motor-control-get-motor-count::int
@@ -527,7 +527,43 @@
          "CPhidgetMotorControl_setBraking")
       ($pdg-phidget-motor-control-get-current::double
          (::$pdg-motor-control ::int ::obj)
-         "bgl_phidget_motor_control_get_current")))
+         "bgl_phidget_motor_control_get_current")
+
+      ;; encoder
+      (type $pdg-encoder void* "CPhidgetEncoderHandle")
+      (type $pdg-encoder* void* "CPhidgetEncoderHandle *")
+      (macro $pdg-encoder-create::int (::$pdg-encoder*)
+             "CPhidgetEncoder_create")
+
+      (macro $pdg-encoder->phidget::$pdg-phidget (::$pdg-encoder)
+             "(CPhidgetHandle)")
+      (macro $pdg-phidget->encoder::$pdg-encoder (::$pdg-phidget)
+             "(CPhidgetEncoderHandle)")
+      (macro $pdg-phidget-encoder-add-event-listener!::int
+         (::$pdg-encoder ::string ::obj ::procedure)
+         "bgl_phidget_encoder_add_event_listener")
+
+      ($pdg-phidget-encoder-get-encoder-count::int (::$pdg-encoder ::obj)
+         "bgl_phidget_encoder_get_encoder_count")
+      ($pdg-phidget-encoder-get-input-count::int (::$pdg-encoder ::obj)
+         "bgl_phidget_encoder_get_input_count")
+      ($pdg-phidget-encoder-get-input-enabled?::bool (::$pdg-encoder ::int ::obj)
+         "bgl_phidget_encoder_get_input_enabled")
+      ($pdg-phidget-encoder-get-position::int (::$pdg-encoder ::int ::obj)
+         "bgl_phidget_encoder_get_position")
+      (macro $pdg-phidget-encoder-set-position!::int
+         (::$pdg-encoder ::int ::int)
+         "CPhidgetEncoder_setPosition")
+      ($pdg-phidget-encoder-get-index-position::int
+         (::$pdg-encoder ::int ::obj)
+         "bgl_phidget_encoder_get_index_position")
+
+      ($pdg-phidget-encoder-get-enabled?::bool (::$pdg-encoder ::int ::obj)
+         "bgl_phidget_encoder_get_enabled")
+      (macro $pdg-phidget-encoder-enable!::int (::$pdg-encoder ::int)
+             "bgl_phidget_encoder_enable")
+      (macro $pdg-phidget-encoder-disable!::int (::$pdg-encoder ::int)
+             "bgl_phidget_encoder_disable")))
 
 ;*---------------------------------------------------------------------*/
 ;*    phidget-return ...                                               */
	New        api/phidget/src/Llib/pdgencoder.scm
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/src/Llib/pdgencoder.scm
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/api/phidget/src/Llib/pdgencoder.scm	Tue Sep 03 17:39:00 2013 +0200
@@ -0,0 +1,119 @@
+;*=====================================================================*/
+;*    .../prgm/project/bigloo/api/phidget/src/Llib/pdgencoder.scm      */
+;*    -------------------------------------------------------------    */
+;*    Author      :  Ludovic Courtès                                   */
+;*    Creation    :  Tue Mar 27 09:11:24 2012                          */
+;*    Last change :  Mon Sep  2 11:15:36 CEST 2013                     */
+;*    Copyright   :  2013 Inria                                        */
+;*    -------------------------------------------------------------    */
+;*    Phidget Encoders                                                 */
+;*=====================================================================*/
+
+;*---------------------------------------------------------------------*/
+;*    The module                                                       */
+;*---------------------------------------------------------------------*/
+(module __phidget_encoder
+
+   (include "pdg.sch")
+
+   (extern (export $make-encoder "bgl_encoder_new")
+	   (macro $pdg-encoder-builtin&::$pdg-encoder*
+	      (::phidget-encoder)
+	      "BGL_PHIDGET_ENCODER_BUILTIN"))
+
+   (import __phidget_types
+	   __phidget_ctypes
+	   __phidget
+	   __phidget_event
+	   __phidget_phidget)
+
+   (export  (class phidget-encoder::phidget
+	       (encoder-count::int
+		  read-only
+		  (get (lambda (o)
+			  (with-access::phidget o ($builtin)
+			     ($pdg-phidget-encoder-get-encoder-count
+				($pdg-phidget->encoder $builtin) o))))))
+
+            (phidget-encoder-input-count::int ::phidget-encoder)
+            (phidget-encoder-input-enabled?::bool ::phidget-encoder ::int)
+
+            (phidget-encoder-position::int ::phidget-encoder ::int)
+            (phidget-encoder-position-set! ::phidget-encoder ::int ::int)
+            (phidget-encoder-index-position::int ::phidget-encoder ::int)
+
+            (phidget-encoder-enabled?::bool ::phidget-encoder ::int)
+            (phidget-encoder-enable! ::phidget-encoder ::int)
+            (phidget-encoder-disable! ::phidget-encoder ::int)
+
+            ($make-encoder::obj ::$pdg-encoder)))
+
+;*---------------------------------------------------------------------*/
+;*    $make-encoder ...                                         */
+;*---------------------------------------------------------------------*/
+(define ($make-encoder mc::$pdg-encoder)
+   (instantiate::phidget-encoder
+      ($builtin ($pdg-encoder->phidget mc))))
+
+;*---------------------------------------------------------------------*/
+;*    %phidget-init ...                                                */
+;*---------------------------------------------------------------------*/
+(define-method (%phidget-init o::phidget-encoder)
+   (phidget-init!)
+   (phidget-return
+      ($pdg-encoder-create ($pdg-encoder-builtin& o))
+      "phidget-encoder" o))
+
+;*---------------------------------------------------------------------*/
+;*    phidget-add-event-listener! ::phidget-encoder ...          */
+;*---------------------------------------------------------------------*/
+(define-method (phidget-add-event-listener! o::phidget-encoder event proc)
+   (with-access::phidget-encoder o ($builtin)
+      (phidget-return
+       ($pdg-phidget-encoder-add-event-listener!
+	($pdg-phidget->encoder $builtin) event o proc)
+       "phidget-add-event-listener!" o)))
+
+
+(define-syntax define-getter
+   (syntax-rules ()
+      ((_ name dollar-name)
+       (define (name o i)
+          (with-access::phidget o ($builtin)
+             (dollar-name ($pdg-phidget->encoder $builtin)
+                i o))))))
+
+(define-syntax define-setter
+   (syntax-rules ()
+      ((_ name dollar-name)
+       (define (name o i v)
+          (with-access::phidget o ($builtin)
+             (dollar-name ($pdg-phidget->encoder $builtin)
+                i v))))))
+
+(define-getter phidget-encoder-input-enabled?
+   $pdg-phidget-encoder-get-input-enabled?)
+(define-getter phidget-encoder-position
+   $pdg-phidget-encoder-get-position)
+(define-setter phidget-encoder-position-set!
+   $pdg-phidget-encoder-set-position!)
+(define-getter phidget-encoder-index-position
+   $pdg-phidget-encoder-get-index-position)
+(define-getter phidget-encoder-enabled?
+   $pdg-phidget-encoder-get-enabled?)
+
+(define (phidget-encoder-enable! e::phidget-encoder i::int)
+   (with-access::phidget e ($builtin)
+      ($pdg-phidget-encoder-enable! ($pdg-phidget->encoder $builtin) i)))
+
+(define (phidget-encoder-disable! e::phidget-encoder i::int)
+   (with-access::phidget e ($builtin)
+      ($pdg-phidget-encoder-disable! ($pdg-phidget->encoder $builtin) i)))
+
+;*---------------------------------------------------------------------*/
+;*    phidget-encoder-input-count ...                                  */
+;*---------------------------------------------------------------------*/
+(define (phidget-encoder-input-count o)
+   (with-access::phidget o ($builtin)
+      ($pdg-phidget-encoder-get-input-count
+	 ($pdg-phidget->encoder $builtin) o)))
	Modified   api/phidget/src/Llib/pdgevent.scm
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/src/Llib/pdgevent.scm
--- a/api/phidget/src/Llib/pdgevent.scm	Fri Aug 02 07:53:28 2013 +0200
+++ b/api/phidget/src/Llib/pdgevent.scm	Tue Sep 03 17:39:00 2013 +0200
@@ -42,7 +42,10 @@
 	   (export phidget-event-stepperposition-new "bgl_phidget_event_stepperposition_new")
 	   (export phidget-event-steppercurrent-new "bgl_phidget_event_steppercurrent_new")
            (export phidget-event-motorcontrolvelocity-new "bgl_phidget_event_motorcontrolvelocity_new")
-	   (export phidget-event-motorcontrolcurrent-new "bgl_phidget_event_motorcontrolcurrent_new"))
+	   (export phidget-event-motorcontrolcurrent-new "bgl_phidget_event_motorcontrolcurrent_new")
+           (export phidget-event-encoderinput-new "bgl_phidget_event_encoderinput_new")
+           (export phidget-event-encoderposition-new "bgl_phidget_event_encoderposition_new")
+           (export phidget-event-encoderindex-new "bgl_phidget_event_encoderindex_new"))
 
    (export (%phidget-thread-init!)
 	   (%phidget-lock!)
@@ -71,7 +74,11 @@
 	   (phidget-event-stepperposition-new::obj ::obj ::int ::llong)
 	   (phidget-event-steppercurrent-new::obj ::obj ::int ::double)
            (phidget-event-motorcontrolvelocity-new::obj ::obj ::int ::double)
-	   (phidget-event-motorcontrolcurrent-new::obj ::obj ::int ::double)))
+	   (phidget-event-motorcontrolcurrent-new::obj ::obj ::int ::double)
+
+           (phidget-event-encoderinput-new::obj ::obj ::int ::bool)
+           (phidget-event-encoderposition-new::obj ::obj ::int ::int ::int)
+           (phidget-event-encoderindex-new::obj ::obj ::int ::int)))
 
 ;*---------------------------------------------------------------------*/
 ;*    *phidget-mutex* ...                                              */
@@ -300,3 +307,31 @@
       (target target)
       (index index)
       (current current)))
+
+;*---------------------------------------------------------------------*/
+;*    phidget-event-encoderinput-new ...                               */
+;*---------------------------------------------------------------------*/
+(define (phidget-event-encoderinput-new target index state)
+   (instantiate::phidget-encoderinput-event
+      (target target)
+      (index index)
+      (state state)))
+
+;*---------------------------------------------------------------------*/
+;*    phidget-event-encoderposition-new ...                            */
+;*---------------------------------------------------------------------*/
+(define (phidget-event-encoderposition-new target index time position)
+   (instantiate::phidget-encoderposition-event
+      (target target)
+      (index index)
+      (time time)
+      (position position)))
+
+;*---------------------------------------------------------------------*/
+;*    phidget-event-encoderindex-new ...                               */
+;*---------------------------------------------------------------------*/
+(define (phidget-event-encoderindex-new target index position)
+   (instantiate::phidget-encoderindex-event
+      (target target)
+      (index index)
+      (position position)))
	Modified   api/phidget/src/Llib/pdgtypes.scm
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/src/Llib/pdgtypes.scm
--- a/api/phidget/src/Llib/pdgtypes.scm	Fri Aug 02 07:53:28 2013 +0200
+++ b/api/phidget/src/Llib/pdgtypes.scm	Tue Sep 03 17:39:00 2013 +0200
@@ -90,6 +90,19 @@
 	       (index::int read-only)
 	       (current::double read-only))
 
+            (class phidget-encoderinput-event::%phidget-event
+               (index::int read-only)
+               (state::bool read-only))
+
+            (class phidget-encoderposition-event::%phidget-event
+               (index::int read-only)
+               (time::int read-only)
+               (position::int read-only))
+
+            (class phidget-encoderindex-event::%phidget-event
+               (index::int read-only)
+               (position::int read-only))
+
 	    (generic %phidget-init ::%phidget)))
 
 ;*---------------------------------------------------------------------*/
	Modified   api/phidget/src/Makefile
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/src/Makefile
--- a/api/phidget/src/Makefile	Fri Aug 02 07:53:28 2013 +0200
+++ b/api/phidget/src/Makefile	Tue Sep 03 17:39:00 2013 +0200
@@ -63,7 +63,7 @@
 #*---------------------------------------------------------------------*/
 _BGL_OBJECTS	= phidget pdgtypes pdg pdglogging pdgmanager pdgstepper	\
                   pdgphidget pdgifkit pdgspatial pdgservo pdgaservo	\
-		  pdgevent pdgmotorcontrol
+		  pdgevent pdgmotorcontrol pdgencoder
 
 _C_OBJECTS	= bglphidget
 _JAVA_CLASSES	= 
	Modified   api/phidget/src/Misc/make_lib.scm
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/src/Misc/make_lib.scm
--- a/api/phidget/src/Misc/make_lib.scm	Fri Aug 02 07:53:28 2013 +0200
+++ b/api/phidget/src/Misc/make_lib.scm	Tue Sep 03 17:39:00 2013 +0200
@@ -26,7 +26,8 @@
 	    __phidget_servo
 	    __phidget_advanced-servo
 	    __phidget_stepper
-            __phidget_motor-control)
+            __phidget_motor-control
+            __phidget_encoder)
 
    (eval    (export-all)
 
@@ -57,4 +58,5 @@
 	    (class phidget-servo)
 	    (class phidget-advanced-servo)
 	    (class phidget-stepper)
-            (class phidget-motor-control)))
+            (class phidget-motor-control)
+            (class phidget-encoder)))


Reply via email to