2 * arranges for the definitions of
14 static const Byte m[]= { __VA_ARGS__ }; \
15 memcpy(c,m,sizeof(m)); \
20 nmra_errchk(cn, bitmap, !(bitmap & ~0x1fffu)); \
23 #define nmra_errchk(cn, v, truth) \
24 if (!(truth)) nmra_errchk_fail(cn, v, #v, #truth);
26 static void nmra_errchk_fail(const char *m, long v,
27 const char *vn, const char *truth) {
28 fprintf(stderr,"nmra encode %s: %s %ld (0x%lx) fails condition %s\n",
29 m, vn, (unsigned long)v, (unsigned long)v, truth);
33 #define ADDR c= encode_addr(cn, addr, c);
35 static Byte *encode_addr(const char *cn, int addr, Byte *ap) {
36 /* encodes decoder address */
37 nmra_errchk(cn, addr, addr>0 && addr<=0x3ff);
39 /* Short addresses: S9.2 B l.41 which is the same as RP9.2.1 C l.65
43 /* Long addresses: RP9.2.1 C l.65-69. */
45 *ap++= (addr >> 8) | 0xc0;
50 #define Aint(v,i) , int v
51 #define Abitmap(v,i) , unsigned v
52 #define Abyte(v,i) , Byte v
55 #define NMRA(n,al,body) \
56 void enco_nmra_##n(Nmra *p al) { \
57 static const char cn[]= #n; \
60 do { body } while(0); \
62 assert(p->l <= sizeof(p->d)); \
65 #include "nmra-packets.h"