/* ** Copyright 2001, Brian Swetland ** All Rights Reserved. Please read the provided LICENSE file. */ #ifndef PROTO_H #define PROTO_H #include /* ... */ #define XFRAME 0xAE #define XESCAPE 0xAD #define XESC_AE 0x01 #define XESC_AD 0x02 #define MAXDATA (1024 + 24) #define HDRSIZE 8 #define MAXPACKET (MAXDATA + HDRSIZE) typedef struct XIO XIO; struct XIO { u1 buf[MAXPACKET]; u1 dbg[128 + 8]; int debugcount; int count; int nextseq; int lastseq; int escape; int errors; }; typedef struct xframe { u4 a32; u2 len; u1 cmd; u1 seq; union { u4 w[MAXDATA/4]; u2 h[MAXDATA/2]; u1 b[MAXDATA]; } u; } xframe; #define XCMD_ACK 'A' #define XCMD_ERR 'E' #define XCMD_READ8 '-' #define XCMD_WRITE8 '+' #define XCMD_READ16 'r' #define XCMD_WRITE16 'w' #define XCMD_READ32 'R' #define XCMD_WRITE32 'W' #define XCMD_CALL 'C' #define XCMD_PING 'P' #define XCMD_DEBUG 'd' #define XCMD_REBOOT '!' #define XCMD_FLASH 'F' #define XCMD_VISOLY 'v' #define FLASH_WRITE 0x5038001 #define FLASH_ERASE 0x5038002 typedef struct xcmdmap { int command; int (*handler)(xframe *f); } xcmdmap; extern xcmdmap xcommands[]; void xio_init(XIO *xio); void xio_in(XIO *xio, u1 data); void xio_out(const u1 *data, int len); int xio_rpc(XIO *xio, xframe *f); int xio_wait(XIO *xio, xframe *f); u4 adler32(u4 adler, const u1 *buf, u4 len); #endif