This is how the Bluetooth protocol works:
Please note:
Some design choices, like sending one reply/request per set and parameter, may seem strange. This decision was made because it is not possible to send large amounts of data at once via BluetoothLE.
Format definition
Request
A request looks like this:
{
"header":<command>,
"data":"<command data>"
}
<command>
is the command (see below).
<data>
is some additional data required for the command (see below).
Reply
A reply will look like this:
{
"status":"<status code>",
"header":<command>,
"body":"<data>"
}
<command>
is the command the reply is answering to.
<status code>
is the return code of the request, similar to an HTTP status code (see below).
<data>
is additional data the command returned (see below).
Status codes
enum OmobiDisplayStatusCode
{
Success = 200,
BadRequestError = 400,
Unauthorized = 401,
InternalError = 500,
DisplayControllerError = 501
};
Text set parameters
enum DisplayTextSetParameter
{
TextParameter = 0,
ActiveParameter,
RuntimeParameter,
ColorParameter,
AlignmentParameter,
ScrollParameter,
ScrollDirectionParameter,
ScrollSpeedParameter,
ScrollCountParameter,
IndexParameter,
DisplayTextSetParameterCount /*!< Just for helping purposes */
};
Display controller error
enum GetSetTextSetParameterExitCode
{
Success,
InvalidParameterError,
ParameterNotWritableError,
ValueOutOfRangeError,
IndexOutOfRangeError,
ValueIsNullptrError,
InternalError
};
Commands
General commands
0
- Authenticate
Command to initially authenticate with the display.
This is requited in order to execute any other command (except keep alive).
Request data
{
"secret": "<display secret>"
}
<display secret>
is the secret of the display. It is sha256(<display address><display code>)
in hex representation. The default for <display code>
is 1234
.
The <display code>
can be changed using command 22
.
Reply data
null
1
- Keep alive
This command has to be sent at leas every 10 seconds! Otherwise, the client will be disconnected from the display.
Request data
null
Reply data
null
Getter commands
10
- Get all text sets
Command to get all text sets stored on the display.
Specialties
Before this command will be directly replied to, there will potentially be a lot of replies with the header 11
, one for each parameter of each existing text set. See 11
for more Information.
Request data
null
Reply data
null
11
- Get a parameter of a text set
Command to get a specific parameter of a single text set.
Specialties
This command can not be used for requests. It is only used to reply to a 10
command!
Request data
null
Reply data
{
"index":<text set index>,
"parameter":<parameter>,
"value":"<parameter value>"
}
12
- Get display brightness
Command to get the current brightness of the display.
Request data
null
Reply data
{
"displayBrightness":<display brightness>,
"automaticBrightnessAdjustment":<automatic brightness adjustment>
}
<display brightness>
is between 0 and 255
<automatic brightness adjustment>
is true
or false
Setter commands
20
- Set text set parameter
Command to set a single parameter of a single set. To create a new text set, just edit its index.
Request data
{
"index":<text set index>,
"parameter":<text set parameter>,
"value":<value>
}
Reply data
null
21
- Set display brightness
Command to set the current brightness of the display
Request data
{
"displayBrightness":<display brightness>,
"automaticBrightnessAdjustment":<automatic brightness adjustment>
}
<display brightness>
is between 0 and 255
<automatic brightness adjustment>
is true
or false
Reply data
null
22
- Set display code
Command to modify the code of the display that is used for authentication (see 0
).
Request data
{
"displayCode":"<display code>"
}
Reply data
null
23
- Set display name
Command to modify the name of the display
Specialties
This command requires the display (and some clients) to be rebooted in order to take effect.
Request data
{
"displayName":"<display name"
}
Reply data
null