GBDK 2020 Docs
4.4.0
API Documentation for GBDK 2020
|
Go to the source code of this file.
Functions | |
void | duck_io_send_byte (uint8_t tx_byte) |
uint8_t | duck_io_read_byte_no_timeout (void) |
void | duck_io_enable_read_byte (void) |
bool | duck_io_laptop_init (void) |
bool | duck_io_printer_detected (void) |
uint8_t | duck_io_printer_type (void) |
bool | duck_io_read_byte_with_msecs_timeout (uint8_t timeout_len_ms) |
bool | duck_io_send_byte_and_check_ack_msecs_timeout (uint8_t tx_byte, uint8_t timeout_len_ms, uint8_t expected_reply) |
bool | duck_io_send_cmd_and_buffer (uint8_t io_cmd) |
bool | duck_io_send_cmd_and_receive_buffer (uint8_t io_cmd) |
Variables | |
volatile bool | duck_io_rx_byte_done |
volatile uint8_t | duck_io_rx_byte |
uint8_t | duck_io_rx_buf [DUCK_IO_LEN_RX_MAX] |
uint8_t | duck_io_rx_buf_len |
uint8_t | duck_io_tx_buf [DUCK_IO_LEN_TX_MAX] |
uint8_t | duck_io_tx_buf_len |
The MegaDuck Laptop models (Spanish and German) have several built-in hardware peripherals which are attached via a controller that is communicated with using the serial link port.
To use any functions here, duck_io_laptop_init() must be called first (just once).
For the present time all of the serial operations are blocking, they do not return until completed.
#define _MEGADUCK_LAPTOP_IO_H |
#define DUCK_IO_CMD_INIT_START 0x00u |
Command to request starting the hardware init counter sequence process
#define DUCK_IO_CMD_GET_KEYS 0x00u |
Command to get hardware keyboard data by receiving a multi-byte packet
#define DUCK_IO_CMD_DONE_OR_OK 0x01u |
#define DUCK_IO_CMD_ABORT_OR_FAIL 0x04u |
#define DUCK_IO_CMD_PLAY_SPEECH 0x05u |
#define DUCK_IO_CMD_RUN_CART_IN_SLOT 0x08u |
#define DUCK_IO_CMD_PRINT_INIT_MAYBE_EXT_IO 0x09u |
Command to init the printer and return status + model type
#define DUCK_IO_CMD_SET_RTC 0x0Bu |
Command to set hardware RTC by sending a multi-byte packet
#define DUCK_IO_CMD_GET_RTC 0x0Cu |
Command to get hardware RTC by receiving a a multi-byte packet
#define DUCK_IO_CMD_PRINT_SEND_BYTES 0x11u |
Send printer data
#define DUCK_IO_REPLY_BOOT_UNSET 0x00u |
#define DUCK_IO_REPLY_BOOT_FAIL 0x01u |
#define DUCK_IO_REPLY_BUFFER_XFER_OK 0x01u |
#define DUCK_IO_REPLY_SEND_BUFFER_OK 0x03u |
#define DUCK_IO_REPLY_BOOT_OK 0x01u |
#define DUCK_IO_LEN_KBD_GET 2u |
Get Keyboard key payload size: 2 bytes Payload (excludes 1 length header byte, 1 byte Checksum)
#define DUCK_IO_LEN_RTC_GET 8u |
Get RTC payload size: 8 bytes Payload (excludes 1 length header byte, 1 byte Checksum)
#define DUCK_IO_LEN_RTC_SET 8u |
Set RTC payload size: 8 bytes Payload (excludes 1 length header byte, 1 byte Checksum)
#define DUCK_IO_LEN_PLAY_SPEECH 1u |
Play Speech payload size: 1 byte Payload (excludes 1 length header byte, 1 byte Checksum)
#define DUCK_IO_REPLY_NO_CART_IN_SLOT 06u |
#define DUCK_IO_LEN_RX_MAX 14u |
#define DUCK_IO_LEN_TX_MAX 14u |
#define DUCK_IO_TIMEOUT_2_MSEC 2u |
#define DUCK_IO_TIMEOUT_100_MSEC 100u |
#define DUCK_IO_TIMEOUT_200_MSEC 200u |
#define DUCK_IO_SPEECH_CMD_MIN 1 |
#define DUCK_IO_SPEECH_CMD_MAX 6 |
#define DUCK_IO_RTC_YEAR 0u |
#define DUCK_IO_RTC_MON 1u |
#define DUCK_IO_RTC_DAY 2u |
#define DUCK_IO_RTC_WEEKDAY 3u |
#define DUCK_IO_RTC_AMPM 4u |
#define DUCK_IO_RTC_HOUR 5u |
#define DUCK_IO_RTC_MIN 6u |
#define DUCK_IO_RTC_SEC 7u |
#define DUCK_IO_KBD_FLAGS 0u |
#define DUCK_IO_KBD_KEYCODE 1u |
#define DUCK_IO_PRINTER_INIT_MASK 0x01u |
#define DUCK_IO_PRINTER_INIT_OK 0x01u |
#define DUCK_IO_PRINTER_INIT_FAIL 0x00u |
#define DUCK_IO_PRINTER_TYPE_MASK 0x02u |
#define DUCK_IO_PRINTER_TYPE_2_PASS 0x00u |
#define DUCK_IO_PRINTER_TYPE_1_PASS 0x02u |
void duck_io_send_byte | ( | uint8_t | tx_byte | ) |
Sends a byte over serial to the MegaDuck laptop peripheral
tx_byte | Byte to send |
uint8_t duck_io_read_byte_no_timeout | ( | void | ) |
Reads a byte over serial from the MegaDuck laptop peripheral with NO timeout
Returns: the received byte
If there is no reply then it will hang forever
void duck_io_enable_read_byte | ( | void | ) |
Prepares to receive serial data from the MegaDuck laptop peripheral
bool duck_io_laptop_init | ( | void | ) |
Performs init sequence over serial with the MegaDuck laptop peripheral
Returns true
if successful, otherwise false
Needs to be done just once any time system is powered on or a cartridge is booted.
Sends count up sequence + some commands, then waits for a matching count down sequence in reverse.
bool duck_io_printer_detected | ( | void | ) |
Returns whether the MegaDuck Printer was detected during duck_io_laptop_init()
Returns true
if successful, otherwise false
duck_io_laptop_init() must be called first
uint8_t duck_io_printer_type | ( | void | ) |
Returns which type of MegaDuck Printer was detected during duck_io_laptop_init()
Return value should be one of the following:
duck_io_laptop_init() must be called first
Waits to receive a byte over serial from the MegaDuck laptop peripheral with a timeout
timeout_len_ms | Unit size is in msec (100 is about ~ 103 msec or 6.14 frames) |
Returns:
true
: Success, received byte will be in duck_io_rx_byte
global false
: Read timed out with no reply bool duck_io_send_byte_and_check_ack_msecs_timeout | ( | uint8_t | tx_byte, |
uint8_t | timeout_len_ms, | ||
uint8_t | expected_reply | ||
) |
Sends a byte over over serial to the MegaDuck laptop peripheral and waits for a reply with a timeout
tx_byte | Byte to send |
timeout_len_ms | Unit size is in msec (100 is about ~ 103 msec or 6.14 frames) |
expected_reply | The expected value of the reply byte |
Returns:
true
: Success false
: if timed out or reply byte didn't match expected value Sends a command and a multi-byte buffer over serial to the MegaDuck laptop peripheral
io_cmd | Command byte to send |
The data should be pre-loaded into these globals:
Returns: true
if succeeded
Sends a command and then receives a multi-byte buffer over serial from the MegaDuck laptop peripheral
io_cmd | Command byte to send |
If successful, the received data and length will be in these globals:
Returns: true
if succeeded, false
if failed (could be no reply, failed checksum, etc)
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |