NXC: set / change Brick name?

Discussion specific to NXT-G, NXC, NBC, RobotC, Lejos, and more.
HaWe
Posts: 2500
Joined: 04 Nov 2014, 19:00

Re: NXC: set / change Brick name?

Post by HaWe »

+1
same issue for my BT network where the slaves start a specific code which works only with a specific BrickName.
If one brick intermediately has been exchanged by another one e.g., because of a damage, one could transfer the code to the new one which also sets his name to become correctly addressed by the master.

BTW
What's the command for a program to get (read) the current brick name?
I expected sth like

Code: Select all

string GetBrickName()
or
string GetBTName()
but found nothing like that.

The equivalent to set the brick name should be

Code: Select all

SetBrickName(string name)
afanofosc
Site Admin
Posts: 1256
Joined: 26 Sep 2010, 19:36
Location: Nashville, TN
Contact:

Re: NXC: set / change Brick name?

Post by afanofosc »

I use Get at the start of a name only if you return the value via a reference parameter. If it returns the value as a function result I drop the word "Get". For example, SetSensorType and SensorType. SetBrickDataName and BrickDataName. Though, as was discussed, I dropped SetBrickDataName from the NXC API when I realized that it did not actually persist the name. "BrickData" comes from the name of the field (a nested structure) in the Comm module IOMap structure which contains all of the BRICKDATA values, including the brick's name.

John Hansen
Multi-platform LEGO MINDSTORMS programming
http://bricxcc.sourceforge.net/
HaWe
Posts: 2500
Joined: 04 Nov 2014, 19:00

Re: NXC: set / change Brick name?

Post by HaWe »

why BrickDataName and not BickName? The latter would be more intuitive.

Also in general, if there is a "SetXYZ" or "WriteXYZ" to set or write a value, the equivalent would be intuitively "GetXYZ" or "ReadXYZ" to get or read the value.

who did once define the names in the IO map?
you or Lego?
afanofosc
Site Admin
Posts: 1256
Joined: 26 Sep 2010, 19:36
Location: Nashville, TN
Contact:

Re: NXC: set / change Brick name?

Post by afanofosc »

You are welcome to write your own NXCDefs.h (named something different, of course) and tell the compiler to ignore the system include files. In fact, I encourage you to do that!

LEGO/NI are the culprits when it comes to the names of fields in the module IOmaps. I mostly tried to use the names they provided. Personally I don't think API names are intuitive. You just have to learn them and remember them. Why not NXTName rather than BrickName? Or just Name? or BluetoothName? Or BTName? Well, in any case, the function is called BrickDataName and you can use it or #define your preferred alternative name if you like.

Code: Select all

#define BrickName BrickDataName
Do that and then you can use BrickName() to return a string containing the NXT's name whenever you need it. You will not succeed in persuading me to change the NXT API.

I have made the firmware changes recommended above and will be testing them a bit before putting up a new firmware build.

John Hansen
Multi-platform LEGO MINDSTORMS programming
http://bricxcc.sourceforge.net/
HaWe
Posts: 2500
Joined: 04 Nov 2014, 19:00

Re: NXC: set / change Brick name?

Post by HaWe »

if I knew what keywords I had to use I certainly had the chance to search for them
Of course I have been searching "intuitively" for
BrickName
NXTName
BTName
but found nothing in the BCC help. So what else should one do?
When I once knew it then I surely can use it as it is (BrickDataName) - as long as I would remember and won't forget - and for that (short) period I wouldn't need a #define alias of course.
afanofosc
Site Admin
Posts: 1256
Joined: 26 Sep 2010, 19:36
Location: Nashville, TN
Contact:

Re: NXC: set / change Brick name?

Post by afanofosc »

When you search in the NXC API search field you start with one letter. It shows you what matches that single letter. So start with the intuitively obvious B if you think the right function name is BrickName. Maybe even type Brick all at once. Low and behold you see a very short list of functions that start with Brick and they all have Data as the next part of the name. One of them is BrickDataName. Or you can start with BT and see a longer list that you can easily scroll through and see that there is not a function called BTName. Or you can type in NXT and scroll through the list of constants and functions that start with NXT.

It takes all of a few seconds to find what you are looking for using the NXC API search field. If you weren't sure what API functions let you "set" something to do with a "sensor" you start with "Set" and see what shows up. It is actually case insensitive so you could just type setsensor or even just sets. You can even limit the search to just functions using the drop down menu at the right of the search field.

Image

Image



John Hansen
Multi-platform LEGO MINDSTORMS programming
http://bricxcc.sourceforge.net/
HaWe
Posts: 2500
Joined: 04 Nov 2014, 19:00

Re: NXC: set / change Brick name?

Post by HaWe »

ok, I see, I never won't use the help search (by [F1] ) any longer...
HaWe
Posts: 2500
Joined: 04 Nov 2014, 19:00

Re: NXC: set / change Brick name?

Post by HaWe »

edit:
strangely, this code causes errors:

Code: Select all

char PMOD;
if (BrickDataName()=="001") PMOD=1;
if I store intermediately to a buffer, it seems to compile strangely:

Code: Select all

char PMOD;
string name;
name=BrickDataName();
if (name=="001") PMOD=1;
but the returned name string also seems to be sort of distorted.

with this code

Code: Select all

 task main(){

  string name = BrickDataName();
  TextOut(0,0,">"+name+"<");
  while(true);
}
the screen output is
>001

and not, as expected,
>001<
mattallen37
Posts: 1818
Joined: 02 Oct 2010, 02:19
Location: Michigan USA
Contact:

Re: NXC: set / change Brick name?

Post by mattallen37 »

It seems that BrickDataName() returns the name, padded to 15 chars (Edit: plus the NULL). Using strlen on the string returned by BrickDataName returns 15. Probably the reason you didn't see the "<" was because it would have been displayed off the screen.
Matt
http://mattallen37.wordpress.com/

I'm all for gun control... that's why I use both hands when shooting ;)
HaWe
Posts: 2500
Joined: 04 Nov 2014, 19:00

Re: NXC: set / change Brick name?

Post by HaWe »

yes, sure that there must been some invisible characters like space or anything.
But that's faulty, that's what I wanted to point out.
BrickDataName has to return the correct name as it is, either how long it is, and just how long it is exactly .
Last edited by HaWe on 31 Mar 2012, 18:16, edited 2 times in total.
Post Reply

Who is online

Users browsing this forum: Semrush [Bot] and 12 guests