OnlineCourse/UartComm

Information for developers about comm.c and related code

Read comm.c comments.

Incoming directions

Some actions (either triggered by incoming data or automatically, eg. some periodic sending) generate outgoing packets.

For example when megatune requests the 48 byte datastructure (classical 'A' megatune command) uint8_t MTsendRTvar(uint8_t i) will be called with parameter 0,1,2,...47 respectively, and will return the megatune compatible byte-value.

The private is a pass-on value that is specified from pushfuncpar() and the function cmd_queue_t points to can use it whatever he wants. Private is mostly used to store pointer to string. TableDump() and ConfigDump() are a bit special, since they play a bit with the private and len variables. First see the table and config that they print (InitialConfig) and you will understand why it's done that way. Btw. it's very efficient.

SerialComm/SIPR heavily relies on private structures.


More UART channels should be relatively easy to add. This brings up a small architectural question. We have a 2nd UART on AfreshBoard and all the future boards, so software must support it. It will be the 3d input via msavr can be controlled or configured (even simultaneously, see GenBoard/MenuSystem !).

Unfortunately comm.c is a little mix:

For making the 2nd UART work, you need:

and directly writes to UART1.

Model of megatune protocol

Question: Is the perl emulator code available??

A: Probably still available, but not up to date and usable. Use a board for testing instead

MembersPage/MichaelKristensen implemented an almost complete model of the MegaTune protocol in bin/emu_genboard.pl (yes, in perl, it runs on linux or win32 PC and acts as if it was a GenBoard).


See also