49 lines
2.1 KiB
C
49 lines
2.1 KiB
C
/* 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
|