Your ROOT_URL in app.ini is https://git.ondrovo.com/ but you are visiting http://159.69.29.240:49153/gex/gex-docs/src/commit/d36df8372a166a4c4045a16c3b37bf377e9a1d72/INTERNAL_STRUCTURE.md You should set ROOT_URL correctly, otherwise the web may not work correctly.
GEX protocol documentation
 
gex-docs/INTERNAL_STRUCTURE.md

1.8 KiB

GEX's internal structure

GEX is modular, composed of functional blocks called units. A unit can be e.g. SPI or a digital output.

There can be more than one instance of a given unit, based on the microcontroller's hardware resources. Some units use hardware peripherals, others are implemented in software. Those "soft" units (typically bit-banged protocols) are limited only by the available GPIO pins.

Resources

A system of resource claiming is implemented to avoid units conflicting with each other and interfering with peripherals used internally by the system (such as the LED pin). Each unit claims the resources it uses during initialization. If the resource needed is not available, it may try to claim an alternate resource or fail to initialize.

A init failure is reported in the config file as an error message under the unit's header.

An example of defined resources:

  • all GPIO pins
  • timers/counters
  • SPI, I2C, USART peripherals
  • DMA channels

Unit identification

Each unit has a name and a callsign (1-255) used for message addressing. Both are defined in the config file.

There can be up to 255 units, in practice fewer due to storage limitations.

Unit commands and events

Units can receive command messages (UNIT_REQUEST) and report asynchronous events using UNIT_REPORT frames.

A command is identified by a number 0-127. The highest bit (0x80) of the command number is reserved to request confirmation (a SUCCESS frame) if the command doesn't normally generate a response. This is used by the client library to check that an operation was completed correctly (as opposed to e.g. the firmware crashing and rebooting through the watchdog).

Unit events include the unit's callsign, a number 0-255 identifying the event type, and a 64-bit microsecond timestamp.

See FRAME_FORMAT.md for the payloads structure.