RCX/NXT v jazyku sťaby C (OS GNU/Linux)



RCX: Lego USB veža

Od kernel verzie 2.6.1 je podpora Lego USB veže priamo v kerneli. Podľa distribúcie OS GNU/Linux môže byť realizovaná nasledovne:

Máme kernel modul legousbtower

Pripojíme Lego USB vežu a pozrieme sa, čo hovoria logy (vežička na nás možno pri zasúvaní do USB portu aj žmurkne zeleným očičkom :-)) a mali by sme vidieť niečo podobné ako na výpise nižšie, po pripojení Lego USB veže sa teda zaviedol kernel modul legousbtower a vytvoril sa device-nod /dev/legousbtower0

$ sudo tail -f /var/log/messages
Feb 27 18:23:04 edubuntu kernel: [17180439.876000] \
\ usb 1-2: new low speed USB device using uhci_hcd and address 4
Feb 27 18:23:04 edubuntu kernel: [17180440.084000] \
\ usb 1-2: configuration #1 chosen from 4 choices
Feb 27 18:23:05 edubuntu kernel: [17180440.532000] \
\ drivers/usb/misc/legousbtower.c: LEGO USB Tower #0 now attached \
\ to major 180 minor 160
Feb 27 18:23:05 edubuntu kernel: [17180440.536000] \
\ drivers/usb/misc/legousbtower.c: LEGO USB Tower firmware version \
\ is 1.0 build 134
Feb 27 18:23:05 edubuntu kernel: [17180440.536000] \
\ usbcore: registered new driver legousbtower
Feb 27 18:23:05 edubuntu kernel: [17180440.536000] \
\ drivers/usb/misc/legousbtower.c: LEGO USB Tower Driver v0.96

Zistíme podrobné (naozaj podrobné) informácie o Lego USB veži, kompletný výpis $ sudo lsusb -v je tuto

$ sudo lsusb -v

Zistíme, či je kernel modul zavedený

$ sudo lsmod | grep lego
legousbtower           16772  0 
usbcore               130304  5 legousbtower,usbhid,ehci_hcd,uhci_hcd

Ak by sa stalo, že kernel modul legousbtower nie je zavedený, ručne ho zavedieme

$ sudo modprobe legousbtower

Nastavíme práva prístupu k Lego USB veži aj bežným useríkom

$ sudo chmod 666 /dev/legousbtower0

Ak by sa stalo, že súbor /dev/legousbtower0 neexistuje, vytvoríme ho

$ sudo mknod /dev/usb/legousbtower0 c 180 160
$ sudo chmod 666 /dev/legousbtower0

Otestujeme Lego USB vežu (mala by opäť žmurknúť zeleným očičkom)

$ echo doublethink > /dev/legousbtower0

Nemáme kernel modul legousbtower

V prípade, že kernel modul legousbtower nemáme, tak odpojíme USB vežu a prekompilujeme kernel

$ sudo cd /usr/src/linux
$ sudo make menuconfig
-------------------------------------------------------------------------------
 Device-Drivers -->
   USB support -->
     [M] USB Lego Infrared Tower support
-------------------------------------------------------------------------------
$ sudo make && make modules_install

Skopírujeme nový kernel do boot adresára, reštartujeme, ručne zavedieme kernel modul legousbtower a pripojíme Lego USB vežu

$ sudo modprobe legousbtower

Hore hájom chodník

RCX: Kompilátor jazyka Not Quite C -NQC-

Buďto sa uspokojíme s predvareným paklíkom nqc pre našu distribúciu (deb, rpm, ...) a jednoducho si ho doinštalujeme (pre OS GNU/Linux Edubuntu 6.10 je vo verzii nqc-2.5.r3-5)

$ sudo apt-get update
$ sudo apt-get install nqc

Alebo si zo stránky http://bricxcc.sourceforge.net/nqc/ stiahneme zdrojový paklík najnovšieho kompilátora (nqc-3.1.r4.tgz) a nainšalujeme ho ručne

$ tar -xzf nqc-3.1.r4.tgz
$ cd nqc-3.1.r4
$ make
$ sudo make install

Tak, či onak, nastavíme ešte premennú RCX_PORT (aby sme ju nemuseli zakaždým písať s prepínačom -S)

$ export RCX_PORT=/dev/legousbtower0

A je čas preštudovať si manuálové stránky nqc (príklady sú uvedené na výpise)

$ man nqc

EXAMPLES

  To compile foo.nqc, download the bytecode to program  slot  three,  and
  make the RCX start executing it immediately:

           nqc -d -pgm 3 foo.nqc -run

  To just compile bar.nqc, resulting in bar.rcx:

           nqc bar.nqc

  To download bar.rcx to the RCX:

           nqc -d bar.rcx

  To  set  the  IR tower to short-range mode and download the firmware at
  high speed:

           nqc -near -firmfast firm0328.lgo

  To compile /usr/doc/nqc/test.nqc and print the resulting bytecode
  listing to the screen in human-readable format:

           nqc -L /usr/doc/nqc/test.nqc

  (This should result in the following output under nqc 2.1.0:

      *** Task 0 = main
      000 pwr        ABC, 7                13 07 02 07
      004 dir        ABC, Fwd              e1 87
      006 InType     0, Switch             32 00 01
      009 InMode     0, Boolean            42 00 20
      012 out        A, On                 21 81
      014 chkl       1 != Input(0), 14     95 82 09 01 00 00 fa ff
      022 plays      0                     51 00
      024 out        A, Off                21 41

  )

Alebo aspoň help

$ nqc -help
nqc version 3.1 r4 (built Feb 28 2007, 13:08:21)
     Copyright (C) 2005 John Hansen.  All Rights Reserved.
