#pragma once enum { JVS_CMD_TAITO_READ_DIPSW = 0x01, JVS_CMD_READ_ID = 0x10, JVS_CMD_GET_CMD_VERSION = 0x11, JVS_CMD_GET_JVS_VERSION = 0x12, JVS_CMD_GET_COMM_VERSION = 0x13, JVS_CMD_GET_FEATURES = 0x14, JVS_CMD_SET_MAIN_ID = 0x15, JVS_CMD_READ_SWITCHES = 0x20, JVS_CMD_READ_COIN = 0x21, JVS_CMD_READ_ANALOGS = 0x22, JVS_CMD_READ_ROTARY = 0x23, JVS_CMD_READ_KEYCODE = 0x24, JVS_CMD_READ_SCREEN_POS = 0x25, JVS_CMD_READ_MISC_SWITCHES = 0x26, JVS_CMD_WRITE_PAYOUT_REMAIN = 0x2E, JVS_CMD_DATA_RETRANSMIT = 0x2F, JVS_CMD_DEC_COIN_CT = 0x30, JVS_CMD_INC_PAYOUTT = 0x31, JVS_CMD_WRITE_GPIO1 = 0x32, JVS_CMD_WRITE_ANALOG_OUT = 0x33, JVS_CMD_WRITE_CHAR_OUT = 0x34, JVS_CMD_INC_COIN_CT = 0x35, JVS_CMD_DEC_PAYOUTT = 0x36, JVS_CMD_WRITE_GPIO2 = 0x37, JVS_CMD_WRITE_GPIO3 = 0x38, JVS_CMD_TAITO_60 = 0x60, JVS_CMD_TAITO_NESICA_READ = 0x61, JVS_CMD_TAITO_NOOP_62 = 0x62, JVS_CMD_TAITO_NOOP_63 = 0x63, JVS_CMD_TAITO_NOOP_64 = 0x64, JVS_CMD_TAITO_AIC_WRITE_RC = 0x65, JVS_CMD_TAITO_AIC_READ = 0x66, JVS_CMD_RESET = 0xF0, JVS_CMD_ASSIGN_ADDR = 0xF1, JVS_CMD_CHANGE_COMM_METHOD = 0xF2, }; #pragma pack(push, 1) struct jvs_req_read_switches { uint8_t cmd; uint8_t num_players; uint8_t bytes_per_player; }; struct jvs_req_read_coin { uint8_t cmd; uint8_t nslots; }; struct jvs_req_read_analogs { uint8_t cmd; uint8_t nanalogs; }; struct jvs_req_reset { uint8_t cmd; uint8_t unknown; }; struct jvs_req_assign_addr { uint8_t cmd; uint8_t addr; }; #pragma pack(pop)