Files
2026-03-14 21:44:00 -04:00

29 lines
1.4 KiB
C

#pragma once
#include <windows.h>
#include <stdint.h>
#pragma pack(push, 1)
struct fastio_node {
uint8_t board_no;
// Unlike JVS, FastIO comms are done on the game side through
// DMA register reads and writes, meaning we need to have
// indivitual functions here instead of just "transact"
void (*reset)(void* ctx, uint32_t val); // Board reset
void (*digital_in)(void* ctx, uint32_t *out); // Digital button inputs
void (*analog_in)(void* ctx, uint8_t num, uint32_t *out); // Analog stick inputs (WIP)
void (*coins_in)(void* ctx, uint8_t slot, uint32_t *out); // Number of unprocessed coins
void (*coins_out)(void* ctx, uint8_t slot, uint32_t removed); // Remove coins from the count
void (*gpio_out)(void* ctx, uint8_t channel, uint32_t val); // GPIO outputs
};
#pragma pack(pop)
typedef HRESULT (*fastio_provider_t)(struct fastio_node *root);
HRESULT fastio_hook_init(fastio_provider_t main, fastio_provider_t sub);
void fastio_reset(void* ctx, uint8_t board_no, uint32_t in);
void fastio_digital_read(void* ctx, uint8_t board_no, uint32_t *out);
void fastio_analog_in(void* ctx, uint8_t board_no, uint8_t analog_no, uint32_t *out);
void fastio_coins_in(void* ctx, uint8_t board_no, uint8_t slot_no, uint32_t *out);
void fastio_coins_out(void* ctx, uint8_t board_no, uint8_t slot_no, uint32_t in);
void fastio_gpio_out(void* ctx, uint8_t board_no, uint8_t channel, uint32_t in);