Usage: nqc [options] [actions] [ - | filename ] [actions]
   - : read from stdin instead of a source_file
Options:
   -T<target>: target can be RCX, CM, Scout, RCX2, Spy, or Swan
   -d: download program
   -n: prevent the system file (rcx.nqh) from being included
   -b: treat input file as a binary file (don't compile it)
   -D<sym>[=<value>] : define macro <sym>
   -E[<filename>] : write compiler errors to <filename> (or stdout)
   -R<filename> : redirect text output (datalog, etc) to <filename>
   -I<path>: search <path> for include files
   -L[<filename>] : generate code listing to <filename> (or stdout)
   -s: include source code in listings if possible
   -c: generate LASM compatible listings
   -v: verbose
   -q: quiet
   -x: omit packet header (RCX only)
   -f<size>: set firmware chunk size
   -w<ms>: set the download wait timeout
   -O<outfile>: specify output file
   -S<portname>: specify serial port
   -U<sym>: undefine macro <sym>
Actions:
   -run: run current program
   -pgm <number>: select program number
   -datalog | -datalog_full: upload datalog
   -near: set IR to near mode
   -far: set IR to far mode
   -watch <time> | now: set RCX time
   -firmware <filename>: download firmware
   -firmfast <filename>: download firmware at quad speed
   -sleep <timeout>: set RCX sleep timeout
   -msg <number>: send IR message to RCX
   -raw <data>: format data as a packet and send to RCX
   -remote <value> <repeat>: send a remote command to the RCX
   -clear: erase all programs and datalog in RCX
   -api: dump the standard api file (e.g. rcx.nqh) to stdout
   -help: display command line options

28.2.2007 - Nastáva čas pozvať na pivo toho, kto vyrieši nasledujúcu galibu, čokoľvek chcem poslať do RCX kocky, Lego USB veža iba žmurkne (zeleným očičkom) a z konzoly sa vyškiera Could not open serial port or USB device

$ nqc -near
Could not open serial port or USB device

$ echo teraz_ho_otvori > NXT_PORT

$ sudo nqc -S/dev/legousbtower0 -far
Could not open serial port or USB device

$ sudo echo aj_teraz_ho_otvori > /dev/legousbtower0

Ak na /dev/legousbtower0 vyšlem niečo príkazom echo, tak blikne aj zelené očičko aj IR dióda (overené na detektore IR žiarenia), v prípade príkazu nqc blikne iba zelené očičko :-(

3.3.2007 - No asi na to pivo predsa len pôjdem :-)

Zo stránky http://bricxcc.sourceforge.net/nqc/ stiahneme zdrojový paklík najnovšieho kompilátora (nqc-3.1.r4.tgz) a rozbalíme ho

$ tar -xzf nqc-3.1.r4.tgz

Vhupneme do adresára nqc-3.1.r4/ a editujeme súbor Makefile (alebo ho nahradíme súborom Makefile stadiaľto)

$ cd nqc-3.1.r4     
$ gedit Makefile

Vhupneme do adresára nqc-3.1.r4/rcxlib/ a editujeme súbor RCX_USBTowerPipe_linux.cpp (alebo ho nahradíme súborom RCX_USBTowerPipe_linux.cpp stadiaľto)

$ cd rcxlib     
$ gedit RCX_USBTowerPipe_linux.cpp

Ešte treba fyzicky umistniť súbor legousbtower.h do adresára nqc-3.1.r4/rcxlib/ (napríklad stadiaľto) a môžeme inštalovať

$ cd ..
$ make
$ sudo make install

Nastavíme práva pre súbor -dev-legousbtower0 (aby sme sa nezosudovateli) a premennú RCX_PORT (aby sme museli zadávať parameter nqc -Susb)

$ sudo chmod 666 /dev/legousbtower0     
$ export RCX_PORT=usb

Hore hájom chodník

RCX: Editory pre písanie programov v jazyku Not Quite C -NQC-

Zväčši ma! Zväčši ma! Zväčši ma!

Download

Zo stránky http://bricxcc.sourceforge.net/nqc/ stiahneme:

Zo stránky http://www.sweb.cz/seifrob/lego_robotika/nqctutor.zip stiahneme:

Zo stránky http://lego.zschlebnice.sk/sw.php stiahneme firmware RCX kocky:

Zo stránky http://vim.sourceforge.net/scripts/script.php?script_id=67 stiahneme plugin nqc.vim pre textový editor gvim:

Zo stránky http://www.solinfpc.net/index.php?2006/04/14/16-nqc-gui stiahneme francúzsky hovoriaci skript pre Kommander:

Zo stránky http://bricxcc.sourceforge.net/ stiahneme IDE BricxCC (pobeží s wine):

Francúzsky skript nqcgui.tar.gz

$ tar -xzf nqcgui.tar.gz
$ kmdr-executor nqcgui.kmdr

Plugin nqcvim.zip

$ cd
$ mkdir .vim
$ mv nqcvim.zip .vim
$ cd .vim
$ unzip nqcvim.zip
$ cd

$ gedit .vim/plugin/nqc.vim
-------------------------------------------------------------------------------
let s:NQC_RCX_Firmware = $HOME.'/nqc/firm0328.lgo'  " kde je RCX firmware
let s:NQC_Target       = 'RCX2'                     " typ kocky 
let s:NQC_Portname     = 'usb'
-------------------------------------------------------------------------------

$ gvim

Wine inštalácia bricxcc_setup_33716.exe

Yes -> Next -> Next -> ...

Hore hájom chodník

Poznámka:OS GNU/Linux Edubuntu 6.10, kernel 2.6.17, verzie jednotlivých SW paklíkov sú k 28.2.2007.