C2A_Core
common_tlm_cmd_packet.c
[詳解]
1 #pragma section REPRO
11 #include <string.h>
12 
13 
15 {
16  if (packet == NULL) return 0;
17  if ( CTCP_get_packet_len(packet) > CTCP_MAX_LEN ) return 0;
18 
19  return 1;
20 }
21 
23 {
24  switch (SP_get_type(packet))
25  {
26  case SP_TYPE_TLM:
27  return CTCP_PACKET_TYPE_TLM;
28 
29  case SP_TYPE_CMD:
30  return CTCP_PACKET_TYPE_CMD;
31 
32  default:
34  }
35 }
36 
37 uint16_t CTCP_get_packet_len(const CommonTlmCmdPacket* packet)
38 {
39  return SP_get_packet_len(packet);
40 }
41 
43 {
44  return SP_get_apid(packet);
45 }
46 
48 {
49  SP_set_apid(packet, apid);
50 }
51 
53 {
54  SP_copy_packet(dest, src);
55 }
56 
57 // FIXME: 以下4関数について, Space Packet が整備されたら, `if len(ctcp) > CCP_MAX_LEN return NULL;` のようなアサーションをいれる!
59 {
60  if (CTCP_get_packet_type(ctcp) != CTCP_PACKET_TYPE_TLM) return NULL;
61  return (const CommonTlmPacket*)ctcp;
62 }
63 
65 {
66  return (const CommonTlmCmdPacket*)ctp;
67 }
68 
70 {
71  if (CTCP_get_packet_type(ctcp) != CTCP_PACKET_TYPE_CMD) return NULL;
72  return (const CommonCmdPacket*)ctcp;
73 }
74 
76 {
77  return (const CommonTlmCmdPacket*)ccp;
78 }
79 
80 #pragma section
APID
Application Process ID
Definition: apid_define.h:17
const CommonTlmPacket * CTCP_convert_to_ctp(const CommonTlmCmdPacket *ctcp)
CTCP を CTP に変換(キャスト)
uint16_t CTCP_get_packet_len(const CommonTlmCmdPacket *packet)
パケット長を取得
int CTCP_is_valid_packet(const CommonTlmCmdPacket *packet)
有効なパケットかチェックする
CTCP_PACKET_TYPE CTCP_get_packet_type(const CommonTlmCmdPacket *packet)
tlm か cmd かを判断
const CommonTlmCmdPacket * CTCP_convert_from_ctp(const CommonTlmPacket *ctp)
CTP を CTCP に変換(キャスト)
const CommonCmdPacket * CTCP_convert_to_ccp(const CommonTlmCmdPacket *ctcp)
CTCP を CCP に変換(キャスト)
void CTCP_copy_packet(CommonTlmCmdPacket *dest, const CommonTlmCmdPacket *src)
CommonTlmCmdPacket をコピー
void CTCP_set_apid(CommonTlmCmdPacket *packet, APID apid)
APID を設定
const CommonTlmCmdPacket * CTCP_convert_from_ccp(const CommonCmdPacket *ccp)
CCP を CTCP に変換(キャスト)
APID CTCP_get_apid(const CommonTlmCmdPacket *packet)
APID を取得
CTCP 関連基本関数の宣言
CTCP_PACKET_TYPE
tlm (CTP) or cmd (CCP) を規定
@ CTCP_PACKET_TYPE_TLM
@ CTCP_PACKET_TYPE_UNKNOWN
@ CTCP_PACKET_TYPE_CMD
#define CTCP_MAX_LEN
uint16_t SP_get_packet_len(const SpacePacket *sp)
Packet Length を取得
Definition: space_packet.c:152
APID SP_get_apid(const SpacePacket *sp)
APID を取得
Definition: space_packet.c:82
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
CCSDS で規定される Space Packet の実装
@ SP_TYPE_TLM
0b: TELEMETRY
Definition: space_packet.h:65
@ SP_TYPE_CMD
1b: COMMAND
Definition: space_packet.h:66
Space Packet (コマンド用)
Space Packet
Space Packet (テレメ用)