BLE UART Buffer methods (#1353)
* adding simulator * attempt at handling size * correct ref counting * defense is on * handle read < 0
This commit is contained in:
parent
c14108de99
commit
f2435df722
@ -29,7 +29,9 @@
|
||||
"bluetooth.startTemperatureService": "Starts the Bluetooth temperature service",
|
||||
"bluetooth.startUartService": "Starts the Bluetooth UART service",
|
||||
"bluetooth.stopAdvertising": "Stops advertising Eddystone end points",
|
||||
"bluetooth.uartReadBuffer": "Reads buffered UART data into a buffer",
|
||||
"bluetooth.uartReadUntil": "Reads from the Bluetooth UART service buffer, returning its contents when the specified delimiter character is encountered.",
|
||||
"bluetooth.uartWriteBuffer": "Sends a buffer of data via Bluetooth UART",
|
||||
"bluetooth.uartWriteNumber": "Prints a numeric value to the serial",
|
||||
"bluetooth.uartWriteString": "Writes to the Bluetooth UART service buffer. From there the data is transmitted over Bluetooth to a connected device.",
|
||||
"bluetooth.uartWriteValue": "Writes a ``name: value`` pair line to the serial.",
|
||||
|
@ -98,6 +98,39 @@ namespace bluetooth {
|
||||
return PSTR(uart->readUntil(MSTR(del)));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sends a buffer of data via Bluetooth UART
|
||||
*/
|
||||
//%
|
||||
void uartWriteBuffer(Buffer buffer) {
|
||||
startUartService();
|
||||
uart->send(buffer->data, buffer->length);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads buffered UART data into a buffer
|
||||
*/
|
||||
//%
|
||||
Buffer uartReadBuffer() {
|
||||
startUartService();
|
||||
int bytes = uart->rxBufferedSize();
|
||||
auto buffer = mkBuffer(NULL, bytes);
|
||||
int read = uart->read(buffer->data, buffer->length);
|
||||
// read failed
|
||||
if (read < 0) {
|
||||
decrRC(buffer);
|
||||
return mkBuffer(NULL, 0);
|
||||
}
|
||||
// could not fill the buffer
|
||||
if (read != buffer->length) {
|
||||
auto tmp = mkBuffer(buffer->data, read);
|
||||
decrRC(buffer);
|
||||
buffer = tmp;
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers an event to be fired when one of the delimiter is matched.
|
||||
* @param delimiters the characters to match received characters against.
|
||||
|
12
libs/bluetooth/shims.d.ts
vendored
12
libs/bluetooth/shims.d.ts
vendored
@ -63,6 +63,18 @@ declare namespace bluetooth {
|
||||
//% parts="bluetooth" advanced=true shim=bluetooth::startUartService
|
||||
function startUartService(): void;
|
||||
|
||||
/**
|
||||
* Sends a buffer of data via Bluetooth UART
|
||||
*/
|
||||
//% shim=bluetooth::uartWriteBuffer
|
||||
function uartWriteBuffer(buffer: Buffer): void;
|
||||
|
||||
/**
|
||||
* Reads buffered UART data into a buffer
|
||||
*/
|
||||
//% shim=bluetooth::uartReadBuffer
|
||||
function uartReadBuffer(): Buffer;
|
||||
|
||||
/**
|
||||
* Registers an event to be fired when one of the delimiter is matched.
|
||||
* @param delimiters the characters to match received characters against.
|
||||
|
@ -208,6 +208,15 @@ namespace pxsim.bluetooth {
|
||||
export function uartWriteString(s: string): void {
|
||||
serial.writeString(s)
|
||||
}
|
||||
|
||||
export function uartWriteBuffer(b: RefBuffer): void {
|
||||
serial.writeBuffer(b);
|
||||
}
|
||||
|
||||
export function uartReadBuffer(): RefBuffer {
|
||||
return pins.createBuffer(0);
|
||||
}
|
||||
|
||||
export function uartReadUntil(del: string): string {
|
||||
return serial.readUntil(del);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user