but fml the IDE makes me want to /wrist. Between this and a lot of the standard functions that I have grown rather fond of created from the Atmel team on top of the GCC compiler are not implemented on IAR.
the IAR IDE is my favorite for its highly utilitarian look-and-feel.
Porting between the two compilers is quite easy. My code can compile under both, the differences can be resolved via a set of macros + conditional compilation.
I have started making various macro's or shared functions with this very intention though I just haven't had time to finish it off. I am surprised that you do like the mid-2000s feel for an IDE, I think it lacks a lot of the functionality that exists in the modern ones (comparing to Visual Studio namely). Just simple things like the lack of highlighting on macros, creating new c files is like a 3 step process, its been a while there were a few other things as well...didn't mean to rant...
Do you have any examples? The only thing that is annoying about GCC examples is lack of native projects for Atmel Studio.
The dev boards I have on hand are the rcb256rfr2-xpro (
http://www.atmel.com/tools/ATRCB256RFR2-XPRO.aspx). The atmel rep that was assisting me in tech support told me many times this board should be fine to use with the latest BitCloud stack. He was right, it did work, but a few things didn't work correctly by default. The one that comes to mind is reading the MAC using BSP_ReadUid, it wouldn't return ack with the correct UID, but with the IAR compilier to my supirse it did.
I also required to the use the supporting bootloader for the stack. (Despite being a seperate project) this did not work with the gcc compilier at all. Even once I compilied it with the IAR compilier after purchasing it the main app (BitCloud) had to be compilied with IAR to work with it. Nonetheless, I spoke to Atmel and they did a quick release of a couple of the source files for the compilier so I could compile it with IAR and it would work with the main BitCloud app compiled in GCC. I was happy with the outcome though, it worked
You can request device to leave, but you can't force stack to give it the same address on rejoin.
In my current testing environment, we have paired and unpaired our routers many times. This is required for testing our web interface, app and a few other components in between. In this situation we allow a node to join by association. It joins, the coordinator by default randomly generates a node id and gives it to the node. In an "Association Response" frame. When I request the node from my coordinator, the device leaves successfully. Then the router goes into a network search mode. I Permit joining on my coordinator searching for a new device to join, the router joins. The Coordinator sends an "Association Response" frame with the same node ID as it previously did. I am fine with this, but if I send any requests or commands to the router, given the same old address, the device replies, but nothing is processed by the coordinator. Thus I keep receveing errors.
Picking up a Leave Broadcasting from a node in the network
You can only do this for children.
So if a router was to leave on its own, restore to factory settings situation, it broadcasts a "Leave" frame to the network. Is this processed in anyway? If I hold a list of node ID's on my coordinator, is there any way to know that this node has left?
I can get NWK_GetShortByExtAddress working, but: NWK_GetExtByShortAddress and NWK_RemoveFromAddressMap doesn't
What exactly does not work? Keep in mind that those functions operate on local tables, so if entry is not there, it is not going to be found. There are different (ZDO) commands to perform such conversions over the air.
In my testing situation I parsed an Extended address to NWK_GetShortByExtAddress and got the short address. The next line I parsed the short address I got with that cmd to NWK_GetExtByShortAddress and it responded back with 0ULL. I then parsed the original extended address to NWK_RemoveFromAddressMap and tried to read the short address from the address table again with the extended address and it worked fine. I can only think from this that the entry in the table wasn't removed