https://github.com/arkedge/c2a-core/blob/main/docs/sils/c2a_dev_runtime.md
c2a-core/docs/sils/c2a_dev_runtime.md at main · arkedge/c2a-core
Satellite Flight Software: Command-Centric Architecture - arkedge/c2a-core
github.com
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install -y python3.12 python3.12-venv python3.12-dev
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 10
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 20
sudo update-alternatives --config python3
python3 --version
curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 20
nvm use 20
nvm alias default 20
corepack enable
corepack prepare pnpm@10 --activate
pnpm -v
rustup --version
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
rustup toolchain install 1.81.0
rustup default 1.81.0
cov_send.sh
#!/bin/bash
# udp_listener.sh
PORT=9999
KEYWORD="RUN"
PASSWORD="1234"
CORE_CPU1_NAME="core-cpu1"
EXIT_NOTICE_PORT=7777
CHECK_INTERVAL=2
echo "▶ Listening on UDP port ${PORT}..."
# 함수: core-cpu1 종료 감지 및 메시지 전송
check_core_cpu1() {
local was_running=0
while true; do
if pgrep -x "$CORE_CPU1_NAME" > /dev/null; then
was_running=1
else
if [[ $was_running -eq 1 ]]; then
echo "⚠️ ${CORE_CPU1_NAME} 종료 감지됨. 종료 메시지 전송 중..."
echo "Crash Detected" | nc -u -w1 10.0.2.1 "$EXIT_NOTICE_PORT"
was_running=0 # 다시 시작하면 감지하도록 초기화
fi
fi
sleep "$CHECK_INTERVAL"
done
}
# 백그라운드에서 종료 감지 루프 실행
check_core_cpu1 &
# UDP 수신 루프
while true; do
nc -u -l -p "${PORT}" | while IFS= read -r LINE; do
echo "Received: ${LINE}"
if [[ "${LINE}" == *"${KEYWORD}"* ]]; then
echo "⚠️ Detected keyword '${KEYWORD}' in message!"
echo "$PASSWORD" | sudo -S ./share_cov_dir_setting.sh
./coverage_logger.sh
fi
done
done
빌드 디펜던시
sudo apt install gcc-multilib protobuf-compiler libclang-dev cmake g++ g++-multilib
nvm install
corepack enable
pnpm install
node -v
v20.19.5
pnpm -v
10.17.0
C2A 설치
git clone https://github.com/arkedge/c2a-core
cd c2a-core
./setup.sh
cd examples/mobc
pnpm install
# 여기까지만 하면 그냥 실행됨
pnpm run devtools:sils
# 또는
cargo run
cargo build와 실행
cargo run = cargo build + ./해당 바이너리 (실행)
cargo는 C코드를 Rust로 생성해주는?? 역할.
c2a-core/examples/mobc 경로에서 cargo build하고
c2a-core/target/i686-unknown-linux-gnu/debug 위치에 실행파일 (c2a-example-mobc)이 생성됨.

cargo 빌드 클린
c2a-core/examples/mobc/ 경로 안에서
cargo clean 하면 됨. -> 그러면 target dir 자동으로 없어짐
c2a-core에도 build.rs 있는데 여기서 하면 안되네

Gcov 빌드
cd c2a-core/examples/mobc
cargo clean
rm -rf target
# gcov flag 삽입
export CC=gcc
export CXX=g++
export CFLAGS="--coverage -O0"
export CXXFLAGS="--coverage -O0"
# 중요 -> Rust는 LDFLAGS를 무시함.
export RUSTFLAGS="-C link-arg=--coverage -C link-arg=-lgcov"
# 이후 빌드
cargo build # 또는 cargo run
cargo run
이후 생성된 .gcda .gcno 확인
cd c2a-core
find target -name "*.gcda" -o -name "*.gcno"

Command 전송
반드시 아래 경로에서 해야함

