/* Reference service composition for emulator boards; use set_regmap directly * for a different map, subset, or multiple instances of any module. */ #ifndef SET_EMU_SERVER_H #define SET_EMU_SERVER_H #include "set_emu_ump.h" #include "set_emu_tms.h" #include "set_emu_igbt.h" #include "set_wavegen.h" #ifdef __cplusplus extern "C" { #endif #define SET_EMU_CONTROL_BASE 0x1200u #define SET_EMU_IGBT_BASE 0x1400u #define SET_EMU_TMS_BASE 0x1500u #define SET_EMU_INDEXED_BASE 0x2000u enum { SET_EMU_KIND_UMP=1,SET_EMU_KIND_CONTROL=2,SET_EMU_KIND_WAVE=3, SET_EMU_KIND_IGBT=4,SET_EMU_KIND_TMS=5,SET_EMU_KIND_UMP_DATA=6, SET_EMU_KIND_WAVE_DATA=7 }; typedef struct { set_regmap map; set_reg_region regions[7]; set_ump_emu ump; set_tms_emu tms; set_igbt_emu igbt; set_wave_state *wave; /* config[3]: 0=UMP, 1=TMS2812, 2=IGBT, 3=DAC. Configuration version 3. */ uint16_t config[4],staged[4],apply_delay; } set_emu_server; /* bank_capacity in records, each bank has capacity*40 words. * Wave may be NULL. UART rate index 0..4. No pins, heap or global instances. * Init is for a quiescent instance: caller stops hardware before reinitializing. */ PCAN_ABI_API unsigned set_emu_server_init(set_emu_server *,uint16_t *bank0, uint16_t *bank1,uint16_t bank_capacity,set_wave_state *,unsigned address, unsigned tms_address,unsigned baud_index,unsigned can_mode,unsigned enabled); PCAN_ABI_API void set_emu_server_tick(set_emu_server *,uint8_t igbt_pins); PCAN_ABI_API uint32_t set_emu_server_baud(const set_emu_server *); PCAN_ABI_API size_t set_emu_server_rtu(set_emu_server *,const uint8_t *,size_t,uint8_t *,size_t); PCAN_ABI_API size_t set_emu_server_can(set_emu_server *,const uint8_t *,size_t, uint16_t *,size_t,unsigned *,unsigned *); /* Stream adapter for FC03/06 (8 octets) and TMS CMD_STD (18 octets). One * context per connection. Transport passes monotonic milliseconds. */ typedef struct { uint8_t data[18],used;uint32_t last_byte; } set_emu_stream; PCAN_ABI_API size_t set_emu_stream_feed(set_emu_stream *,set_emu_server *, uint8_t byte,uint32_t now_ms,uint8_t *reply,size_t capacity); #ifdef __cplusplus } #endif #endif