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:
Peli de Halleux 2018-10-05 15:25:18 -07:00 committed by GitHub
parent c14108de99
commit f2435df722
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 56 additions and 0 deletions

View File

@ -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.",

View File

@ -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.

View File

@ -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.

View File

@ -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);
}