12#include <joybus/target.h>
17#define JOYBUS_FREQ_N64_CONSOLE 244141
20#define JOYBUS_FREQ_N64_EXTJOY JOYBUS_FREQ_N64_CONSOLE
23#define JOYBUS_FREQ_N64_CONTROLLER 250000
26#define JOYBUS_FREQ_N64_VRU 250000
29#define JOYBUS_FREQ_GCN_CONSOLE 202500
32#define JOYBUS_FREQ_GCN_CONTROLLER 250000
35#define JOYBUS_FREQ_WAVEBIRD_RECEIVER 225000
38#define JOYBUS_FREQ_WII_CONSOLE 202500
41#define JOYBUS_FREQ_GCN_GBA_CABLE 262144
44#define JOYBUS_INTER_TRANSFER_DELAY_US 80
47#define JOYBUS_REPLY_TIMEOUT_US 100
50#define JOYBUS_BUS_IDLE_US 100
53#define JOYBUS_BLOCK_SIZE 64
56#define JOYBUS_PAK_BLOCK_SIZE 32
61#define JOYBUS(bus) ((struct joybus *)(bus))
78 int (*enable)(
struct joybus *bus);
79 int (*disable)(
struct joybus *bus);
80 int (*transfer)(
struct joybus *bus,
const uint8_t *write_buf, uint8_t write_len, uint8_t *read_buf, uint8_t read_len,
112 return bus->api->enable(bus);
122 return bus->api->disable(bus);
141static inline int joybus_transfer(
struct joybus *bus,
const uint8_t *write_buf, uint8_t write_len, uint8_t *read_buf,
144 return bus->api->transfer(bus, write_buf, write_len, read_buf, read_len, callback, user_data);
175 bus->target = target;
179 return bus->api->target_register(bus, target);
192 int status = bus->api->target_unregister(bus, target);
208void joybus_sync_cb(
struct joybus *bus,
int status,
void *user_data);
static int joybus_enable(struct joybus *bus)
Enable the Joybus instance.
Definition bus.h:110
void(* joybus_transfer_cb)(struct joybus *bus, int status, void *user_data)
Function type for transfer completion callbacks.
Definition bus.h:74
#define JOYBUS_BLOCK_SIZE
Maximum size of a Joybus transfer, in bytes.
Definition bus.h:53
int joybus_transfer_sync(struct joybus *bus, const uint8_t *write_buf, uint8_t write_len, uint8_t *read_buf, uint8_t read_len)
Perform a synchronous "write then read" Joybus transfer.
Definition bus.c:24
static int joybus_target_unregister(struct joybus *bus, struct joybus_target *target)
Unregister a Joybus target.
Definition bus.h:189
static int joybus_transfer(struct joybus *bus, const uint8_t *write_buf, uint8_t write_len, uint8_t *read_buf, uint8_t read_len, joybus_transfer_cb callback, void *user_data)
Perform a Joybus "write then read" transfer.
Definition bus.h:141
static int joybus_disable(struct joybus *bus)
Disable the Joybus instance.
Definition bus.h:120
static int joybus_target_register(struct joybus *bus, struct joybus_target *target)
Enable Joybus "target" mode, and register a target to handle commands.
Definition bus.h:172
uint8_t status
Status flags.
Definition identify.h:4
Interface for a Joybus target, a device on the Joybus which responds to commands from a host.
Definition target.h:69
bool registered
Whether the target is currently registered on the bus.
Definition target.h:74
A Joybus instance.
Definition bus.h:96