/******************************************************************************* * モジュール名称 :APP14 Mission TLM (L&M) PI tasks * * モジュールラベル :app14_PIs * * タスク区分 :Application-14 MSASI task for Mission TLM (L&M) * * 機能 : * * コーリングシーケンス:void app14_MSASI * * 引数 :なし * * 戻り値 :なし * * 使用上の注意 :グローバル変数はアプリケーション01でまとめて初期化 * * エラー処理 :なし * * 注意 :EDIT権限は、core組 * * 作成日・作成者 :2014/8/26 Y.K. * *******************************************************************************/ #include "app_common.h" #include "app_core.h" #include "dpu_api_proto.h" // *** MDM: local*** #define d_MSASI_pacSize 6528 // MSASI Packet size // *** Local Macro *** // void app14_MSASI_putTLM ( int, unsigned int, int, unsigned char *, int); // *** app14 Common Grobal Variable (in app.h & app_variable.c) *** //#define d_dataRawLen 0x40000 //#define d_dataPacLen 0x2000 //extern unsigned char G14uc_data [d_dataRawLen]; // for RAW data: 262.11 kB [EWO:80packet, Others:more than 1Block] //extern unsigned char G14uc_packet[d_dataPacLen]; // for Packet data: 8kB - max [Packet size to DMC: 1kB-max] void app14_MSASI( unsigned int ui_sunpulseCnt ) { int i; int i_flag; unsigned int ui_flag; // === BLOCK read === int i_numNewBlock; // Num of blocks with new data *** M_T_BLOCK_INFO t_blockInfo; // unsigned int ui_createTime Block 生成開始時衛星時刻(1LSB=31,25ms) // int i_replyNum Block 登録Read-Reply個数 // char c_invalidFlg Block 内データ異常 [0:異常なし 1:異常あり] // unsigned int ui_blockIndex LongBuffer/ShortBuffer 内Block特定番号 (先頭Block:0) M_T_TIME_INFO t_timeInfo; // unsigned int ui_currentTime2; :衛星時刻(1LSB=31.25ms) // === MSASI data output === int i_dataId; // MSASI-Header: unsigned int ui_dataTi; // MSASI-Header: TI unsigned int ui_load0; // ------------------------------------------- // -- Set at the oldest non-processed block -- // ------------------------------------------- // Newest Block i_numNewBlock = app_SetNonProcBlock( Gd_N_MSAS, 0, // [INPUT] NodeID = Gd_N_MSAS, Data ID = 0 0, // [INPUT] Buffer ID = 0 (LONG) [MSASI does not use Short-buffer.] Gui_TLMm_blockTime[Gd_N_MSAS], // [INPUT] TI of Processed Block &t_blockInfo); // [OUTPUT] Block Info // (return) >0:Num of blocks, <=0:No data (error) if ( i_numNewBlock < 1 ) { Gui_TLMm_blockTime[Gd_N_MSAS] = t_blockInfo.ui_createTime; // === shift to newest data for SKIP === return; } // --------------------- // -- Read Block data -- // --------------------- // i_flag = dpu_getTime( &t_timeInfo ); ui_load0 = t_timeInfo.ui_currentTime2; for (i=0; i Gui_TLMm_blockTime[Gd_N_MSAS] && // NEW data t_blockInfo.i_replyNum > 0 && // Data available t_blockInfo.c_invalidFlg == 0 ) { // Data correct for (i=0; i<32; i++) { // MSASI: 32 packet / block // **************************** // **** Packet header read **** // **************************** // RMAP-read-header 12B // Contents 6528B B0-3 TI0 highest->lowest (LSB:1.925ms) // B4-5 TI1 high ->low (LSB:1.925ms) <<>> // B6-7 n/a // B8 b7 DUMMY? 0:ダミーデータ 1:OK // b6 DR 0:A(L) 1:B(M) // B9-10 シーケンスパケットカウンタ 観測データのパケット数をカウントアップ(1シーケンス=1スピンごとにリセット) // B11 シーケンスカウンタ 観測データのシーケンス数を1スピンごとにカウントアップ // B12 パケットカウンタ 観測データおよびダミーデータのパケット数を通し番号でカウントアップ // B13 b5-0 サンパルスカウンタ サンパルスごとにカウントアップ(real time HKと同じ) // B128-6527 画像データ 6400 byte 200 byte/image x 32 image // **************************** i_flag = app_GetPacket( 14, // [INPUT] App-No:14 Gd_N_MSAS, 0, // [INPUT] NodeID = Gd_N_MSAS, Data ID = 0 0, // [INPUT] Buffer ID = 0 (LONG) [MSASI does not use Short-buffer.] &t_blockInfo, // [INPUT] Block Info i, // [INPUT] Packet No (先頭:0) 8, // [INPUT] OFFSET読出開始番地(8の倍数) 16, // [INPUT] 読出データ数: B8 - B23 G14uc_data ); // [OUTPUT] 1 Block Data - copied if ( i_flag ) continue; Gui_TLMm_blockTime[Gd_N_MSAS] = t_blockInfo.ui_createTime; // !!! Successfuly Processed !!! // ------------------------------------ // -- Decode Packet: DUMMY / ERROR ? -- // ------------------------------------ i_dataId = G14uc_data[12] & 0x80; // DUMMY? B8:b7 0:ダミーデータ 0x80:OK if ( i_dataId == 0 && (Guc_Spec_Code & 0x10) == 0 ) continue; // dummy data: skip! [Guc_Spec_Code & 0x10 > 0 .... DISABLE] // ************************** // **** Packet read: ALL **** // ************************** i_flag = app_GetPacket( 14, // [INPUT] App-No:14 Gd_N_MSAS, 0, // [INPUT] NodeID = Gd_N_MSAS, Data ID = 0 0, // [INPUT] Buffer ID = 0 (LONG) [MSASI does not use Short-buffer.] &t_blockInfo, // [INPUT] Block Info i, // [INPUT] Packet No (先頭:0) 8, // [INPUT] OFFSET読出開始番地(8の倍数) Gd_Pac_MSAS-8, // [INPUT] 読出データ数: G14uc_data ); // [OUTPUT] 1 Block Data - copied if ( i_flag ) continue; // ------------------- // -- Decode Packet -- // ------------------- i_dataId = G14uc_data[12] & 0x40; // DR B8:b6 0:A(L) 0x40:B(M) if (i_dataId == 0) i_dataId=2; else i_dataId=3; // --> 2:A(L) 3:B(M) memcpy( &ui_dataTi, &(G14uc_data[4]), 4); // TI0 B0-3 /* ui_dataTi = ((unsigned int)(G14uc_data[4]) << 24) + // TI0 B0-3 ((unsigned int)(G14uc_data[5]) << 16) + ((unsigned int)(G14uc_data[6]) << 8) + ((unsigned int)(G14uc_data[7]) ); */ ui_dataTi += app_ti_spinRate ( ui_dataTi, Gd_N_MSAS, &ui_flag ); // added: 111224 ui_dataTi += ((unsigned int)(G14uc_data[8]) << 8) + // TI1 B0-3 ((unsigned int)(G14uc_data[9]) ); // ***************** // **** Put TLM **** // ***************** i_flag = app_PutTlm( 14, // [INPUT] APP-NUM = 14 Gd_N_MSAS, // [INPUT] Node-ID 0, // [INPUT] Data-ID Gd_N_MSAS, // [INPUT] Header-ID (for PID-ID, CAT-ID setting) i_dataId, // [INPUT] 2:A(L) 3:B(M) // **DR-ID (for CAT-ID) [0:HK 1:OS 2:L 3:M 4-9:H(0-5)] Guc_TLMm_cmp[Gd_N_MSAS], // [INPUT] Comp mode [0:non 1:JPEG-rev 2:Math 3-7:After-User-COMP] (int)(G14uc_data[15]), // [INPUT] MSASI シーケンスカウンタ>> used as "PID" // **Packet ID <<<< USER-DEF: 0x00- 0xFF >>>> ui_dataTi, // [INPUT]**Data TI <<<< USER-DEF: 0x00000000-0xFFFFFFFF >>>> Guc_cmdDummy, // [INPUT] Comment <<<< USER-DEF: <128B >>>> 0, // [INPUT] Comment - Size <<<< USER-DEF: <128B >>>> &(G14uc_data[4]), // [INPUT]**Data <<<< USER-DEF: <0x1E00 >>>> d_MSASI_pacSize); // [INPUT]**Data - Size <<<< USER-DEF: <0x1E00 >>>> /* // ******************************* // **** data packet: bitshift **** // ******************************* for (i=132; i<6532; i+=2) { i_flag = ( ( (G14uc_data[i] & 0x7F) <<8) + G14uc_data[i+1] ) << 1; G14uc_data[i+1] = ( i_flag & 0xFE) + ( G14uc_data[i+1] >> 7 ); G14uc_data[i] = ( i_flag >> 8 ) & 0xFF; } i_flag = app_PutTlm( 14, // [INPUT] APP-NUM = 14 Gd_N_MSAS, // [INPUT] Node-ID 0, // [INPUT] Data-ID Gd_N_MSAS, // [INPUT] Header-ID (for PID-ID, CAT-ID setting) i_dataId, // [INPUT] 2:A(L) 3:B(M) // **DR-ID (for CAT-ID) [0:HK 1:OS 2:L 3:M 4-9:H(0-5)] Guc_TLMm_cmp[Gd_N_MSAS], // [INPUT] Comp mode [0:non 1:JPEG-rev 2:Math 3-7:After-User-COMP] (int)(G14uc_data[15]), // [INPUT] MSASI シーケンスカウンタ>> used as "PID" // **Packet ID <<<< USER-DEF: 0x00- 0xFF >>>> ui_dataTi, // [INPUT]**Data TI <<<< USER-DEF: 0x00000000-0xFFFFFFFF >>>> Guc_cmdDummy, // [INPUT] Comment <<<< USER-DEF: <128B >>>> 0, // [INPUT] Comment - Size <<<< USER-DEF: <128B >>>> &(G14uc_data[4]), // [INPUT]**Data <<<< USER-DEF: <0x1E00 >>>> d_MSASI_pacSize); // [INPUT]**Data - Size <<<< USER-DEF: <0x1E00 >>>> */ // 他のcounter B9-10 シーケンスパケットカウンタ 観測データのパケット数をカウントアップ(1シーケンス=1スピンごとにリセット) // B11 シーケンスカウンタ 観測データのシーケンス数を1スピンごとにカウントアップ // B12 パケットカウンタ 観測データおよびダミーデータのパケット数を通し番号でカウントアップ // B13 b5-0 サンパルスカウンタ サンパルスごとにカウントアップ(real time HKと同じ) // Cruise special --- 6kB / 8-sec --- if (Guc_OpeMode) { dpu_waitSunpulse(2); // app_WhoWhere( 5, Gd_N_MSAS, 0x10 ); } // Cruise special } } // i_flag = dpu_getTime( &t_timeInfo ); if ( t_timeInfo.ui_currentTime2 - ui_load0 > 128 ) break; // If "time-consumption > 4sec" once go-out // To next block i_flag = app_NextBlock( Gd_N_MSAS, 0, // [INPUT] NodeID = Gd_N_MSAS, Data ID = 0 0, // [INPUT] Buffer ID = 0 (LONG) [MSASI does not use Short-buffer.] &t_blockInfo); // [OUTPUT] Block Info if ( i_flag ) break; // no data } return; }