/******************************************************************************* * モジュール名称 :Application Header * * モジュールラベル :app_mppe_ena.h * * タスク区分 :ヘッダ * * 機能 :define/Struct/Variable/Prototype * * 使用上の注意 :特になし * * 作成日・作成者 :2010/10/02 Y.K. * * * * 参照 :Sampleとして、 app.def を参照のこと * * 注意 : EDIT権限は、MPPE/ENA組 * *******************************************************************************/ #ifndef __APP_MPPE_ENA_H__ #define __APP_MPPE_ENA_H__ //#define d_ENA_LOCAL_EMU // local pc で試験する場合に定義する #define d_ENA_AUTODISCRI_MDP // ディスクリ自動変更機能を MDP アプリケーション側に持つ場合に定義する //#define d_ENA_DEBUG_MIAMSAMEAENA // MIA, MSA, MEA1/2, ENA app03,04,05 に関するチェック //#define d_ENA_TIMEMEASUREMENT // 時間計測を行う場合に定義する //#define d_ENA_DEBUG_SUNPULSE //#define d_ENA_DEBUG_ENGMODE //#define d_ENA_DEBUG_AUTODISCRI_MDP //#define d_ENA_DEBUG_TRG //#define DUMMYTABLE_FROM_SOFTWARE // EEPROM からテーブルを読まない //#define DUMMY_DATA_GEN // ダミー観測データ生成 #define d_ENA_ATTEMPT_TO_SMALLSIZE // コードサイズを小さくするように書き換えたものを使う場合に定義する #define d_ENA_ATTEMPT_TO_SMALLSIZE2 // 120416 コードサイズを小さくするように書き換えたものを使う場合に定義する #include "app_common.h" #include "dpu_api_proto.h" #include "app_common_macrocmd.h" #include "app_comp_rice.h" #ifdef d_ENA_DEBUG_MIAMSAMEAENA #include "app_MPPE-MEA.h" #include "app_MPPE-MIA.h" #include "app_MPPE-MSA.h" #endif #ifdef d_ENA_LOCAL_EMU #define d_ENA_LITTLE_ENDIAN // emulation 環境が little endian の場合に定義 #endif #ifdef d_ENA_LITTLE_ENDIAN #define LCLEMU_ntohs(us) ( (0x00ff & ((us) >> 8)) + (0xff00 & ((us) << 8)) ) #define LCLEMU_htons(us) ( (0x00ff & ((us) >> 8)) + (0xff00 & ((us) << 8)) ) #define LCLEMU_htonl(ui) ( (0x000000ff & ((ui) >> 24) ) + (0x0000ff00 & ((ui) >> 8)) + (0x00ff0000 & ((ui) << 8)) + (0xff000000 & ((ui) << 24)) ) #else #define LCLEMU_ntohs(us) ( (us) ) #define LCLEMU_htons(us) ( (us) ) #define LCLEMU_htonl(ui) ( (ui) ) #endif #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif #define d_Lcl_ENA_MAX_SPINTIME 8 // [s] スピン周期の最大値 (integer であること) #define d_Lcl_ENA_CMDINTVAL_MDISSET 1 // [s] manual discri set コマンドの最短実行周期 //#define d_Lcl_ENA_EEPROM_TBL_SIZE 46144 // [byte] EEPROM 上のテーブルサイズ //#define d_Lcl_ENA_EEPROM_TBL_SIZE 28672 // [byte] EEPROM 上のテーブルサイズ #define d_Lcl_ENA_EEPROM_TBL_SIZE 0x4180 // [byte] EEPROM 上のテーブルサイズ // app_romTable_ENA.c 内では数字の直打ちなので注意 #define d_SIZEhk_ENA 128 // [byte] センサーの HK-size 0x80 // 自動ディスクリ機能を MDP アプリケーションで実現する場合のため、HK サイズを増やす 120704 KA //#define d_Lcl_ENA_SWHK_SIZE 50 // [byte] MDP ENA ユーザーソフトの HK サイズ #define d_Lcl_ENA_SWHK_SIZE 53 // [byte] MDP ENA ユーザーソフトの HK サイズ // Gd_dataHkLen - 0x80 以下であること。 #define d_Lcl_ENA_TRGDATA_NUM 16 // TRG 判定データの保持数 #define d_Lcl_ENA_TRGDATA_INVALID 0xfffffff0 // 無効な TRG 判定データ #define d_Lcl_ENA_TRG_REL 0 // TRG 条件: 相対変化 #define d_Lcl_ENA_TRG_ABS 1 // TRG 条件: カウントの絶対値 #define d_Lcl_ENA_MISSION_PCKT_SIZE_MAX 0x1800 // mission パケットサイズの最大値 // (app_PutTlm() の説明を参照し、それより幾分少なくしている) // 0x1000 より大きいこと (non-process mode の 8slot = 0xc00 byte。 // 圧縮が効かないときを考慮して 0x1000) #define d_Lcl_ENA_MISSION_DUMPPCKT_SIZE_MAX 0x0780 // DUMP モード時の mission パケットサイズ (圧縮前) の最大値 // d_Lcl_ENA_MISSION_PCKT_SIZE_MAX より小さいこと。 #define d_Lcl_ENA_MISSION_PCKT_OUTHK_INTERVALBASE 1 // [sec] ミッションパケット中に HK を出す間隔の最小単位 // app02_ENA() が呼ばれる間隔 (1秒) で計測 #define d_Lcl_ENA_MISSION_PCKT_OUTHK_INITCTR 300 // [sec] ミッションパケット中への HK 出力パラメータの変更を // 行った後、最初の HK データを出力するまでの最大時間 // app02_ENA() が呼ばれる間隔 (1秒) で計測 #define d_Lcl_ENA_MISSION_PCKT_OUTHK_HEADA_SIZE 0x10 // [byte] #define d_Lcl_ENA_MISSION_PCKT_OUTHK_PCKTSIZE (d_Lcl_ENA_MISSION_PCKT_OUTHK_HEADA_SIZE + d_SIZEhk_ENA + d_Lcl_ENA_SWHK_SIZE) // table address on EEPROM and their size #define d_Lcl_ENA_MacroCmdTbl_EEPROM_adr 0x0 #define d_Lcl_ENA_MacroCmdTbl_EEPROM_size 0x2800 // 20tables x 512bytes #define d_Lcl_ENA_SVTbl_EEPROM_adr 0x2800 #define d_Lcl_ENA_SVTbl_EEPROM_size 0x200 // 8tables x 4voltages x 8 energy steps x (12 + 4)bits #define d_Lcl_ENA_AutoDiscriTbl_EEPROM_adr 0x2a00 #define d_Lcl_ENA_AutoDiscriTbl_EEPROM_size 0x900 // (2 + 2)tables x 32steps x 18bytes #define d_Lcl_ENA_DiscriTbl_EEPROM_adr 0x3300 #define d_Lcl_ENA_DiscriTbl_EEPROM_size 0x240 // 32tables x (2 + 16)bytes (各テーブル最初の2byteは無視する) #define d_Lcl_ENA_SVMTbl_EEPROM_adr 0x3540 #define d_Lcl_ENA_SVMTbl_EEPROM_size 0x40 // 8(SV-index) x 8 energy steps x (4 + 4)bits #define d_Lcl_ENA_SVETbl_EEPROM_adr 0x3580 #define d_Lcl_ENA_SVETbl_EEPROM_size 0x20 // 16(E-index) x (10 + 6)bits #define d_Lcl_ENA_LTTbl_EEPROM_adr 0x35a0 //#define d_Lcl_ENA_LTTbl_EEPROM_size 0x2d00 // (start sector + 1) x (ring + 1) x (stop sector + 1) // // x E-index x (12 + 4) bits // // 8 x 5 x 9 x 16 x 2bytes #define d_Lcl_ENA_LTTbl_EEPROM_size 0x2d0 // (start sector + 1) x (ring + 1) x (stop sector + 1) // x (12 + 4) bits // 8 x 5 x 9 x 2bytes #define d_Lcl_ENA_TTTbl_EEPROM_adr 0x3880 #define d_Lcl_ENA_TTTbl_EEPROM_size 0x800 // 1024(TOF steps) x (10 + 6)bits #define d_Lcl_ENA_MTTbl_EEPROM_adr 0x4080 #define d_Lcl_ENA_MTTbl_EEPROM_size 0x100 // 256(mass) x 1byte #define d_Lcl_ENA_MACROCMDTblNUM_ROM 20 // EEPROM に格納されているテーブル数 #define d_Lcl_ENA_MACROCMDTblNUM_RAM 12 // RAM に格納できるテーブル数 #define d_Lcl_ENA_MACROCMDTbl_size 0x200 // マクロコマンドテーブル一つ分の最大サイズ #define d_Lcl_ENA_MACROCMDTbl_buf_size 0x1000 // マクロコマンド実行時のバッファサイズ // テーブル書き込みなどの時にも内部的にマクロコマンド機能を使う。 // dump の際のターゲット #define d_Lcl_ENA_DUMP_TGTID_EEPROM 0x0001 #define d_Lcl_ENA_DUMP_TGTID_AutoDiscri_RAM 0x0002 #define d_Lcl_ENA_DUMP_TGTID_Discri_RAM 0x0004 #define d_Lcl_ENA_DUMP_TGTID_SVM_RAM 0x0008 #define d_Lcl_ENA_DUMP_TGTID_SVE_RAM 0x0010 #define d_Lcl_ENA_DUMP_TGTID_LT_RAM 0x0020 #define d_Lcl_ENA_DUMP_TGTID_TT_RAM 0x0040 #define d_Lcl_ENA_DUMP_TGTID_MT_RAM 0x0080 #define d_Lcl_ENA_DUMP_TGTID_MacroCmd_RAM 0x0100 #ifdef d_ENA_AUTODISCRI_MDP // 120704 KA #define d_Lcl_ENA_DUMP_TGTID_AutoDiscri_MDP 0x0200 // 自動ディスクリ変更機能を MDP アプリケーションで行う場合、テーブルダンプが必要 #define d_Lcl_ENA_DUMP_TGTIDMASK 0x03ff #else #define d_Lcl_ENA_DUMP_TGTIDMASK 0x01ff #endif #define d_Lcl_ENA_DUMP_SETSIZEUNIT 0x100 // [byte] ダンプする際の指定サイズの単位。ターゲット毎。 // ターゲットのサイズが指定サイズより小さい場合、 // 出力サイズはターゲットサイズとなる。 #define d_Lcl_ENA_MODE_ACCUMMASS 0x00 #define d_Lcl_ENA_MODE_ACCUMCNT 0x01 #define d_Lcl_ENA_MODE_ACCUMTOF 0x02 #define d_Lcl_ENA_MODE_IFE_ENGINEERING 0x03 #define d_Lcl_ENA_MODE_IFE_TABLEREAD 0x04 #define d_Lcl_ENA_MODE_NONPROCESS 0x05 #define d_Lcl_ENA_MODE_DUMP 0x06 #define d_Lcl_ENA_MODE_IDLE 0x07 #define d_Lcl_ENA_MODENUM 0x08 // モード数 // IFE engineering モード時の IFE 出力データサイズ (1 slot あたり) #define d_Lcl_ENA_IFE_ENGINEERING_UNITDATASIZE 136 // [byte] IFE engineering モード時の IFE 出力データサイズ (1 slot あたり) // IFE tableread モード時の IFE 出力データサイズ (1 slot あたり) #define d_Lcl_ENA_IFE_TABLEREAD_UNITDATASIZE_SV 138 // [byte] SV data (slotID 8n + 0, 8n + 1, 8n + 2, 8n + 3) #define d_Lcl_ENA_IFE_TABLEREAD_UNITDATASIZE_ADIS 361 // [byte] autodiscri data (slotID 8n + 4, 8n + 5, 8n + 6, 8n + 7) #define d_Lcl_ENA_DUMP_PCKT_HEADA_SIZE 0x18 // dump packet のヘッダサイズ #define d_Lcl_ENA_CPRS_NON 0x00 // 圧縮なし #define d_Lcl_ENA_CPRS_RICE 0x01 // RICE compression #define d_Lcl_ENA_MISTLMOUTBUFSIZE 0x10000 // 圧縮バッファサイズ (4 の倍数であること(4バイト境界にアサインする)) #define d_Lcl_ENA_TLMCOMMENT_MAXSIZE 0x80 // テレメパケットのコメント最大サイズ // (4 の倍数であること(4バイト境界にアサインする)) // ソフト内での LinLog 圧縮時のカウントデータのビット幅 #define d_Lcl_ENA_CntDepth32 0x0 #define d_Lcl_ENA_CntDepth16 0x1 #define d_Lcl_ENA_CntDepth12 0x2 // top word of ENA packet #define d_Lcl_ENA_TLMID_CPRS 0x3ca5 #define d_Lcl_ENA_TLMID_NCPRS 0x3ca6 #define d_Lcl_ENA_MODEID_ACCUMMASS 0x4b96 #define d_Lcl_ENA_MODEID_ACCUMCNT 0x4ba7 #define d_Lcl_ENA_MODEID_ACCUMTOF 0x4bb8 #define d_Lcl_ENA_MODEID_IFE_ENGINEERING 0x4bc9 #define d_Lcl_ENA_MODEID_IFE_TABLEREAD 0x4bda #define d_Lcl_ENA_MODEID_NONPROCESS 0x4beb #define d_Lcl_ENA_MODEID_DUMP 0x4bfc #define d_Lcl_ENA_MODEID_IDLE 0x4b0d #define d_Lcl_ENA_MODEID_HKtoMISSIONTLM 0x4b1e // チャンネル数 #define d_Lcl_ENA_STARTSECTNUM 7 #define d_Lcl_ENA_RINGNUM 4 #define d_Lcl_ENA_STOPSECTNUM 8 #define d_Lcl_ENA_TOFNUM 0x400 #define d_Lcl_ENA_ESTEPNUM 8 // エネルギーステップ数 #define d_Lcl_ENA_MAXBINNUM_ACCUMMASS 0x2000 // accum mass モード時の最大 bin 数。この値は invalid TOF 用の bin を含まない数。 #define d_Lcl_ENA_EINDEX_NUM 16 // E-index 数 (SVテーブルとエネルギーステップで決まる) #define d_Lcl_ENA_MINDEX_NUM 0x80 // M-index 数 (質量インデックス) #define d_Lcl_ENA_M_0_5_MAX 0x100 // sqrt(mass) がこの値以上の場合、(この値 - 1) とする。 #define d_Lcl_ENA_SVNUM 4 #define d_Lcl_ENA_SVTBLNUM 8 #define d_Lcl_ENA_SVDATA_SIZE 16 // 8 energy steps * (12 + 4) bits #define d_Lcl_ENA_AUTODISCRITBLNUM_ROM 4 // EEPROM に保存できるテーブル数 #define d_Lcl_ENA_AUTODISCRITBLNUM_IFE 2 // IFE に書き込めるテーブル数 #define d_Lcl_ENA_AUTODISCRITBLNUM_RAM 2 // MDP RAM にコマンドで書き込めるテーブル数 #define d_Lcl_ENA_AUTODISCRITBL_TNUM 32 #define d_Lcl_ENA_AUTODISCRITBL_DATANUM 21 // 温度: 2byte, START RING: 4byte, START SECTOR: 7byte, STOP SECTOR: 8byte #define d_Lcl_ENA_AUTODISCRITBL_DATANUM_STORE 18 // 温度: 2byte, START RING: 1byte, START SECTOR: 7byte, STOP SECTOR: 8byte #define d_Lcl_ENA_MDPAUTODISCRI_T_ADDNUM 120 // MDP で自動ディスクリ変更を行う場合の基準となる温度の加算数 (平均をとる) #define d_Lcl_ENA_DISCRITBLNUM_RAM 32 // discri data set 数 (auto discri ではなく、マニュアルセット) #define d_Lcl_ENA_DISCRITBL_DATANUM 19 // START RING: 4byte, START SECTOR: 7byte, STOP SECTOR: 8byte #define d_Lcl_ENA_DISCRITBL_DATANUM_STORE 16 // START RING: 1byte, START SECTOR: 7byte, STOP SECTOR: 8byte #define d_Lcl_ENA_SLOT_NUM 0x80 // 1スピンあたりのslot数 #define d_Lcl_ENA_SIZE_SLOT 384 // [byte] slot 毎のサイズ #define d_Lcl_ENA_MASSFACTOR_DEFAULT 3340 // mass scaling factor のデフォルト値 // // accumulation table size // heada: 16 (temporal) // Mass accum mode: n(E) * n(P) * n(C) * n(M) * 4byte + n(E) * n(P) * 4byte = 8192 * 4 + 128 * 4 = 33280 // counter: 18 (coinci. mode) * [n(E) * n(P)] * 4 = 18 * 128 * 4 = 9216 // total = heada + 42496 byte // n(E) * n(P) * n(C) * n(M) * 4byte: TOF 成立時のカウンタ // n(E) * n(P) * 4byte: invalid TOF event 用のカウンタ (START RING/SECTOR / STOP SECTOR いずれかの信号が不検出だった場合など) // TOF accum mode: n(E) * n(TOF) * 4 = 8 * 1024 * 4 = 32768 // counter: n(E) * 4 = 8 * 4 = 32 // total = heada + 32800 byte // count accum mode: [n(E) * n(P)] * counters * 4 = 128 * 62 * 4 = heada + 31744 // non-process mode: raw packet size = 384(bytes/slot) * 128(slot/spin) = 49152 // -> max: heada + 49152byte // #define d_Lcl_ENA_ACCUMTBL_HEADA_SIZE 24 #define d_Lcl_ENA_ACCUMTBL_SIZE (49152 + d_Lcl_ENA_ACCUMTBL_HEADA_SIZE) // byte #define d_Lcl_ENA_SENSORMODE_COINCI 0x00 #define d_Lcl_ENA_SENSORMODE_COUNT 0x01 #define d_Lcl_ENA_SENSORMODE_ENG 0x02 #define d_Lcl_ENA_SENSORMODE_SVREAD 0x03 #define d_Lcl_ENA_SENSORMODE_NUM 0x04 // IFE の動作モード数 #define d_Lcl_ENA_COINCI_CNTNUM 18 // coincidence モードでのカウンタ数 #define d_Lcl_ENA_COUNT_CNTNUM 62 // counter モードでのカウンタ数 // 1パケット (3072byte) 中の最大 TOF event データ数 #define d_Lcl_ENA_EVTNUMMAX_COINCI 136 #define d_Lcl_ENA_EVTNUMMAX_CTR 100 //#define d_Lcl_ENA_MacroCmd_TBLSIZE 0x400 // マクロコマンドテーブルサイズ //#define d_Lcl_ENA_MacroCmd_SOFTDUMMY_TBLSIZE 0x080 // マクロコマンドテーブルサイズ (試験用) // ソフト内に内容を保持 // d_Lcl_ENA_MacroCmd_TBLSIZE より小さいこと #define d_Lcl_ENA_MISTLMOUTBUFID_MIS 0 // ミッションテレメ出力バッファID (観測データ用) #define d_Lcl_ENA_MISTLMOUTBUFID_HK 1 // ミッションテレメ出力バッファID (HKデータ用) #define d_Lcl_ENA_Initialize_MacroCmdTableID 0 // 初期化時に実行されるマクロコマンドを含む // マクロコマンドテーブルID #define d_Lcl_ENA_Initialize_MacroCmdID 0 // d_Lcl_ENA_Initialize_MacroCmdTableID によって // 選択されたマクロコマンドテーブル内で、 // 初期化時に実行されるマクロコマンドの ID #define d_Lcl_ENA_CMD_ANSWER_SIZE 0x4 // [byte] コマンドアンサーのサイズ // コマンド #define d_Lcl_ENA_CMD_PRIO_HK_SET 0x0010 // 優先 hk モード 設定 #define d_Lcl_ENA_CMD_INITPARAM 0x0011 // パラメータ初期化 #define d_Lcl_ENA_CMD_TBL_WRITE_SENSOR 0x0013 // センサーへのテーブル書き込み #define d_Lcl_ENA_CMD_FLG_CLEAR 0x0014 // フラグクリア (MDP ENA ソフト) #define d_Lcl_ENA_CMD_MACRO_ENA 0x0015 // マクロコマンド ena #define d_Lcl_ENA_CMD_ENGY_TBL_SEL 0x0017 // energy table 選択 #define d_Lcl_ENA_CMD_PROCESS_MODE_SET 0x0018 // データ処理モードセット #define d_Lcl_ENA_CMD_HEALTH_CHECK_SET 0x0019 // ヘルスチェックモードセット #define d_Lcl_ENA_CMD_CPRS_SET 0x001a // 圧縮モードセット #define d_Lcl_ENA_CMD_NONCOINCI_REP 0x001b // コインシデンスがとれなかったデータを取得するモード #define d_Lcl_ENA_CMD_MASSFACTOR_SET 0x001c // 質量計算 factor のセット #define d_Lcl_ENA_CMD_DUMP_MDPTBL 0x001d // MDP テーブル内容のダンプ #define d_Lcl_ENA_CMD_DISCRI_TBL_WRITE_SENSOR 0x001e // センサーへの discri テーブル書き込み (マニュアル) #define d_Lcl_ENA_CMD_DISCRI_TBL_WRITE_MDP 0x001f // MDP RAM への discri テーブル書き込み (オート、マニュアル) #define d_Lcl_ENA_CMD_MACRO_TBL_WRITE_MDP 0x0020 // マクロコマンドテーブルライト #define d_Lcl_ENA_CMD_LOOKUP_TBL_WRITE_MDP 0x0021 // loop up テーブルを EEPROM から MDP RAM に書き込む #define d_Lcl_ENA_CMD_LINLOG_DEPTH_OFFSET_SET 0x0022 // 観測カウントの LinLog 処理時の depth とオフセットの設定 #define d_Lcl_ENA_CMD_BLOCK_CLR 0x0023 // MDP 内に残っている処理前のブロックデータをクリアする // IFE による自動ディスクリ変更機能を使わない場合に用いる #define d_Lcl_ENA_CMD_MDPAUTODISCRI_ENA 0x0024 // MDP による自動ディスクリ変更 ENA/DIS #define d_Lcl_ENA_CMD_MDPAUTODISCRI_TBL_SET 0x0025 // MDP による自動ディスクリ変更テーブル ID のセット // ------------------------------------------------------ #define d_Lcl_ENA_CMD_CNT1_SET 0x002d // cont1 set #define d_Lcl_ENA_CMD_CNT2_SET 0x002e // cont2 set #define d_Lcl_ENA_CMD_NOP 0x002f // nop #define d_Lcl_ENA_CMD_CHK_DMC_REQCMD 0x004f // DMC へのユーザリクエストコマンド発行要求 (試験用) #define d_Lcl_ENA_CMD_MacroREQ 0x00c0 // マクロコマンド実行リクエスト #define d_Lcl_ENA_CMD_MacroFORCESTOP 0x00c1 // マクロコマンド実行の強制停止 #define d_Lcl_ENA_CMD_toSensor 0x0800 // ENA センサーへのコマンド #define d_Lcl_ENA_MACRO_TBL_WRITE_UNITLEN 0x10 // [byte] macro command table に書き込む際は 0x10の倍数ごとに書き込む。 // 一つのコマンドで 16byte 書いても 32byte 書いてもそれ以上でもよい。 #define d_Lcl_ENA_CHK_DMC_REQCMD_CONST1 0x80 // DMC へのユーザーリクエストコマンド送信を試験で行うコマンド // の定数引数 #define d_Lcl_ENA_CHK_DMC_REQCMD_CONST2 0x0e // DMC へのユーザーリクエストコマンド送信を試験で行うコマンド // の定数引数 #define d_Lcl_ENA_SensorCMD_MaxLen 0x20 // ENA センサーへの最大コマンド長 // センサーコマンド #define d_Lcl_ENA_SensorCMD_UNDEF 0x00 // 未定義コマンド(フラグとして使う) #define d_Lcl_ENA_SensorCMD_SelSVTbl 0x0b #define d_Lcl_ENA_SensorCMD_ModeSet 0x0c #define d_Lcl_ENA_SensorCMD_SetDiscri 0x0d #define d_Lcl_ENA_SensorCMD_WriteSVTbl 0x11 #define d_Lcl_ENA_SensorCMD_1_clrFlag 0x13 #define d_Lcl_ENA_SensorCMD_2_clrFlag_Err 0x01 #define d_Lcl_ENA_SensorCMD_2_clrFlag_T 0x02 #define d_Lcl_ENA_SensorCMD_SelAutoDiscriTbl 0x15 #define d_Lcl_ENA_SensorCMD_WriteAutoDiscriTbl 0x16 #define d_Lcl_ENA_SensorCMD_1_Shutdown 0xf0 #define d_Lcl_ENA_SensorCMD_2_ShutdownNML 0x00 #define d_Lcl_ENA_SensorCMD_2_ShutdownQUK 0x10 #define d_Lcl_ENA_SensorCMD_2_ShutdownEMGL 0xff #define d_Lcl_ENAHK_UnLinkSpW 0 #define d_Lcl_ENAHK_LinkSpW 1 #define d_Lcl_ENA_lvlInitComplete 0xff // ユーザリクエストコマンド送信理由 #define d_Lcl_ENA_ReqUserreqcmd_TestCMD 0xff // 試験コマンドによる struct _s_ENA_MacroCmd { unsigned char uc_cmdenaflg; // マクロコマンド実行要求受付 enable / disable unsigned char uc_req; // マクロコマンド実行要求フラグ --- HK に出す必要がある int i_rtnval; // app_macrocmd_cont() の戻り値 struct _s_MacroCmd_param s_mcp; }; struct _s_ENA_MissionDataBuf { // mission data buf (long buffer) IFE からのデータを受ける一次バッファ unsigned char uc_clear_req; unsigned char uc_noblockstate; unsigned short us_numNewBlock; // 未処理データブロック数 // app_SetNonProcBlock() の戻り値。未処理ブロックがない場合、int で負値が格納される。 }; struct _s_ENA_CoinciData { unsigned char uc_stopsectdiff; // FPGA 内と TDC から得られる stop sector channel が異なる場合のフラグ unsigned char uc_startsect, uc_startring, uc_stopsect; unsigned short us_tof; }; struct _s_ENA_NonProcessMode { unsigned short us_bufoffset; // データレコーダへ出力するデータは 1スピン分ためてから転送する。 // この際、バッファには何回かに分けてデータが格納される。 // 格納時に参照されるアドレスオフセット。 unsigned char uc_datatopflg; // データの先頭を示すフラグ unsigned short us_IntervalSpin; // この数だけスピンすると MDP ソフトが 1スピン分データを処理する。 // (IFE engineering, IFE table read モード) unsigned short us_IntervalSpin_cur; // IntervalSpin のカウンタ unsigned char uc_dataprocspinflg; // データを処理するスピン周期を示すフラグ unsigned char uc_numProcessPckt_inSpin_encoded; // データ処理を行うスピン時、処理するIFE データパケット数 // 0: 1 of 16, 1: 2 of 16, 2: 4 of 16, 3: 8 of 16, 4: 16 of 16 // 8slots = 1データパケットとして数える // (IFE engineering, IFE table read, nonprocess モード) unsigned short us_pcktsize; // パケットサイズ unsigned short us_numpckt_tgt; // 送信するパケット数 (ターゲット値) unsigned short us_numpckt_sent; // 送信したパケット数 }; struct _s_ENA_DumpMode { unsigned short us_dump_target_req; // ダンプ要求したターゲットの ID unsigned short us_dump_target; // 要求のうち、ダンプ処理をまだ行っていないターゲットの ID unsigned short us_size; unsigned int us_outsize_eachtarget; // 処理したサイズ (ターゲット毎) unsigned int ui_address; }; struct _s_ENA_TblWriteSensor { unsigned char uc_wrt_req; // テーブルライト要求フラグ (SV, autodiscri) unsigned char uc_wrt_req_mdis; // テーブルライト要求フラグ (manual discri) unsigned char uc_wrt_target0; // 要求を受理するまでターゲット値を保持する変数 (SV, autodiscri) unsigned char uc_wrt_target0_mdis; // 要求を受理するまでターゲット値を保持する変数 (manualdiscri) unsigned char uc_wrt_target; // ライトターゲット (それぞれのターゲットの処理を終了後、 // 当該ビットをクリアする) unsigned char uc_wrt_target_mdis; // TRUE: manual discri 処理前 or 処理中 // FALSE: 処理済み unsigned char uc_endsts; // 終了ステータスフラグ unsigned char uc_wrtcount_rem; // 送信していないコマンド数(ターゲット毎) (SV, auto discri) unsigned char uc_wrtcount_rem_mdis; // 送信していないコマンド数(ターゲット毎) (manual discri) unsigned char uc_mdiscri_data[d_Lcl_ENA_DISCRITBL_DATANUM]; // manual discridata }; #ifdef d_ENA_AUTODISCRI_MDP // 120704 KA struct _s_ENA_AutoDiscri_MDP { unsigned char uc_tblid; // 自動ディスクリ変更テーブル ID unsigned char uc_autoena; // 自動ディスクリ変更 ENA/DIS unsigned char uc_autoena_past; // 自動ディスクリ変更 ENA/DIS unsigned char uc_tblchg_recv; // テーブル ID 変更コマンドを受け付けたことを示すフラグ unsigned int ui_addtemp; // IFE 温度計算用変数 unsigned short us_temp_addnum; // IFE 温度加算数 unsigned short us_temp; // IFE 温度 unsigned char uc_check_req; // ディスクリ変更が必要かどうかのチェック要求 unsigned char uc_chg_req; // ディスクリ変更要求 unsigned char uc_curstep, uc_curstep2;// 現在の選択ステップ unsigned char uc_wrtcount_rem; // 送信していないコマンド数 unsigned char uc_wrt_target; // unsigned char uc_autodiscri_hk; // auto discri (cont flag, table, step) (DV114 of HK) unsigned char uc_discri_manu[d_Lcl_ENA_DISCRITBL_DATANUM]; // manual でセットしたディスクリ値 // 自動ディスクリ変更テーブル unsigned char uc_tbl_adiscri[2][d_Lcl_ENA_AUTODISCRITBL_TNUM][d_Lcl_ENA_AUTODISCRITBL_DATANUM_STORE]; }; #endif struct _s_ENA_SensorHK { unsigned short us_ctrBase; // ベースカウンタ unsigned short us_ctrBase0; // ベースカウンタ (1回前の HK 読み込み時の値) unsigned char uc_rmapctr, uc_cmdctr; // RMAP カウンタ、コマンドカウンタ unsigned char uc_shutdownSU; // shutdown status (現在 shutdown 中であることを示すフラグ) unsigned char uc_shutdownT; // shutdown reason unsigned short us_ctrSunPulse; // サンパルスカウンタ unsigned char uc_svtblid[d_Lcl_ENA_SVNUM]; // SV table ID (SV毎) unsigned char uc_autodiscri_tblid; // auto discri table ID unsigned char uc_autodiscri_hk; // auto discri (cont flag, table, step) unsigned char uc_discri_data[d_Lcl_ENA_DISCRITBL_DATANUM]; // discridata }; struct _s_ENA_OutMisTlm { unsigned char uc_flg_bufempty; // バッファが empty (write enable) であることを示すフラグ unsigned short us_rpt; // バッファリードポインタ unsigned short us_pcktsize; unsigned char uc_cmp; // 圧縮モードフラグ。 app_PutTlm() の引数に必要 unsigned char *puc_outbuf; // 出力バッファへのポインタ unsigned char uc_commentsize; // コメントサイズ unsigned int ui_comment[d_Lcl_ENA_TLMCOMMENT_MAXSIZE / 4]; // コメント用バッファ }; struct _s_ENA_OutHK { unsigned char uc_clearctr_req; // カウンタクリア要求フラグ unsigned int ui_outinterval; // ミッションパケットへの HK データ出力間隔 unsigned char uc_outinterval_encoded; // ミッションパケットへの HK データ出力間隔 (encode 値) unsigned int ui_outinterval_ctr; // ミッションパケットへの HK データ出力間隔用カウンタ }; struct _s_ENA_param_save { unsigned char uc_linkSpW; // SpaceWire link status unsigned char uc_cmdctr; // コマンドカウンタ unsigned char uc_cmderrctr; // コマンドエラーカウンタ unsigned char uc_cmdanswer[d_Lcl_ENA_CMD_ANSWER_SIZE]; // コマンドアンサ }; struct _s_ENA_param { // ---------------------------------------------------------------------------------------- struct _s_ENA_param_save s_saveparam; // ---------- ここまで app01_InitVar_ENA_2() をコールしてもクリアしないことができる ------ unsigned char uc_macrocmdstatus; // マクロコマンドステータス unsigned char uc_macrocmdtableID; // マクロコマンドテーブル ID unsigned char uc_reqSensorInit; // センサー初期化要求フラグ unsigned char uc_reqUserreqcmd; // ユーザーリクエストコマンドを送信したことを示すフラグ unsigned char uc_reqUserreqcmd_reason; // ユーザーリクエストコマンドの送信理由 unsigned char uc_trg_clear_req; // トリガ判定データのクリア要求フラグ unsigned char uc_trg_ena, uc_trg_ena0; // トリガ判定 ena/dis フラグ unsigned char uc_trg_acqmode, uc_trg_acqmode0; // トリガ判定: カウンタ値の絶対値/相対値のどちらを用いるかを示すフラグ unsigned char uc_trg_curpos; // トリガ判定: ポインタ (ui_trg_ti, ui_trg_totalcnt) の現在値 unsigned char uc_trgset_flagset; // トリガ発生時、Gus_TRG1_ENA にフラグをセットしたかどうかを示すフラグ unsigned int ui_trgset_ti; // トリガ発生時の TI unsigned int ui_trgset_precnt; // トリガ発生時の 発生前カウント値 unsigned int ui_trgset_postcnt; // トリガ発生時の 発生後カウント値 unsigned int ui_trg_ti[2 * d_Lcl_ENA_TRGDATA_NUM]; // トリガー判定用データ取得時の TI unsigned int ui_trg_totalccnt[2 * d_Lcl_ENA_TRGDATA_NUM]; // トリガー判定用データ // トリガー判定: // 判定モードが d_Lcl_ENA_TRG_ABS のとき // ui_trg_precnt <= ui_trg_postcnt のとき // total coincidence count が ui_trg_precnt 以下が uc_trg_prenum 回続き、1回飛ばして // ui_trg_postcnt 以上が uc_trg_postnum 回続いたときトリガーを立てる。 // ui_trg_precnt > ui_trg_postcnt のとき // total coincidence count が ui_trg_precnt 以上が uc_trg_prenum 回続き、1回飛ばして // ui_trg_postcnt 以下が uc_trg_postnum 回続いたときトリガーを立てる。 // 判定モードが d_Lcl_ENA_TRG_REL のとき // ui_trg_precnt <= ui_trg_postcnt のとき // total coincidence count の 連続 uc_trg_prenum 回分の最大値と、1回飛ばして // 連続 uc_trg_postnum 回分の最小値の差が ui_trg_postcnt 以上であった時にトリガを立てる。 // ui_trg_precnt > ui_trg_postcnt のとき // total coincidence count の 連続 uc_trg_prenum 回分の最小値と、1回飛ばして // 連続 uc_trg_postnum 回分の最大値の差が ui_trg_precnt 以上であった時にトリガを立てる。 unsigned char uc_trg_prenum, uc_trg_postnum, uc_trg_prenum0, uc_trg_postnum0; unsigned int ui_trg_precnt; // トリガ発生時の 発生前カウント値の閾値 (= uc_trg_precnt10 << uc_trg_precnt11) unsigned char uc_trg_precnt00, uc_trg_precnt01, uc_trg_precnt10, uc_trg_precnt11; unsigned int ui_trg_postcnt; // トリガ発生時の 発生後カウント値の閾値 (= uc_trg_postcnt10 << uc_trg_postcnt11) unsigned char uc_trg_postcnt00, uc_trg_postcnt01, uc_trg_postcnt10, uc_trg_postcnt11; unsigned int ui_trg_totalccnt0; unsigned int ui_ProcessSpinCtr; // センサーデータの処理スピン数 データ足し合わせ開始時に初期化 unsigned char uc_datatopflg; // 足し合わせを開始するタイミング(スピン,slotID(=0))であることを示すフラグ unsigned int ui_sunpulseCnt; // サンパルスカウント (app04_ENA で配られる値の1周期前) unsigned int ui_data_sunpulseCnt; // サンパルスカウント (ENA センサー TI から計算したもの) unsigned int ui_spinperiod; // スピン周期 [1.953ms] unsigned int ui_dataTi; unsigned int ui_dataTi0; // サンパルス受信時刻 [1.953ms] unsigned int ui_dataTi1; // サンパルス受信時刻からの経過時間 [1.953ms] unsigned int ui_pcktID; // データパケットシーケンスカウンタ (tlm パケット単位ではない) unsigned char uc_tlm_commentsize; // tlm パケットにつくコメントのサイズ unsigned short us_tlm_pcktseqnum; // 出力 tlm パケットのシーケンスカウンタ unsigned char uc_SVRAMid; // SV RAM ID unsigned char uc_ProcessMode; // データ処理モード unsigned char uc_CprsWayFlg; // 圧縮方法の設定フラグ unsigned char uc_CntDepth; // LinLog圧縮: カウンタのビット幅 unsigned int ui_CntOffset; // LinLog圧縮: それぞれのカウントデータから差し引かれる値 unsigned short us_MassFactor; // mass scaling factor (coincidence データから質量を計算するときに使う) unsigned char uc_waitSlotID0; // 頭出しフラグ unsigned short us_ctr_slotID; // slot ID カウンタ unsigned short us_numaddSpin_cur; // 重ね合わせカウンタ unsigned short us_numaddSpin; // 重ね合わせるスピン数 unsigned char uc_num_add_interval_Spin_encoded; // HK に出すための変数。この値を基に // us_numaddSpin, s_npm.us_IntervalSpin を計算する。 // us_numaddSpin = 2^(uc_num_add_interval_Spin_encoded) // s_npm.us_IntervalSpin = 2^(uc_num_add_interval_Spin_encoded) unsigned char uc_svtbl_chgreq; // データ処理モード変更時、SV table ID の変更要求フラグ unsigned char uc_svtbl_idtgt; // SV table ID の変更するターゲット値 unsigned char uc_svtnl_chg_waitcount; // センサーにコマンド送信する際の wait // 単位は app02_ENA が呼ばれる回数 // データ処理モード変更を行う際、sensor mode 変更コマンドが // 送信されるため、wait を入れる。 unsigned char uc_lenP; // データ処理を行うスピンフェーズの数 / 4 (1, 2, 4, 8, 16, or 32) // uc_lenP/4 が 1 の時は uc_numP = 32 であること (accum mass, accum count mode 時) unsigned char uc_startP; // データ処理を開始するスピンフェーズ / 4 // uc_startP/4 が奇数の時は uc_numP = 32 であること (accum mass, accum count mode 時)。 unsigned char uc_numE; // エネルギー分割数 unsigned char uc_numP, uc_numP0; // スピンフェーズ分割数 unsigned char uc_numC; // セクター分割数 unsigned char uc_numM; // 質量分割数 unsigned short us_numTOF; // TOF 分割数 unsigned char uc_shiftE; // 分解能を落とす場合のビットシフト量 unsigned char uc_shiftP; unsigned char uc_shiftC; unsigned char uc_shiftM; unsigned char uc_shiftTOF; struct _s_ENA_MacroCmd s_MacroCmd; struct _s_ENA_MissionDataBuf s_mdb; struct _s_ENA_NonProcessMode s_npm; struct _s_ENA_DumpMode s_dmp; struct _s_ENA_TblWriteSensor s_tblws; struct _s_ENA_SensorHK s_sHK; struct _s_ENA_OutHK s_oHK; struct _s_ENA_OutMisTlm s_omt[2]; // 0: mission data, 1: mission data として出す HK データ #ifdef d_ENA_AUTODISCRI_MDP // 120704 KA struct _s_ENA_AutoDiscri_MDP s_adis_mdp; #endif #ifdef d_ENA_DEBUG_SUNPULSE unsigned int ui_sunpulseTI; // サンパルスを受信した時刻 (app04_ENA で配られる値) unsigned int ui_sensorTI, uidt, uitmp; #endif #ifdef d_ENA_DEBUG_ENGMODE unsigned int ui_deng_ctr; #endif #ifdef d_ENA_TIMEMEASUREMENT unsigned char uc_timeas_flg; unsigned int ui_ti0[4], ui_ti1[4]; #endif }; struct _s_ENA_processParam { unsigned char uc_packetID; // センサーモード unsigned char uc_slotID; unsigned char uc_Estep, uc_Eindex; unsigned char uc_accumEid, uc_accumPid, uc_accumCid, uc_accumMid; unsigned short us_En; // square root of energy unsigned short us_Linv; // inverse of flight path length unsigned short us_T_1; // flight time unsigned int ui_mass_0_5; // square root of mass struct _s_ENA_CoinciData scdt; }; #ifdef __APP_VARIABLE_MPPE_ENA__ // "app_variable_MPPE_ENA.c" で変数実体を定義する #define d_Lcl_ENA_EXTDEF #else #define d_Lcl_ENA_EXTDEF extern #endif d_Lcl_ENA_EXTDEF struct _s_ENA_CoinciData Gs_ENA_cdt; d_Lcl_ENA_EXTDEF struct _s_ENA_param Gs_ENA_prm; d_Lcl_ENA_EXTDEF struct _s_ENA_processParam Gs_ENA_prsprm; d_Lcl_ENA_EXTDEF unsigned int Gui_ENA_Dumpbuf[d_Lcl_ENA_MISSION_PCKT_SIZE_MAX]; // IFE tables //d_Lcl_ENA_EXTDEF unsigned short Gus_ENA_SVTbl[d_Lcl_ENA_SVTBLNUM][d_Lcl_ENA_SVNUM][d_Lcl_ENA_ESTEPNUM]; d_Lcl_ENA_EXTDEF unsigned char Guc_ENA_AutoDiscriTbl_RAM[d_Lcl_ENA_AUTODISCRITBLNUM_RAM][d_Lcl_ENA_AUTODISCRITBL_TNUM][d_Lcl_ENA_AUTODISCRITBL_DATANUM_STORE]; d_Lcl_ENA_EXTDEF unsigned char Guc_ENA_DiscriTbl_RAM[d_Lcl_ENA_DISCRITBLNUM_RAM][d_Lcl_ENA_DISCRITBL_DATANUM_STORE]; // Look-up tables d_Lcl_ENA_EXTDEF unsigned char Guc_ENA_SVM[d_Lcl_ENA_SVTBLNUM][d_Lcl_ENA_ESTEPNUM]; d_Lcl_ENA_EXTDEF unsigned short Gus_ENA_SVE[d_Lcl_ENA_EINDEX_NUM]; d_Lcl_ENA_EXTDEF unsigned short Gus_ENA_LT[d_Lcl_ENA_STARTSECTNUM + 1][d_Lcl_ENA_RINGNUM + 1][d_Lcl_ENA_STOPSECTNUM + 1][d_Lcl_ENA_EINDEX_NUM]; d_Lcl_ENA_EXTDEF unsigned short Gus_ENA_TT[d_Lcl_ENA_TOFNUM]; d_Lcl_ENA_EXTDEF unsigned char Guc_ENA_MT[d_Lcl_ENA_M_0_5_MAX]; // マクロコマンドテーブル // RAM 格納分 d_Lcl_ENA_EXTDEF unsigned char Guc_ENA_MacroCmdTbl_RAM[d_Lcl_ENA_MACROCMDTblNUM_RAM][d_Lcl_ENA_MACROCMDTbl_size]; // 実行時にテーブルデータを格納する変数 d_Lcl_ENA_EXTDEF unsigned char Guc_ENA_MacroCmd_Tbl[d_Lcl_ENA_MACROCMDTbl_size]; // accumulation tables d_Lcl_ENA_EXTDEF unsigned int Gui_ENA_AccumMat[d_Lcl_ENA_ACCUMTBL_SIZE / 4]; d_Lcl_ENA_EXTDEF unsigned int *Gui_ENA_AccumMat_mass, *Gui_ENA_AccumMat_mass_scale; d_Lcl_ENA_EXTDEF unsigned int *Gui_ENA_AccumMat_cnt_scale; d_Lcl_ENA_EXTDEF unsigned int *Gui_ENA_AccumMat_tof, *Gui_ENA_AccumMat_tof_scale; d_Lcl_ENA_EXTDEF unsigned char *Guc_ENA_AccumMat_EngTblread; // テレメトリ出力用バッファ d_Lcl_ENA_EXTDEF unsigned int Gui_ENA_MisTlmoutbuf[d_Lcl_ENA_MISTLMOUTBUFSIZE / 4]; d_Lcl_ENA_EXTDEF unsigned int Gui_ENA_HK_Tlmoutbuf[d_Lcl_ENA_MISSION_PCKT_OUTHK_PCKTSIZE * 2 / 4]; // HK データを格納するバッファ。ミッションパケットにも HK を出す場合があるため必要。 d_Lcl_ENA_EXTDEF unsigned char Guc_ENA_HK_localbuf[d_Lcl_ENA_MISSION_PCKT_OUTHK_PCKTSIZE]; // app01_MPPE-ENA.c unsigned char app01_ENA_2(unsigned int ui_Cntl, unsigned char uc_Data[], int i_Size, unsigned char uc_extcmd); char app01_ENA_SetProcessParam1(void); char app01_ENA_MacroCmdTblSet(unsigned char *puc_dest, unsigned char uc_id); char app01_ENA_TblReadfromEEPROM(void); // app01_InitVar_MPPE-ENA.c unsigned char app01_InitVar_ENA_2(unsigned char uc_partialflg); // app02_MPPE-ENA.c char app02_ENA_SWHKset(unsigned char *puc, unsigned char uc_link); int app02_ENA_TableWrite_toSensor(void); #ifdef d_ENA_AUTODISCRI_MDP // 120704 KA int app02_ENA_DiscriChg_AutoMDP_toSensor(void); #endif // app04_MPPE-ENA.c char app04_ENA_tlmout(unsigned char *pucinbuf, unsigned short len, unsigned char uc_mishkflg, unsigned char uc_newdata); char app04_ENA_DataProcess1(unsigned char *pucinbuf, int islotnum, unsigned char uc_datatopflg); char app04_ENA_SetProcessParam1(void); char app04_ENA_Lin2Log(unsigned int *pinbuf, unsigned char *poutbuf, unsigned int len, unsigned char depth, unsigned int offset); char app04_ENA_DumpTbl(M_T_TIME_INFO *pt_timeInfo); #endif // __APP_MPPE_ENA_H__