Welcome to ArduRPC¶
ArduRPC brings remote procedure calls(RPC) to microcontrollers. It has been developed for Arduino based projects but can also be used with other platforms. The protocol has been designed to be simple and flexible.
Users:
Getting started¶
Setup¶
First of all download the base library from the ArduRPC repository and extract the ArduRPC directory into your Arduino library path.
After that you can download additional handlers from the ArduRPC handler repository or from any other source. Copy the handler files to your Arduino library path. Make sure you have downloaded and installed all dependencies before using a handler.
Example: Adafruit_NeoPixel
- Download base library
- Extract the files
- Copy the ArduRPC directory to your Arduino library path
- Download the ArduRPC handler repository
- Extract the files
- Copy the ArduRPC_Adafruit_NeoPixel directory to your Arduino library path
- Download the Adafruit_NeoPixel library
- Extract the files
- Copy the Adafruit_NeoPixel directory to you Arduino library path.
Usage¶
The easiest way to get started is to use one of the available examples and to modify only the required parts.
To use the Adafruit_NeoPixel library with ArduRPC follow the examples below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <Adafruit_NeoPixel.h>
#include <ArduRPC.h>
#include <ArduRPC_Adafruit_NeoPixel.h>
Adafruit_NeoPixel strip = Adafruit_NeoPixel(14, 6, NEO_GRB + NEO_KHZ800);
ArduRPC rpc = ArduRPC(2, 0);
ArduRPC_Serial rpc_serial = ArduRPC_Serial(Serial, rpc);
ArduRPC_Adafruit_Neopixel Strip_Wrapper(rpc, "strip", strip);
void setup() {
Serial.begin(9600);
strip.begin();
strip.show();
}
void loop() {
rpc_serial.loop();
}
|
- Line 1:
- Include the Adafruit_NeoPixel library.
- Line 2:
- Include the ArduRPC base library.
- Line 3:
- Include the ArduRPC handler for the Adafruit_NeoPixel.
- Line 5:
- Initialize the NeoPixel strip.
- Line 7:
- Initialize the RPC manager with a limit of 2 handlers and 0 functions.
- Line 8:
- Initialize the RPC data processor for a serial communication.
- Line 10:
- Initialize the handler for the strip and name it ‘strip’.
- Line 13:
- Initialize the serial port and set baud to 9600.
- Line 15 and 16:
- Setup the strips.
- Line 18:
- Run the ArduRPC processing loop.
Additional examples¶
At least one example should be included with every library/handler.
Handler¶
A handler provides one or more callable functions. Before the functions are accessible over the remote procedure call interface the handler must be connected to the system. A handler can be identified by the handler type.
Handler types¶
A handler type belongs always to a group with a base type. Functions defined in the base type must be available in all subtypes. This ensures that a client with support for a base type can at least access the basic functionality of a handler even if that specific subtype isn’t supported.
The development process of an API can be classified by three states:
- Experimental:
- Currently under development and the API might be changed in the next release.
- Beta:
- The API should be changed only if there is a good reason for this.
- Stable:
- The existing API must not be changed.
To register a new handler type feel free to open a new request by using the issue tracker on github.
Start | End | Mask | Name | Status |
---|---|---|---|---|
0x0100 | 0x01FF | 8 | Base Pixel Strip | Beta |
0x0180 | 0x01FF | 9 | Extended Pixel Strip | Experimental |
0x0200 | 0x02FF | 8 | Base Matrix | Beta |
0x0280 | 0x02FF | 9 | Extended Matrix | Beta |
0x0300 | 0x03FF | 8 | Base Text-LCD | Experimental |
0x0380 | 0x03FF | 8 | Extended Text-LCD | Experimental |
0x0400 | 0x04FF | 8 | Base Sensor | Experimental |
0x0401 | Temperature Sensor | Experimental | ||
0x0402 | Humidity Sensor | Experimental | ||
0x0403 | Temperature-Humidity Sensor | Experimental | ||
0x0500 | 0x05FF | 8 | Base Board | Experimental |
0x0501 | 16 | Arduino Board | Experimental | |
0xFF00 | 0xFFFF | 8 | Custom handlers | n/a |
Base types¶
Base/Extended Pixel Strip¶
ID | Function | Strip Type | |
---|---|---|---|
Base | Extended | ||
0x01 | pixel_strip::getColorCount() |
X | x |
0x02 | pixel_strip::getPixelCount() |
X | x |
0x11 | pixel_strip::setPixelColor() |
X | x |
0x12 | pixel_strip::setRangeColor() |
X | x |
-
uint8_t
pixel_strip::
getColorCount
()¶ Get the number of colors. Return value should be 1, 2 or 3.
Returns: Number of colors.
-
uint16_t
pixel_strip::
getPixelCount
()¶ Get the number of available pixels.
Returns: Number of pixels
-
void
pixel_strip::
setPixelColor
(uint16_t n, uint8_t color1, uint8_t color2, uint8_t color3)¶ Set the color of a pixel. All color values MUST be given and spare colors will be ignored by the device.
Parameters: - n – The number of the LED. Range from 0 to pixel_count - 1
- color1 – First color. Red if color_count = 3.
- color2 – Second color. Green if color_count = 3.
- color3 – Third color. Blue if color_count = 3.
-
void
pixel_strip::
setRangeColor
(uint16_t start, uint16_t end, uint8_t color1, uint8_t color2, uint8_t color3)¶ Set the color of a range of pixels.
Parameters: - start – The position to start. Range from 0 to pixel_count - 1
- end – The position to stop. Range from start to pixel_count - 1
- color1 – First color. Red if color_count = 3.
- color2 – Second color. Green if color_count = 3.
- color3 – Third color. Blue if color_count = 3.
Base/Extended Matrix¶
The Base Matrix handler is inspired by the Adafruit_GFX library and it is intended to be used with libraries based on Adafruit_GFX. But it might also be possible to wrap any other library.
ID | Function | Matrix Type | |
---|---|---|---|
Base | Extended | ||
0x01 | matrix_gfx::getColorCount() |
X | X |
0x02 | matrix_gfx::getWidth() |
X | X |
0x03 | matrix_gfx::getHeight() |
X | X |
0x11 | matrix_gfx::drawPixel() |
X | X |
0x21 | matrix_gfx::drawLine() |
X | X |
0x22 | matrix_gfx::drawFastVLine() |
X | |
0x23 | matrix_gfx::drawFastHLine() |
X | |
0x24 | matrix_gfx::drawRect() |
X | |
0x25 | matrix_gfx::fillRect() |
X | |
0x26 | matrix_gfx::fillScreen() |
X | X |
0x27 | matrix_gfx::invertDisplay() |
X | |
0x31 | matrix_gfx::drawCircle() |
X | |
0x32 | matrix_gfx::fillCircle() |
X | |
0x33 | matrix_gfx::drawTriangle() |
X | |
0x34 | matrix_gfx::fillTriangle() |
X | |
0x35 | matrix_gfx::drawRoundRect() |
X | |
0x36 | matrix_gfx::fillRoundRect() |
X | |
0x41 | matrix_gfx::drawChar() |
X | |
0x42 | matrix_gfx::setCursor() |
X | |
0x43 | matrix_gfx::setTextColor() |
X | |
0x44 | matrix_gfx::setTextColor() |
X | |
0x45 | matrix_gfx::setTextSize() |
X | |
0x46 | matrix_gfx::setTextWrap() |
X | |
0x47 | matrix_gfx::write() |
X | |
0x51 | matrix_gfx::setRotation() |
X | |
0x52 | matrix_gfx::swapBuffers() |
X | |
0x53 | matrix_gfx::setAutoSwapBuffers() |
X | |
0x61 | matrix_gfx::drawImage() |
X |
-
uint8_t
matrix_gfx::
getColorCount
()¶ Get the number of colors. Return value should be 1, 2 or 3.
Returns: Number of colors.
-
uint16_t
matrix_gfx::
getWidth
()¶ Get width in pixels.
Returns: Number of pixels
-
uint16_t
matrix_gfx::
getHeight
()¶ Get height in pixels.
Returns: Number of pixels
-
void
matrix_gfx::
drawPixel
(int16_t x, int16_t y, uint8_t color1, uint8_t color2, uint8_t color3)¶ Draw a pixel.
Parameters: - x – Pixel x position
- y – Pixel y position
- color1 – First color. Red if color_count = 3.
- color2 – Second color. Green if color_count = 3.
- color3 – Third color. Blue if color_count = 3.
-
void
matrix_gfx::
drawLine
(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint8_t color1, uint8_t color2, uint8_t color3)¶ Draw a line.
-
void
matrix_gfx::
drawFastVLine
(int16_t x, int16_t y, int16_t h, uint8_t color1, uint8_t color2, uint8_t color3)¶ Draw a vertical line.
-
void
matrix_gfx::
drawFastHLine
(int16_t x, int16_t y, int16_t w, uint8_t color1, uint8_t color2, uint8_t color3)¶ Draw a horizontal line.
-
void
matrix_gfx::
drawRect
(int16_t x, int16_t y, int16_t w, int16_t h, uint8_t color1, uint8_t color2, uint8_t color3)¶ Draw the boarder of rectangle.
-
void
matrix_gfx::
fillRect
(int16_t x, int16_t y, int16_t w, int16_t h, uint8_t color1, uint8_t color2, uint8_t color3)¶ Draw a filled rectangle.
-
void
matrix_gfx::
fillScreen
(uint8_t color1, uint8_t color2, uint8_t color3)¶ Fill the screen with the given color.
-
void
matrix_gfx::
invertDisplay
(boolean i)¶ Invert the display.
-
void
matrix_gfx::
drawCircle
(int16_t x0, int16_t y0, int16_t r, uint8_t color1, uint8_t color2, uint8_t color3)¶ Draw the border of a circle.
-
void
matrix_gfx::
fillCircle
(int16_t x0, int16_t y0, int16_t r, uint8_t color1, uint8_t color2, uint8_t color3)¶ Draw a filled circle.
-
void
matrix_gfx::
drawTriangle
(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint8_t color1, uint8_t color2, uint8_t color3)¶ Draw the boarder of a triangle.
-
void
matrix_gfx::
fillTriangle
(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint8_t color1, uint8_t color2, uint8_t color3)¶ Draw a filled triangle.
-
void
matrix_gfx::
drawRoundRect
(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint8_t color1, uint8_t color2, uint8_t color3)¶ Draw the boarder of a round rectangle.
-
void
matrix_gfx::
fillRoundRect
(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint8_t color1, uint8_t color2, uint8_t color3)¶ Draw a filled round rectangle.
-
void matrix_gfx::drawChar(int16_t x, int16_t y, unsigned char c, uint8_t color1, uint8_t color2, uint8_t color3, uint16_t bg, uint8_t size)
Draw a character.
-
void
matrix_gfx::
setCursor
(int16_t x, int16_t y)¶ Set the cursor position.
-
void
matrix_gfx::
setTextColor
(uint8_t color1, uint8_t color2, uint8_t color3)¶ Set the text color.
-
void
matrix_gfx::
setTextColor
(uint8_t color1, uint8_t color2, uint8_t color3, uint8_t bg_red, uint8_t bg_green, uint8_t bg_blue)¶ Set the text color.
-
void
matrix_gfx::
setTextSize
(uint8_t s)¶ Set the text size.
-
void
matrix_gfx::
setTextWrap
(boolean w)¶ Set the text wrap.
-
void
matrix_gfx::
setRotation
(uint8_t r)¶ Set the rotation.
-
uint8_t
matrix_gfx::
swapBuffers
(uint8_t copy)¶ Parameters copy: 0 = False | 1 = True Swap buffers and copy new front buffer into the back buffer.
-
uint8_t
matrix_gfx::
setAutoSwapBuffers
(uint8_t auto_swap)¶ Parameters auto_swap: 0 = False | 1 = True Set option to swap buffers after each command.
-
void
matrix_gfx::
drawImage
(int16_t x, int16_t y, int16_t width, int16_t height, uint8_t color_encoding, uint8_t *image)¶ Parameters: - x – x-position
- y – y-position
- width – Image width
- height – Image height
- color_encoding – The color encoding. For more information have a look at the list below.
- image – The image data
Color encoding:
- Mode 0:
8-Bit encoding. From MSB to LSB:
- 2-Bit - red
- 3-Bit - green
- 3-Bit - blue
- Mode 1:
16-Bit encoding. From MSB to LSB:
- 5-Bit - red
- 6-Bit - green
- 5-Bit - blue
- Mode 2:
24-Bit encoding. From MSB to LSB:
- 8-Bit - red
- 8-Bit - green
- 8-Bit - blue
Base/Extended Text-LCD¶
ID | Function | Text-LCD Type | |
---|---|---|---|
Base | Extended | ||
0x01 | text_lcd::getWidth() |
X | X |
0x02 | text_lcd::getHeight() |
X | X |
0x11 | text_lcd::clear() |
X | X |
0x12 | text_lcd::home() |
X | X |
0x13 | text_lcd::setCursor() |
x | X |
0x21 | text_lcd::write() |
X | X |
0x22 | text_lcd::print() |
X | X |
-
uint8_t
text_lcd::
getWidth
()¶ Get the width as number of characters.
-
uint8_t
text_lcd::
getHeight
()¶ Get the height as number of characters.
-
void
text_lcd::
clear
()¶ Clear the LCD screen and set the cursor position to the upper-left corner.
-
void
text_lcd::
home
()¶ Set the cursor position to the upper-left corner.
-
void
text_lcd::
setCursor
(uint8_t col, uint8_t row)¶ Parameters: - col – The column
- row – The row
Position the cursor.
-
void
text_lcd::
write
(char c)¶ Parameters c: The character to display Print a single character to the LCD.
-
void text_lcd::print(uint8_t num, char[] text)
Parameters: - num – Number of characters
- text – The text to display
Print text to the LCD.
Base Sensor¶
Temperature/Humidity Sensor¶
The Temperature and the Humidity Sensors share the same API. Temperatures are always in Celsius.
ID | Function |
---|---|
0x11 | sensor_temperature::getMinValue() |
0x12 | sensor_temperature::getMaxValue() |
0x13 | sensor_temperature::getAccuracy() |
0x14 | sensor_temperature::getValue() |
-
float
sensor_temperature::
getMinValue
()¶ Get the value of the lowest possible temperature/humidity measured by the sensor.
-
float
sensor_temperature::
getMaxValue
()¶ Get the value of the highest possible temperature/humidity measured by the sensor.
-
float
sensor_temperature::
getAccuracy
()¶ Get the best accuracy of the measured values.
-
float
sensor_temperature::
getValue
()¶ Get the current temperature/humidity.
Temperature-Humidity Sensor¶
-
float
sensor_temp_humidity::
getMinTempValue
()¶ Get the value of the lowest possible temperature measured by the sensor.
-
float
sensor_temp_humidity::
getMaxTempValue
()¶ Get the value of the highest possible temperature measured by the sensor.
-
float
sensor_temp_humidity::
getTempAccuracy
()¶ Get the best accuracy of the measured temperature.
-
float
sensor_temp_humidity::
getTemperature
()¶ Get the current temperature.
-
float
sensor_temp_humidity::
getMinHumidityValue
()¶ Get the value of the lowest possible humidity measured by the sensor.
-
float
sensor_temp_humidity::
getMaxHumidityValue
()¶ Get the value of the highest possible humidity measured by the sensor.
-
float
sensor_temp_humidity::
getHumidityAccuracy
()¶ Get the best accuracy of the measured humidity.
-
float
sensor_temp_humidity::
getHumidity
()¶ Get the current humidity.
Base Board¶
At the moment only Arduino based boards are supported.
Arduino Board¶
A handler of this type is used to control Arduino based boards.
ID | Function |
---|---|
0x11 | board_arduino::getAnalogInput() |
0x21 | board_arduino::getDigitalInput() |
0x22 | board_arduino::setDigitalOutput() |
0x31 | board_arduino::setPWMOutput() |
-
uint16
board_arduino::
getAnalogInput
(uint8_t pin)¶ Get the value of an analog input pin.
Parameters pin: Pin number
-
uint16
board_arduino::
getDigitalInput
(uint8_t pin)¶ Get the value of an digital input pin.
Parameters pin: Pin number
-
uint16
board_arduino::
setDigitalOutput
(uint8_t pin, uint8_t value)¶ Set the value of a digital output pin.
Parameters: - pin – Pin number
- value – The value (0, 1)
-
uint16
board_arduino::
setPWMOutput
(uint8_t pin, uint8_t value)¶ Set the value of a PWM output pin.
Parameters: - pin – Pin number
- value – The PWM value (0-255)
Custom handlers¶
This range of IDs is reserved for custom handlers e.g. for testing or prototyping purposes.
Buildin system handler¶
The system handler is available by default and is included in the base ArduRPC library.
Function overview¶
ID | Function |
---|---|
0x01 | getProtocolVersion() |
0x02 | getLibraryVersion() |
0x03 | getMaxPacketSize() |
0x10 | getFunctionList() |
0x20 | getHandlerList() |
0x21 | getHandlerName() |
Function details¶
-
uint8_t
getProtocolVersion
()¶ Get the protocol version. At the moment this should be 0.
-
RPC_ARRAY
getLibraryVersion
()¶ Return the library version as RPC_ARRAY with three elements of uint8 type.
- Major version
- Minor version
- Patch level
-
uint16_t
getMaxPacketSize
()¶ Return the maximum packet size (header + data) in bytes.
-
RPC_VARRAY
getFunctionList
()¶ Get a list of all functions. The result has 2 columns.
- The first column is a unsigned char and represents the internal ID.
- The second column is a unsigned char and represents the type of the function.
-
RPC_VARRAY
getHandlerList
()¶ Get a list of all handlers. The result has 2 columns.
- The first column is a unsigned char and represents the internal ID of the handler.
- The second column is an unsigned short and represents the type of the handler.
-
RPC_CARRAY
getHandlerName
(uint8_t handler_id)¶ Get the handler name by a given ID.
Additional handlers¶
Developers:
Protocol¶
ArduRPC brings remote procedure calls to microcontrollers. The binary protocol has been designed to be simple and flexible. Basic and also complex data types are supported.
Communication¶
Request¶
Name | Type | Comment |
---|---|---|
Version | uint8 |
Protocol version (default: 0) |
Handler ID | uint8 |
ID of the handler |
Command ID | uint8 |
ID of the command to call |
Length | uint8 |
Length of data in bytes |
Data | List of parameters |
- Version:
- This is the version of the protocol. At the moment only version 0 is supported.
- Handler ID:
- The ID of the handler to use.
- Command ID:
- The ID of the command to call.
- Length:
- Length of the data in bytes.
- Data:
- A list of parameters. See Data Types for more information.
Response¶
Name | Type | Comment |
---|---|---|
Return code | uint8 |
The return code. See Return codes |
Data | Mixed | The result |
- Data:
- The result data. Only one type of data is allowed.
Data Types¶
Basic data types¶
Basic data types have a fixed length like a signet Integer.
Data Types
Identifier | Data Type | Size in Bytes |
---|---|---|
0x00 | None | 0 |
0x01 | Signed Char | 1 |
0x02 | Unsigned Char | 1 |
0x03 | Signet Short | 2 |
0x04 | Unsigned Short | 2 |
0x05 | Signed Long | 4 |
0x06 | Unsigned Long | 4 |
0x07 | Signed Long Long | 8 |
0x08 | Unsigned Long Long | 8 |
0x09 | Float [1] | 4 |
Data structure:
Name | Type | Comment |
---|---|---|
Identifier | uint8 |
The identifier. See Data types for more information. |
Data | The data specified by the identifier. |
Complex data types¶
At the moment the following data types are supported.
Identifier | Data Type |
---|---|
0x10 | Simple array |
0x11 | String |
0x12 | Multicolumn array |
0x13 | Value array |
Array:
Name | Type | Comment |
---|---|---|
Identifier | uint8 |
Set to 0x10. See data types for more information. |
Data Identifier | uint8 |
Basic data type of the elements. |
Length | uint8 |
Length of the string in bytes. |
Data | The string. |
String:
Name | Type | Comment |
---|---|---|
Identifier | uint8 |
Set to 0x11. See data types for more information. |
Length | uint8 |
Length of the string in bytes. |
Data | The string. |
Multi column array:
Name | Type | Comment |
---|---|---|
Identifier | uint8 |
Set to 0x12. See data types for more information. |
Columns | uint8 |
Number of columns. |
Column Identifier 1 | uint8 |
The identifier for column 1 |
Column Identifier m | uint8 |
The identifier for column m |
Length | uint8 |
Number of rows |
Row 1 | Data of row 1 | |
Row n | Data of row n |
Value array:
Name | Type | Comment |
---|---|---|
Identifier | uint8 |
Set to 0x13. See data types for more information. |
Length | uint8 |
Length of the array in bytes. |
Data | List of identifiers and values |
Return codes¶
Code | Comment |
---|---|
0 | Success |
122 | Error in the package data |
123 | Error while parsing the header |
124 | Function not found |
125 | Handler not found |
126 | Command not found |
127 | Failure no reason given |
Example¶
Basic data types¶
Request:
Data | Comment |
---|---|
0x00 | Protocol version (default: 0) |
0x03 | ID of the handler. |
0x02 | ID of the command to call |
0x05 | Length of data in bytes |
0x10 | Value: 16 (Type: uint8) |
0x00 | Value: 1 (Type: uint16) |
0x01 |
Response:
Data | Comment |
---|---|
0x00 | Success |
0x01 | Identifier for Unsigned Char |
0x10 | Value: 16 |
Footnotes
[1] | Float values MUST use the IEEE 754 binary32 representation format. |
Communication¶
Serial (Hex-Mode)¶
- Use a serial port like UART (Arduino: Serial or SoftwareSerial)
- Read/Write data line by line
- Every package/line must start with a colon (‘:’)
- Lines without a colon must be ignored
- Data is encoded as hex string
Example:
- Line 1:
- The Request
- Line 2:
- A comment or debug information
- Line 3:
- The response
1 2 3 | :000302050110030001
This is a comment or debug info
:0110
|
Additional information:
License¶
The code is licensed under the terms of GNU Lesser General Public License.
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
Changelog¶
Version 0.4.0 (02.08.2014)¶
- Docs: New handler type for temperature and humidity sensors
- Protocol: Support float types
- Feature: Set max packet size to 256 byte
- Feature: New ArduRPC_Ethernet lib
- Feature: Handlers have to be a class
- Core: Rename ArduRPCSerial to ArduRPC_Serial
- Docs: New handler type for Arduino based boards
Version 0.3.0 (25.02.2014)¶
- Improvements to lower memory usage
- Shared buffers
- Feature: ArduRPCSerial class
- Feature: Macros to get version information
- Feature: Functions to write result data with type identifier
Version 0.2.0 (no public release)¶
- Protocol improvements
- Feature: Handler names
- Feature: Possibility to register functions
- Feature: None value
- Feature: Return codes
Version 0.1.0 (no public release)¶
- Initial version
Handlers¶
- Official handler repository
- Colorduino_GFX
- Adafruit NeoPixel
- ...