카테고리 없음

C2A 빌드법

JUNFUTURE 2025. 11. 15. 23:29

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