C2A_Core
user_packet_handler.c
[詳解]
1 #pragma section REPRO
6 #include "user_packet_handler.h"
8 #include "../Applications/DriverInstances/di_aobc.h"
9 // #include "../Applications/DriverInstances/di_tobc.h"
10 
11 #define PH_AOBC_CMD_LIST_MAX (16)
12 #define PH_TOBC_CMD_LIST_MAX (16)
13 
14 static PH_ACK PH_add_aobc_cmd_(const CommonCmdPacket* packet);
15 static PH_ACK PH_add_tobc_cmd_(const CommonCmdPacket* packet);
16 
19 
24 
25 
26 void PH_user_init(void)
27 {
30 }
31 
32 
34 {
35  CCP_DEST_TYPE dest_type = CCP_get_dest_type(packet);
36  APID apid = CCP_get_apid(packet);
37 
38  if (dest_type == CCP_DEST_TYPE_TO_APID)
39  {
40  switch (apid)
41  {
42  case APID_AOBC_CMD:
44  case APID_TOBC_CMD:
46  default:
47  // APID_MOBC_CMD
48  // 不正な APID
49  // はここに
50  return PH_ACK_UNKNOWN;
51  }
52  }
53  else
54  {
55  switch (dest_type)
56  {
57  case CCP_DEST_TYPE_TO_AOBC: // CCP_DEST_TYPE_TO_APID の追加に伴い deprecated
59  case CCP_DEST_TYPE_TO_TOBC: // CCP_DEST_TYPE_TO_APID の追加に伴い deprecated
61  default:
62  // CCP_DEST_TYPE_TO_ME
63  // CCP_DEST_TYPE_TO_MOBC などの自分宛.なお, CCP_DEST_TYPE_TO_APID の追加に伴い deprecated
64  // 宛先不明
65  // はここに
66  return PH_ACK_UNKNOWN;
67  }
68  }
69 }
70 
71 
73 {
74  APID apid = CCP_get_apid(packet);
75  switch (apid)
76  {
77  case APID_AOBC_CMD:
78  // AOBCに配送
79  return DI_AOBC_dispatch_command(packet);
80  case APID_TOBC_CMD:
81  // TOBCに配送
82  // return DI_TOBC_dispatch_command(packet);
83  default:
84  // 該当する配送先が定義されていない場合
86  }
87 }
88 
89 
91  TLM_CODE tlm_id,
92  uint8_t* packet,
93  uint16_t* len,
94  uint16_t max_len)
95 {
96  switch (apid)
97  {
98  case APID_AOBC_TLM:
99  return AOBC_pick_up_tlm_buffer(aobc_driver, (AOBC_TLM_CODE)tlm_id, packet, len, max_len);
100  default:
102  }
103 }
104 
105 
107 {
108  PL_ACK ack = PL_push_back(&PH_aobc_cmd_list, packet);
109 
110  if (ack != PL_SUCCESS) return PH_ACK_PL_LIST_FULL;
111  return PH_ACK_SUCCESS;
112 }
113 
114 
116 {
117  (void)packet;
118 #if 0
119  PL_ACK ack = PL_push_back(&PH_tobc_cmd_list, packet);
120 
121  if (ack != PL_SUCCESS) return PH_ACK_PL_LIST_FULL;
122 #endif
123  return PH_ACK_SUCCESS;
124 }
125 
126 #pragma section
TF_TLM_FUNC_ACK AOBC_pick_up_tlm_buffer(const AOBC_Driver *aobc_driver, AOBC_TLM_CODE tlm_id, uint8_t *packet, uint16_t *len, uint16_t max_len)
APID
Application Process ID
Definition: apid_define.h:17
@ APID_AOBC_CMD
01000010001b: APID for AOBC 宛の CMD
Definition: apid_define.h:19
@ APID_TOBC_CMD
01000010010b: APID for TOBC 宛の CMD
Definition: apid_define.h:20
@ APID_AOBC_TLM
10100010001b: APID for AOBC で生成される TLM
Definition: apid_define.h:23
CCP_DEST_TYPE CCP_get_dest_type(const CommonCmdPacket *packet)
DEST_TYPE を取得
@ CCP_EXEC_ROUTING_FAILED
PH_dispatch_command, PH_user_cmd_router で用いる
APID CCP_get_apid(const CommonCmdPacket *packet)
APID を取得
CCP_DEST_TYPE
コマンドの解釈の宛先を規定
@ CCP_DEST_TYPE_TO_APID
@ CCP_DEST_TYPE_TO_AOBC
@ CCP_DEST_TYPE_TO_TOBC
CCP_CmdRet CCP_make_cmd_ret(CCP_EXEC_STS exec_sts, uint32_t err_code)
コマンド返り値である CCP_CmdRet を作成
const AOBC_Driver *const aobc_driver
AOBC driver
Definition: di_aobc.c:23
CCP_CmdRet DI_AOBC_dispatch_command(const CommonCmdPacket *packet)
CommonCmdPacket を AOBC に送信する
Definition: di_aobc.c:91
PH_ACK
@ PH_ACK_SUCCESS
OK
@ PH_ACK_PL_LIST_FULL
PL が一杯だった
@ PH_ACK_FORWARDED
別 OBC に転送された
@ PH_ACK_UNKNOWN
PL_ACK PL_push_back(PacketList *pl, const void *packet)
PacketList の末尾に packet を挿入
Definition: packet_list.c:189
PL_ACK
PacketList 関連操作のエラーコード
Definition: packet_list.h:39
@ PL_SUCCESS
成功
Definition: packet_list.h:40
PL_ACK PL_initialize_with_ccp(PL_Node *pl_node_stock, CommonCmdPacket *packet_stock, uint16_t node_num, PacketList *pl)
static に確保された PL_Node 配列と CCP 配列を受け取りその領域を使用して PL を初期化
PacketList の Util.User は基本こちらを使い, PL を直接使わない.
コマンド返り値
Space Packet (コマンド用)
片方向リストを構成する各 Node
Definition: packet_list.h:59
パケットリスト本体
Definition: packet_list.h:73
TF_TLM_FUNC_ACK
tlm_func の返り値につかう
@ TF_TLM_FUNC_ACK_NOT_DEFINED
定義されてないテレメ
PacketList PH_tobc_cmd_list
TF_TLM_FUNC_ACK PH_user_telemetry_router(APID apid, TLM_CODE tlm_id, uint8_t *packet, uint16_t *len, uint16_t max_len)
2nd OBC のテレメを転送するために, APID からテレメを判定してルーティングする // FIXME: 命名, router ではない?
CCP_CmdRet PH_user_cmd_router(const CommonCmdPacket *packet)
PH の PH_dispatch_command のユーザー処理関数
static PH_ACK PH_add_aobc_cmd_(const CommonCmdPacket *packet)
static PH_ACK PH_add_tobc_cmd_(const CommonCmdPacket *packet)
PH_ACK PH_user_analyze_cmd(const CommonCmdPacket *packet)
PH の analyze_cmd_ のユーザー処理関数
static CommonCmdPacket PH_tobc_ccp_stock_[PH_TOBC_CMD_LIST_MAX]
static CommonCmdPacket PH_aobc_ccp_stock_[PH_AOBC_CMD_LIST_MAX]
static PL_Node PH_tobc_cmd_stock_[PH_TOBC_CMD_LIST_MAX]
PacketList PH_aobc_cmd_list
static PL_Node PH_aobc_cmd_stock_[PH_AOBC_CMD_LIST_MAX]
#define PH_TOBC_CMD_LIST_MAX
TOBC CMD QUEUEサイズ
#define PH_AOBC_CMD_LIST_MAX
AOBC CMD QUEUEサイズ
void PH_user_init(void)
PH のユーザー固有部初期化処理
packet_handlerのコマンドルーター,コマンドアナライザのユーザー定義部分