test_by_juntheworld.py 참고
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
import isslwings as wings
import pytest
# ROOT_PATH = "../../../"
ROOT_PATH = "../../"
path = os.path.dirname(__file__) + "/" + ROOT_PATH + "utils"
print(path)
sys.path.append(os.path.dirname(__file__) + "/" + ROOT_PATH + "utils")
import c2a_enum_utils
import wings_utils
class Cmd:
ti: int
id: int
params: list
c2a_enum = c2a_enum_utils.get_c2a_enum()
ope = wings_utils.get_wings_operation()
def get_ccp_dump_tlm():
tlm = wings.util.generate_and_receive_tlm(
ope, c2a_enum.Cmd_CODE_TG_GENERATE_RT_TLM, c2a_enum.Tlm_CODE_CCP_DUMP
)
return tlm
def init_cmd_class(ti, id, params):
# by juntheworld
# print("id & params : ")
# print("c2a_enum : ", c2a_enum)
# print(id, params)
cmd = Cmd()
cmd.ti = ti
cmd.id = id
cmd.params = params
return cmd
@pytest.mark.real
@pytest.mark.sils
def test_event_utility():
CDIS_MGR_MAX_NUM_OF_CDIS = 8
CDIS_IDX_OF_TL_GS = 3
# tlm_CCP_DUMP = get_ccp_dump_tlm()
# now_ti = tlm_CCP_DUMP["CCP_DUMP.SH.TI"]
# print("now_ti : ", now_ti)
# tlc0 = init_cmd_class(
# now_ti + 10000, c2a_enum.Cmd_CODE_TG_FORWARD_AS_RT_TLM, [0x12, 0x34, 0x56]
# )
# tlc1 = init_cmd_class(
# now_ti + 20000, c2a_enum.Cmd_CODE_TG_FORWARD_AS_RT_TLM, [0xAB, 0xCD, 0xEF]
# )
# wings.util.send_tl_cmd(ope, tlc0.ti, tlc0.id, (0x1234, 0x56))
# wings.util.send_tl_cmd(ope, tlc1.ti, tlc1.id, (0xABCD, 0xEF))
# res = wings.util.send_rt_cmd_and_confirm(
# ope, c2a_enum.Cmd_CODE_CCP_DUMP_CDIS, (CDIS_MGR_MAX_NUM_OF_CDIS, 0), c2a_enum.Tlm_CODE_HK
# )
# print(res)
res = wings.util.send_rt_cmd_and_confirm(
ope, c2a_enum.Cmd_CODE_TMGR_SET_TIME, (CDIS_IDX_OF_TL_GS, 2, 1), c2a_enum.Tlm_CODE_HK
)
print(res)
if __name__ == "__main__":
test_event_utility()
현재까지 파악한 커맨드 목록
다음과 같이 생성할 수 있는 것으로 보이고 생성한 커맨드는 아래와 같이 저장됨


