#include "rcx.h" #include "nxt.h" #define LCT_MAX_BRICKS 64 #define LCT_FIRMWARE_LEN 64 // Flags // Allow user to mask which devices are probed, or use // LCT_PROBE_ALL for no masking #define LCT_PROBE_DEV_NXT 0x0001 #define LCT_PROBE_DEV_RCX 0x0002 #define LCT_PROBE_DEV_ALL \ (LCT_PROBE_DEV_NXT|LCT_PROBE_DEV_RCX) #define LCT_PROBE_INT_USB 0x0010 #define LCT_PROBE_INT_BLUETOOTH 0x0020 #define LCT_PROBE_INT_SERIAL 0x0030 #define LCT_PROBE_INT_ALL \ (LCT_PROBE_INT_USB|LCT_PROBE_INT_BLUETOOTH|LCT_PROBE_INT_SERIAL) #define LCT_PROBE_ALL LCT_PROBE_DEV_ALL|LCT_PROBE_INT_ALL #define LCT_OVERWRITE 0x0100 // USB ID codes #define LCT_VENDOR_LEGO 0x0694 #define LCT_PRODUCT_NXT 0x0002 typedef enum { LCT_OK = 0, LCT_FAILURE, } lct_status_t; typedef enum { LCT_CMD_STATUS, LCT_CMD_PROG_UP, LCT_CMD_PROG_DOWN, LCT_CMD_FIRM_UP, LCT_CMD_FIRM_DOWN, LCT_CMD_DELETE, LCT_CMD_START, LCT_CMD_STOP } lct_cmd_t; typedef enum { LCT_RCX, LCT_NXT } lct_brick_type_t; typedef struct { lct_brick_type_t brick_type; // Brick-dependent stuff union { rcx_t rcx; nxt_t nxt; }; } lct_brick_t; typedef struct { lct_brick_t bricks[LCT_MAX_BRICKS]; int count; } lct_brick_list_t; // Use OO design: Keep API independent from structure definitions // Application programs should not have to access structure members directly #define LCT_BRICK_FROM_LIST(list,n) ((list).bricks[(n)]) #define LCT_BRICK_COUNT(list) ((list).count) #define LCT_SET_COUNT(list,n) ((list)->count = (n)) #define LCT_SET_BRICK_TYPE(list,n,t) ((list)->bricks[n].brick_type = (t)) #include "protos.h"