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:
		@@ -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.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user