3

I have two NXT bricks connected and they work together using Bluetooth, sending messages between the two works. The master NXT will start a program on the slave NXT with the RemoteStartProgram function. However, when I try to use RemoteStopProgram the compilation fails with 'Unknown function' in BricxCC and with this error when compiled with nbc:

File "/home/paul/bricks/carjulie_bt.nxc" ; line 124
#   __connectionWrite (1, __DCStopProgramPacket, __D0main)
#----------------------------------------------------------
1 errors during compilation

This is the relevant portion of the code, what am I missing ?

task main() {
  if (BTConnectToNXT("Sarah", SLAVE_CONN)) {
    RemoteStartProgram(SLAVE_CONN, "carsarah_bt.rxe");
    bool result = RemoteConnectionIdle(SLAVE_CONN);
    if (result) {
      Precedes(ListenToSarah,LookAtColours);
    }
    RemoteStopProgram(SLAVE_CONN);  // This line does not compile ?!
  }
}

Edit 2020-05-16: There is a simple workaround for this error, just send a message to all slaves to execute stopalltasks() function.

This bug is now also on Debian bugs: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=960772

EDIT 2020-05-18: SOLVED! This link https://sourceforge.net/p/bricxcc/code/HEAD/tree/x64/ contains a working nbc version for Linux! Thanks!!

8
  • According to the [bricxcc.sourceforge.net/nbc/nxcdoc/nxcapi/… reference) this call is perfectly legal. Are you sure your RemoteStopProgram(SLAVE_CONN); // This line does not compile ?! line is the one referenced in the error message ("/home/paul/bricks/carjulie_bt.nxc" ; line 124)?
    – zovits
    May 13, 2020 at 8:50
  • Yes I am sure. I have tried moving that line to other tasks, same thing. I have also tried with 1 instead of SLAVE_CONN and with assigning a byte instead of a #define. This one function always fails, no matter how I write it. I have also copied the line from programs on the internet, same thing, it does not compile...
    – Paul
    May 13, 2020 at 8:57
  • BricxCC says "Error Unknown or Invalid Statement".
    – Paul
    May 13, 2020 at 9:02
  • This line compiles in the old version 3388 of BricxCC (but there are other breaking issues with this old version).
    – Paul
    May 13, 2020 at 12:08
  • What happens if you assign the return value to a variable? result = RemoteStopProgram(SLAVE_CONN) May 13, 2020 at 15:04

1 Answer 1

2

Try changing which version of BricxCC you're using to one of the later releases: http://bricxcc.sourceforge.net/test_releases/?C=M;O=D

What version are you using now? I duplicated the compile error on v3.3.8.9, but I didn't get the compile error on v3.3.8.11: http://bricxcc.sourceforge.net/test_releases/test_release20131007.zip

Hope that works!

PS: I didn't test anything, as I'm not using the feature -- I just saw it would compile on a different version.

If you use this, make sure you review compiler settings, as it looks like the newer version has [x] Enhanced Firmware option checked by default (which you may or may not have installed on your NXT brick, if using stock LEGO firmware).

Update #1:

According to https://sourceforge.net/p/bricxcc/code/HEAD/tree/NXT/history.txt, it may be a known issue that was fixed in a newer release:

Version 1.2.1.r5 (2013-02-16) : - Fixed definition for several Remote* API functions which sent direct/system commands to other NXT devices via Bluetooth or RS-485

So, it looks like 1.2.1r5 or newer version of NBC command-line tools may be required.

Also, the test release I downloaded (v3.3.8.11 of GUI) has nbc.exe v1.2.1.5, while the other version I have (v3.3.8.9 of GUI) has nbc.exe v1.2.1.4 -- so this may be the issue.

Update #2:

For Linux, see https://sourceforge.net/p/bricxcc/code/HEAD/tree/386/ and https://sourceforge.net/p/bricxcc/code/HEAD/tree/x64/ 32 and 64-bit binaries, respectively.

4
  • Thank you bitbob for this valid answer. I just tried it with wine on Debian and it works. I am however addicted to working with vi on Debian Linux, starting a GUI for every compile is not an option. The nbc tool on Linux does not seem to be included in these test updates; there is Linuxtools.zip file, but it contains .exe files and they fail in wine. For now I use the following workaround: send a message to the slaves to execute stopalltasks() so I can keep my workflow. Still, it would be nice to have this function on Linux.
    – Paul
    May 16, 2020 at 13:50
  • What version of command line tools are you using? I see bricxcc.sourceforge.net/nbc/release/index.html has 1.2.1r5 (Oct 18, 2011), but not sure how it compares to the BricxCC GUI releases.
    – bitbob
    May 17, 2020 at 14:50
  • Sorry, I spoke too soon -- it looks like sourceforge.net/projects/bricxcc/files/NBC_NXC only actually lists through 1.2.1r4 ... and the links at above URL for 1.2.1r5 aren't valid and just redirect you to sourceforge.net/projects/bricxcc/files which doesn't have 1.21r5 files.
    – bitbob
    May 17, 2020 at 18:58
  • However, I did also find sourceforge.net/p/bricxcc/code/HEAD/tree/386 and sourceforge.net/p/bricxcc/code/HEAD/tree/x64 which might be the right files for Linux binaries? Sorry, I'm on Windows, so cannot test myself. If they work, I'll update my answer to reference these links for new Linux binaries, too.
    – bitbob
    May 17, 2020 at 19:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.