Opensource compiler for motorola internal language

Git repo (http)

Orthogonal aspects

Orthogonal aspects must be decoupled to the maximal possible extent:

output language

output file structure

user data structures and field names

memory allocation

Output files structure (C)

.h

includes

enumerations

struct typedefs

structures

prototypes

.c

includes

internal declarations

field packers/unpackers

message packers/unpackers

interface packers/unpackers

Pack/unpack signature

<pack return type>
pack_<interface name>(
SignalType signal, /* signal type */
Param1_t_uunion *p1, /* only present when interface has explicit header */
Param2_t_uunion *p2, /* signal data */
Param3_t_uunion *p3, /* only present when interface has explicit trailer */
<pdu arg type> pdu, /* pdu output buffer */
<pdu size arg type> sz /* pdu buffer size */
);

<unpack return type>
unpack_<interface name>(
<pdu arg type> pdu, /* input pdu buffer */
<pdu size arg type> sz, /* pdu buffer size */
SignalType *signal, /* signal type */
Param1_t_uunion **p1, /* only present when interface has explicit header */
Param2_t_uunion **p2, /* signal data */
Param3_t_uunion **p3, /* only present when interface has explicit trailer */
);

Decoding context

basic part:

bit stream location (byte offset, bit offset)

memory allocation context

custom part:

internal variables (managed by 'internal variable assignment' clause)

Field decoder function signature

<unpack return type>
unpack_<field name>(
<decoding context type> * dc, /* data location, updated during unpacking */
<field type> * p /* filled in by this unpack */
);