added packet interface to lispif_c_lib

This commit is contained in:
Joel Svensson 2022-08-29 10:37:37 +02:00
parent 7f8a7b2aec
commit bccb2cc245
3 changed files with 45 additions and 5 deletions

View File

@ -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

View File

@ -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 {

View File

@ -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;
}