21 #ifndef INCLUDED_SATNOGS_TC_TM_H 22 #define INCLUDED_SATNOGS_TC_TM_H 28 #define ECSS_VER_NUMBER 0 29 #define ECSS_DATA_FIELD_HDR_FLG 1 30 #define TC_TM_SER_TC_VER 1 32 #define ECSS_PUS_VER 1 33 #define ECSS_SEC_HDR_FIELD_FLG 0 35 #define TC_TM_SER_TC_VER_ACC_SUCC 1 36 #define TC_TM_SER_TC_VER_ACC_FAIL 2 38 #define TC_TM_SER_TC_VER_EXEC_START_SUCC 3 39 #define TC_TM_SER_TC_VER_EXEC_START_FAIL 4 40 #define TC_TM_SER_TC_VER_EXEC_PROG_SUCC 5 41 #define TC_TM_SER_TC_VER_EXEC_PROG_FAIL 6 42 #define TC_TM_SER_TC_VER_EXEC_COMP_SUCC 7 43 #define TC_TM_SER_TC_VER_EXEC_COMP_FAIL 8 45 #define TC_TM_SER_DIST 2 46 #define TC_TM_SER_HK 3 49 #define TC_TM_SER_HK_PAR 25 52 #define TC_TM_SER_STAT 4 53 #define TC_TM_SER_EVENT 5 54 #define TC_TM_SER_MEM 6 55 #define TC_TM_SER_NC1 7 56 #define TC_TM_SER_FMAG 8 57 #define TC_TM_SER_TMAG 9 58 #define TC_TM_SER_NC2 10 60 #define TC_TM_SER_SCH 11 61 #define TC_TM_SER_MON 12 62 #define TC_TM_SER_LDATA 13 63 #define TC_TM_SER_PCKT_FWD 14 64 #define TC_TM_SER_STORAGE 15 65 #define TC_TM_SER_NC3 16 66 #define TC_TM_SER_TEST 17 67 #define TC_TM_SER_PROC 18 68 #define TC_TM_SER_EV_ACT 19 71 #define TC_TM_SEQ_FPACKET 0x01 72 #define TC_TM_SEQ_CPACKET 0x00 73 #define TC_TM_SEQ_LPACKET 0x02 74 #define TC_TM_SEQ_SPACKET 0x03 78 #define TC_ACK_NO 0x00 79 #define TC_ACK_ACC 0x01 80 #define TC_ACK_EXE_START 0x02 81 #define TC_ACK_EXE_PROG 0x04 82 #define TC_ACK_EXE_COMP 0x08 83 #define TC_ACK_ALL 0x0F 85 #define TC_TM_SER_LDATA_MAX_DATA_PKT 512 89 #define DATA_FIELD_HDR_FLG 93 #define MAX_PKT_DATA 20 94 #define MAX_EX_PKT_DATA 512 96 #define MAX_SERVICES 20 97 #define MAX_SUBTYPES 26 102 #define TC_VERIFICATION_SERVICE 1 103 #define TC_HOUSEKEEPING_SERVICE 3 104 #define TC_FUNCTION_MANAGEMENT_SERVICE 8 105 #define TC_LARGE_DATA_SERVICE 13 106 #define TC_MASS_STORAGE_SERVICE 15 107 #define TC_TEST_SERVICE 17 184 uint16_t *buf_pointer);
189 static inline uint8_t
193 for (
int i = 0;
i <= size;
i++) {
206 uint8_t ver, dfield_hdr, ccsds_sec_hdr, tc_pus;
208 tmp_crc[0] = buf[size - 1];
213 pkt->
type = (buf[0] >> 4) & 0x01;
214 dfield_hdr = (buf[0] >> 3) & 0x01;
216 cnv.
cnv8[0] = buf[1];
217 cnv.
cnv8[1] = 0x07 & buf[0];
222 cnv.
cnv8[0] = buf[3];
223 cnv.
cnv8[1] = buf[2] & 0x3F;
226 cnv.
cnv8[0] = buf[4];
227 cnv.
cnv8[1] = buf[5];
230 ccsds_sec_hdr = buf[6] >> 7;
232 tc_pus = buf[6] >> 4;
234 pkt->
ack = 0x04 & buf[6];
240 if (app_id_verification[pkt->
app_id] != 1) {
244 if (pkt->
len != size - 7) {
248 if (tmp_crc[0] != tmp_crc[1]) {
265 if (ccsds_sec_hdr != 0) {
273 if (dfield_hdr != 1) {
282 for (
int i = 0;
i < pkt->
len - 4;
i++) {
283 pkt->
data[
i] = buf[10 +
i];
307 buf[1] = cnv.
cnv8[0];
311 buf[3] = cnv.
cnv8[0];
317 else if (pkt->
type ==
TC) {
345 buf[10] = pkt->
data[0];
347 buf[11] = pkt->
data[1];
348 buf[12] = pkt->
data[2];
349 buf[13] = pkt->
data[3];
350 buf[14] = pkt->
data[4];
360 cnv.
cnv16[0] = buf_pointer - 6;
361 buf[4] = cnv.
cnv8[0];
362 buf[5] = cnv.
cnv8[1];
371 uint8_t ser_type, uint8_t ser_subtype, uint16_t dest_id)
uint8_t cnv8[4]
Definition: tc_tm.h:147
int i
Definition: decode_rs.h:71
uint8_t seq_flags
Definition: tc_tm.h:158
static OBC_ret_state_t ecss_tm_pack_pkt(uint8_t *buf, tc_tm_pkt *pkt, uint16_t *size)
Definition: tc_tm.h:297
OBC_ret_state_t verification_pack_pkt_api(uint8_t *buf, tc_tm_pkt *pkt, uint16_t *buf_pointer)
uint8_t pckt_sub_cnt
Definition: tc_tm.h:168
#define TC_VERIFICATION_SERVICE
Definition: tc_tm.h:102
uint16_t crc
Definition: tc_tm.h:174
const uint8_t services_verification_OBC_TC[MAX_SERVICES][MAX_SUBTYPES]
Definition: tc_tm.h:180
#define MAX_SUBTYPES
Definition: tc_tm.h:97
#define ECSS_PUS_VER
Definition: tc_tm.h:32
const uint8_t app_id_verification[MAX_APP_ID]
Definition: tc_tm.h:179
R_OBC_PKT_INV_LEN invalid length.
Definition: tc_tm.h:134
#define TC_ACK_ACC
Definition: tc_tm.h:79
#define TC_ACK_NO
Definition: tc_tm.h:78
static OBC_ret_state_t ecss_tm_crt_pkt(tc_tm_pkt *pkt, uint16_t app_id, uint8_t type, uint8_t ack, uint8_t ser_type, uint8_t ser_subtype, uint16_t dest_id)
Definition: tc_tm.h:370
static OBC_ret_state_t ecss_tm_unpack_pkt(const uint8_t *buf, tc_tm_pkt *pkt, const uint16_t size)
Definition: tc_tm.h:201
uint8_t ver
Definition: tc_tm.h:152
R_OBC_EOT End-of-transfer.
Definition: tc_tm.h:141
#define ECSS_SEC_HDR_FIELD_FLG
Definition: tc_tm.h:33
uint16_t dest_id
Definition: tc_tm.h:169
#define MAX_APP_ID
Definition: tc_tm.h:95
uint16_t cnv16[2]
Definition: tc_tm.h:146
const uint8_t services_verification_TC_TM[MAX_SERVICES][MAX_SUBTYPES][2]
Definition: tc_tm.h:178
uint16_t seq_count
Definition: tc_tm.h:159
R_OBC_PKT_INC_CRC incorrect CRC.
Definition: tc_tm.h:135
Definition: amsat_duv_decoder.h:29
R_OBC_PKT_ILLEGAL_APPID illegal application ID.
Definition: tc_tm.h:133
#define TC_HOUSEKEEPING_SERVICE
Definition: tc_tm.h:103
uint8_t padding
Definition: tc_tm.h:172
uint8_t * data
Definition: tc_tm.h:171
uint8_t ack
Definition: tc_tm.h:163
static uint8_t ecss_tm_checksum(const uint8_t *data, uint16_t size)
Definition: tc_tm.h:190
#define TC
Definition: tc_tm.h:99
#define ECSS_DATA_FIELD_HDR_FLG
Definition: tc_tm.h:29
OBC_ret_state_t
Telemetry and telecommands packet methods.
Definition: tc_tm.h:132
R_OBC_ERROR an error occured.
Definition: tc_tm.h:140
#define TC_ACK_EXE_COMP
Definition: tc_tm.h:82
#define MAX_SERVICES
Definition: tc_tm.h:96
uint8_t type
Definition: tc_tm.h:155
uint16_t app_id
Definition: tc_tm.h:154
R_OBC_PKT_ILLEGAL_APP_DATA.
Definition: tc_tm.h:138
uint16_t len
Definition: tc_tm.h:161
uint8_t ser_type
Definition: tc_tm.h:164
R_OBC_PKT_ILLEGAL_PKT_STP.
Definition: tc_tm.h:137
R_OBC_PKT_ILLEGAL_PKT_TP.
Definition: tc_tm.h:136
R_OBC_OK All ok.
Definition: tc_tm.h:139
uint8_t ser_subtype
Definition: tc_tm.h:165
#define TC_FUNCTION_MANAGEMENT_SERVICE
Definition: tc_tm.h:104
#define TM
Definition: tc_tm.h:100
uint8_t data_field_hdr
Definition: tc_tm.h:153
#define ECSS_VER_NUMBER
Definition: tc_tm.h:28
OBC_ret_state_t hk_pack_pkt_api(uint8_t *buf, tc_tm_pkt *pkt, uint16_t *buf_pointer)
uint32_t cnv32
Definition: tc_tm.h:145