~aleteoryx/muditaos

muditaos/doc/os_api/protocol_description/protocol_description.md -rw-r--r-- 5.6 KiB
a405cad6Aleteoryx trim readme 7 days ago

#Protocol description

#Message structure

[ message_type | payload_length | payload[0] | payload[1] | ... | payload[payload_length-1]

uint8_t message_type;
uint8_t payload_length[9];
uint8_t payload[payload_length];

#Message types

Single printable ASCII character.

endpoint = '#'
rawData = '$

#Payload length

Represented by 9 printable ASCII characters.

#Payload structure

Simple json with some fields. Difference between request and response payload is "method" and "status" fields.

requestPayloadJson:
{
     { "endpoint", endpointNumber },
     { "method", methodNumber},
     { "body", requestBodyJson },
     { "uuid", uuidNumber }
}

responsePayloadJson:
{
     { "endpoint", endpointNumber },
     { "status", statusCode},
     { "body", responseBodyJson },
     { "uuid", uuidNumber }
}

#Endpoint

Each endpoint has its unique number.

invalid             = 0
deviceInfo          = 1
contacts            = 7
#Method

HTTP - like methods. Each has different number. Only in request message.

get     = 1
post    = 2
put     = 3
del     = 4
#Status

HTTP status codes. Only in response message.

OK                  = 200
Accepted            = 202
NoContent           = 204
SeeOther            = 303
BadRequest          = 400
Forbidden           = 403
NotFound            = 404
NotAcceptable       = 406
InternalServerError = 500
NotImplemented      = 501
#Body

Actual response from endpoint in response message. In request message its optional and depends on used method.

#API

#Example

#Request
#000000053{"endpoint":"invalid", "method":"GET", "payload":{"test":"test"}}
#Response
#000000413{"body":
{"accessTechnology": "7", "batteryLevel": "99", "batteryState": "1", 
"currentRTCTime": "1611586206", "fsFree": "13903", "fsFreePercent": "100", "fsTotal": "13913", 
"gitBranch": "master", "gitRevision": "34594b42a", "gitTag": "release-0.53.2-46-g34594b42a", 
"networkStatus": "1", "selectedSim": "4", "signalStrength": "4", "trayState": "1", 
"updateHistory": null},
"endpoint": 1, "status": 200, "uuid": 0}

#Contacts

#get contacts count:
#000000059{"endpoint":7, "method":1, "uuid":1, "body":{"count":true}}

sample response:

#000000064{"body": {"count": 76}, "endpoint": 7, "status": 200, "uuid": 1}}}
#get contact by id:
#000000053{"endpoint":7, "method":1, "uuid":1, "body":{"id":5}}

parameters:

  • id - contact id

sample response:

#000000205{"body": 
{"address": "6 Czeczota St.02600 Warsaw", 
"altName": "Pacha", 
"blocked": false, 
"favourite": false, 
"id": 5, 
"numbers": ["123456789"], 
"priName": "Zofia"}, 
"endpoint": 7, "status": 200, "uuid": 1}
#get contacts ( eg. 5 first contacts) :
#000000056{"endpoint":7, "method":1, "uuid":1, "body":{"count":5}}

parameters:

  • count - amount of contacts to be fetched starting from position 0

sample response:

#000000846{"body": 
[
{"address": "6 Czeczota St.02600 Warsaw", "altName": "Arbuz", "blocked": false, "favourite": true, "id": 4, "numbers": ["123456789"], "priName": "Alek"},
{"address": "6 Czeczota St.02600 Warsaw", "altName": "Boligłowa", "blocked": false, "favourite": true, "id": 19, "numbers": ["123456789"], "priName": "Alek"},
{"address": "6 Czeczota St.02600 Warsaw", "altName": "Boligłowa", "blocked": false, "favourite": true, "id": 22, "numbers": ["123456789"], "priName": "Grażyna"},
{"address": "6 Czeczota St.02600 Warsaw", "altName": "Boligłowa", "blocked": false, "favourite": true, "id": 20, "numbers": ["123456789"], "priName": "Zofia"},
{"address": "6 Czeczota St.02600 Warsaw", "altName": "Bubel", "blocked": false, "favourite": true, "id": 44, "numbers": ["123456789"], "priName": "Brian"}
]
 , "endpoint": 7, "status": 200, "uuid": 1}
#get contacts by setting count and offset
#000000069{"endpoint":7, "method":1, "uuid":1, "body":{"count":3, "offset":20}}

parameters:

  • count - amount of contacts to be fetched
  • offset - offset on the contact list

sample response:

#000000538{"body":
[
{"address": "6 Czeczota St.02600 Warsaw", "altName": "Kwasigroch", "blocked": false, "favourite": true, "id": 73, "numbers": ["123456789"], "priName": "Roland"}, 
{"address": "6 Czeczota St.02600 Warsaw", "altName": "Małolepszy", "blocked": false, "favourite": true, "id": 13, "numbers": ["123456789"], "priName": "Alek"}, 
{"address": "6 Czeczota St.02600 Warsaw", "altName": "Małolepszy", "blocked": false, "favourite": true, "id": 18, "numbers": ["123456789"], "priName": "Mariola"}
], 
"endpoint": 7, "status": 200, "uuid": 1}
#add contact:
#000000193{"endpoint":7, "method":3, "uuid":124, "body":
{"address": "6 Czeczota St.\n 02600 Warsaw", 
"altName": "Turk", 
"blocked": true, 
"favourite": true, 
"numbers": ["123456789"], 
"priName": "Tolek"}}

parameters:

  • as seen on listing above

sample response:

#000000063{"body": {"id": 79}, "endpoint": 7, "status": 200, "uuid": 124}
#update contact:
#000000202{"endpoint":7, "method":2, "uuid":123, "body": 
{"address": "6 Czeczota St.02600 Warsaw", 
"altName": "Cicero", 
"blocked": true, 
"favourite": true, 
"id": 25, 
"numbers": ["123456789"], 
"priName": "Wacek"}}

parameters:

  • as seen on listing above

sample response:

#000000043{"endpoint": 7, "status": 204, "uuid": 123}

or bad one:

#000000043{"endpoint": 7, "status": 500, "uuid": 123}
#remove contact:
#000000057{"endpoint":7, "method":4, "uuid":123, "body":{"id": 23}}

parameters:

  • id - id of contact to be removed

sample response:

#000000043{"endpoint": 7, "status": 204, "uuid": 123}