142 lines
3.1 KiB
C
142 lines
3.1 KiB
C
|
#ifndef GS_PARAM_INTERNAL_RPARAM_H
|
||
|
#define GS_PARAM_INTERNAL_RPARAM_H
|
||
|
/* Copyright (c) 2013-2018 GomSpace A/S. All rights reserved. */
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/**
|
||
|
Max query payload in a single message (bytes).
|
||
|
*/
|
||
|
#define GS_RPARAM_QUERY_MAX_PAYLOAD 180
|
||
|
|
||
|
/**
|
||
|
Macro for calculating total query message size, header + payload.
|
||
|
*/
|
||
|
#define RPARAM_QUERY_LENGTH(query, payload_size) (sizeof(*query) - sizeof(query->payload) + payload_size)
|
||
|
|
||
|
/**
|
||
|
R(emote) parameter request codes.
|
||
|
*/
|
||
|
typedef enum {
|
||
|
/**
|
||
|
Get one or more parameters.
|
||
|
*/
|
||
|
RPARAM_GET = 0x00,
|
||
|
/**
|
||
|
Reply to a request.
|
||
|
*/
|
||
|
RPARAM_REPLY = 0x55,
|
||
|
/**
|
||
|
Set one or more parameters.
|
||
|
*/
|
||
|
RPARAM_SET = 0xFF,
|
||
|
// RPARAM_SET_TO_FILE = 0xEE,
|
||
|
/**
|
||
|
Download table specification.
|
||
|
*/
|
||
|
RPARAM_TABLE = 0x44,
|
||
|
/**
|
||
|
Copy memory slot to memory slot.
|
||
|
@version 4.x: Not supported.
|
||
|
*/
|
||
|
RPARAM_COPY = 0x77,
|
||
|
/**
|
||
|
Load from file (slot) to memory (slot).
|
||
|
@version 4.x: Only load from primary store - file (slot) is ignored.
|
||
|
*/
|
||
|
RPARAM_LOAD = 0x88,
|
||
|
/**
|
||
|
Load from file (slot) to memory (slot).
|
||
|
@version 4.x: load by name(s).
|
||
|
*/
|
||
|
RPARAM_LOAD_FROM_STORE = 0x89,
|
||
|
/**
|
||
|
Save from memory (slot) to file (slot).
|
||
|
@version 4.x: Only save to primary store - file (slot) is ignored.
|
||
|
*/
|
||
|
RPARAM_SAVE = 0x99,
|
||
|
/**
|
||
|
Save from memory (slot) to file (slot).
|
||
|
@version 4.x: save by name(s).
|
||
|
*/
|
||
|
RPARAM_SAVE_TO_STORE = 0x9a,
|
||
|
// RPARAM_CLEAR = 0xAA, - completely removed
|
||
|
} gs_rparam_action_t;
|
||
|
|
||
|
/**
|
||
|
R(emote) parameter reply/completion codes.
|
||
|
*/
|
||
|
typedef enum {
|
||
|
RPARAM_SET_OK = 1,
|
||
|
RPARAM_LOAD_OK = 2,
|
||
|
RPARAM_SAVE_OK = 3,
|
||
|
RPARAM_COPY_OK = 4,
|
||
|
// RPARAM_CLEAR_OK = 5,
|
||
|
RPARAM_ERROR = 0xFF,
|
||
|
} gs_rparam_reply_t;
|
||
|
|
||
|
/**
|
||
|
Payload - save/load to/from stores
|
||
|
@version 4
|
||
|
*/
|
||
|
typedef struct __attribute__ ((packed)) {
|
||
|
char table[25 + 1];
|
||
|
char store[25 + 1];
|
||
|
char slot[25 + 1];
|
||
|
} gs_rparam_query_payload_store_t;
|
||
|
|
||
|
/**
|
||
|
Payload.
|
||
|
*/
|
||
|
typedef union __attribute__ ((packed)) {
|
||
|
uint16_t addr[0]; //! action = RPARAM_GET
|
||
|
uint8_t packed[0]; //! action = RPARAM_REPLY | RPARAM_SET
|
||
|
struct { //! action = RPARAM_COPY | RPARAM_LOAD | RPARM_SAVE
|
||
|
uint8_t from;
|
||
|
uint8_t to;
|
||
|
} copy;
|
||
|
} gs_rparam_query_payload_t;
|
||
|
|
||
|
/**
|
||
|
Protocol between client and server.
|
||
|
@version 4.x: layout (size) has not changed - only naming of certain fields.
|
||
|
*/
|
||
|
typedef struct __attribute__ ((packed)) {
|
||
|
/**
|
||
|
Request (gs_rparam_action_t) or Reply (gs_rparam_reply_t).
|
||
|
*/
|
||
|
uint8_t action;
|
||
|
/**
|
||
|
Table id.
|
||
|
Name changed in 4.0 from \a mem.
|
||
|
*/
|
||
|
uint8_t table_id;
|
||
|
/**
|
||
|
Length/size of \a payload in bytes.
|
||
|
*/
|
||
|
uint16_t length;
|
||
|
/**
|
||
|
Fletcher's checksum.
|
||
|
*/
|
||
|
uint16_t checksum;
|
||
|
/**
|
||
|
Sequence number when split over multiple frames (messages).
|
||
|
*/
|
||
|
uint16_t seq;
|
||
|
/**
|
||
|
Total number of frames.
|
||
|
*/
|
||
|
uint16_t total;
|
||
|
/**
|
||
|
Payload.
|
||
|
*/
|
||
|
gs_rparam_query_payload_t payload;
|
||
|
} gs_rparam_query_t;
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
#endif
|