C2A_Core
cmd_space_packet.c
[詳解]
1 #pragma section REPRO
8 #include "cmd_space_packet.h"
9 #include <stddef.h>
10 #include <string.h>
11 
12 #define CSP_CAST_TO_SP(csp) ((const SpacePacket*)(csp))
13 #define CSP_CAST_TO_NON_CONST_SP(csp) ((SpacePacket*)(csp))
14 
15 
16 static const SP_ParamExtractionInfo CSP_pei_2nd_hdr_ver_ = { 6, 0xff, 0, 1}; // 11111111b
17 static const SP_ParamExtractionInfo CSP_pei_cmd_type_ = { 7, 0xff, 0, 1}; // 11111111b
18 static const SP_ParamExtractionInfo CSP_pei_cmd_id_ = { 8, 0xff, 0, 2}; // 11111111b
19 static const SP_ParamExtractionInfo CSP_pei_dest_type_ = {10, 0xf0, 4, 1}; // 11110000b
20 static const SP_ParamExtractionInfo CSP_pei_exec_type_ = {10, 0x0f, 0, 1}; // 00001111b
21 static const SP_ParamExtractionInfo CSP_pei_ti_ = {11, 0xff, 0, 4}; // 11111111b
22 
23 
24 // ******************************
25 // Primary Header getter/setter
26 // ******************************
27 
29 {
30  return SP_get_ver(CSP_CAST_TO_SP(csp));
31 }
32 
33 
35 {
37 }
38 
39 
41 {
42  return SP_get_type(CSP_CAST_TO_SP(csp));
43 }
44 
45 
47 {
49 }
50 
51 
53 {
55 }
56 
57 
59 {
61 }
62 
63 
65 {
66  return SP_get_apid(CSP_CAST_TO_SP(csp));
67 }
68 
69 
71 {
73 }
74 
75 
77 {
78  return SP_get_seq_flag(CSP_CAST_TO_SP(csp));
79 }
80 
81 
83 {
85 }
86 
87 
88 uint16_t CSP_get_seq_count(const CmdSpacePacket* csp)
89 {
90  return SP_get_seq_count(CSP_CAST_TO_SP(csp));
91 }
92 
93 
94 void CSP_set_seq_count(CmdSpacePacket* csp, uint16_t count)
95 {
97 }
98 
99 
101 {
103 }
104 
105 
106 void CSP_set_packet_data_len(CmdSpacePacket* csp, uint16_t len)
107 {
109 }
110 
111 
112 // **************************
113 // 2nd Header getter/setter
114 // **************************
115 
117 {
118  uint8_t tmp;
119  CSP_2ND_HDR_VER ver;
120 
122  ver = (CSP_2ND_HDR_VER)tmp;
123 
124  switch (ver)
125  {
126  case CSP_2ND_HDR_VER_1:
127  return ver;
128  default:
130  }
131 }
132 
133 
135 {
136  uint8_t tmp = (uint8_t)ver;
138 }
139 
140 
142 {
143  (void)csp;
144  // ひとまず
145  return CSP_CMD_TYPE_UNKNOWN;
146 }
147 
148 
150 {
151  uint8_t tmp = (uint8_t)cmd_type;
153 }
154 
155 
157 {
158  uint16_t id;
159 
161  return (CMD_CODE)id;
162 }
163 
164 
166 {
167  uint16_t tmp = (uint16_t)id;
169 }
170 
171 
173 {
174  uint8_t dest_type;
176  return CCP_get_dest_type_from_uint8(dest_type);
177 }
178 
179 
181 {
182  uint8_t tmp = (uint8_t)dest_type;
184 }
185 
186 
188 {
189  uint8_t tmp;
190  CCP_EXEC_TYPE exec_type;
191 
193  exec_type = (CCP_EXEC_TYPE)tmp;
194 
195  switch (exec_type)
196  {
197  case CCP_EXEC_TYPE_GS:
199  case CCP_EXEC_TYPE_BC:
200  case CCP_EXEC_TYPE_RT:
201  case CCP_EXEC_TYPE_UTL:
204 #ifdef TLCD_ENABLE_MISSION_TL
205  case CCP_EXEC_TYPE_TL_FOR_MISSION:
206  case CCP_EXEC_TYPE_UTL_FOR_MISSION:
207 #endif
208  return exec_type; // ここまで FALL THROUGH
209  default:
210  return CCP_EXEC_TYPE_UNKNOWN;
211  }
212 }
213 
214 
216 {
217  uint8_t tmp = (uint8_t)exec_type;
219 }
220 
221 
222 uint32_t CSP_get_ti(const CmdSpacePacket* csp)
223 {
224  uint32_t ti;
225 
227  return ti;
228 }
229 
230 
231 void CSP_set_ti(CmdSpacePacket* csp, uint32_t ti)
232 {
234 }
235 
236 
237 // ******************
238 // Utility Function
239 // ******************
240 
241 uint16_t CSP_get_packet_len(const CmdSpacePacket* csp)
242 {
243  return SP_get_packet_len(CSP_CAST_TO_SP(csp));
244 }
245 
246 
247 void CSP_set_packet_len(CmdSpacePacket* csp, uint16_t len)
248 {
250 }
251 
252 
254 {
256 }
257 
258 
259 const uint8_t* CSP_get_param_head(const CmdSpacePacket* csp)
260 {
261  return &(csp->packet[SP_PRM_HDR_LEN + CSP_SND_HDR_LEN]);
262 }
263 
264 
265 uint16_t CSP_get_param_len(const CmdSpacePacket* csp)
266 {
267  return (uint16_t)(CSP_get_packet_len(csp) - SP_PRM_HDR_LEN - CSP_SND_HDR_LEN);
268 }
269 
270 
271 void CSP_set_param(CmdSpacePacket* csp, const uint8_t* param, uint16_t len)
272 {
273  // パラメータをパケットにコピー
274  // paramは既に成形されているのでここは ENDIAN_memcpy ではなく memcpy (paramの数, 種類などがこの関数からは不明)
275  // const ではダメなので, CSP_get_param_head が使えない
276  memcpy(&(csp->packet[SP_PRM_HDR_LEN + CSP_SND_HDR_LEN]), param, (size_t)len);
277 
278  // パラメータ長に合わせパケット長を設定
279  // パケット長はヘッダ分が加算される
280  CSP_set_packet_len(csp, (uint16_t)(SP_PRM_HDR_LEN + CSP_SND_HDR_LEN + len));
281 }
282 
283 
285 {
286  // ここでは Version Number は Version-1 固定
287  CSP_set_ver(csp, SP_VER_1);
288  // Command Packet なので Type は Telecommand 固定
290  // ここでは Secondary Header は必須
292  // APID
294  // ここでは Sequence Flag は Standalone Packet に固定
296  // ここでは Sequence Count は 0 固定
297  CSP_set_seq_count(csp, 0);
298  // ここでは Sec. HDR Ver は CSP_2ND_HDR_VER_TO_USE 固定
300  // ここでは Command Type は CSP_CMD_TYPE_UNKNOWN 固定
302 }
303 
304 #pragma section
APID
Application Process ID
Definition: apid_define.h:17
void CSP_set_exec_type(CmdSpacePacket *csp, CCP_EXEC_TYPE exec_type)
Execution Type を設定
const uint8_t * CSP_get_param_head(const CmdSpacePacket *csp)
コマンドパラメタの先頭ポインタを取得
SP_VER CSP_get_ver(const CmdSpacePacket *csp)
Version No を取得
static const SP_ParamExtractionInfo CSP_pei_ti_
SP_SEQ_FLAG CSP_get_seq_flag(const CmdSpacePacket *csp)
Sequence Flag を取得
CSP_CMD_TYPE CSP_get_cmd_type(const CmdSpacePacket *csp)
Command Type を取得
void CSP_set_packet_len(CmdSpacePacket *csp, uint16_t len)
Packet Length を設定
void CSP_set_ver(CmdSpacePacket *csp, SP_VER ver)
Version No を設定
void CSP_copy_packet(CmdSpacePacket *dest, const CmdSpacePacket *src)
CmdSpacePacket をコピー
static const SP_ParamExtractionInfo CSP_pei_dest_type_
void CSP_set_2nd_hdr_flag(CmdSpacePacket *csp, SP_2ND_HDR_FLAG flag)
Secondary Header Flag を設定
static const SP_ParamExtractionInfo CSP_pei_cmd_id_
void CSP_set_ti(CmdSpacePacket *csp, uint32_t ti)
Time Indicator (TI) を設定
void CSP_set_dest_type(CmdSpacePacket *csp, CCP_DEST_TYPE dest_type)
Destination Type を設定
CMD_CODE CSP_get_cmd_id(const CmdSpacePacket *csp)
Command ID を取得
void CSP_set_type(CmdSpacePacket *csp, SP_TYPE type)
Packet Type を設定
void CSP_set_packet_data_len(CmdSpacePacket *csp, uint16_t len)
Packet Data Length を設定
static const SP_ParamExtractionInfo CSP_pei_exec_type_
APID CSP_get_apid(const CmdSpacePacket *csp)
APID を取得
void CSP_set_seq_flag(CmdSpacePacket *csp, SP_SEQ_FLAG flag)
Sequence Flag を設定
static const SP_ParamExtractionInfo CSP_pei_2nd_hdr_ver_
static const SP_ParamExtractionInfo CSP_pei_cmd_type_
void CSP_set_cmd_id(CmdSpacePacket *csp, CMD_CODE id)
Command ID を設定
uint16_t CSP_get_packet_data_len(const CmdSpacePacket *csp)
Packet Data Length を取得
uint32_t CSP_get_ti(const CmdSpacePacket *csp)
Time Indicator (TI) を取得
uint16_t CSP_get_seq_count(const CmdSpacePacket *csp)
Sequence Count を取得
SP_TYPE CSP_get_type(const CmdSpacePacket *csp)
Packet Type を取得
void CSP_set_common_hdr(CmdSpacePacket *csp)
共通部分の Header を構築
CCP_DEST_TYPE CSP_get_dest_type(const CmdSpacePacket *csp)
Destination Type を取得
#define CSP_CAST_TO_NON_CONST_SP(csp)
SPへのキャスト. SPのほうが広いので,これは可能
void CSP_set_2nd_hdr_ver(CmdSpacePacket *csp, CSP_2ND_HDR_VER ver)
Secondary Header Version No を設定
#define CSP_CAST_TO_SP(csp)
SPへのキャスト. SPのほうが広いので,これは可能
SP_2ND_HDR_FLAG CSP_get_2nd_hdr_flag(const CmdSpacePacket *csp)
Secondary Header Flag を取得
CSP_2ND_HDR_VER CSP_get_2nd_hdr_ver(const CmdSpacePacket *csp)
Secondary Header Version No を取得
uint16_t CSP_get_param_len(const CmdSpacePacket *csp)
Param Length を取得
void CSP_set_seq_count(CmdSpacePacket *csp, uint16_t count)
Sequence Count を設定
void CSP_set_apid(CmdSpacePacket *csp, APID apid)
APID を設定
void CSP_set_param(CmdSpacePacket *csp, const uint8_t *param, uint16_t len)
コマンドパラメタを設定
uint16_t CSP_get_packet_len(const CmdSpacePacket *csp)
Packet Length を取得
CCP_EXEC_TYPE CSP_get_exec_type(const CmdSpacePacket *csp)
Execution Type を取得
void CSP_set_cmd_type(CmdSpacePacket *csp, CSP_CMD_TYPE cmd_type)
Command Type を設定
CCSDS で規定される Space Packet の コマンド版の実装
#define CSP_2ND_HDR_VER_TO_USE
使う Sec. HDR Ver
CSP_CMD_TYPE
Command Type
@ CSP_CMD_TYPE_UNKNOWN
#define CSP_SND_HDR_LEN
Secondary Header 長
CSP_2ND_HDR_VER
Secondary Header Version No
@ CSP_2ND_HDR_VER_1
Version-1
@ CSP_2ND_HDR_VER_UNKNOWN
バージョン不定
CCP_EXEC_TYPE
コマンド実行種別
@ CCP_EXEC_TYPE_UNKNOWN
@ CCP_EXEC_TYPE_TL_DEPLOY_BC
@ CCP_EXEC_TYPE_GS
GS : Ground Station Command
@ CCP_EXEC_TYPE_RT
RT : Realtime Command
@ CCP_EXEC_TYPE_BC
BC : Block Command
@ CCP_EXEC_TYPE_TL_DEPLOY_TLM
@ CCP_EXEC_TYPE_UTL
UTL: Unixtime Timeline Command
@ CCP_EXEC_TYPE_TL_FROM_GS
TL : Timeline Command
CCP_DEST_TYPE CCP_get_dest_type_from_uint8(uint8_t dest_type)
バイト列から CCP_DEST_TYPE を取得
#define CCP_APID_TO_ME
CCP_DEST_TYPE
コマンドの解釈の宛先を規定
void SP_set_packet_data_len(SpacePacket *sp, uint16_t len)
Packet Data Length を設定
Definition: space_packet.c:138
SP_2ND_HDR_FLAG SP_get_2nd_hdr_flag(const SpacePacket *sp)
Secondary Header Flag を取得
Definition: space_packet.c:66
uint16_t SP_get_seq_count(const SpacePacket *sp)
Sequence Count を取得
Definition: space_packet.c:113
uint16_t SP_get_packet_len(const SpacePacket *sp)
Packet Length を取得
Definition: space_packet.c:152
void SP_extract_param_from_packet(const SpacePacket *sp, const SP_ParamExtractionInfo *pei, void *dst)
packet に格納された param を取得
Definition: space_packet.c:171
SP_SEQ_FLAG SP_get_seq_flag(const SpacePacket *sp)
Sequence Flag を取得
Definition: space_packet.c:97
void SP_set_ver(SpacePacket *sp, SP_VER ver)
Version No を設定
Definition: space_packet.c:43
void SP_set_seq_flag(SpacePacket *sp, SP_SEQ_FLAG flag)
Sequence Flag を設定
Definition: space_packet.c:106
void SP_set_seq_count(SpacePacket *sp, uint16_t count)
Sequence Count を設定
Definition: space_packet.c:122
APID SP_get_apid(const SpacePacket *sp)
APID を取得
Definition: space_packet.c:82
void SP_insert_param_to_packet(SpacePacket *sp, const SP_ParamExtractionInfo *pei, const void *src)
packet に param を格納
Definition: space_packet.c:207
void SP_set_2nd_hdr_flag(SpacePacket *sp, SP_2ND_HDR_FLAG flag)
Secondary Header Flag を設定
Definition: space_packet.c:75
uint16_t SP_get_packet_data_len(const SpacePacket *sp)
Packet Data Length を取得
Definition: space_packet.c:128
void SP_set_type(SpacePacket *sp, SP_TYPE type)
Packet Type を設定
Definition: space_packet.c:59
void SP_set_packet_len(SpacePacket *sp, uint16_t len)
Packet Length を設定
Definition: space_packet.c:158
SP_VER SP_get_ver(const SpacePacket *sp)
Version No を取得
Definition: space_packet.c:25
void SP_copy_packet(SpacePacket *dest, const SpacePacket *src)
SpacePacket をコピー
Definition: space_packet.c:165
void SP_set_apid(SpacePacket *sp, APID apid)
APID を設定
Definition: space_packet.c:90
SP_TYPE SP_get_type(const SpacePacket *sp)
Packet Type を取得
Definition: space_packet.c:50
SP_TYPE
Space Packet Type
Definition: space_packet.h:64
@ SP_TYPE_CMD
1b: COMMAND
Definition: space_packet.h:66
SP_2ND_HDR_FLAG
Space Packet Secandary Header Flag
Definition: space_packet.h:76
@ SP_2ND_HDR_FLAG_PRESENT
1b: Secondary Header Present
Definition: space_packet.h:78
SP_SEQ_FLAG
Space Packet Sequence Flag
Definition: space_packet.h:87
@ SP_SEQ_FLAG_SINGLE
11b: Standalone packet
Definition: space_packet.h:91
SP_VER
Space Packet Version Number
Definition: space_packet.h:52
@ SP_VER_1
000b: Version-1
Definition: space_packet.h:53
#define SP_PRM_HDR_LEN
Packet Primary Header 長
Definition: space_packet.h:43
Space Packet (コマンド用)
uint8_t packet[CSP_MAX_LEN]
packet からデータを抜き取るときのパラメタ
Definition: space_packet.h:99