Serial
Serial communication functions allow for sending and receiving data through the 3Pin serial port (the small jack-like port).
The functions provided here are similar to those on the Casio fx-CG50 calculator and follow the implementations found in the libfxcg library.
Methods
Section titled “Methods”Open Serial
Section titled “Open Serial”Opens the 3-pin serial port with the specified parameters.
extern "C"int Serial_Open(unsigned char *mode);- Parameters:
mode- An array specifying the serial port settings.mode[0]: Always 0.mode[1]: Bit rate (e.g., 5 for 9600 bps).mode[2]: Parity (0=none, 1=odd, 2=even).mode[3]: Data length (0=8bit, 1=7bit).mode[4]: Stop bits (0=1bit, 1=2bit).mode[5]: Always 0.
- Returns:
0on success.3if already open.
See Prizm’s Serial_Open for more info.
Is Serial Open
Section titled “Is Serial Open”Checks if the serial port is open.
extern "C"int Serial_IsOpen(void);- Returns:
1if the serial port is open,0otherwise.
Close Serial
Section titled “Close Serial”Closes the serial port.
extern "C"int Serial_Close(int mode);- Parameters:
mode- The mode to close the serial port. - Returns:
0on success.
Read Serial
Section titled “Read Serial”Reads a specified number of bytes from the serial port.
extern "C"int Serial_Read(unsigned char *out, int sz, short *count);- Parameters:
out- Pointer to the buffer to store the read data.sz- Number of bytes to read.count- Pointer to a variable to store the number of bytes actually read.
- Returns:
0on success.
Read Serial Single Byte
Section titled “Read Serial Single Byte”Reads a single byte from the serial port.
extern "C"int Serial_ReadSingle(unsigned char *out);- Parameters:
out- Pointer to store the read byte. - Returns:
0on success.
Peek Serial
Section titled “Peek Serial”Peeks at a byte in the serial buffer without removing it.
extern "C"int Serial_Peek(int idx, unsigned char *out);- Parameters:
idx- The index of the byte to peek at.out- Pointer to store the peeked byte.
- Returns:
0on success.
Poll Serial RX
Section titled “Poll Serial RX”Polls the receive buffer for available data.
extern "C"int Serial_PollRX(void);- Returns: The number of bytes available in the receive buffer.
Clear Serial RX
Section titled “Clear Serial RX”Clears the receive buffer.
extern "C"int Serial_ClearRX(void);- Returns:
0on success.
Write Serial
Section titled “Write Serial”Writes a specified number of bytes to the serial port.
extern "C"int Serial_Write(const unsigned char *buf, int count);- Parameters:
buf- Pointer to the buffer containing the data to be sent.count- Number of bytes to send.
- Returns:
0on success.
See Prizm’s Serial_Write for more info.
Write Serial Single Byte
Section titled “Write Serial Single Byte”Writes a single byte to the serial port.
extern "C"int Serial_WriteSingle(unsigned char x);- Parameters:
x- The byte to be sent. - Returns:
0on success.
Write Unbuffered Serial
Section titled “Write Unbuffered Serial”Writes a single byte to the serial port without buffering.
extern "C"int Serial_WriteUnbuffered(unsigned char x);- Parameters:
x- The byte to be sent. - Returns:
0on success.
Poll Serial TX
Section titled “Poll Serial TX”Polls the transmit buffer for space.
extern "C"int Serial_PollTX(void);- Returns: The number of bytes available in the transmit buffer.
Clear Serial TX
Section titled “Clear Serial TX”Clears the transmit buffer.
extern "C"int Serial_ClearTX(void);- Returns:
0on success.
Opening and Closing the Serial Port
Section titled “Opening and Closing the Serial Port”#include <sdk/os/serial.hpp>#include <sdk/os/debug.hpp>
void example_serial_open_close() { unsigned char mode[6] = {0, 5, 0, 0, 0, 0}; // 9600 bps, no parity, 8 data bits, 1 stop bit int result = Serial_Open(mode); if (result == 0) { Debug_Printf(0,0,false,0,"Serial port opened successfully\n"); } else if (result == 3) { Debug_Printf(0,0,false,0,"Serial port already open\n"); }
result = Serial_Close(0); if (result == 0) { Debug_Printf(0,1,false,0,"Serial port closed successfully\n"); }}Sending and Receiving Data
Section titled “Sending and Receiving Data”#include <sdk/os/serial.hpp>#include <sdk/os/debug.hpp>
void example_serial_communication() { unsigned char mode[6] = {0, 5, 0, 0, 0, 0}; // 9600 bps, no parity, 8 data bits, 1 stop bit Serial_Open(mode);
unsigned char send_data[] = "Hello, Serial!"; Serial_Write(send_data, sizeof(send_data));
unsigned char recv_data[20]; short count; Serial_Read(recv_data, 20, &count);
Debug_Printf(0,0,false,0,"Received %d bytes: %s\n", count, recv_data);
Serial_Close(0);}