libdragon
Loading...
Searching...
No Matches
joybus_commands.h
Go to the documentation of this file.
1
8#ifndef __LIBDRAGON_JOYBUS_COMMANDS_H
9#define __LIBDRAGON_JOYBUS_COMMANDS_H
10
11#include <assert.h>
12#include <stdbool.h>
13#include <stdint.h>
14
15#include "joybus.h"
16
54#define JOYBUS_COMMAND_SKIP_SIZE 1
58#define JOYBUS_COMMAND_METADATA_SIZE 2
62#define JOYBUS_COMMAND_OFFSET_SEND_LEN 0
66#define JOYBUS_COMMAND_OFFSET_RECV_LEN 1
70#define JOYBUS_COMMAND_OFFSET_COMMAND_ID 2
/* JOYBUS_COMMAND_METADATA */
72
79#define JOYBUS_COMMAND_ID_RESET 0xFF
81#define JOYBUS_COMMAND_ID_IDENTIFY 0x00
83#define JOYBUS_COMMAND_ID_N64_CONTROLLER_READ 0x01
85#define JOYBUS_COMMAND_ID_N64_ACCESSORY_READ 0x02
87#define JOYBUS_COMMAND_ID_N64_ACCESSORY_WRITE 0x03
89#define JOYBUS_COMMAND_ID_EEPROM_READ_BLOCK 0x04
91#define JOYBUS_COMMAND_ID_EEPROM_WRITE_BLOCK 0x05
93#define JOYBUS_COMMAND_ID_RTC_IDENTIFY 0x06
95#define JOYBUS_COMMAND_ID_RTC_READ_BLOCK 0x07
97#define JOYBUS_COMMAND_ID_RTC_WRITE_BLOCK 0x08
99#define JOYBUS_COMMAND_ID_N64_RANDNET_KEYBOARD_READ 0x13
101#define JOYBUS_COMMAND_ID_64GB_LINK_CABLE_READ 0x13
103#define JOYBUS_COMMAND_ID_GBA_LINK_CABLE_READ 0x14
105#define JOYBUS_COMMAND_ID_64GB_LINK_CABLE_WRITE 0x14
107#define JOYBUS_COMMAND_ID_GBA_LINK_CABLE_WRITE 0x15
114#define JOYBUS_COMMAND_ID_PIXELFX_N64_GAME_ID 0x1D
116#define JOYBUS_COMMAND_ID_GCN_CONTROLLER_READ 0x40
118#define JOYBUS_COMMAND_ID_GCN_CONTROLLER_ORIGIN 0x41
124#define JOYBUS_COMMAND_ID_GCN_CONTROLLER_RECALIBRATE 0x42
131#define JOYBUS_COMMAND_ID_GCN_CONTROLLER_READ_LONG 0x43
/* JOYBUS_COMMAND_ID */
133
134#ifdef __cplusplus
135extern "C" {
136#endif
137
143typedef struct __attribute__((packed)) joybus_cmd_n64_accessory_read_port_s
144{
146 struct __attribute__((packed))
147 {
149 uint8_t command;
151 uint16_t addr_checksum;
152 } send;
154 struct __attribute__((packed))
155 {
157 uint8_t data[JOYBUS_ACCESSORY_DATA_SIZE];
159 uint8_t data_crc;
160 } recv;
162
171
180
186typedef struct __attribute__((packed)) joybus_cmd_n64_accessory_write_port_s
187{
189 struct __attribute__((packed))
190 {
192 uint8_t command;
194 uint16_t addr_checksum;
196 uint8_t data[JOYBUS_ACCESSORY_DATA_SIZE];
197
198 } send;
200 struct __attribute__((packed))
201 {
203 uint8_t data_crc;
204 } recv;
206
215
224
230typedef struct __attribute__((packed)) joybus_cmd_identify_port_s
231{
233 struct __attribute__((__packed__))
234 {
236 uint8_t command;
237 } send;
239 struct __attribute__((__packed__))
240 {
242 uint16_t identifier;
244 uint8_t status;
245 } recv;
247
256
262typedef struct __attribute__((packed)) joybus_cmd_eeprom_read_block_s
263{
265 struct __attribute__((packed))
266 {
268 uint8_t command;
270 uint8_t block;
271 } send;
273 struct __attribute__((packed))
274 {
275 union __attribute__((packed))
276 {
278 uint8_t data[8];
280 uint64_t dword;
281 };
283 uint8_t status;
284 } recv;
286
295
301typedef struct __attribute__((packed)) joybus_cmd_eeprom_write_block_s
302{
304 struct __attribute__((packed))
305 {
307 uint8_t command;
309 uint8_t block;
310 union __attribute__((packed))
311 {
313 uint8_t data[8];
315 uint64_t dword;
316 };
317 } send;
319 struct __attribute__((packed))
320 {
322 uint8_t status;
323 } recv;
325
334
340typedef struct __attribute__((packed)) joybus_cmd_pixelfx_n64_game_id_s
341{
343 struct __attribute__((__packed__))
344 {
346 uint8_t command;
353 uint64_t rom_check_code;
355 uint8_t media_format;
357 uint8_t region_code;
358 } send;
365 uint8_t recv;
367
373typedef struct __attribute__((packed)) joybus_cmd_n64_controller_read_port_s
374{
376 struct __attribute__((__packed__))
377 {
379 uint8_t command;
380 } send;
382 struct __attribute__((__packed__))
383 {
384 unsigned a : 1;
385 unsigned b : 1;
386 unsigned z : 1;
387 unsigned start : 1;
388 unsigned d_up : 1;
389 unsigned d_down : 1;
390 unsigned d_left : 1;
391 unsigned d_right : 1;
392 unsigned reset : 1;
393 unsigned : 1;
394 unsigned l : 1;
395 unsigned r : 1;
396 unsigned c_up : 1;
397 unsigned c_down : 1;
398 unsigned c_left : 1;
399 unsigned c_right : 1;
400 signed stick_x : 8;
401 signed stick_y : 8;
402 } recv;
404
410typedef struct __attribute__((packed)) joybus_cmd_gcn_controller_read_port_s
411{
413 struct __attribute__((__packed__))
414 {
416 uint8_t command;
418 uint8_t mode;
420 uint8_t rumble;
421 } send;
423 struct __attribute__((__packed__))
424 {
425 unsigned : 2;
426 unsigned check_origin : 1;
427 unsigned start : 1;
428 unsigned y : 1;
429 unsigned x : 1;
430 unsigned b : 1;
431 unsigned a : 1;
432 unsigned use_origin : 1;
433 unsigned l : 1;
434 unsigned r : 1;
435 unsigned z : 1;
436 unsigned d_up : 1;
437 unsigned d_down : 1;
438 unsigned d_right : 1;
439 unsigned d_left : 1;
440 unsigned stick_x : 8;
441 unsigned stick_y : 8;
442 unsigned cstick_x : 8;
443 unsigned cstick_y : 8;
444 unsigned analog_l : 8;
445 unsigned analog_r : 8;
446 } recv;
448
454typedef struct __attribute__((packed)) joybus_cmd_gcn_controller_read_long_port_s
455{
457 struct __attribute__((__packed__))
458 {
460 uint8_t command;
461 } send;
463 struct __attribute__((__packed__))
464 {
465 unsigned : 2;
466 unsigned check_origin : 1;
467 unsigned start : 1;
468 unsigned y : 1;
469 unsigned x : 1;
470 unsigned b : 1;
471 unsigned a : 1;
472 unsigned use_origin : 1;
473 unsigned l : 1;
474 unsigned r : 1;
475 unsigned z : 1;
476 unsigned d_up : 1;
477 unsigned d_down : 1;
478 unsigned d_right : 1;
479 unsigned d_left : 1;
480 unsigned stick_x : 8;
481 unsigned stick_y : 8;
482 unsigned cstick_x : 8;
483 unsigned cstick_y : 8;
484 unsigned analog_l : 8;
485 unsigned analog_r : 8;
486 unsigned analog_a : 8;
487 unsigned analog_b : 8;
488 } recv;
490
499
508
509#ifdef __cplusplus
510}
511#endif
512
/* joybus_commands */
514
515#endif
uint8_t recv
(unused)
Definition joybus_commands.h:365
joybus_cmd_gcn_controller_read_long_port_t joybus_cmd_gcn_controller_origin_port_t
"GameCube Controller Read Origins" Joybus command structure.
Definition joybus_commands.h:507
joybus_cmd_identify_port_t joybus_cmd_reset_port_t
"Reset" Joybus command structure.
Definition joybus_commands.h:255
joybus_cmd_eeprom_write_block_t joybus_cmd_rtc_write_block_t
"RTC Write Block" Joybus command structure.
Definition joybus_commands.h:333
joybus_cmd_eeprom_read_block_t joybus_cmd_rtc_read_block_t
"RTC Read Block" Joybus command structure.
Definition joybus_commands.h:294
joybus_cmd_gcn_controller_read_long_port_t joybus_cmd_gcn_controller_recalibrate_port_t
"GameCube Controller Recalibrate" Joybus command structure.
Definition joybus_commands.h:498
joybus_cmd_n64_accessory_write_port_t joybus_cmd_64gb_link_cable_write_port_t
"64GB Link Cable Write" Joybus command structure.
Definition joybus_commands.h:214
joybus_cmd_n64_accessory_write_port_t joybus_cmd_gba_link_cable_write_port_t
"GBA Link Cable Write" Joybus command structure.
Definition joybus_commands.h:223
joybus_cmd_n64_accessory_read_port_t joybus_cmd_64gb_link_cable_read_port_t
"64GB Link Cable Read" Joybus command structure.
Definition joybus_commands.h:170
joybus_cmd_n64_accessory_read_port_t joybus_cmd_gba_link_cable_read_port_t
"GBA Link Cable Read" Joybus command structure.
Definition joybus_commands.h:179
"EEPROM Read Block" Joybus command structure.
Definition joybus_commands.h:263
"EEPROM Write Block" Joybus command structure.
Definition joybus_commands.h:302
"GameCube Controller Long Read" Joybus command structure.
Definition joybus_commands.h:455
"GameCube Controller Read" Joybus command structure.
Definition joybus_commands.h:411
"Identify" Joybus command structure.
Definition joybus_commands.h:231
"N64 Accessory Read" Joybus command structure.
Definition joybus_commands.h:144
"N64 Accessory Write" Joybus command structure.
Definition joybus_commands.h:187
"N64 Controller Read" Joybus command structure.
Definition joybus_commands.h:374
"PixelFX N64 Game ID" Joybus command structure.
Definition joybus_commands.h:341
#define JOYBUS_ACCESSORY_DATA_SIZE
Size of a Joybus N64 accessory read/write payload in bytes.
Definition joybus.h:76
Joybus Subsystem.