USB Tower – pbrick.info https://pbrick.info Random information about all discontinued LEGO pbricks (programmable bricks) Fri, 24 Oct 2014 18:28:49 +0000 en-US hourly 1 https://wordpress.org/?v=4.9.5 Making the legousbtower usb device permissions permanent https://pbrick.info/2013/10/making-the-legousbtower-usb-device-permissions-permanent/ https://pbrick.info/2013/10/making-the-legousbtower-usb-device-permissions-permanent/#respond Tue, 22 Oct 2013 14:09:58 +0000 http://pbrick.info/?p=178 After using my MindStorms USB Tower on Ubuntu Linux for a while, I started noticing that the permissions on the /dev/usb/legousbtower1 device reverted to “root only” every time I rebooted or un- and re-plugged the device into the USB port. The permissions were like this every time:

crw------- 1 root root 180, 1 Oct 22 09:56 legousbtower1

Since I log on as user michiel, not root, I could not access the device, so NQC would complain about “Could not open serial port or USB device”. I found the solution on Adrian Smith’s Blog:

“For a more permanent solution create the file /etc/udev/rules.d/90-legotower.rules with the following contents,

ATTRS{idVendor}=="0694",ATTRS{idProduct}=="0001",MODE="0666",GROUP="<group>"

You can use any group you’re a member of in place of <group>. You can find a list of the groups you’re a member of using ‘id -a‘. I used the group “adrian”. On a lot of systems there’ll be a group with the same name as your userid. This is fine so long as you’re the only one who’ll need access to the device. Otherwise you’ll need to find a common group or perhaps create a new one. By the way, the vendor and product ids in the udev rules file came from running lsusb.”

I used the group name “michiel” and it worked fine (I think it will work regardless  because it sets the mode to 666 which means read/write access for everyone anyway.

After creating that file, I unplugged the USB tower, plugged it back in, and presto there it was:

crw-rw-rw- 1 root michiel 180, 1 Oct 22 12:59 legousbtower1

Problem solved!

Share

]]>
https://pbrick.info/2013/10/making-the-legousbtower-usb-device-permissions-permanent/feed/ 0
Configuring the LEGO USB Tower on Linux https://pbrick.info/2013/10/configuring-the-lego-usb-tower-on-linux/ https://pbrick.info/2013/10/configuring-the-lego-usb-tower-on-linux/#comments Wed, 02 Oct 2013 20:20:32 +0000 http://pbrick.info/?p=8 If you are a Linux user and have a Robotics Invention System (RIS) version 1.0 or 1.5, you have a serial infrared (IR) tower, which is fairly easy to set up. RIS version 2.0 came with a USB tower however, and getting that to work isn’t as straightforward. Some of these steps might seem daunting to a novice, but if you follow them correctly you should be OK.

LEGO USB IR Tower

Current versions of the Linux kernel (2.6.*) include support for the LEGO USB Tower by default. There are many Linux distributions, and they’re not all configured the same way. Below instructions were created for Ubuntu version 12.04 TLS 32-bit, one of the most popular distributions at this time.

Step 1 – enable the LEGO USB IR Tower module (¨driver¨)

First make sure the USB IR Tower is connected to your computer. Now open a terminal window to determine if the module actually exists on your system, by running this command:

find /lib/modules -name *lego*

The output will show you one or more file names with long paths in front of them. Just as long as at least one of them ends with legousbtower.ko, you’re OK to continue. If not, this means your distribution doesn’t have this driver available as a module and you may need to actually recompile your kernel. This article does not cover that.

Now we need to make sure the module gets loaded at boot time. Open the file /etc/modules in an editor, for example with the command:

sudo gedit /etc/modules

Add a new line to the end of this file with just the name of the module: legousbtower (without the .ko suffix). My /etc/modules file looks like this.

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

lp
legousbtower

Save the file and exit the editor. Now reboot the system.
After the reboot, open a terminal window again, and run the command:

ls -l /dev/usb

You should see output similar to this:

total 0
crw------- 1 root root 180, 0 Oct  2 18:39 hiddev0
crw------- 1 root root 180, 1 Oct  2 18:39 legousbtower1

It came up with number 1 for mine, it could have a different number for you, usually legousbtower0. We need to change the permissions on it, run this command:

sudo chmod 666 /dev/usb/legousbtower1
EDIT: the chmod command only changes the permissions temporarily. I found a more permanent solution.

All done! The USB Tower is ready to be used… But now what?

Step 2 – adding USB support to NQC.

The LEGO brick programming language of choice on Linux is NQC (at least with the standard LEGO firmware). It has support for the RCX, Scout and Spybotics pbricks. The latest official release doesn’t have USB support for Linux, but thankfully somebody has already made a patch for this, so we can simply get the source code, patch it and then compile it ourselves. This sounds harder then it is, really. I didn’t run into any errors at all (not even on the first attempt!), which probably says a lot about the quality of the code (kudos to David Baum and John Hansen).

Go back to the terminal and create a directory in which you’ll build NQC. For example, I named mine /develop/nqc.  Make sure this is your current directory and it is empty. Then run the below commands, in that order. They will download and extract the sources and patch:

mkdir nqc-3.1.r6 && cd nqc-3.1.r6
wget http://bricxcc.sourceforge.net/nqc/release/nqc-3.1.r6.tgz
tar xfz nqc-3.1.r6.tgz
cd ..
wget http://sourceforge.net/p/bricxcc/patches/_discuss/thread/00b427dc/b84b/attachment/nqc-01-Linux_usb_and_tcp.diff
ls -l

The output of that last command should look like:

-rw-rw-r-- 1 michiel michiel 13912 Jan  2  2013 nqc-01-Linux_usb_and_tcp.diff
drwxrwxr-x 9 michiel michiel  4096 Oct  2 21:52 nqc-3.1.r6

So now you have a directory containing the source code of NQC, and the patch to enable USB support on Linux. Now apply the patch like this:

patch -p0 < nqc-01-Linux_usb_and_tcp.diff

This should tell you it patched 9 files. Now on to compile NQC!

cd nqc-3.1.r6
make

This will start scrolling a huge list of scary-looking output. Just sit back and relax. When it’s all done, check if the binary files have been produced.
Run “ls -l bin/” as shown below, and the output should look  very similar:

michiel@Ubuntu13:~/develop/nqc/nqc-3.1.r6$ ls -l bin
total 636
-rwxrwxr-x 1 michiel michiel  12812 Oct  2 21:57 mkdata
-rwxrwxr-x 1 michiel michiel 618233 Oct  2 21:58 nqc

Now to install NQC, simply run:

sudo make install

This will install NQC, so afterwards you will be able to run the command “nqc” from any directory.

All done!

To compile and download an nqc program you wrote yourself and send it to the RCX using the USB tower, run:

nqc -Susb:/dev/usb/legousbtower1 -d helloworld.nqc

 

Share

]]>
https://pbrick.info/2013/10/configuring-the-lego-usb-tower-on-linux/feed/ 10