chiark / gitweb /
can reprogram santafe
[trains.git] / hostside / common.h
1 /*
2  * declarations common to simple test program and real controller daemon
3  */
4
5 #ifndef COMMON_H
6 #define COMMON_H
7
8 #include <stdio.h>
9
10 /*---------- types ----------*/
11
12 typedef unsigned char Byte;
13
14 #define COMMAND_ENCODED_MAX 16
15 #define NMRA_PACKET_MAX ((COMMAND_ENCODED_MAX*7 - 14) / 8)
16
17 typedef struct Nmra {
18   Byte d[NMRA_PACKET_MAX];
19   int l;
20 } Nmra;
21
22 typedef struct PicInsn {
23   Byte d[COMMAND_ENCODED_MAX];
24   int l;
25 } PicInsn;
26
27 /*---------- from serialio.c ----------*/
28
29 void vdie(const char *fmt, int ev, va_list al)
30      __attribute__((noreturn,format(printf,1,0)));
31 void die(const char *fmt, ...) __attribute__((noreturn,format(printf,1,2)));
32 void diee(const char *fmt, ...) __attribute__((noreturn,format(printf,1,2)));
33 void diem(void) __attribute__((noreturn));
34
35 void serial_open(const char *device);
36 void serial_transmit_now(const Byte *command, int length);
37
38 void *mmalloc(size_t sz);
39 char *mstrdupl(const char *s, int l);
40 char *mstrdup(const char *s);
41
42 extern int serial_fd, serial_fudge_delay;
43
44 /*---------- nmra parsing, nmra.c et al ----------*/
45
46 typedef struct NmraParseEncodeCaller NmraParseEncodeCaller;
47 void nmra_parse_encode(Nmra *out, const char *arg, int argl,
48                        int argc, NmraParseEncodeCaller *pec);
49   /* will call back to these, supplied by caller: */
50   unsigned long nmra_argnumber(NmraParseEncodeCaller *pec, int argi);
51   void nmra_problem(NmraParseEncodeCaller *pec, const char *problem);
52
53 void nmra_addchecksum(Nmra *packet);
54 void nmra_encodeforpic(const Nmra *packet, PicInsn *pi_out);
55
56
57 #endif /*COMMON_H*/