pxt-calliope/libs/core/serial.cpp

72 lines
2.1 KiB
C++
Raw Normal View History

2016-04-02 07:00:42 +02:00
#include "ksbit.h"
2016-05-26 20:07:09 +02:00
enum class SerialPin {
P0 = MICROBIT_ID_IO_P0,
P1 = MICROBIT_ID_IO_P1,
P2 = MICROBIT_ID_IO_P2,
P8 = MICROBIT_ID_IO_P8,
P12 = MICROBIT_ID_IO_P12,
P13 = MICROBIT_ID_IO_P13,
P14 = MICROBIT_ID_IO_P14,
P15 = MICROBIT_ID_IO_P15,
P16 = MICROBIT_ID_IO_P16
};
enum class BaudRate {
//% block=115200
BaudRate115200 = 115200,
//% block=9600
BaudRate9600 = 9600
};
2016-04-02 07:00:42 +02:00
//% weight=2 color=30
namespace serial {
// note that at least one // followed by % is needed per declaration!
/**
* Reads a line of text from the serial port.
*/
2016-05-17 18:36:01 +02:00
//% help=serial/read-line
//% blockId=serial_read_line block="serial read line"
//% weight=20
StringData* readLine() {
return uBit.serial.readUntil(ManagedString("\n")).leakData();
2016-04-02 07:00:42 +02:00
}
/**
* Sends a piece of text through Serial connection.
*/
2016-05-17 18:36:01 +02:00
//% help=serial/write-string
//% weight=87
//% blockId=serial_writestring block="serial write string %text"
2016-04-02 07:00:42 +02:00
void writeString(StringData *text) {
2016-04-14 23:29:28 +02:00
uBit.serial.send(ManagedString(text));
2016-04-02 07:00:42 +02:00
}
2016-05-17 18:36:01 +02:00
/**
* Registers an event to be fired when one of the delimiter is matched
* @param delimiters the characters to match received characters against. eg:"\n"
*/
// help=serial/on-data-received
// weight=19
2016-05-17 18:36:01 +02:00
void onDataReceived(StringData* delimiters, Action body) {
uBit.serial.eventOn(ManagedString(delimiters));
registerWithDal(MICROBIT_ID_SERIAL, MICROBIT_SERIAL_EVT_DELIM_MATCH, body);
}
2016-05-26 20:07:09 +02:00
/**
* Dynamically configuring the serial instance to use pins other than USBTX and USBRX.
* @param tx the new transmission pins
* @param rx the new reception pin
* @param baud the new baud rate. eg: 115200
*/
//% weight=10
//% help=serial/redirect-to
2016-05-26 20:07:09 +02:00
//% blockId=serial_redirect block="serial redirect to|TX %tx|RX %rx|at baud rate %rate"
//% blockExternalInputs=1
void redirect(SerialPin tx, SerialPin rx, BaudRate rate) {
uBit.serial.redirect((PinName)tx, (PinName)rx);
uBit.serial.baud((int)rate);
}
}