diff --git a/lispBM/c_libs/lbm_if.h b/lispBM/c_libs/lbm_if.h index 03b71b4a..41b4e957 100755 --- a/lispBM/c_libs/lbm_if.h +++ b/lispBM/c_libs/lbm_if.h @@ -58,11 +58,12 @@ typedef lbm_value (*extension_fptr)(lbm_value*,lbm_uint); #define LBM_TYPE_U64 0x50000000u #define LBM_TYPE_FLOAT 0x60000000u #define LBM_TYPE_DOUBLE 0x70000000u -#define LBM_TYPE_ARRAY 0xD0000000u -#define LBM_TYPE_REF 0xE0000000u -#define LBM_TYPE_STREAM 0xF0000000u -#define LBM_NON_CONS_POINTER_TYPE_LAST 0xF0000000u -#define LBM_POINTER_TYPE_LAST 0xF0000000u +#define LBM_TYPE_ARRAY 0x80000000u +#define LBM_TYPE_REF 0x90000000u +#define LBM_TYPE_STREAM 0xA0000000u +#define LBM_TYPE_CUSTOM 0xB0000000u +#define LBM_NON_CONS_POINTER_TYPE_LAST 0xB0000000u +#define LBM_POINTER_TYPE_LAST 0xB0000000u #define LBM_GC_MASK 0x00000002u #define LBM_GC_MARKED 0x00000002u diff --git a/lispBM/c_libs/vesc_c_if.h b/lispBM/c_libs/vesc_c_if.h index 4a1bf402..ca5ef794 100755 --- a/lispBM/c_libs/vesc_c_if.h +++ b/lispBM/c_libs/vesc_c_if.h @@ -137,6 +137,23 @@ typedef enum { VESC_PIN_MODE_ANALOG, } VESC_PIN_MODE; +#ifndef PACKET_MAX_PL_LEN +#define PACKET_MAX_PL_LEN 512 +#endif + +#define PACKET_BUFFER_LEN (PACKET_MAX_PL_LEN + 8) + +// Types +typedef struct { + void(*send_func)(unsigned char *data, unsigned int len); + void(*process_func)(unsigned char *data, unsigned int len); + unsigned int rx_read_ptr; + unsigned int rx_write_ptr; + int bytes_left; + unsigned char rx_buffer[PACKET_BUFFER_LEN]; + unsigned char tx_buffer[PACKET_BUFFER_LEN]; +} PACKET_STATE_t; + /* * Function pointer struct. Always add new function pointers to the end in order to not * break compatibility with old binaries. @@ -287,6 +304,14 @@ typedef struct { bool (*lbm_unblock_ctx)(lbm_cid, lbm_value); lbm_cid (*lbm_get_current_cid)(void); + // Packets + void (*packet_init)(void (*s_func)(unsigned char *, unsigned int), + void (*p_func)(unsigned char *, unsigned int), + PACKET_STATE_t *); + void (*packet_reset)(PACKET_STATE_t *); + void (*packet_process_byte)(uint8_t, PACKET_STATE_t *); + void (*packet_send_packet)(unsigned char *, unsigned int len, PACKET_STATE_t *); + } vesc_c_if; typedef struct { diff --git a/lispBM/lispif_c_lib.c b/lispBM/lispif_c_lib.c index 68806a60..f3d8ebfb 100644 --- a/lispBM/lispif_c_lib.c +++ b/lispBM/lispif_c_lib.c @@ -31,6 +31,14 @@ #include "app.h" #include "mempools.h" +// Function prototypes otherwise missing +void packet_init(void (*s_func)(unsigned char *data, unsigned int len), + void (*p_func)(unsigned char *data, unsigned int len), PACKET_STATE_t *state); +void packet_reset(PACKET_STATE_t *state); +void packet_process_byte(uint8_t rx_data, PACKET_STATE_t *state); +void packet_send_packet(unsigned char *data, unsigned int len, PACKET_STATE_t *state); + + typedef struct { char *name; void *arg; @@ -493,6 +501,12 @@ lbm_value ext_load_native_lib(lbm_value *args, lbm_uint argn) { cif.cif.lbm_unblock_ctx = lbm_unblock_ctx; cif.cif.lbm_get_current_cid = lbm_get_current_cid; + //packets + cif.cif.packet_init = packet_init; + cif.cif.packet_reset = packet_reset; + cif.cif.packet_process_byte = packet_process_byte; + cif.cif.packet_send_packet = packet_send_packet; + lib_init_done = true; }