/**
* @file
* @brief 명령 정의
* @note 이 코드는 자동 생성되었습니다!
* @note 코드 생성 원본 tlm-cmd-db:
* repository: github.com/arkedge/c2a-core.git
* CSV files MD5: 21799e92eda843366bac3e516838b31a
* @note 코드 생성 파라미터:
* db_prefix: SAMPLE_MOBC
* tlm_id_range: [0x00, 0x100]
* is_cmd_prefixed_in_db: 0
* input_file_encoding: utf-8
* output_file_encoding: utf-8
*/
#ifndef COMMAND_DEFINITIONS_H_
#define COMMAND_DEFINITIONS_H_
typedef enum
{
Cmd_CODE_NOP = 0x0000, //!< 더미(의미 없는) 명령
Cmd_CODE_TMGR_SET_TIME = 0x0001, //!< MOBC 시각 설정 명령
Cmd_CODE_TMGR_UPDATE_UNIXTIME = 0x0002, //!< MOBC UNIXTIME 보정 명령
Cmd_CODE_TMGR_SET_UTL_UNIXTIME_EPOCH = 0x0003, //!< UTL_cmd에서 사용하는 unixtime epoch(기준 시각)을 변경 (utl_unixtime_epoch [s])
Cmd_CODE_TMGR_SET_CYCLE_CORRECTION = 0x0004, //!< CYCLES_PER_SEC 보정 배율 변경 @@ 초기값은 1.0
Cmd_CODE_TMGR_RESET_CYCLE_CORRECTION = 0x0005, //!< CYCLES_PER_SEC 보정 배율을 1.0으로 초기화
Cmd_CODE_TMGR_CLEAR_UNIXTIME_INFO = 0x0006, //!< unixtime_info_ 초기화
Cmd_CODE_AM_REGISTER_APP = 0x0007, //!< 앱 등록 명령
Cmd_CODE_AM_INITIALIZE_APP = 0x0008, //!< 앱 초기화 명령
Cmd_CODE_AM_EXECUTE_APP = 0x0009, //!< 앱 실행 명령
Cmd_CODE_AM_SET_PAGE_FOR_TLM = 0x000A, //!< 텔레메트리 생성용 페이지 번호 설정
Cmd_CODE_AM_CLEAR_APP_INFO = 0x000B, //!< 앱 실행 시간 측정 정보 초기화
Cmd_CODE_MM_SET_MODE_LIST = 0x000C, //!< 모드 정의 리스트 설정 명령
Cmd_CODE_MM_SET_TRANSITION_TABLE = 0x000D, //!< 모드 전이 정의 테이블 변경 명령
Cmd_CODE_MM_START_TRANSITION = 0x000E, //!< 모드 전이 시작 명령
Cmd_CODE_MM_FINISH_TRANSITION = 0x000F, //!< 모드 전이 종료 알림 명령
Cmd_CODE_MM_UPDATE_TRANSITION_TABLE_FOR_TLM = 0x0010, //!< 모드 TLM 테이블 정보 업데이트
Cmd_CODE_TDSP_SET_TASK_LIST = 0x0011, //!< 태스크 리스트 설정 명령
Cmd_CODE_TLCD_CLEAR_ALL_TIMELINE = 0x0012, //!< 모든 타임라인(TLC) 등록 해제
Cmd_CODE_TLCD_CLEAR_TIMELINE_AT = 0x0013, //!< TI 지정 TLC 등록 해제
Cmd_CODE_TLCD_DEPLOY_BLOCK = 0x0014, //!< BLC 전개
Cmd_CODE_TLCD_CLEAR_ERR_LOG = 0x0015, //!< 최신 명령 실행 오류 기록 초기화
Cmd_CODE_TLCD_SET_SOE_FLAG = 0x0016, //!< 이상 발생 시 실행 정지 기능 설정(라인 번호 @@ 플래그)
Cmd_CODE_TLCD_SET_LOUT_FLAG = 0x0017, //!< 실행 정지 기능 설정(라인 번호 @@ 플래그)
Cmd_CODE_TLCD_SET_ID_FOR_TLM = 0x0018, //!< 다운링크할 TL_ID 설정 및 TL 텔레메트리 업데이트
Cmd_CODE_TLCD_SET_PAGE_FOR_TLM = 0x0019, //!< 텔레메트리 생성용 페이지 번호 설정
Cmd_CODE_CDIS_MGR_SET_IDX_FOR_TLM = 0x001A, //!< 다운링크할 CDIS의 idx 설정
Cmd_CODE_GENERATE_TLM = 0x001B, //!< 텔레메 패킷 생성 (deprecated)
Cmd_CODE_TG_GENERATE_TLM = 0x001C, //!< 해당 OBC의 텔레메 생성
Cmd_CODE_TG_GENERATE_HP_TLM = 0x001D, //!< HP 텔레메 생성 (현재 사실상 사용되지 않음)
Cmd_CODE_TG_GENERATE_RT_TLM = 0x001E, //!< RT 텔레메 생성
Cmd_CODE_TG_GENERATE_ST_TLM = 0x001F, //!< ST 텔레메 생성
Cmd_CODE_TG_FORWARD_TLM = 0x0020, //!< 서브 OBC의 텔레메를 전송
Cmd_CODE_TG_FORWARD_AS_HP_TLM = 0x0021, //!< 서브 OBC 텔레메를 HP 텔레메로 전송 (현재 사실상 사용되지 않음)
Cmd_CODE_TG_FORWARD_AS_RT_TLM = 0x0022, //!< 서브 OBC 텔레메를 RT 텔레메로 전송
Cmd_CODE_TG_FORWARD_AS_ST_TLM = 0x0023, //!< 서브 OBC 텔레메를 ST 텔레메로 전송
Cmd_CODE_BCT_CLEAR_BLOCK = 0x0024, //!< BLC 등록 해제 명령
Cmd_CODE_BCT_SET_BLOCK_POSITION = 0x0025, //!< BLC 조작 포인터 설정
Cmd_CODE_BCT_COPY_BCT = 0x0026, //!< BCT 내용을 다른 위치로 복사
Cmd_CODE_BCT_OVERWRITE_CMD = 0x0027, //!< BCT의 내용을 덮어쓰기
Cmd_CODE_BCT_FILL_NOP = 0x0028, //!< 텔레메 운용 시 10개 BC를 NOP으로 채움 (NOP 개수)
Cmd_CODE_BCE_ACTIVATE_BLOCK = 0x0029, //!< BLC 활성화 명령
Cmd_CODE_BCE_ACTIVATE_BLOCK_BY_ID = 0x002A, //!< BC를 무조건 활성화
Cmd_CODE_BCE_INACTIVATE_BLOCK_BY_ID = 0x002B, //!< BC를 무조건 비활성화
Cmd_CODE_BCE_ROTATE_BLOCK = 0x002C, //!< BLC 회전 명령
Cmd_CODE_BCE_COMBINE_BLOCK = 0x002D, //!< BLC 결합 명령
Cmd_CODE_BCE_TIMELIMIT_COMBINE_BLOCK = 0x002E, //!< 시간 제한 있는 BLC 결합 명령
Cmd_CODE_BCE_RESET_ROTATOR_INFO = 0x002F, //!< 카운터류 리셋
Cmd_CODE_BCE_RESET_COMBINER_INFO = 0x0030, //!< 카운터류 리셋
Cmd_CODE_BCE_SET_ROTATE_INTERVAL = 0x0031, //!< BC 회전 주기 설정
Cmd_CODE_GSCD_CLEAR_ERR_LOG = 0x0032, //!< 최신 명령 실행 오류 기록 초기화
Cmd_CODE_RTCD_CLEAR_ALL_REALTIME = 0x0033, //!< 모든 RTC 등록 해제
Cmd_CODE_RTCD_CLEAR_ERR_LOG = 0x0034, //!< 최신 명령 실행 오류 기록 초기화
Cmd_CODE_MEM_SET_REGION = 0x0035, //!< 조작 대상 범위의 시작/끝 주소 설정
Cmd_CODE_MEM_DUMP_REGION = 0x0036, //!< 지정 메모리 영역을 blob 텔레메로 다운링크 (1 tlm만 생성)
Cmd_CODE_MEM_DUMP_SINGLE = 0x0037, //!< 지정 주소부터 CTP 최대 크기만큼 덤프하여 blob 텔레메로 다운링크 (1 tlm)
Cmd_CODE_MEM_LOAD = 0x0038, //!< 지정한 주소에 쓰기(업로드)
Cmd_CODE_MEM_SET_DESTINATION_FOR_COPY = 0x0039, //!< 복사 대상 주소 설정
Cmd_CODE_MEM_COPY_REGION = 0x003A, //!< 지정된 폭으로 dest에 copy_rp를 계속 복사
Cmd_CODE_EL_INIT = 0x003B, //!< EL 초기화
Cmd_CODE_EL_CLEAR_LOG_ALL = 0x003C, //!< 모든 로그 삭제
Cmd_CODE_EL_CLEAR_LOG_BY_ERR_LEVEL = 0x003D, //!< 에러 레벨 지정 로그 삭제
Cmd_CODE_EL_CLEAR_STATISTICS = 0x003E, //!< 통계 정보 삭제
Cmd_CODE_EL_CLEAR_TLOG = 0x003F, //!< TLog 삭제
Cmd_CODE_EL_CLEAR_CLOG = 0x0040, //!< CLog 삭제
Cmd_CODE_EL_RECORD_EVENT = 0x0041, //!< 이벤트 기록
Cmd_CODE_EL_TLOG_SET_PAGE_FOR_TLM = 0x0042, //!< TLog 다운링크 텔레메 설정
Cmd_CODE_EL_CLOG_SET_PAGE_FOR_TLM = 0x0043, //!< CLog 다운링크 텔레메 설정
Cmd_CODE_EL_INIT_LOGGING_SETTINGS = 0x0044, //!< 로깅 설정 초기화
Cmd_CODE_EL_ENABLE_LOGGING = 0x0045, //!< 로깅 활성화
Cmd_CODE_EL_DISABLE_LOGGING = 0x0046, //!< 로깅 비활성화
Cmd_CODE_EL_ENABLE_LOGGING_ALL = 0x0047, //!< 모든 로깅 활성화
Cmd_CODE_EL_DISABLE_LOGGING_ALL = 0x0048, //!< 모든 로깅 비활성화
Cmd_CODE_EL_ENABLE_TLOG_OVERWRITE = 0x0049, //!< TLog 로그 덮어쓰기 활성화
Cmd_CODE_EL_DISABLE_TLOG_OVERWRITE = 0x004A, //!< TLog 로그 덮어쓰기 비활성화
Cmd_CODE_EL_ENABLE_TLOG_OVERWRITE_ALL = 0x004B, //!< 모든 TLog 로그 덮어쓰기 활성화
Cmd_CODE_EL_DISABLE_TLOG_OVERWRITE_ALL = 0x004C, //!< 모든 TLog 로그 덮어쓰기 비활성화
Cmd_CODE_EH_INIT = 0x004D, //!< EH 초기화
Cmd_CODE_EH_CLEAR_ALL_RULE = 0x004E, //!< EH 모든 룰 클리어
Cmd_CODE_EH_LOAD_DEFAULT_RULE = 0x004F, //!< EH 기본 룰 로드
Cmd_CODE_EH_SET_REGISTER_RULE_EVENT_PARAM = 0x0050, //!< 등록할 EH 룰의 이벤트 파라미터 설정
Cmd_CODE_EH_SET_REGISTER_RULE_CONDITION_PARAM = 0x0051, //!< 등록할 EH 룰의 조건 파라미터 설정
Cmd_CODE_EH_REGISTER_RULE = 0x0052, //!< 설정한 파라미터로 EH 룰 등록
Cmd_CODE_EH_DELETE_RULE = 0x0053, //!< 지정한 룰 삭제
Cmd_CODE_EH_INIT_RULE = 0x0054, //!< 지정한 룰 초기화(룰 활성화 + 카운터 초기화)
Cmd_CODE_EH_INIT_RULE_FOR_MULTI_LEVEL = 0x0055, //!< 지정한 룰 초기화(다단 EH용)
Cmd_CODE_EH_ACTIVATE_RULE = 0x0056, //!< 지정한 룰 활성화
Cmd_CODE_EH_INACTIVATE_RULE = 0x0057, //!< 지정한 룰 비활성화
Cmd_CODE_EH_ACTIVATE_RULE_FOR_MULTI_LEVEL = 0x0058, //!< 지정한 룰 활성화(다단 EH용)
Cmd_CODE_EH_INACTIVATE_RULE_FOR_MULTI_LEVEL = 0x0059, //!< 지정한 룰 비활성화(다단 EH용)
Cmd_CODE_EH_SET_RULE_COUNTER = 0x005A, //!< EH_Rule의 counter 설정
Cmd_CODE_EH_CLEAR_RULE_COUNTER = 0x005B, //!< EH_Rule의 counter를 0으로 클리어
Cmd_CODE_EH_CLEAR_RULE_COUNTER_BY_EVENT = 0x005C, //!< EH_Rule counter를 특정 EL_Event 기준으로 0 클리어
Cmd_CODE_EH_CLEAR_LOG = 0x005D, //!< EH 대응 로그 클리어
Cmd_CODE_EH_SET_MAX_RESPONSE_NUM = 0x005E, //!< 한 번의 EH 실행에서 대응 가능한 이벤트의 최대 개수 설정
Cmd_CODE_EH_SET_MAX_CHECK_EVENT_NUM = 0x005F, //!< 한 번의 EH 실행에서 체크할 이벤트 최대 개수 설정
Cmd_CODE_EH_SET_MAX_MULTI_LEVEL_NUM = 0x0060, //!< 설정 가능한 EH 다단 최대 수 설정
Cmd_CODE_EH_SET_PAGE_OF_RULE_TABLE_FOR_TLM = 0x0061, //!< EH 룰 테이블 텔레메 페이지 설정
Cmd_CODE_EH_SET_PAGE_OF_RULE_SORTED_IDX_FOR_TLM = 0x0062, //!< EH 정렬된 룰 테이블 텔레메 페이지 설정
Cmd_CODE_EH_SET_PAGE_OF_LOG_TABLE_FOR_TLM = 0x0063, //!< EH 로그 테이블 텔레메 페이지 설정
Cmd_CODE_EH_SET_TARGET_ID_OF_RULE_TABLE_FOR_TLM = 0x0064, //!< EH 텔레메에 표시할 룰 ID 설정
Cmd_CODE_EH_MATCH_EVENT_COUNTER_TO_EL = 0x0065, //!< EH event counter를 EL counter에 강제로 동기화
Cmd_CODE_EH_INIT_RULE_BY_EVENT_GROUP = 0x0066, //!< EH_INIT_RULE의 event_group 버전. 의도치 않은 범위까지 조작될 수 있으므로 주의
Cmd_CODE_EH_INIT_RULE_BY_EVENT_GROUP_FOR_MULTI_LEVEL = 0x0067, //!< EH_INIT_RULE_FOR_MULTI_LEVEL의 event_group 버전(주의)
Cmd_CODE_EH_ACTIVATE_RULE_BY_EVENT_GROUP = 0x0068, //!< EH_ACTIVATE_RULE의 event_group 버전(주의)
Cmd_CODE_EH_INACTIVATE_RULE_BY_EVENT_GROUP = 0x0069, //!< EH_INACTIVATE_RULE의 event_group 버전(주의)
Cmd_CODE_EH_ACTIVATE_RULE_BY_EVENT_GROUP_FOR_MULTI_LEVEL = 0x006A, //!< EH_ACTIVATE_RULE_FOR_MULTI_LEVEL event_group 버전(주의)
Cmd_CODE_EH_INACTIVATE_RULE_BY_EVENT_GROUP_FOR_MULTI_LEVEL = 0x006B, //!< EH_INACTIVATE_RULE_FOR_MULTI_LEVEL event_group 버전(주의)
Cmd_CODE_EVENT_UTIL_ENABLE_EH_EXEC = 0x006C, //!< EH 실행 활성화
Cmd_CODE_EVENT_UTIL_DISABLE_EH_EXEC = 0x006D, //!< EH 실행 비활성화
Cmd_CODE_EVENT_UTIL_EXEC_EH = 0x006E, //!< EH 단발 실행
Cmd_CODE_TF_INIT = 0x006F, //!< TF 초기화
Cmd_CODE_CA_INIT = 0x0070, //!< CA 초기화
Cmd_CODE_TF_REGISTER_TLM = 0x0071, //!< 텔레메트리 등록 명령
Cmd_CODE_CA_REGISTER_CMD = 0x0072, //!< 명령 등록 명령
Cmd_CODE_TF_SET_PAGE_FOR_TLM = 0x0073, //!< 텔레메트리 정의 테이블 페이지 번호 설정
Cmd_CODE_CA_SET_PAGE_FOR_TLM = 0x0074, //!< 명령 정의 테이블 페이지 번호 설정
Cmd_CODE_TLM_MGR_INIT = 0x0075, //!< 초기화(DCU 사용. 완료까지 최대 1.5초)
Cmd_CODE_TLM_MGR_INIT_MASTER_AND_DEPLOY_BC = 0x0076, //!< master BC 초기화
Cmd_CODE_TLM_MGR_CLEAR_HK_TLM = 0x0077, //!< HK 텔레메 초기화(DCU 사용, 최대 1초)
Cmd_CODE_TLM_MGR_CLEAR_HIGH_FREQ_TLM = 0x0078, //!< HIGH_FREQ 텔레메 초기화(최대 1초)
Cmd_CODE_TLM_MGR_CLEAR_LOW_FREQ_TLM = 0x0079, //!< LOW_FREQ 텔레메 초기화(최대 1초)
Cmd_CODE_TLM_MGR_CLEAR_USER_TLM = 0x007A, //!< high_freq/low_freq 초기화(최대 1초)
Cmd_CODE_TLM_MGR_START_TLM = 0x007B, //!< TLM 송출 시작
Cmd_CODE_TLM_MGR_STOP_TLM = 0x007C, //!< TLM 송출 일시 정지(사실상 TLM 송출용 TL 초기화)
Cmd_CODE_TLM_MGR_REGISTER_GENERATE_RT_TLM = 0x007D, //!< TG_GENERATE_RT_TLM 등록
Cmd_CODE_TLM_MGR_REGISTER_GENERATE_ST_TLM = 0x007E, //!< TG_GENERATE_ST_TLM 등록
Cmd_CODE_TLM_MGR_REGISTER_FORWARD_AS_RT_TLM = 0x007F, //!< TG_GENERATE_RT_TLM 등록
Cmd_CODE_TLM_MGR_REGISTER_FORWARD_AS_ST_TLM = 0x0080, //!< TG_GENERATE_ST_TLM 등록
Cmd_CODE_TLM_MGR_REGISTER_REPLAY_TLM = 0x0081, //!< DR_REPLAY_TLM 등록
Cmd_CODE_TLM_MGR_DELETE_GENERATE_RT_TLM = 0x0082, //!< TG_GENERATE_RT_TLM 삭제
Cmd_CODE_TLM_MGR_DELETE_GENERATE_ST_TLM = 0x0083, //!< TG_GENERATE_ST_TLM 삭제
Cmd_CODE_TLM_MGR_DELETE_FORWARD_AS_RT_TLM = 0x0084, //!< TG_GENERATE_RT_TLM 삭제
Cmd_CODE_TLM_MGR_DELETE_FORWARD_AS_ST_TLM = 0x0085, //!< TG_GENERATE_ST_TLM 삭제
Cmd_CODE_TLM_MGR_DELETE_REPLAY_TLM = 0x0086, //!< DR_REPLAY_TLM 삭제
Cmd_CODE_DCU_ABORT_CMD = 0x0087, //!< 실행 중인 분할 명령 중단
Cmd_CODE_DCU_DOWN_ABORT_FLAG = 0x0088, //!< 오류 또는 명령으로 인해 중단 상태가 된 명령을 실행 가능 상태로 복귀
Cmd_CODE_DCU_CLEAR_LOG = 0x0089, //!< 로그 클리어
Cmd_CODE_CCP_DUMP_CDIS = 0x008A, //!< 지정한 CDIS의 Cmd 큐 CCP 덤프
Cmd_CODE_CCP_DUMP_BCT = 0x008B, //!< 지정한 BCT의 CCP 덤프
Cmd_CODE_TL_BCT_DIGEST_TL = 0x008C, //!< 지정 TLCD ID & page no의 TL digest 계산
Cmd_CODE_TL_BCT_DIGEST_BCT = 0x008D, //!< 지정 block의 BCT digest 계산
Cmd_CODE_CDRV_UTIL_CDSC_ENABLE_MONITOR_FOR_RX_DISRUPTION = 0x008E, //!< CDS 수신 단절 감지를 활성화
Cmd_CODE_CDRV_UTIL_CDSC_DISABLE_MONITOR_FOR_RX_DISRUPTION = 0x008F, //!< CDS 수신 단절 감지를 비활성화
Cmd_CODE_CDRV_UTIL_CDSC_SET_TIME_THRESHOLD_FOR_RX_DISRUPTION = 0x0090, //!< CDS 수신 단절 감지 시간 임계값 설정
Cmd_CODE_CDRV_UTIL_CDSSC_ENABLE = 0x0091, //!< CDS stream 활성화
Cmd_CODE_CDRV_UTIL_CDSSC_DISABLE = 0x0092, //!< CDS stream 비활성화
Cmd_CODE_CDRV_UTIL_CDSSC_ENABLE_MONITOR_FOR_TLM_DISRUPTION = 0x0093, //!< CDS 텔레메 단절 감지 활성화
Cmd_CODE_CDRV_UTIL_CDSSC_DISABLE_MONITOR_FOR_TLM_DISRUPTION = 0x0094, //!< CDS 텔레메 단절 감지 비활성화
Cmd_CODE_CDRV_UTIL_CDSSC_SET_TIME_THRESHOLD_FOR_TLM_DISRUPTION = 0x0095, //!< CDS 텔레메 단절 감지 시간 임계값 설정
Cmd_CODE_CDRV_UTIL_HAL_INIT = 0x0096, //!< CDS HAL 초기화
Cmd_CODE_CDRV_UTIL_HAL_RX = 0x0097, //!< CDS HAL에서 임의 데이터 수신
Cmd_CODE_CDRV_UTIL_HAL_TX = 0x0098, //!< CDS HAL에서 임의 데이터 송신
Cmd_CODE_CDRV_UTIL_HAL_REOPEN = 0x0099, //!< CDS HAL reopen
Cmd_CODE_CDRV_UTIL_HAL_RX_TO_RAM = 0x009A, //!< CDS HAL에서 임의 데이터 수신(RAM)
Cmd_CODE_CDRV_UTIL_HAL_TX_FROM_RAM = 0x009B, //!< CDS HAL에서 임의 데이터 송신(RAM)
Cmd_CODE_CDRV_UTIL_HAL_CLEAR_RX_BUFFER = 0x009C, //!< CDS HAL 임의 데이터 수신 버퍼 클리어
Cmd_CODE_CDRV_UTIL_SET_TLM = 0x009D, //!< 각 Component Driver의 CDS 멤버를 텔레메로 다운링크하도록 설정
Cmd_CODE_TEST_CCP_REGISTER_TLC_ASAP = 0x009E, //!< CCP_register_tlc_asap 테스트용 명령
Cmd_CODE_TEST_CCP_GET_RAW_PARAM_INFO = 0x009F, //!< CCP UTIL ParamGenerator 테스트
Cmd_CODE_CSRV_GS_DRIVER_RESET = 0x0100, //!< GS 드라이버 초기화
Cmd_CODE_CSRV_GS_SET_RT_FLUSH_INTERVAL = 0x0101, //!< RT AOSTF 배출 간격 설정
Cmd_CODE_CSRV_GS_SET_RP_FLUSH_INTERVAL = 0x0102, //!< RP AOSTF 배출 간격 설정
Cmd_CODE_CSRV_GS_SET_FARM_PW = 0x0103, //!< FARM-1 Positive Window Width 설정
Cmd_CODE_CSRV_GS_SET_INFO = 0x0104, //!< GS 송신 TLM이 0이면 CCSDS@@ 1이면 UART 정보 출력
Cmd_CODE_CSRV_GS_CCSDS_GET_BUFFER = 0x0105,
Cmd_CODE_CSRV_GS_CCSDS_SET_RATE = 0x0106, //!< 40M/파라미터 = bps. 초기값 0xAD = 230.4 kbps (미세하게 정확히 대응 X)
Cmd_CODE_CSRV_GS_UART_TLM_ON = 0x0107, //!< TLM UART 송출 on
Cmd_CODE_CSRV_GS_UART_TLM_OFF = 0x0108, //!< TLM UART 송출 off
Cmd_CODE_WDT_INIT = 0x0109, //!< WDT 초기화 (WDT가 앱 이니셜라이저를 가지지 않게 되어 추가)
Cmd_CODE_WDT_ENABLE = 0x010A, //!< WDT 활성화
Cmd_CODE_WDT_DISABLE = 0x010B, //!< WDT 비활성화
Cmd_CODE_WDT_STOP_CLEAR = 0x010C, //!< WDT 카운터 클리어 중지 = 리셋 실행
Cmd_CODE_WDT_START_CLEAR = 0x010D, //!< WDT 카운터 클리어 시작
Cmd_CODE_WDT_SET_TIMER = 0x010E, //!< WDT 감시 주기 변경 (감시 주기 [ms])
Cmd_CODE_UART_TEST_INIT_CSRV = 0x010F, //!< CSRV 초기화
Cmd_CODE_UART_TEST_UPDATE = 0x0110, //!< Driver update
Cmd_CODE_UART_TEST_SEND_TEST = 0x0111, //!< Driver send test
Cmd_CODE_UTIL_CMD_ADD = 0x03E0, //!< 범용 명령 버퍼에 지정 크기의 데이터를 넣음
Cmd_CODE_UTIL_CMD_SEND = 0x03E1, //!< 인자로 전달된 CH로 범용 명령 버퍼의 데이터를 전송
Cmd_CODE_UTIL_CMD_RESET = 0x03E2, //!< 범용 명령 버퍼 클리어
Cmd_CODE_MAX
} CMD_CODE;
#endif