JrkCmd doesn't find pololu 18v7 under Linux

Using on the new raspberry-pi, debian Squeeze (r-pi’s distro).

I’ve tried as standard user, as root, with and without the mono prefix to JrkCmd

pi@raspberrypi:/opt/aRail/pololu_usb_sdk/Jrk/JrkCmd$ sudo mono JrkCmd -s
Error: No jrks found.

pi@raspberrypi:/opt/aRail/pololu_usb_sdk/Jrk/JrkCmd$ sudo mono JrkCmd -l
0 Jrks found:

lsmod:
Module Size Used by
binfmt_misc 5128 1
fuse 49036 1
snd_bcm2835 15388 0
snd_pcm 49240 1 snd_bcm2835
snd_seq 35080 0
snd_timer 13560 2 snd_pcm,snd_seq
snd_seq_device 3684 1 snd_seq
snd 31624 5 snd_bcm2835,snd_pcm,snd_seq,snd_timer,snd_seq_device
snd_page_alloc 2660 1 snd_pcm
evdev 6404 1

lsusb:
Bus 001 Device 007: ID 1ffb:00a1
Bus 001 Device 004: ID 08ff:0009 AuthenTec, Inc.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

dmesg:
usb 1-1.3: new full speed USB device number 7 using dwc_otg
usb 1-1.3: New USB device found, idVendor=1ffb, idProduct=00a1
usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=4
usb 1-1.3: Product: Pololu Simple Motor Controller 18v7
usb 1-1.3: Manufacturer: Pololu Corporation
usb 1-1.3: SerialNumber: 3800-7206-3055-3932-5558-0343

I did blacklist the cdc_acm kernel module as upon plugging in the jrk I’d get:
usb 1-1.3: new full speed USB device number 7 using dwc_otg
usb 1-1.3: New USB device found, idVendor=1ffb, idProduct=00a1
usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=4
usb 1-1.3: Product: Pololu Simple Motor Controller 18v7
usb 1-1.3: Manufacturer: Pololu Corporation
usb 1-1.3: SerialNumber: 3800-7206-3055-3932-5558-0343
cdc_acm 1-1.3:1.0: This device cannot do calls on its own. It is not a modem.
cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device

libusb info:
pi@raspberrypi:/opt/aRail/pololu_usb_sdk/Jrk/JrkCmd$ dpkg -l|grep usb
ii libusb-0.1-4 2:0.1.12-16 userspace USB programming library
ii libusb-1.0-0 2:1.0.8-2 userspace USB programming library
ii libusb-1.0-0-dev 2:1.0.8-2 userspace USB programming library development files
ii libusbmuxd1 1.0.4-1 USB multiplexor daemon for iPhone and iPod Touch devices - library
ii usbmuxd 1.0.4-1 USB multiplexor daemon for iPhone and iPod Touch devices
ii usbutils 0.87-5squeeze1 Linux USB utilities
ii xserver-xorg-video-sisusb 1:0.9.3-2 X.Org X server – SiS USB display driver

kernel:
Linux raspberrypi 3.1.9+ #90 Wed Apr 18 18:23:05 BST 2012 armv6l GNU/Linux

mono version: 2.6.7-5

Hello.

The jrk line of motor controllers is different from the Simple Motor Controllers. To control your Simple Motor Controller 18v7, please try SmcCmd. If you succeed in controlling it from a Raspberry Pi I would love to hear more about it.

–David

Doh. Thanks for the point in the right direction.

Works perfectly, like a champ. I did setup the acceleration and brake ramp values and timings in windows so I still need to test that out but SmcCmd -l found the device right away (I should note I still have the blacklisted kernel module, I’ll have to test without it being blacklisted) SmcCmd -s reports everything as expected, and SmcCmd --speed 3200 ramped the motor up to full speed and SmcCmd --speed 0 brought it back down to stop.

Not sure else what to say but with the right command, it appears to work ‘out of the box’ with the only exception being that kernel module.

Works fine without blacklisting the kernel module… So in short, it works ‘out of the box’ on the r-pi.

One minor note I’d make is SmcCmd -h, -s, -l, etc take a couple seconds to return info. This isn’t exactly ideal for basic projects using scripting and parsing the output if it stalls a monitoring program for a couple seconds, each second (if looped). Is there a way to speed this up or is there some sort of detection that has to be done each time the command is run? Or is it mono being slow? Just curious, thanks.

That’s great that it is working for you out of the box! I suspect mono was made for more powerful processors and is slow to start up. If you wrote your own C# program that stayed open, you might get better results. Even better would be to use libusb 1.0 directly from a C or C++ program, looking at Smc.cs to learn the commands you will need to send.

–David