|
|
This page explains how zigbee4java works in relation with the hardware used to perform the communication in the ZigBee network.
|
|
|
This page explains how zigbee4java works referring to the hardware used to perform the communication in the ZigBee network.
|
|
|
|
|
|
ZigBee Alliance defines some packets in their format. In particular it specifies anything regarding the ZigBee Cluster Library (ZCL) and some packets of the ZigBee Device Object (ZDO, Zigbee Device Profile for BeeStack) (at least in main contents).
|
|
|
The ZigBee Alliance defines some packets in their format. In particular it specifies anything regarding the ZigBee Cluster Library (ZCL) and some packets of the ZigBee Device Object (ZDO, Zigbee Device Profile for BeeStack) (at least in main contents).
|
|
|
The dongle vendor adds to these primitives the Test Library (ZigBee Test Client, ZTC, for BeeStack).
|
|
|
|
|
|
The library uses the Test Client to perform some actions on the dongle, like CPU reset or set/get channel, PAN-ID, and so.
|
|
|
The library uses the Test Client to perform some actions on the dongle, like CPU reset or set/get channel, PAN-ID, and so. This is strongly dependent on hardware.
|
|
|
The ZDO is used to perform actions mainly related to network management.
|
|
|
The packets defined by the ZigBee Alliance are defined in the *zigbee-common* package that is the higher level, hardware independent part of the library.
|
|
|
The packets defined by the ZigBee Alliance are defined in the *zigbee-common* package that is the higher level, hardware independent part of the library.
|
|
|
|
|
|
The parts that are dependent on dongle are inside the *zigbee-dongle-x* packages. Although not everything inside these packages is hardware dependent, in fact it is possible to isolate some classes that have a stronger dependency then others. I extracted a UML class diagram that highlights these parts.
|
|
|
![SimplifiedUMLClassesDiagram.svg](/uploads/3dda3058fa989cd1af4c0d9b6996084f/SimplifiedUMLClassesDiagram.svg)
|
|
|
A more complete (and very complex) UML class diagram is available in the repository. It has been extracted through an automatic tool.
|
|
|
A more complete (and very complex) UML class diagram is available in the repository. It has been extracted through an automatic tool.
|
|
|
|
|
|
To go on with the implementation I suggest working with the BeeStack BlackBox Reference that you can get from https://www.nxp.com/assets/documents/data/en/reference-manuals/BSBBZTCRM.pdf. In the repository there are 2 files ("BlackBox Reference table" and "ordered_by_OpCode") that are the table extracted from Appendix A of that document. They are useful for searching.
|
|
|
You can get the ZigBee Specification document from the following link http://contech.suv.ac.kr/contech/courses/11h2wsn/1_053474r17ZB_TSC-ZigBee-Specification.pdf. This is also very useful.
|
|
|
You can get the ZigBee Specification document from the following link http://contech.suv.ac.kr/contech/courses/11h2wsn/1_053474r17ZB_TSC-ZigBee-Specification.pdf. This is also very useful.
|
|
|
|
|
|
The zigbee4java library creates a log file which reports useful information for debugging.
|
|
|
Also Wireshark was useful to see the packets exchanged between computer and dongle through the Serial Port. To use it that way, if you are running the Linux kernel, just load the usbmon module in the kernel (sudo modprobe usbmon) and allow the common users to use it, so you don't have to run Wireshark as Super User (sudo setfacl -m u:$USER:r /dev/usbmon*). |
|
|
\ No newline at end of file |
|
|
Also Wireshark was useful to see the packets exchanged between computer and dongle through the Serial Port. To use it that way, if you are running the Linux kernel, just load the usbmon module in the kernel (sudo modprobe usbmon) and allow the common users to use it, so you don't have to run Wireshark as Super User (sudo setfacl -m u:$USER:r /dev/usbmon*). |