C2A_Core
utility_command.c
[詳解]
1 #pragma section REPRO
2 #include "utility_command.h"
3 #include "../System/ApplicationManager/app_info.h"
4 #include "../IfWrapper/uart.h"
6 #include <string.h> // for memcpy
7 #include "../TlmCmd/common_cmd_packet_util.h"
8 
9 
12 
13 static void UTIL_CMD_init_(void);
14 static void UTIL_CMD_reset_(void);
15 static void UTIL_CMD_add_(unsigned char add_size, const unsigned char* cmd);
16 static int UTIL_CMD_send_(unsigned char ch);
17 
18 // 汎用コマンドここから
20 {
21  return AI_create_app_info("util_cmd", UTIL_CMD_init_, NULL);
22 }
23 
24 static void UTIL_CMD_init_(void)
25 {
26  int i;
27  for (i = 0; i < UTIL_CMD_SIZE_MAX; i++)
28  {
30  }
33 
34  // UART送信用のダミー構造体.実際に使用されるのはchのみ
40 }
41 
42 static void UTIL_CMD_reset_(void)
43 {
44  int i;
45  for (i = 0; i < UTIL_CMD_SIZE_MAX; i++)
46  {
48  }
51 }
52 
53 static void UTIL_CMD_add_(unsigned char add_size, const unsigned char* cmd)
54 {
55  // サイズが適合していれば,バッファの後端に加える
57  {
58  memcpy(&utility_command_.util_cmd_buffer[utility_command_.pointer], cmd, (size_t)add_size);
59  utility_command_.pointer += add_size;
61  }
62 }
63 
64 // ここの対応関係をうまく整理する
65 static int UTIL_CMD_send_(unsigned char ch)
66 {
67  int ret = -100;
68  if (ch < PORT_CH_MAX_UART_PORT)
69  {
72  }
73  if (ret != 0)
74  {
75  // UART_ERR_CODEを保持
77  }
78  return ret;
79 }
80 
82 {
83  unsigned char size = CCP_get_param_head(packet)[0];
84  if (CCP_get_param_len(packet) != 21)
85  {
86  // パラメータ長確認(21Bytes)
88  }
89  if (size <= 20)
90  {
91  // 範囲内なら該当のものを追加
93  {
94  UTIL_CMD_add_(size, &CCP_get_param_head(packet)[1]);
95  }
96  else
97  {
99  }
100  }
101  else
102  {
104  }
106 }
107 
109 {
110  unsigned char uart_ch = CCP_get_param_head(packet)[0];
111  int ret;
112 
113  if (uart_ch < PORT_CH_MAX_UART_PORT)
114  {
115  // 範囲内なら該当のものを送信
116  ret = UTIL_CMD_send_(uart_ch);
117  if (ret != 0)
118  {
120  }
121  }
122  else
123  {
125  }
127 }
128 
130 {
131  (void)packet;
132  UTIL_CMD_reset_();
134 }
135 
136 #pragma section
AppInfo AI_create_app_info(const char *name, void(*initializer)(void), void(*entry_point)(void))
AppInfo を作る
Definition: app_info.c:9
@ CCP_EXEC_SUCCESS
@ CCP_EXEC_ILLEGAL_LENGTH
コマンド実行時のコマンド引数長エラー
@ CCP_EXEC_ILLEGAL_PARAMETER
コマンド実行時のパラメタエラー
@ CCP_EXEC_ILLEGAL_CONTEXT
コマンド実行時のその他のエラー
uint16_t CCP_get_param_len(const CommonCmdPacket *packet)
CMD パラメタ長を取得
const uint8_t * CCP_get_param_head(const CommonCmdPacket *packet)
先頭のパラメタのポインタを取得
CCP_CmdRet CCP_make_cmd_ret_without_err_code(CCP_EXEC_STS exec_sts)
コマンド返り値である CCP_CmdRet を作成(エラーコード不使用版)
#define PORT_CH_MAX_UART_PORT
UARTポート上限
Definition: port_config.h:18
コマンド返り値
Space Packet (コマンド用)
PARITY_SETTINGS parity_settings
パリティ設定
Definition: uart.h:85
UART_DATA_LENGTH data_length
データ長
Definition: uart.h:86
uint32_t baudrate
継承先の機器のボーレート値
Definition: uart.h:84
uint8_t ch
継承先の機器がつながっているポート番号
Definition: uart.h:82
UART_STOP_BIT stop_bit
ストップビット
Definition: uart.h:87
unsigned int pointer
unsigned int cmd_size
UART_Config uart_config_dummy
unsigned char util_cmd_buffer[UTIL_CMD_SIZE_MAX]
int UART_tx(void *my_uart_v, void *data_v, int data_size)
UART_CONFIG構造体にて指定されたchへデータを送信します
Definition: uart_sils.cpp:33
@ UART_DATA_LENGTH_8BIT
Definition: uart.h:37
@ PARITY_SETTINGS_NONE
パリティチェックをしない
Definition: uart.h:23
@ UART_STOP_BIT_1BIT
Definition: uart.h:46
CCP_CmdRet Cmd_UTIL_CMD_SEND(const CommonCmdPacket *packet)
static void UTIL_CMD_reset_(void)
CCP_CmdRet Cmd_UTIL_CMD_RESET(const CommonCmdPacket *packet)
AppInfo UTIL_CMD_create_app(void)
static int UTIL_CMD_send_(unsigned char ch)
static UtilityCommand utility_command_
static void UTIL_CMD_init_(void)
static void UTIL_CMD_add_(unsigned char add_size, const unsigned char *cmd)
CCP_CmdRet Cmd_UTIL_CMD_ADD(const CommonCmdPacket *packet)
const UtilityCommand *const utility_command
#define UTIL_CMD_SIZE_MAX