diff --git a/data/sample/initialize_files/components/wings_command_sender_to_c2a/SAMPLE_MOBC_CMD_DB_CMD_DB.csv b/data/sample/initialize_files/components/wings_command_sender_to_c2a/SAMPLE_MOBC_CMD_DB_CMD_DB.csv new file mode 100644 index 000000000..ab30be976 --- /dev/null +++ b/data/sample/initialize_files/components/wings_command_sender_to_c2a/SAMPLE_MOBC_CMD_DB_CMD_DB.csv @@ -0,0 +1,1000 @@ +Component,Name,Target,Code,Params,,,,,,,,,,,,,Danger Flag,Is Restricted,Description,Note +MOBC,,,,Num Params,Param1,,Param2,,Param3,,Param4,,Param5,,Param6,,,,, +Comment,,,,,Type,Description,Type,Description,Type,Description,Type,Description,Type,Description,Type,Description,,,, +*,EXAMPLE,OBC,,2,uint32_t,address,int32_t,time [ms],,,,,,,,,,,例,引数の説明と単位を書くこと!(例:time [ms]) +* C2A_CORE,基幹機能コマンド,,,,,,,,,,,,,,,,,,, +,NOP,OBC,0x0000,0,,,,,,,,,,,,,,,ダミーコマンド, +,TMGR_SET_TIME,OBC,0x0001,1,uint32_t,TI,,,,,,,,,,,,,MOBC時刻設定コマンド, +,TMGR_UPDATE_UNIXTIME,OBC,0x0002,3,double,unixtime,uint32_t,total_cycle,uint32_t,step,,,,,,,,,MOBC UNIXTIME修正コマンド, +,TMGR_SET_UTL_UNIXTIME_EPOCH,OBC,0x0003,1,double,ult_unixtime_epoch,,,,,,,,,,,,,UTL_cmdで用いるunixtimeの紀元を変更する,utl_unixtime_epoch [s] +,TMGR_SET_CYCLE_CORRECTION,OBC,0x0004,1,double,cycle_correction,,,,,,,,,,,,,CYCLES_PER_SECの補正倍率を変更する@@ 初期値は1.0, +,TMGR_RESET_CYCLE_CORRECTION,OBC,0x0005,0,,,,,,,,,,,,,,,CYCLES_PER_SECの補正倍率を1.0に初期化する, +,TMGR_CLEAR_UNIXTIME_INFO,OBC,0x0006,0,,,,,,,,,,,,,,,unixtime_info_ を初期化する, +,AM_REGISTER_APP,OBC,0x0007,3,uint32_t,app_id,uint32_t,init_ptr,uint32_t,entry_ptr,,,,,,,,,アプリ登録コマンド, +,AM_INITIALIZE_APP,OBC,0x0008,1,uint32_t,app_id,,,,,,,,,,,,,アプリ初期化コマンド, +,AM_EXECUTE_APP,OBC,0x0009,1,uint32_t,app_id,,,,,,,,,,,,,アプリ実行コマンド, +,AM_SET_PAGE_FOR_TLM,OBC,0x000A,1,uint8_t,,,,,,,,,,,,,,テレメトリ生成用ページ番号設定, +,AM_CLEAR_APP_INFO,OBC,0x000B,0,,,,,,,,,,,,,danger,,アプリ実行時間計測の初期化, +,MM_SET_MODE_LIST,OBC,0x000C,2,uint8_t,mode,uint16_t,bc_index,,,,,,,,,,,モード定義リスト設定コマンド, +,MM_SET_TRANSITION_TABLE,OBC,0x000D,3,uint8_t,from_mode,uint8_t,to_mode,uint16_t,bc_index,,,,,,,,,モード遷移定義テーブル書き換えコマンド, +,MM_START_TRANSITION,OBC,0x000E,1,uint8_t,to_mode,,,,,,,,,,,,,モード遷移開始コマンド, +,MM_FINISH_TRANSITION,OBC,0x000F,0,,,,,,,,,,,,,,,モード遷移終了通知コマンド, +,MM_UPDATE_TRANSITION_TABLE_FOR_TLM,OBC,0x0010,0,,,,,,,,,,,,,,,モードのTLMテーブル情報更新, +,TDSP_SET_TASK_LIST,OBC,0x0011,1,uint8_t,bc_index,,,,,,,,,,,,,タスクリスト設定コマンド, +,TLCD_CLEAR_ALL_TIMELINE,OBC,0x0012,1,uint8_t,TLCD_ID,,,,,,,,,,,danger,,全TLC登録解除, +,TLCD_CLEAR_TIMELINE_AT,OBC,0x0013,2,uint8_t,TLCD_ID,uint32_t,TI,,,,,,,,,,,TI指定TLC登録解除, +,TLCD_DEPLOY_BLOCK,OBC,0x0014,2,uint8_t,TLCD_ID,uint16_t,bc_index,,,,,,,,,,,BLC展開 , +,TLCD_CLEAR_ERR_LOG,OBC,0x0015,1,uint8_t,,,,,,,,,,,,,,最新のコマンド実行異常記録をクリア, +,TLCD_SET_SOE_FLAG,OBC,0x0016,2,uint8_t,TLCD_ID,uint8_t,,,,,,,,,,,,異常時実行停止機能設定(ライン番号@@ フラグ), +,TLCD_SET_LOUT_FLAG,OBC,0x0017,2,uint8_t,TLCD_ID,uint8_t,,,,,,,,,,,,実行停止機能設定(ライン番号@@ フラグ), +,TLCD_SET_ID_FOR_TLM,OBC,0x0018,1,uint8_t,TLCD_ID,,,,,,,,,,,,,テレメで降ろすTL_IDの設定とTLテレメの更新, +,TLCD_SET_PAGE_FOR_TLM,OBC,0x0019,1,uint8_t,page_no,,,,,,,,,,,,,テレメトリ生成用ページ番号設定, +**,Telemetry Generator,,,,,,,,,,,,,,,,,,, +,GENERATE_TLM,OBC,0x001A,3,uint8_t,category,uint8_t,TLM_ID,uint8_t,送出回数,,,,,,,,,TLMパケット生成 (deprecated), +,TG_GENERATE_TLM,OBC,0x001B,4,uint8_t,tlm id,uint8_t,dest flags,uint8_t,dest info,uint8_t,送出回数,,,,,,,自身の OBC のテレメを生成, +,TG_GENERATE_HP_TLM,OBC,0x001C,1,uint8_t,tlm id,,,,,,,,,,,,,HP テレメを生成 (事実上,現在使われていない), +,TG_GENERATE_RT_TLM,OBC,0x001D,1,uint8_t,tlm id,,,,,,,,,,,,,RT テレメを生成, +,TG_GENERATE_ST_TLM,OBC,0x001E,2,uint8_t,tlm id,uint8_t,dr partition (dest info),,,,,,,,,,,ST テレメを生成, +,TG_FORWARD_TLM,OBC,0x001F,5,uint16_t,apid,uint8_t,tlm id,uint8_t,dest flags,uint8_t,dest info,uint8_t,送出回数,,,,,2nd OBC のテレメを転送, +,TG_FORWARD_AS_HP_TLM,OBC,0x0020,2,uint16_t,apid,uint8_t,tlm id,,,,,,,,,,,HP テレメとして 2nd OBC のテレメを転送 (事実上,現在使われていない), +,TG_FORWARD_AS_RT_TLM,OBC,0x0021,2,uint16_t,apid,uint8_t,tlm id,,,,,,,,,,,RT テレメとして 2nd OBC のテレメを転送, +,TG_FORWARD_AS_ST_TLM,OBC,0x0022,3,uint16_t,apid,uint8_t,tlm id,uint8_t,dr partition (dest info),,,,,,,,,ST テレメとして 2nd OBC のテレメを転送, +**,BCTコマンド,,,,,,,,,,,,,,,,,,, +,BCT_CLEAR_BLOCK,OBC,0x0023,1,uint16_t,bc_index,,,,,,,,,,,,,BLC登録解除コマンド, +,BCT_SET_BLOCK_POSITION,OBC,0x0024,2,uint16_t,bc_index,uint8_t,cmd_index,,,,,,,,,,,BLC操作ポインタ設定コマンド, +,BCT_COPY_BCT,OBC,0x0025,2,uint16_t,dst_bc_index,uint16_t,src_bc_index,,,,,,,,,,,BCT の内容を別の場所にコピー, +,BCT_OVERWRITE_CMD,OBC,0x0026,5,uint16_t,CMD_CODE,uint32_t,TI,uint16_t,pos.block,uint8_t,pos.cmd,raw,cmd_param (big endian),,,danger,,BCTの内容を上書き, +,BCT_FILL_NOP,OBC,0x0027,1,uint8_t,,,,,,,,,,,,,,テレメ運用時の10個BCをNOP埋めする.(NOP個数), +**,BCEコマンド,,,,,,,,,,,,,,,,,,, +,BCE_ACTIVATE_BLOCK,OBC,0x0028,0,,,,,,,,,,,,,,,BLC有効化コマンド, +,BCE_ACTIVATE_BLOCK_BY_ID,OBC,0x0029,1,uint16_t,bc_index,,,,,,,,,,,,,BCを(無条件に)有効化, +,BCE_INACTIVATE_BLOCK_BY_ID,OBC,0x002A,1,uint16_t,bc_index,,,,,,,,,,,,,BCを(無条件に)無効化, +,BCE_ROTATE_BLOCK,OBC,0x002B,1,uint16_t,bc_index,,,,,,,,,,,,,BLC回転コマンド, +,BCE_COMBINE_BLOCK,OBC,0x002C,1,uint16_t,bc_index,,,,,,,,,,,,,BLC融合コマンド, +,BCE_TIMELIMIT_COMBINE_BLOCK,OBC,0x002D,2,uint16_t,bc_index,uint8_t,limit_step,,,,,,,,,,,時間制限付きBLC融合コマンド, +,BCE_RESET_ROTATOR_INFO,OBC,0x002E,0,,,,,,,,,,,,,danger,,カウンタ類リセット, +,BCE_RESET_COMBINER_INFO,OBC,0x002F,0,,,,,,,,,,,,,danger,,カウンタ類リセット, +,BCE_SET_ROTATE_INTERVAL,OBC,0x0030,2,uint16_t,,uint16_t,,,,,,,,,,,,BC回転時の回転間隔周期を設定する, +**,GSCDコマンド,,,,,,,,,,,,,,,,,,, +,GSCD_CLEAR_ERR_LOG,OBC,0x0031,0,,,,,,,,,,,,,,,最新のコマンド実行異常記録をクリア, +**,RTCDコマンド,,,,,,,,,,,,,,,,,,, +,RTCD_CLEAR_ALL_REALTIME,OBC,0x0032,0,,,,,,,,,,,,,danger,,全RTC登録解除, +,RTCD_CLEAR_ERR_LOG,OBC,0x0033,0,,,,,,,,,,,,,,,最新のコマンド実行異常記録をクリア, +**,メモリ操作コマンド,,,,,,,,,,,,,,,,,,, +,MEM_SET_REGION,OBC,0x0034,2,uint32_t,始点アドレス,uint32_t,終点アドレス,,,,,,,,,,,始点アドレスと終点アドレスを指定する, +*,MEM_DUMP_REGION_SEQ,OBC,,2,uint8_t,category,uint8_t,送出回数,,,,,,,,,,,カテゴリと送信回数を指定する, +*,MEM_DUMP_REGION_RND,OBC,,3,uint8_t,category,uint8_t,送出回数,uint16_t,ダンプ位置,,,,,,,,,カテゴリと送信回数@@ダンプ位置を指定する, +*,MEM_DUMP_SINGLE,OBC,,3,uint8_t,category,uint8_t,送出回数,uint32_t,ダンプ位置,,,,,,,,,カテゴリと送信回数@@ダンプ位置を指定する, +,MEM_LOAD,OBC,0x0035,2,uint32_t,開始アドレス,raw,HEXBINARY,,,,,,,,,,,開始アドレス、データを指定,第2パラメータの指定は仮設定 +,MEM_SET_DESTINATION,OBC,0x0036,1,uint32_t,コピー先アドレス,,,,,,,,,,,,,コピー先設定, +,MEM_COPY_REGION_SEQ,OBC,0x0037,1,uint32_t,コピー幅,,,,,,,,,,,,,領域コピー, +**,EventLogger,,,,,,,,,,,,,,,,,,, +,EL_INIT,OBC,0x0038,0,,,,,,,,,,,,,,,EL初期化, +,EL_CLEAR_LOG_ALL,OBC,0x0039,0,,,,,,,,,,,,,,,全ログ削除, +,EL_CLEAR_LOG_BY_ERR_LEVEL,OBC,0x003A,1,uint8_t,err_level,,,,,,,,,,,,,エラーレベル指定ログ削除, +,EL_CLEAR_STATISTICS,OBC,0x003B,0,,,,,,,,,,,,,,,統計情報削除, +,EL_CLEAR_TLOG,OBC,0x003C,1,uint8_t,err_level,,,,,,,,,,,,,TLog削除, +,EL_CLEAR_CLOG,OBC,0x003D,1,uint8_t,err_level,,,,,,,,,,,,,CLog削除, +,EL_RECORD_EVENT,OBC,0x003E,4,uint32_t,group,uint32_t,local,uint8_t,err_level,uint32_t,note,,,,,,,イベント記録, +,EL_TLOG_SET_PAGE_FOR_TLM,OBC,0x003F,2,uint8_t,page_no,uint8_t,err_level,,,,,,,,,,,TLogのダウンリンクテレメ設定, +,EL_CLOG_SET_PAGE_FOR_TLM,OBC,0x0040,2,uint8_t,page_no,uint8_t,err_level,,,,,,,,,,,CLogのダウンリンクテレメ設定, +,EL_INIT_LOGGING_SETTINGS,OBC,0x0041,0,,,,,,,,,,,,,,,ログ設定を初期化, +,EL_ENABLE_LOGGING,OBC,0x0042,1,uint32_t,group,,,,,,,,,,,,,ロギングを有効化, +,EL_DISABLE_LOGGING,OBC,0x0043,1,uint32_t,group,,,,,,,,,,,,,ロギングを無効化, +,EL_ENABLE_LOGGING_ALL,OBC,0x0044,0,,,,,,,,,,,,,,,すべてのロギングを有効化, +,EL_DISABLE_LOGGING_ALL,OBC,0x0045,0,,,,,,,,,,,,,,,すべてのロギングを無効化, +,EL_ENABLE_TLOG_OVERWRITE,OBC,0x0046,1,uint8_t,err_level,,,,,,,,,,,,,TLogのログ上書きを有効化, +,EL_DISABLE_TLOG_OVERWRITE,OBC,0x0047,1,uint8_t,err_level,,,,,,,,,,,,,TLogのログ上書きを無効化, +,EL_ENABLE_TLOG_OVERWRITE_ALL,OBC,0x0048,0,,,,,,,,,,,,,,,すべてのTLogのログ上書きを有効化, +,EL_DISABLE_TLOG_OVERWRITE_ALL,OBC,0x0049,0,,,,,,,,,,,,,,,すべてのTLogのログ上書きを無効化, +**,EventHandler,,,,,,,,,,,,,,,,,,, +,EH_INIT,OBC,0x004A,0,,,,,,,,,,,,,,,EHの初期化, +,EH_CLEAR_ALL_RULE,OBC,0x004B,0,,,,,,,,,,,,,,,EHのすべてのルールをクリア, +,EH_LOAD_DEFAULT_RULE,OBC,0x004C,0,,,,,,,,,,,,,,,EHのデフォルトルールを読み込み, +,EH_SET_REGISTER_RULE_EVENT_PARAM,OBC,0x004D,6,uint16_t,rule id,uint32_t,event group,uint32_t,event local,uint8_t,event err level,uint8_t,should_match_err_level,uint16_t,deploy bc index,,,登録するEHルールのイベントパラメータを設定, +,EH_SET_REGISTER_RULE_CONDITION_PARAM,OBC,0x004E,4,uint8_t,condition type,uint16_t,count_threshold,uint32_t,time_threshold [ms],uint8_t,is_active,,,,,,,登録するEHルールの対応条件パラメタを設定, +,EH_REGISTER_RULE,OBC,0x004F,0,,,,,,,,,,,,,,,設定したパラメタでEHルールを登録, +,EH_DELETE_RULE,OBC,0x0050,1,uint16_t,rule id,,,,,,,,,,,,,指定したルールを削除, +,EH_INIT_RULE,OBC,0x0051,1,uint16_t,rule id,,,,,,,,,,,,,指定したルールを初期化(ルールを有効化し,ルールカウンタも初期化), +,EH_INIT_RULE_FOR_MULTI_LEVEL,OBC,0x0052,1,uint16_t,rule id,,,,,,,,,,,,,指定したルールを初期化(ルールを有効化し,ルールカウンタも初期化)(多段EH対応用), +,EH_ACTIVATE_RULE,OBC,0x0053,1,uint16_t,rule id,,,,,,,,,,,,,指定したルールを有効化, +,EH_INACTIVATE_RULE,OBC,0x0054,1,uint16_t,rule id,,,,,,,,,,,,,指定したルールを無効化, +,EH_ACTIVATE_RULE_FOR_MULTI_LEVEL,OBC,0x0055,1,uint16_t,rule id,,,,,,,,,,,,,指定したルールを有効化(多段EH対応用), +,EH_INACTIVATE_RULE_FOR_MULTI_LEVEL,OBC,0x0056,1,uint16_t,rule id,,,,,,,,,,,,,指定したルールを無効化(多段EH対応用), +,EH_SET_RULE_COUNTER,OBC,0x0057,2,uint16_t,rule id,uint16_t,counter,,,,,,,,,,,EH_Rule の counter をセット, +,EH_CLEAR_RULE_COUNTER,OBC,0x0058,1,uint16_t,rule id,,,,,,,,,,,,,EH_Rule の counter を0 クリア, +,EH_CLEAR_RULE_COUNTER_BY_EVENT,OBC,0x0059,3,uint32_t,group,uint32_t,local,uint8_t,err_level,,,,,,,,,EH_Rule の counter を EL_Event 指定で 0 クリア, +,EH_CLEAR_LOG,OBC,0x005A,0,,,,,,,,,,,,,,,EHの対応ログをクリア, +,EH_SET_MAX_RESPONSE_NUM,OBC,0x005B,1,uint8_t,max_response_num,,,,,,,,,,,,,一度のEH実行で対応するイベントの最大数を設定, +,EH_SET_MAX_CHECK_EVENT_NUM,OBC,0x005C,1,uint16_t,max_check_event_num,,,,,,,,,,,,,一度のEH実行でチェックするイベントの最大数を設定, +,EH_SET_MAX_MULTI_LEVEL_NUM,OBC,0x005D,1,uint8_t,max_multi_level_num,,,,,,,,,,,,,設定可能な最大段数を設定, +,EH_SET_PAGE_OF_RULE_TABLE_FOR_TLM,OBC,0x005E,1,uint8_t,page_no,,,,,,,,,,,,,EHルールテーブルのテレメページの設定, +,EH_SET_PAGE_OF_RULE_SORTED_IDX_FOR_TLM,OBC,0x005F,1,uint8_t,page_no,,,,,,,,,,,,,EHルールのソート済みテーブルのテレメページの設定, +,EH_SET_PAGE_OF_LOG_TABLE_FOR_TLM,OBC,0x0060,1,uint8_t,page_no,,,,,,,,,,,,,EHログテーブルのテレメページの設定, +,EH_SET_TARGET_ID_OF_RULE_TABLE_FOR_TLM,OBC,0x0061,1,uint16_t,rule id,,,,,,,,,,,,,EHテレメに表示するルールのID設定, +,EH_MATCH_EVENT_COUNTER_TO_EL,OBC,0x0062,0,,,,,,,,,,,,,,,イベント発生を検知するためのEHカウンタをELカウンタに強制定期に合わせる, +,EH_INIT_RULE_BY_EVENT_GROUP,OBC,0x0063,1,uint32_t,group,,,,,,,,,,,,,Cmd_EH_INIT_RULE の by_event_group コマンド.想定外のものまで操作されないか注意すること, +,EH_INIT_RULE_BY_EVENT_GROUP_FOR_MULTI_LEVEL,OBC,0x0064,1,uint32_t,group,,,,,,,,,,,,,Cmd_EH_INIT_RULE_FOR_MULTI_LEVEL の by_event_group コマンド.想定外のものまで操作されないか注意すること, +,EH_ACTIVATE_RULE_BY_EVENT_GROUP,OBC,0x0065,1,uint32_t,group,,,,,,,,,,,,,Cmd_EH_ACTIVATE_RULE の by_event_group コマンド.想定外のものまで操作されないか注意すること, +,EH_INACTIVATE_RULE_BY_EVENT_GROUP,OBC,0x0066,1,uint32_t,group,,,,,,,,,,,,,Cmd_EH_INACTIVATE_RULE の by_event_group コマンド.想定外のものまで操作されないか注意すること, +,EH_ACTIVATE_RULE_BY_EVENT_GROUP_FOR_MULTI_LEVEL,OBC,0x0067,1,uint32_t,group,,,,,,,,,,,,,Cmd_EH_ACTIVATE_RULE_FOR_MULTI_LEVEL の by_event_group コマンド.想定外のものまで操作されないか注意すること, +,EH_INACTIVATE_RULE_BY_EVENT_GROUP_FOR_MULTI_LEVEL,OBC,0x0068,1,uint32_t,group,,,,,,,,,,,,,Cmd_EH_INACTIVATE_RULE_FOR_MULTI_LEVEL の by_event_group コマンド.想定外のものまで操作されないか注意すること, +**,EventUtility,,,,,,,,,,,,,,,,,,, +,EVENT_UTIL_ENABLE_EH_EXEC,OBC,0x0069,0,,,,,,,,,,,,,,,EHの実行を有効に, +,EVENT_UTIL_DISABLE_EH_EXEC,OBC,0x006A,0,,,,,,,,,,,,,,,EHの実行を無効に, +,EVENT_UTIL_EXEC_EH,OBC,0x006B,0,,,,,,,,,,,,,,,EHを単発で実行, +**,Telemetry Frame@@ Command Analyze,,,,,,,,,,,,,,,,,,, +,TF_INIT,OBC,0x006C,0,,,,,,,,,,,,,,,TFの初期化, +,CA_INIT,OBC,0x006D,0,,,,,,,,,,,,,,,CAの初期化, +,TF_REGISTER_TLM,OBC,0x006E,2,uint8_t,index,uint32_t,tlm_func,,,,,,,,,,,テレメトリ登録コマンド, +,CA_REGISTER_CMD,OBC,0x006F,3,uint16_t,index,uint32_t,cmd_func,raw,param_info,,,,,,,,,コマンド登録コマンド, +,TF_SET_PAGE_FOR_TLM,OBC,0x0070,1,uint8_t,page_no,,,,,,,,,,,,,テレメトリ定義テーブルページ番号設定, +,CA_SET_PAGE_FOR_TLM,OBC,0x0071,1,uint8_t,page_no,,,,,,,,,,,,,コマンド定義テーブルページ番号設定, +**,Tlm Manager コマンド,,,,,,,,,,,,,,,,,,, +,TLM_MGR_INIT,OBC,0x0072,0,,,,,,,,,,,,,,,初期化,DCU を使っているので,完了に最大 1.5 秒ほどかかる +,TLM_MGR_INIT_MASTER_AND_DEPLOY_BC,OBC,0x0073,0,,,,,,,,,,,,,,,master bc の初期化, +,TLM_MGR_CLEAR_HK_TLM,OBC,0x0074,0,,,,,,,,,,,,,,,HKテレメを初期化,DCU を使っているので,完了に最大 1 秒ほどかかる +,TLM_MGR_CLEAR_HIGH_FREQ_TLM,OBC,0x0075,0,,,,,,,,,,,,,,,HIGH_FREQ テレメを初期化,DCU を使っているので,完了に最大 1 秒ほどかかる +,TLM_MGR_CLEAR_LOW_FREQ_TLM,OBC,0x0076,0,,,,,,,,,,,,,,,LOW_FREQ テレメを初期化,DCU を使っているので,完了に最大 1 秒ほどかかる +,TLM_MGR_CLEAR_USER_TLM,OBC,0x0077,0,,,,,,,,,,,,,,,high_freq@@ low_freq を初期化,DCU を使っているので,完了に最大 1 秒ほどかかる +,TLM_MGR_START_TLM,OBC,0x0078,0,,,,,,,,,,,,,,,TLM送出開始, +,TLM_MGR_STOP_TLM,OBC,0x0079,0,,,,,,,,,,,,,,,TLM送出一時停止(事実上,TLM送出用TLをクリア), +,TLM_MGR_REGISTER_GENERATE_RT_TLM,OBC,0x007A,2,uint8_t,TLM_MGR_BC_ROLE,uint8_t,tlm id,,,,,,,,,,,TG_GENERATE_RT_TLM を登録, +,TLM_MGR_REGISTER_GENERATE_ST_TLM,OBC,0x007B,3,uint8_t,TLM_MGR_BC_ROLE,uint8_t,tlm id,uint8_t,dr partition (dest info),,,,,,,,,TG_GENERATE_ST_TLM を登録, +,TLM_MGR_REGISTER_FORWARD_AS_RT_TLM,OBC,0x007C,3,uint8_t,TLM_MGR_BC_ROLE,uint16_t,apid,uint8_t,tlm id,,,,,,,,,TG_GENERATE_RT_TLM を登録, +,TLM_MGR_REGISTER_FORWARD_AS_ST_TLM,OBC,0x007D,4,uint8_t,TLM_MGR_BC_ROLE,uint16_t,apid,uint8_t,tlm id,uint8_t,dr partition (dest info),,,,,,,TG_GENERATE_ST_TLM を登録, +,TLM_MGR_REGISTER_REPLAY_TLM,OBC,0x007E,2,uint8_t,TLM_MGR_BC_ROLE,uint8_t,dr partition (dest info),,,,,,,,,,,DR_REPLAY_TLM を登録, +,TLM_MGR_DELETE_GENERATE_RT_TLM,OBC,0x007F,2,uint8_t,TLM_MGR_BC_ROLE,uint8_t,tlm id,,,,,,,,,,,TG_GENERATE_RT_TLM を削除, +,TLM_MGR_DELETE_GENERATE_ST_TLM,OBC,0x0080,3,uint8_t,TLM_MGR_BC_ROLE,uint8_t,tlm id,uint8_t,dr partition (dest info),,,,,,,,,TG_GENERATE_ST_TLM を削除, +,TLM_MGR_DELETE_FORWARD_AS_RT_TLM,OBC,0x0081,3,uint8_t,TLM_MGR_BC_ROLE,uint16_t,apid,uint8_t,tlm id,,,,,,,,,TG_GENERATE_RT_TLM を削除, +,TLM_MGR_DELETE_FORWARD_AS_ST_TLM,OBC,0x0082,4,uint8_t,TLM_MGR_BC_ROLE,uint16_t,apid,uint8_t,tlm id,uint8_t,dr partition (dest info),,,,,,,TG_GENERATE_ST_TLM を削除, +,TLM_MGR_DELETE_REPLAY_TLM,OBC,0x0083,2,uint8_t,TLM_MGR_BC_ROLE,uint8_t,dr partition (dest info),,,,,,,,,,,DR_REPLAY_TLM を削除, +**,Divided Cmd Utility コマンド,,,,,,,,,,,,,,,,,,, +,DCU_ABORT_CMD,OBC,0x0084,1,uint16_t,Cmd ID,,,,,,,,,,,,,実行中の分割コマンドを停止する, +,DCU_DOWN_ABORT_FLAG,OBC,0x0085,1,uint16_t,Cmd ID,,,,,,,,,,,,,エラー,またはコマンドによって中断ステータスとなっているコマンドを,実行可能状態に戻す, +,DCU_CLEAR_LOG,OBC,0x0086,0,,,,,,,,,,,,,,,ログをクリアする, +**,Test App コマンド,,,,,,,,,,,,,,,,,,, +,TEST_CCP_REGISTER_TLC_ASAP,OBC,0x0087,1,uint32_t,ti,,,,,,,,,,,,,CCP_register_tlc_asap のテスト用コマンド, +,TEST_CCP_GET_RAW_PARAM_INFO,OBC,0x0088,3,uint16_t,raw data len,uint8_t,first data,raw,raw data,,,,,,,,,CCP UTIL の ParamGenerator のテスト, +**,,,,,,,,,,,,,,,,,,,, +* CDH,GS用,,,,,,,,,,,,,,,,,,, +,DI_GS_DRIVER_RESET,OBC,0x0100,0,,,,,,,,,,,,,,,GS ドライバの初期化, +,DI_GS_SET_RT_FLUSH_INTERVAL,OBC,0x0101,1,uint32_t,排出間隔,,,,,,,,,,,,,RT VCDUの排出間隔設定, +,DI_GS_SET_RP_FLUSH_INTERVAL,OBC,0x0102,1,uint32_t,排出間隔,,,,,,,,,,,,,RP VCDUの排出間隔設定, +,DI_GS_SET_FARM_PW,OBC,0x0103,1,uint8_t,positive_window_width,,,,,,,,,,,,,FARM-1のPositive Window Width設定, +,DI_GS_SET_INFO,OBC,0x0104,1,uint8_t,TLM選択,,,,,,,,,,,,,GS送信TLMが0ならCCSDSに@@ 1ならUARTの情報が出てくる, +,DI_GS_CCSDS_GET_BUFFER,OBC,0x0105,0,,,,,,,,,,,,,,,, +,DI_GS_CCSDS_SET_RATE,OBC,0x0106,1,uint8_t,bps セットパラメータ,,,,,,,,,,,danger,,40M/パラメータ が bps になる.初期値は 0xAD で 230.4 Kbps (微妙に対応していない), +,DI_GS_UART_TLM_ON,OBC,0x0107,0,,,,,,,,,,,,,,,TLM の UART への送出を行う, +,DI_GS_UART_TLM_OFF,OBC,0x0108,0,,,,,,,,,,,,,,,TLM の UART への送出を止める, +**,WDT用コマンド,,,,,,,,,,,,,,,,,,, +,WDT_INIT,OBC,0x0109,0,,,,,,,,,,,,,,,WDT初期化.WDTがアプリイニシャライザを持たなくなったので追加, +,WDT_ENABLE,OBC,0x010A,0,,,,,,,,,,,,,,,WDT有効化, +,WDT_DISABLE,OBC,0x010B,0,,,,,,,,,,,,,,,WDT無効化, +,WDT_STOP_CLEAR,OBC,0x010C,0,,,,,,,,,,,,,danger,,WDTのカウンタクリアを止める=リセット実行, +,WDT_START_CLEAR,OBC,0x010D,0,,,,,,,,,,,,,,,WDTのカウンタクリアを開始する, +**,UART TESTコマンド,,,,,,,,,,,,,,,,,,, +,UART_TEST_INIT_DI,OBC,0x010E,0,,,,,,,,,,,,,,,DI初期化, +,UART_TEST_UPDATE,OBC,0x010F,0,,,,,,,,,,,,,,,DI update, +,UART_TEST_SEND_TEST,OBC,0x0110,1,uint8_t,id,,,,,,,,,,,,,DI send test, +**,,,,,,,,,,,,,,,,,,,, +* POWER,,,,,,,,,,,,,,,,,,,, +**,,,,,,,,,,,,,,,,,,,, +* COM,,,,,,,,,,,,,,,,,,,, +**,,,,,,,,,,,,,,,,,,,, +* MISSION,,,,,,,,,,,,,,,,,,,, +**,,,,,,,,,,,,,,,,,,,, +**,,,,,,,,,,,,,,,,,,,, +* PROP,,,,,,,,,,,,,,,,,,,, +**,,,,,,,,,,,,,,,,,,,, +* AOCS,,,,,,,,,,,,,,,,,,,, +**,,,,,,,,,,,,,,,,,,,, +* Thermal,,,,,,,,,,,,,,,,,,,, +**,,,,,,,,,,,,,,,,,,,, +* Trajectory,,,,,,,,,,,,,,,,,,,, +**,,,,,,,,,,,,,,,,,,,, +* HILS,HILS用コマンド,,,,,,,,,,,,,,,,,,, +**,,,,,,,,,,,,,,,,,,,, +* Other,汎用コマンド用コマンド,,,,,,,,,,,,,,,,,,, +,UTIL_CMD_ADD,OBC,0x03E0,6,uint8_t,,uint32_t,,uint32_t,,uint32_t,,uint32_t,,uint32_t,,,,汎用コマンドのバッファに指定サイズのデータを入れる, +,UTIL_CMD_SEND,OBC,0x03E1,1,uint8_t,,,,,,,,,,,,,,引数のCHに汎用コマンドのバッファにあるデータを送信する, +,UTIL_CMD_RESET,OBC,0x03E2,0,,,,,,,,,,,,,,,汎用コマンドのバッファをクリアする, +**,汎用カウンタ用コマンド,,,,,,,,,,,,,,,,,,, +*,UTIL_COUNTER_INCREMENT,OBC,,1,uint8_t,,,,,,,,,,,,,,引数の汎用カウンタをインクリメントする, +*,UTIL_COUNTER_RESET,OBC,,1,uint8_t,,,,,,,,,,,,,,引数の汎用カウンタをリセットする.0xffでALL_CLR, +*,UTIL_COUNTER_SET_PARAM,OBC,,3,uint8_t,,uint32_t,,uint8_t,,,,,,,,,,引数の汎用カウンタの閾値・アノマリ発行有無を設定する, +**,,,,,,,,,,,,,,,,,,,, +* NonOrder,これ以下はコマンドIDが自動で割り振られない!,,,,,,,,,,,,,,,,,,, +**,CmdCodeSibGeneratorによって,RTのみ生成,,,,,,,,,,,,,,,,,,, +**,CDH特殊コマンド,,,,,,,,,,,,,,,,,,, +*,OBC_CHECK_SIB_VERSION,OBC,0x05ff,0,,,,,,,,,,,,,,,SIBとC2Aのバージョン整合性確認, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, diff --git a/data/sample/initialize_files/components/wings_command_sender_to_c2a/example.ops b/data/sample/initialize_files/components/wings_command_sender_to_c2a/example.ops new file mode 100644 index 000000000..16226c302 --- /dev/null +++ b/data/sample/initialize_files/components/wings_command_sender_to_c2a/example.ops @@ -0,0 +1,12 @@ +.# ===== Example ===== +.# +.# コメントは読み飛ばされる +.# +.MOBC_RT.Cmd_NOP + wait_sec 5 + MOBC_RT.Cmd_MM_START_TRANSITION 2 + wait_sec 3 + check_value # check_valueは今は使えず読み飛ばされる + let mode_id = 2 # letはいまはつかえない + AOBC_RT.Cmd_MM_START_TRANSITION {mode_id} # letを前提とした{}付きの引数があるとコマンドは送信されない +.# diff --git a/data/sample/initialize_files/components/wings_command_sender_to_c2a/wings_command_sender_to_c2a.ini b/data/sample/initialize_files/components/wings_command_sender_to_c2a/wings_command_sender_to_c2a.ini new file mode 100644 index 000000000..0d8a2811e --- /dev/null +++ b/data/sample/initialize_files/components/wings_command_sender_to_c2a/wings_command_sender_to_c2a.ini @@ -0,0 +1,5 @@ +[WINGS_COMMAND_SENDER_TO_C2A] +command_send_enable = ENABLE +prescaler = 1 +c2a_command_database_file = ../../data/initialize_files/components/wings_command_sender_to_c2a/SAMPLE_MOBC_CMD_DB_CMD_DB.csv +wings_operation_file = ../../data/initialize_files/components/wings_command_sender_to_c2a/example.ops diff --git a/src/components/CMakeLists.txt b/src/components/CMakeLists.txt index becc7c7c6..62d08cd43 100644 --- a/src/components/CMakeLists.txt +++ b/src/components/CMakeLists.txt @@ -25,6 +25,7 @@ real/cdh/on_board_computer_with_c2a.cpp real/communication/antenna.cpp real/communication/antenna_radiation_pattern.cpp real/communication/ground_station_calculator.cpp +real/communication/wings_command_sender_to_c2a.cpp examples/example_change_structure.cpp examples/example_serial_communication_with_obc.cpp diff --git a/src/components/real/cdh/on_board_computer_with_c2a.cpp b/src/components/real/cdh/on_board_computer_with_c2a.cpp index 4085f290e..fc577cd9a 100644 --- a/src/components/real/cdh/on_board_computer_with_c2a.cpp +++ b/src/components/real/cdh/on_board_computer_with_c2a.cpp @@ -1,6 +1,7 @@ /* * @file on_board_computer_with_c2a.cpp * @brief Class to emulate on board computer with C2A flight software + * @note Used C2A functions: TMGR_init, C2A_core_init, WDT_init, TMGR_clear, TMGR_count_up_master_clock, TDSP_execute_pl_as_task_list */ #include "on_board_computer_with_c2a.hpp" diff --git a/src/components/real/communication/wings_command_sender_to_c2a.cpp b/src/components/real/communication/wings_command_sender_to_c2a.cpp new file mode 100644 index 000000000..b77f72fc3 --- /dev/null +++ b/src/components/real/communication/wings_command_sender_to_c2a.cpp @@ -0,0 +1,147 @@ +/* + * @file wings_command_sender_to_c2a.cpp + * @brief A component to send C2A command using WINGS operation file + * @note Used C2A functions: CCP_register_rtc, CCP_register_tlc + * Used C2A structures: CMD_CODE + */ + +#include "wings_command_sender_to_c2a.hpp" + +#include +#include +#include + +#ifdef USE_C2A +#if C2A_CORE_VER_MAJOR == 4 +// c2a-core v4 +#include "src_core/tlm_cmd/common_cmd_packet_util.h" +#elif C2A_CORE_VER_MAJOR <= 3 +// c2a-core <= v3 +#include "src_core/TlmCmd/common_cmd_packet_util.h" +#else +#error "c2a-core version is not supported" +#endif // c2a-core version header +#endif // USE_C2A + +void WingsCommandSenderToC2a::MainRoutine(const int time_count) { + UNUSED(time_count); + if (is_enabled_ == false) return; + if (is_end_of_line_ == true) return; + if (wait_s_ <= 0.0) { + std::string line = wings_operation_file_.GetLatestLine(); + if (line == "EOL") { + is_end_of_line_ = true; + } else { + ExecuteCommandLine(line); + } + } else { + wait_s_ -= step_width_s_; + } +} + +void WingsCommandSenderToC2a::ExecuteCommandLine(const std::string line) { + // Separate with space + std::istringstream token_stream(line); + std::string token; + std::vector tokens; + while (token_stream >> token) { + tokens.push_back(token); + } + + // Handle WINGS commands + if (tokens[0].find("wait_sec") == 0) { + // wait process + wait_s_ = std::stod(tokens[1]); + } else if (tokens[0].find("check_value") == 0) { + // TODO: Support check_value + wait_s_ = 0; + } else if (tokens[0].find("let") == 0) { + // TODO: Support let command + wait_s_ = 0; + } else { + wait_s_ = 0; + AnalyzeC2aCommand(tokens); + } + + return; +} + +void WingsCommandSenderToC2a::AnalyzeC2aCommand(const std::vector tokens) { +#ifdef USE_C2A + // Recognize command + size_t first_underscore_position = tokens[0].find('_'); + if (first_underscore_position == std::string::npos) return; + size_t first_dot_position = tokens[0].find('.'); + if (first_underscore_position == std::string::npos) return; + + std::string target_name = tokens[0].substr(0, first_underscore_position); + // TODO check target? + std::string command_type = tokens[0].substr(first_underscore_position + 1, first_dot_position - (first_underscore_position + 1)); + std::string command_name = tokens[0].substr(first_dot_position + 1); + + // Get command code + C2aCommandInformation cmd_info = c2a_command_database_.GetCommandInformation(command_name); + if (cmd_info.GetCommandName() == "Error") { + // TODO: error handling + } + CMD_CODE cmd_id = (CMD_CODE)cmd_info.GetCommandId(); + + // Get arguments + std::vector arguments; + for (size_t i = 1; i < tokens.size(); i++) { + if (tokens[i].find("{") == 0) return; // let command is not supported now TODO: support let command + arguments.push_back(tokens[i]); + } + // Check number of arguments + if (arguments.size() != cmd_info.GetNumberOfArgument()) { + // TODO: error handling + } + + // Decode arguments + // Read TI + uint32_t ti = 0; + if (command_type == "TL" || command_type == "BL") { + ti = (uint32_t)std::stoi(arguments[0]); + arguments.erase(arguments.begin()); + } + // Read arguments + uint8_t param[CSP_MAX_LEN]; + uint16_t param_len = 0; + for (size_t arg_num = 0; arg_num < arguments.size(); arg_num++) { + size_t len = 0; + DecodeC2aCommandArgument(cmd_info.GetArgumentType(arg_num), arguments[arg_num], param + param_len, len); + param_len += (uint16_t)len; + } + + // Send command + if (command_type == "RT") { + CCP_register_rtc(cmd_id, param, param_len); + } else if (command_type == "TL") { + CCP_register_tlc(ti, TLCD_ID_FROM_GS, cmd_id, param, param_len); + } else if (command_type == "BL") { + // TODO: BL実装したいが、register_blがない? + } else { + // Not reach + } +#else + UNUSED(tokens); +#endif +} + +WingsCommandSenderToC2a InitWingsCommandSenderToC2a(ClockGenerator* clock_generator, const double compo_update_step_s, + const std::string initialize_file) { + IniAccess ini_access(initialize_file); + std::string section = "WINGS_COMMAND_SENDER_TO_C2A"; + + bool is_enabled = ini_access.ReadEnable(section.c_str(), "command_send_enable"); + + int prescaler = ini_access.ReadInt(section.c_str(), "prescaler"); + if (prescaler <= 1) prescaler = 1; + + double step_width_s = (double)prescaler * compo_update_step_s; + + std::string c2a_command_data_base_file = ini_access.ReadString(section.c_str(), "c2a_command_database_file"); + std::string wings_operation_file = ini_access.ReadString(section.c_str(), "wings_operation_file"); + + return WingsCommandSenderToC2a(prescaler, clock_generator, step_width_s, c2a_command_data_base_file, wings_operation_file, is_enabled); +} diff --git a/src/components/real/communication/wings_command_sender_to_c2a.hpp b/src/components/real/communication/wings_command_sender_to_c2a.hpp new file mode 100644 index 000000000..d70964826 --- /dev/null +++ b/src/components/real/communication/wings_command_sender_to_c2a.hpp @@ -0,0 +1,79 @@ +/* + * @file wings_command_sender_to_c2a.hpp + * @brief A component to send command using WINGS operation file + */ + +#ifndef S2E_COMPONENTS_REAL_COMMUNICATION_C2A_COMMAND_SENDER_HPP_ +#define S2E_COMPONENTS_REAL_COMMUNICATION_C2A_COMMAND_SENDER_HPP_ + +#include +#include + +#include "../../base/component.hpp" + +/* + * @class C2aCommandSender + * @brief A component to send C2A command using WINGS operation file + */ +class WingsCommandSenderToC2a : public Component { + public: + /** + * @fn WingsCommandSenderToC2a + * @brief Constructor + * @param [in] + */ + WingsCommandSenderToC2a(int prescaler, ClockGenerator* clock_generator, const double step_width_s, const std::string command_database_file, + const std::string operation_file, const bool is_enabled) + : Component(prescaler, clock_generator), + c2a_command_database_(command_database_file), + wings_operation_file_(operation_file), + is_enabled_(is_enabled), + step_width_s_(step_width_s) {} + + /** + * @fn ~WingsCommandSenderToC2a + * @brief Destructor + */ + ~WingsCommandSenderToC2a() {} + + protected: + C2aCommandDatabase c2a_command_database_; //!< Command database + WingsOperationFile wings_operation_file_; //!< WINGS operation file + bool is_enabled_; //!< Enable flag + const double step_width_s_; //!< Step width to execute this component [s] + double wait_s_ = 0.0; //!< Wait counter [s] + bool is_end_of_line_ = false; //!< Flag to detect end of line + + // Override functions for Component + /** + * @fn MainRoutine + * @brief Main routine to send command + */ + void MainRoutine(const int time_count) override; + + /** + * @fn ExecuteCommandLine + * @brief Execute command line + * @param[in] line: Executed line + */ + void ExecuteCommandLine(const std::string line); + + /** + * @fn AnalyzeC2aCommand + * @brief Analyze C2A command Line + * @param[in] tokens: Command line after space separation + */ + void AnalyzeC2aCommand(const std::vector tokens); +}; + +/** + * @fn InitWingsCommandSenderToC2a + * @brief Initialize WingsCommandSenderToC2a + * @param[in] clock_generator: Clock generator + * @param[in] compo_update_step_s: Component update step time [s] + * @param[in] initialize_file: Initialize file name + */ +WingsCommandSenderToC2a InitWingsCommandSenderToC2a(ClockGenerator* clock_generator, const double compo_update_step_s, + const std::string initialize_file); + +#endif // S2E_COMPONENTS_REAL_COMMUNICATION_C2A_COMMAND_SENDER_HPP_ diff --git a/src/library/CMakeLists.txt b/src/library/CMakeLists.txt index e3298444b..b8ac55f89 100644 --- a/src/library/CMakeLists.txt +++ b/src/library/CMakeLists.txt @@ -8,6 +8,8 @@ add_library(${PROJECT_NAME} STATIC geodesy/geodetic_position.cpp initialize/initialize_file_access.cpp + initialize/c2a_command_database.cpp + initialize/wings_operation_file.cpp logger/logger.cpp logger/initialize_log.cpp diff --git a/src/library/initialize/c2a_command_database.cpp b/src/library/initialize/c2a_command_database.cpp new file mode 100644 index 000000000..cf3f2bb16 --- /dev/null +++ b/src/library/initialize/c2a_command_database.cpp @@ -0,0 +1,158 @@ +/** + * @file c2a_command_database.cpp + * @brief Classes and functions to read and manage C2A command database + */ + +#include "c2a_command_database.hpp" + +#include +#include +#include +#include +#include + +C2aCommandInformation::C2aCommandInformation(const std::string cmd_db_line) { + if (cmd_db_line.find("*") == 0) return; + + // CSV + std::string token; + std::vector tokens; + std::istringstream token_stream(cmd_db_line); + while (std::getline(token_stream, token, ',')) { + tokens.push_back(token); + } + + // Command name + command_name_ = tokens[1]; + + // Command ID + command_id_ = std::stoul(tokens[3], nullptr, 0); + + // Arguments + number_of_arguments_ = std::stoul(tokens[4], nullptr, 0); + for (size_t arg_id = 0; arg_id < number_of_arguments_; arg_id++) { + std::string argment_type_name = tokens[5 + 2 * arg_id]; + argument_type_info_.push_back(ConvertArgumentType(argment_type_name)); + } +} + +C2aArgumentType C2aCommandInformation::GetArgumentType(const size_t argument_id) { + if (argument_id >= argument_type_info_.size()) { + return C2aArgumentType::kError; + } else { + return argument_type_info_[argument_id]; + } +} + +C2aArgumentType C2aCommandInformation::ConvertArgumentType(const std::string type) { + if (type == "uint8_t") { + return C2aArgumentType::kUint8t; + } else if (type == "uint16_t") { + return C2aArgumentType::kUint16t; + } else if (type == "uint32_t") { + return C2aArgumentType::kUint32t; + } else if (type == "uint64_t") { + return C2aArgumentType::kUint64t; + } else if (type == "int8_t") { + return C2aArgumentType::kInt8t; + } else if (type == "int16_t") { + return C2aArgumentType::kInt16t; + } else if (type == "int32_t") { + return C2aArgumentType::kInt32t; + } else if (type == "int64_t") { + return C2aArgumentType::kInt64t; + } else if (type == "float") { + return C2aArgumentType::kFloat; + } else if (type == "double") { + return C2aArgumentType::kDouble; + } else if (type == "raw") { + return C2aArgumentType::kRaw; + } else { + return C2aArgumentType::kError; + } +} + +C2aCommandDatabase::C2aCommandDatabase(const std::string file_path) { + std::ifstream file(file_path); + if (!file.is_open()) { + std::cerr << "C2A Command DB open error." << std::endl; + } + std::string line; + while (std::getline(file, line)) { + // コマンド追加 + C2aCommandInformation command(line); + if (command.GetCommandName() == "Error") continue; + command_map_[command.GetCommandName()] = command; + } +} + +void DecodeC2aCommandArgument(const C2aArgumentType type, const std::string argument_string, uint8_t* param, size_t& size_param) { + switch (type) { + case C2aArgumentType::kUint8t: { + size_param = 1; + uint8_t argument = (uint8_t)std::stoul(argument_string); // TODO: 範囲外処理 + endian_memcpy(param, &argument, size_param); + break; + } + case C2aArgumentType::kUint16t: { + size_param = 2; + uint16_t argument = (uint16_t)std::stoul(argument_string); // TODO: 範囲外処理 + endian_memcpy(param, &argument, size_param); + break; + } + case C2aArgumentType::kUint32t: { + size_param = 4; + uint32_t argument = (uint32_t)std::stoul(argument_string); // TODO: 範囲外処理 + endian_memcpy(param, &argument, size_param); + break; + } + case C2aArgumentType::kUint64t: { + size_param = 8; + uint64_t argument = std::stoul(argument_string); + endian_memcpy(param, &argument, size_param); + break; + } + case C2aArgumentType::kInt8t: { + size_param = 1; + int8_t argument = (int8_t)std::stoi(argument_string); // TODO: 範囲外処理 + endian_memcpy(param, &argument, size_param); + break; + } + case C2aArgumentType::kInt16t: { + size_param = 2; + int16_t argument = (int16_t)std::stoi(argument_string); // TODO: 範囲外処理 + endian_memcpy(param, &argument, size_param); + break; + } + case C2aArgumentType::kInt32t: { + size_param = 4; + int32_t argument = std::stoi(argument_string); + endian_memcpy(param, &argument, size_param); + break; + } + case C2aArgumentType::kInt64t: { + size_param = 8; + int64_t argument = std::stol(argument_string); + endian_memcpy(param, &argument, size_param); + break; + } + case C2aArgumentType::kFloat: { + size_param = 4; + float argument = std::stof(argument_string); + endian_memcpy(param, &argument, size_param); + break; + } + case C2aArgumentType::kDouble: { + size_param = 8; + double argument = std::stod(argument_string); + endian_memcpy(param, &argument, size_param); + break; + } + case C2aArgumentType::kRaw: { + // TODO: Rawの実装 + break; + } + default: + break; + } +} diff --git a/src/library/initialize/c2a_command_database.hpp b/src/library/initialize/c2a_command_database.hpp new file mode 100644 index 000000000..26da381ac --- /dev/null +++ b/src/library/initialize/c2a_command_database.hpp @@ -0,0 +1,116 @@ +/** + * @file c2a_command_database.hpp + * @brief Classes and functions to read and manage C2A command database + */ + +#ifndef S2E_LIBRARY_INITIALIZE_C2A_COMMAND_DATABASE_HPP_ +#define S2E_LIBRARY_INITIALIZE_C2A_COMMAND_DATABASE_HPP_ + +#include +#include +#include + +/** + * @enum C2aArgumentType + * @brief Argument type used in C2A command + */ +enum class C2aArgumentType { kUint8t, kUint16t, kUint32t, kUint64t, kInt8t, kInt16t, kInt32t, kInt64t, kFloat, kDouble, kRaw, kError }; + +/** + * @class C2aCommandInformation + * @brief Information of C2A command + */ +class C2aCommandInformation { + public: + /** + * @fn C2aCommandInformation + * @brief Constructor + */ + C2aCommandInformation() {} + + /** + * @fn C2aCommandInformation + * @brief Constructor + * @param[in] cmd_db_line: A line in command database + */ + C2aCommandInformation(const std::string cmd_db_line); + + // Getter + /** + * @fn GetCommandName + * @brief Return command name + */ + inline std::string GetCommandName() const { return command_name_; } + /** + * @fn GetCommandId + * @brief Return command ID + */ + inline size_t GetCommandId() const { return command_id_; } + /** + * @fn GetNumberOfArgument + * @brief Return number of argument + */ + inline size_t GetNumberOfArgument() const { return argument_type_info_.size(); } + /** + * @fn GetArgumentType + * @brief Return argument type + */ + C2aArgumentType GetArgumentType(const size_t argument_id); + + private: + std::string command_name_ = "Error"; //!< Command name + size_t command_id_ = 0; //!< Command ID + size_t number_of_arguments_ = 0; //!< Number of arguments + std::vector argument_type_info_; //!< List of argument type + + /** + * @fn ConvertArgumentType + * @brief Convert type expressed by string to enum + * @param[in] type: type information + */ + C2aArgumentType ConvertArgumentType(const std::string type); +}; + +/** + * @class C2aCommandDatabase + * @brief A class to handle C2A command database + */ +class C2aCommandDatabase { + public: + /** + * @fn C2aCommandDatabase + * @brief Constructor + * @param[in] file_path: File path of the database file + */ + C2aCommandDatabase(const std::string file_path); + + // Getter + /** + * @fn GetCommandInformation + * @brief Return C2A command information + * @param[in] command_name: Command Name + */ + inline C2aCommandInformation GetCommandInformation(const std::string command_name) const { + auto itr = command_map_.find(command_name); + if (itr != command_map_.end()) { + return itr->second; + } else { + return C2aCommandInformation(); + } + } + + private: + std::map command_map_; //!< Command database +}; + +/** + * @fn DecodeC2aCommandArgument + * @brief Decode argument value expressed by string as C2A command argument + * @param[in] type: Argument type + * @param[in] argument_string: Argument value expressed as string + * @param[out] param: Decoded value + * @param[out] size_param: Size of decoded value [byte] + */ +void DecodeC2aCommandArgument(const C2aArgumentType type, const std::string argument_string, uint8_t* param, size_t& size_param); + +#endif // S2E_LIBRARY_INITIALIZE_C2A_COMMAND_DATABASE_HPP_ diff --git a/src/library/initialize/wings_operation_file.cpp b/src/library/initialize/wings_operation_file.cpp new file mode 100644 index 000000000..628c22fcf --- /dev/null +++ b/src/library/initialize/wings_operation_file.cpp @@ -0,0 +1,47 @@ +/** + * @file wings_operation_file.cpp + * @brief Classes and functions to read and manage WINGS's operation file (.ops) + */ + +#include "wings_operation_file.hpp" + +#include + +WingsOperationFile::WingsOperationFile(const std::string file_path) { + // File open + std::ifstream file(file_path); + if (!file.is_open()) { + std::cerr << "WINGS Operation file open error." << std::endl; + } + + // Read all lines + std::string line; + while (std::getline(file, line)) { + // Remove pose point + if (!line.empty() && line[0] == '.') { + line = line.substr(1); + } + // Remove space + if (!line.empty() && line[0] == ' ') { + line = line.substr(1); + } + // Remove comment + size_t comment_position = line.find('#'); + if (comment_position != std::string::npos) { + line = line.substr(0, comment_position); + } + // add line + if (line.length() > 2) { + lines_.push_back(line); + } + } +} + +std::string WingsOperationFile::GetLatestLine() { + if (line_pointer_ >= lines_.size()) return "EOL"; + + std::string line = lines_[line_pointer_]; + line_pointer_++; + + return line; +} diff --git a/src/library/initialize/wings_operation_file.hpp b/src/library/initialize/wings_operation_file.hpp new file mode 100644 index 000000000..11cb2a9b0 --- /dev/null +++ b/src/library/initialize/wings_operation_file.hpp @@ -0,0 +1,38 @@ +/** + * @file wings_operation_file.hpp + * @brief Classes and functions to read and manage WINGS's operation file (.ops) + */ + +#ifndef S2E_LIBRARY_INITIALIZE_WINGS_OPERATION_FILE_HPP_ +#define S2E_LIBRARY_INITIALIZE_WINGS_OPERATION_FILE_HPP_ + +#include +#include + +#include "c2a_command_database.hpp" + +/** + * @class WingsOperationFile + * @brief A class to handle WINGS operation file + */ +class WingsOperationFile { + public: + /** + * @fn WingsOperationFile + * @brief Constructor + * @param[in] file_path: File path of the operation file + */ + WingsOperationFile(const std::string file_path); + + /** + * @fn GetLatestLine + * @brief Return latest line command + */ + std::string GetLatestLine(); + + private: + std::vector lines_; //!!< List of read operation command line + size_t line_pointer_ = 0; //!< Line pointer +}; + +#endif // S2E_LIBRARY_INITIALIZE_WINGS_OPERATION_FILE_HPP_