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.startTemperatureService": "Starts the Bluetooth temperature service",
|
||||||
"bluetooth.startUartService": "Starts the Bluetooth UART service",
|
"bluetooth.startUartService": "Starts the Bluetooth UART service",
|
||||||
"bluetooth.stopAdvertising": "Stops advertising Eddystone end points",
|
"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.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.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.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.",
|
"bluetooth.uartWriteValue": "Writes a ``name: value`` pair line to the serial.",
|
||||||
|
@ -98,6 +98,39 @@ namespace bluetooth {
|
|||||||
return PSTR(uart->readUntil(MSTR(del)));
|
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.
|
* Registers an event to be fired when one of the delimiter is matched.
|
||||||
* @param delimiters the characters to match received characters against.
|
* @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
|
//% parts="bluetooth" advanced=true shim=bluetooth::startUartService
|
||||||
function startUartService(): void;
|
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.
|
* Registers an event to be fired when one of the delimiter is matched.
|
||||||
* @param delimiters the characters to match received characters against.
|
* @param delimiters the characters to match received characters against.
|
||||||
|
@ -208,6 +208,15 @@ namespace pxsim.bluetooth {
|
|||||||
export function uartWriteString(s: string): void {
|
export function uartWriteString(s: string): void {
|
||||||
serial.writeString(s)
|
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 {
|
export function uartReadUntil(del: string): string {
|
||||||
return serial.readUntil(del);
|
return serial.readUntil(del);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user