diff --git a/README.md b/README.md index 5723c97..ac2e40f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # Arduino CAN +## Modifications +Added pull request: https://github.com/sandeepmistry/arduino-CAN/pull/27/commits/47c36a5b624c412cb620c9fe1177e79fef756999 +All credit to github user Deltaphi + [![Build Status](https://travis-ci.org/sandeepmistry/arduino-CAN.svg?branch=master)](https://travis-ci.org/sandeepmistry/arduino-CAN) An Arduino library for sending and receiving data using CAN bus. @@ -52,8 +56,8 @@ Requires an external 3.3V CAN transceiver, such as a [TI SN65HVD230](http://www. ### Using Git ```sh -cd ~/Documents/Arduino/libraries/ -git clone https://github.com/sandeepmistry/arduino-CAN CAN +cd ~/Arduino/libraries/ +git clone git@github.com:JakeDimes/arduino-CAN.git CAN ``` ## API diff --git a/src/CANController.cpp b/src/CANController.cpp index 0890eec..176ba59 100644 --- a/src/CANController.cpp +++ b/src/CANController.cpp @@ -167,6 +167,21 @@ int CANControllerClass::read() return _rxData[_rxIndex++]; } + +size_t CANControllerClass::readBytes(char *buffer, size_t length) { + int bytesAvailable = available(); + if (bytesAvailable <= 0) { + return 0; + } + if (bytesAvailable < length) { + length = bytesAvailable; + } + memcpy(buffer, _rxData, length); + _rxIndex += length; + return length; +} + + int CANControllerClass::peek() { if (!available()) { diff --git a/src/CANController.h b/src/CANController.h index cdaeb94..ae4112f 100644 --- a/src/CANController.h +++ b/src/CANController.h @@ -31,6 +31,10 @@ class CANControllerClass : public Stream { virtual int read(); virtual int peek(); virtual void flush(); + virtual size_t readBytes(char *buffer, size_t length); + virtual size_t readBytes(uint8_t *buffer, size_t length) { + return readBytes((char*)buffer, length); + } virtual void onReceive(void(*callback)(int)); @@ -43,6 +47,9 @@ class CANControllerClass : public Stream { virtual int loopback(); virtual int sleep(); virtual int wakeup(); + + // Returing the recieve buffer improves data access speed + uint8_t * getRxBuf() { return _rxData; } protected: CANControllerClass();