libdragon
Loading...
Searching...
No Matches
joybus_accessory_internal.h
Go to the documentation of this file.
1
8#ifndef __LIBDRAGON_JOYBUS_ACCESSORY_INTERNAL_H
9#define __LIBDRAGON_JOYBUS_ACCESSORY_INTERNAL_H
10
11#include <stdint.h>
12
13#include "joybus.h"
14#include "joybus_commands.h"
15#include "joybus_accessory.h"
16
22#ifdef __cplusplus
23extern "C" {
24#endif
25
29#define JOYBUS_ACCESSORY_TRANSFER_BANK_SIZE 0x4000
33#define JOYBUS_ACCESSORY_TRANSFER_BANK_MASK 0x3FFF
34
43#define JOYBUS_ACCESSORY_ADDR_MASK_OFFSET 0xFFE0
47#define JOYBUS_ACCESSORY_ADDR_MASK_CHECKSUM 0x001F
/* JOYBUS_ACCESSORY_ADDR_MASK */
49
58#define JOYBUS_ACCESSORY_ADDR_LABEL 0x0000
62#define JOYBUS_ACCESSORY_ADDR_PROBE 0x8000
66#define JOYBUS_ACCESSORY_ADDR_RUMBLE_MOTOR 0xC000
70#define JOYBUS_ACCESSORY_ADDR_BIO_PULSE 0xC000
74#define JOYBUS_ACCESSORY_ADDR_SNAP_STATE 0xC000
78#define JOYBUS_ACCESSORY_ADDR_TRANSFER_BANK 0xA000
82#define JOYBUS_ACCESSORY_ADDR_TRANSFER_STATUS 0xB000
86#define JOYBUS_ACCESSORY_ADDR_TRANSFER_CART 0xC000
/* JOYBUS_ACCESSORY_ADDR */
88
102#define JOYBUS_ACCESSORY_PROBE_ABSENT 0x00
106#define JOYBUS_ACCESSORY_PROBE_RUMBLE_PAK 0x80
110#define JOYBUS_ACCESSORY_PROBE_BIO_SENSOR 0x81
122#define JOYBUS_ACCESSORY_PROBE_TRANSFER_PAK_ON 0x84
126#define JOYBUS_ACCESSORY_PROBE_SNAP_STATION 0x85
134#define JOYBUS_ACCESSORY_PROBE_TRANSFER_PAK_OFF 0xFE
/* JOYBUS_ACCESSORY_PROBE */
136
143#define JOYBUS_SNAP_STATION_STATE_IDLE 0x00
145#define JOYBUS_SNAP_STATION_STATE_PRE_SAVE 0xCC
147#define JOYBUS_SNAP_STATION_STATE_POST_SAVE 0x33
149#define JOYBUS_SNAP_STATION_STATE_RESET_CONSOLE 0x5A
151#define JOYBUS_SNAP_STATION_STATE_PRE_ROLL 0x01
153#define JOYBUS_SNAP_STATION_STATE_CAPTURE_PHOTO 0x02
155#define JOYBUS_SNAP_STATION_STATE_POST_ROLL 0x04
157#define JOYBUS_SNAP_STATION_STATE_BUSY 0x08
/* JOYBUS_SNAP_STATION_STATE */
159
166#define JOYBUS_TRANSFER_PAK_STATUS_ACCESS (1<<0)
168#define JOYBUS_TRANSFER_PAK_STATUS_BOOTING (1<<2)
170#define JOYBUS_TRANSFER_PAK_STATUS_RESET (1<<3)
172#define JOYBUS_TRANSFER_PAK_STATUS_CART_PULLED (1<<6)
174#define JOYBUS_TRANSFER_PAK_STATUS_POWER (1<<7)
/* JOYBUS_TRANSFER_PAK_STATUS */
176
185typedef union
186{
188 uint8_t raw;
190 struct __attribute__((packed))
191 {
193
194 unsigned access : 1;
195 unsigned : 1;
197 unsigned booting : 1;
199 unsigned reset : 1;
200 unsigned : 2;
202 unsigned cart_pulled : 1;
204 unsigned power : 1;
206 };
209
220uint16_t joybus_accessory_calculate_addr_checksum(uint16_t addr);
221
231uint8_t joybus_accessory_calculate_data_crc(const uint8_t *data);
232
244joybus_accessory_io_status_t joybus_accessory_compare_data_crc(const uint8_t *data, uint8_t data_crc);
245
254void joybus_accessory_read_async(int port, uint16_t addr, joybus_callback_t callback, void *ctx);
255
265void joybus_accessory_write_async(int port, uint16_t addr, const uint8_t *data, joybus_callback_t callback, void *ctx);
266
267#ifdef __cplusplus
268}
269#endif
270
/* joybus */
272
273#endif
unsigned booting
Transfer Pak "Booting" status bit.
Definition joybus_accessory_internal.h:197
unsigned cart_pulled
Transfer Pak "Cart Pulled" status bit.
Definition joybus_accessory_internal.h:202
unsigned reset
Transfer Pak "Reset" status bit.
Definition joybus_accessory_internal.h:199
unsigned power
Transfer Pak "Powered-On" status bit.
Definition joybus_accessory_internal.h:204
uint8_t raw
Transfer Pak raw status byte.
Definition joybus_accessory_internal.h:188
unsigned access
Transfer Pak "Access" status bit.
Definition joybus_accessory_internal.h:194
uint16_t joybus_accessory_calculate_addr_checksum(uint16_t addr)
Applies the checksum to a Joybus N64 accessory read/write address.
Definition joybus_accessory.c:17
uint8_t joybus_accessory_calculate_data_crc(const uint8_t *data)
Calculates the CRC8 checksum for a Joybus N64 accessory read/write data block.
Definition joybus_accessory.c:38
void joybus_accessory_write_async(int port, uint16_t addr, const uint8_t *data, joybus_callback_t callback, void *ctx)
Asynchronously perform a Joybus N64 accessory write command.
Definition joybus_accessory.c:103
joybus_accessory_io_status_t
Joybus accessory read/write status values.
Definition joybus_accessory.h:24
joybus_accessory_io_status_t joybus_accessory_compare_data_crc(const uint8_t *data, uint8_t data_crc)
Calculates the CRC8 checksum for an accessory read/write data block and compares it against the provi...
Definition joybus_accessory.c:59
void(* joybus_callback_t)(uint64_t *out_dwords, void *ctx)
Callback function signature for joybus_exec_async.
Definition joybus.h:260
void joybus_accessory_read_async(int port, uint16_t addr, joybus_callback_t callback, void *ctx)
Asynchronously perform a Joybus N64 accessory read command.
Definition joybus_accessory.c:76
Joybus N64 Transfer Pak Status wrapper.
Definition joybus_accessory_internal.h:186
Joybus Subsystem.
Joybus accessory utilities.
Joybus command helpers.