//連続パケットチェックを多重にした //msa_procはview_mdpより新しい #define TRUE 1 #define FALSE 0 #define DEC_PUTPUT //MATLAB用に10進で出力 //################ 一つ選ぶ ############# // #define _PROC_MEA1 #define _PROC_MEA2 // #define _PROC_MEA_VM_DEC //VMのみ出力:Et, 3DはHEXにて // #define _PROC_MIA_ // #define _PROC_MIA_VM_DEC //VMのみ出力:Et, 3DはHEXにて // #define _PROC_MSA_ //####################################### // // make // ./ql_dump_mis.exe <(rawdata) output_f_name #include #include #include #include "./app_comp_rice.h" FILE *fp; void swt_endian(unsigned char*, unsigned char*, int); void proc_mea(unsigned char*, unsigned char*, int); void proc_mia(unsigned char*, unsigned char*, int); void proc_msa(unsigned char*, unsigned char*, int); int msa_len(unsigned char*); char USHORTtoDBL(double*, unsigned short*, unsigned int); // ***************** MAIN ******************* int main( int argc, char **argv ) { int i; int i_linkout = 0; int i_numData = 0; int i_PacSize = 0; int i_APID1, i_APID2; unsigned char uc_dat[0x2000]; //rawdata < 1kB unsigned char uc_dat1[0x2000]; //rawdata統合 < 0x2000 (8kB) MSAはraw1 = raw3 unsigned char uc_dat2[0xa000]; //圧縮解凍後 unsigned char uc_dat3[0xa000]; //ENDIAN変換後 unsigned char uc_cmmt[20]; unsigned short us_len0, us_len1; unsigned short us_mode, us_hkmis; FILE *fp_lm, *fp_mm, *fp_hm, *fp_hr; int i_s = 0; int i_sttl = 0; char out_fnmeLM[100]; char out_fnmeMM[100]; char out_fnmeHM[100]; char out_fnmeHR[100]; sprintf(out_fnmeLM, "./dat/%s.lm", argv[1]); sprintf(out_fnmeMM, "./dat/%s.mm", argv[1]); sprintf(out_fnmeHM, "./dat/%s.hm", argv[1]); sprintf(out_fnmeHR, "./dat/%s.txt", argv[1]); if(NULL == (fp_lm=fopen(out_fnmeLM,"w"))) { printf("cannot open %s ¥n", out_fnmeLM); exit(0); } if(NULL == (fp_mm=fopen(out_fnmeMM,"w"))) { printf("cannot open %s ¥n", out_fnmeMM); exit(0); } if(NULL == (fp_hm=fopen(out_fnmeHM,"w"))) { printf("cannot open %s ¥n", out_fnmeHM); exit(0); } if(NULL == (fp_hr=fopen(out_fnmeHR,"w"))) { printf("cannot open %s ¥n", out_fnmeHR); exit(0); } fprintf(fp_hr, "----------------"); // ***APID*** #ifdef _PROC_MEA1 i_APID1 = 0x0d; i_APID2 = 0x28; #endif #ifdef _PROC_MEA2 i_APID1 = 0x0d; i_APID2 = 0x30; #endif #ifdef _PROC_MIA_ i_APID1 = 0x0d; i_APID2 = 0x38; #endif #ifdef _PROC_MSA_ i_APID1 = 0x0d; i_APID2 = 0x40; #endif //i_APID1 = 0x0e; i_APID2 = 0x40; //MSA HK fprintf(fp_hr, "[APID] %02X%02X¥n", i_APID1, i_APID2); fprintf(fp_hr, "APID INC LENGTH TI Cat CMP etc | " ); fprintf(fp_hr, "ND Pid TI Inc Cmmt Dlen¥n" ); // ----------------------------------------------------------- // ***MAIN*** while (1) { uc_dat[i_numData] = fgetc(stdin); i_numData ++; if (i_numData == 1) { if ( uc_dat[0] != i_APID1 ) { i_linkout ++; i_numData = 0; } } else if (i_numData == 2) { if ( uc_dat[1] != i_APID2 ) { i_numData = 0; } } else if (i_numData == 6) { i_PacSize = uc_dat[4]*0x100 + uc_dat[5]; } else if (i_numData == 14) { if ( uc_dat[13] != 0x00 ){ fprintf(stderr, "%d:%02X¥n", i_numData, uc_dat[i_numData]); i_numData = 0; } } else if (i_numData == i_PacSize+7) { //1st HEADER printf ("%02X%02X %02X%02X %02X%02X ", //APID, Inc, Length uc_dat[0],uc_dat[1], uc_dat[2],uc_dat[3], uc_dat[4],uc_dat[5]); printf ("%02X%02X%02X%02X %02X %02X %02X %02X | ", //TI, Inc, Length uc_dat[6],uc_dat[7],uc_dat[8],uc_dat[9], uc_dat[10], uc_dat[11], uc_dat[12], uc_dat[13]); //LMHMode HK MIS if (uc_dat[10] == 0x21) { us_mode = 0; fp = fp_hr; }//HK else if (uc_dat[10] == 0x33 && (uc_dat[11] & 7) == 2) { us_mode = 1; fp = fp_lm; }//L-mode else if (uc_dat[10] == 0x3d && (uc_dat[11] & 7) == 3) { us_mode = 2; fp = fp_mm; }//M-mode //else if (uc_dat[10] == 0x5b && (uc_dat[11] & 7) >= 4) { us_mode = 3; fp = fp_hm; }//H-mode else { us_mode = 3; fp = fp_hm; }//H-mode //TI of 1st Header #ifdef DEC_PUTPUT fprintf(fp, "%d", uc_dat[7]*0x10000 + uc_dat[8]*0x100 + uc_dat[9]); #else fprintf(fp, "##MDPTI: "); for (i = 6; i < 12; ++i) fprintf(fp, "%02X", uc_dat[i]); //for (i = 7; i < 10; ++i) fprintf(fp, "%02X", uc_dat[i]); #endif fprintf(fp, " 9 9 9 9¥n"); //2nd HEADER以降 if (uc_dat[14] == 0) { //複数パケット先頭 for (i = 18; i < 28; ++i) printf("%02X ", uc_dat[i]); printf ("+ " ); for (i = 28; i < 36; ++i) printf("%02X ", uc_dat[i]); //COMMENT printf ("+ " ); memcpy(uc_cmmt, &uc_dat[28], 8); us_len0 = uc_dat[34]*0x100 + uc_dat[35]; us_len1 = uc_dat[32]*0x100 + uc_dat[33]; memcpy(uc_dat1, &uc_dat[36], i_PacSize+7 -36); //COMMENTの後からデータ部のみ i_s = i_PacSize+7 -36; i_sttl += i_PacSize+7 -36; printf ("¥n" ); } else if (uc_dat[14] < 8) { //複数パケット 継続 //i_numData = 0; continue; //exit(1);///////////////// //printf ("¥n"); memcpy(uc_dat1 + i_s, &uc_dat[18], i_PacSize+7 -18); i_s += i_PacSize+7 -18; i_sttl += i_PacSize+7 -18; if (i_PacSize != 0x040B) { //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//最終パケット for (i = 0; i < 0xa000; ++i) uc_dat3[i] = 0xff; if (i_APID2 != 0x40) { //MSA以外 Rice_Uncompress(uc_dat1, uc_dat2, us_len0, us_len1, RICE_FMT_UINT16); swt_endian(uc_dat2, uc_dat3, us_len1); } else memcpy(uc_dat3, uc_dat1, 0x2000); //MSA printf (" ORIG(%04X) : CRRCT(%04X) + ", us_len0, i_sttl); i_sttl = 0; for (i=0; i<8; i++) printf ("%02X ", uc_dat3[i] ); //HDR printf ("¥n" ); //##################### データ解読 ######################## if (i_APID2 == 0x28) proc_mea(uc_cmmt, uc_dat3, us_mode); if (i_APID2 == 0x30) proc_mea(uc_cmmt, uc_dat3, us_mode); if (i_APID2 == 0x38) proc_mia(uc_cmmt, uc_dat3, us_mode); if (i_APID2 == 0x40) proc_msa(uc_cmmt, uc_dat3, us_mode); for (i=0; i< 0x2000; i++) uc_dat1[i] = 0; } else { //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//途中パケット printf ("¥n" ); i_numData = 0; continue; } } else { //単独パケット for (i = 14; i < 24; ++i) printf("%02X ", uc_dat[i]); printf ("| " ); for (i = 24; i < 32; ++i) printf("%02X ", uc_dat[i]); printf ("| " ); memcpy(uc_cmmt, &uc_dat[24], 8); us_len0 = uc_dat[30]*0x100 + uc_dat[31]; us_len1 = uc_dat[28]*0x100 + uc_dat[29]; for (i = 0; i < 0xa000; ++i) uc_dat3[i] = 0xff; if (i_APID2 != 0x40) { //MSA以外 Rice_Uncompress(&uc_dat[32], uc_dat2, us_len0, us_len1, RICE_FMT_UINT16); swt_endian(uc_dat2, uc_dat3, us_len1); } else memcpy(uc_dat3, &uc_dat[32], 0x2000 - 32); //MSA COMMENTの後から for (i=0; i<8; i++) printf ("%02X ", uc_dat3[i] ); //HDR printf ("¥n" ); //##################### データ解読 ######################## if (i_APID2 == 0x28) proc_mea(uc_cmmt, uc_dat3, us_mode); if (i_APID2 == 0x30) proc_mea(uc_cmmt, uc_dat3, us_mode); if (i_APID2 == 0x38) proc_mia(uc_cmmt, uc_dat3, us_mode); if (i_APID2 == 0x40) proc_msa(uc_cmmt, uc_dat3, us_mode); for (i=0; i< 0x2000; i++) uc_dat1[i] = 0; } i_numData = 0; for (i=0; i< 0x2000; i++) uc_dat[i] = 0; } if ( i_linkout > 10000) break; } fclose(fp_lm); fclose(fp_mm); fclose(fp_hm); fclose(fp_hr); } void proc_mea(unsigned char uc_cmt[], unsigned char uc_dat[], int i_mode) { int i, i_len, i_s, i_n, id, j; double f_vm[13*6*2]; unsigned short us_vm[13*6*2]; i_len = uc_cmt[4]*0x100 + uc_cmt[5]; #ifdef DEC_PUTPUT //TI fprintf(fp, "%d ", uc_dat[1]*0x10000 + uc_dat[2]*0x100 + uc_dat[3]); //LMH fprintf(fp, "%d ", i_mode); //Length fprintf(fp, "%d %d 1111¥n", uc_cmt[4]*0x100 + uc_cmt[5], uc_cmt[6]*0x100 + uc_cmt[7]); #ifdef _PROC_MEA_VM_DEC id = uc_cmt[3] & 0x3; if (i_mode == 2) { //Mモード i_s = 16; //fprintf(fp, "Et-OMN(2,4s):¥n"); i_n = 1; if (id == 1) i_n = 2; //fprintf(fp, "%d ", 110 + i_n); //for (i = 0; i < i_n *32; ++i) fprintf(fp, "%d ", uc_dat[2*i +1 +i_s]*0x100 + uc_dat[2*i +i_s]); //fprintf(fp, "¥n") ; i_s += i_n*32*2; //fprintf(fp, "%d ", 220 + i_n); //fprintf(fp, "Et-PAP(2,4s): ¥n"); //for (i = 0; i < i_n*64; ++i) fprintf(fp, "%d ", uc_dat[2*i +1 +i_s]*0x100 + uc_dat[2*i +i_s]); i_s += i_n*64*2; //fprintf(fp, "¥n"); //fprintf(fp, "VM(2,4s): ¥n"); fprintf(fp, "%d ", 330 + i_n); //USHORT(16bit) --> double(64bit) for (i = 0; i < i_n*13*6; ++i) us_vm[i] = uc_dat[2*i +i_s]*0x100 + uc_dat[2*i +1 +i_s]; USHORTtoDBL(f_vm, us_vm, i_n*13*6); for (i = 0; i < i_n*13*6; ++i) fprintf(fp, "%.2e ", f_vm[i]); //for (i = 0; i < i_n*13*6; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); i_s += i_n*13*6*2; i = 0; if ((uc_cmt[3] >> 4 & 1)) { // while (1) { // fprintf(fp, "d ", uc_dat[2*i +1 +i_s]*0x100 + uc_dat[2*i +i_s]); // if (2*++i + i_s >= i_len) break; // } // fprintf(fp, "¥n"); } } else if (i_mode == 1) { //Lモード i_s = 8; //fprintf(fp, "Et-OMN(4s):¥n"); //fprintf(fp, "7777 "); //for (i = 0; i < 16; ++i) fprintf(fp, "%d ", uc_dat[2*i +1 +i_s]*0x100 + uc_dat[2*i +i_s]); fprintf(fp, "¥n"); if ((uc_cmt[3] >> 3 & 1)) { i_s = 8 +16*2+8; // fprintf(fp, "8888 "); //fprintf(fp, "Et-PAP(16s):¥n"); // for (i = 0; i < 64; ++i) fprintf(fp, "%d ", uc_dat[2*i +1 +i_s]*0x100 + uc_dat[2*i +i_s]); fprintf(fp, "¥n"); } if ((uc_cmt[3] >> 3 & 1)) { i_s = 8 +16*2+8 +128; //fprintf(fp, "VM(16s):¥n"); //USHORT(16bit) --> double(64bit) for (i = 0; i < 13*6; ++i) us_vm[i] = uc_dat[2*i +i_s]*0x100 + uc_dat[2*i +1 +i_s]; USHORTtoDBL(f_vm, us_vm, 13*6); fprintf(fp, "9999 "); for (j = 0; j < 6; ++j) { for (i = 0; i < 13; ++i) fprintf(fp, "%.2e ", f_vm[i+13*j]); }fprintf(fp, "¥n"); } if ((uc_cmt[3] >> 4 & 1)) { //fprintf(fp, "3D-M(600s):¥n"); // while (1) { // fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); // if (2*++i + i_s >= i_len) break; // } // fprintf(fp, "¥n"); } } #endif #else //fprintf(fp, "---------------------------------------------¥n"); //HEADER for (i = 0; i < 8; ++i) fprintf(fp, "%02X", uc_cmt[i]); fprintf(fp, " "); fprintf(fp, "HEADER: "); for (i = 0; i < 8; ++i) fprintf(fp, "%02X ", uc_dat[i]); fprintf(fp, "¥n"); //decribing CMMNT fprintf(fp, "COMMENT: "); if ( uc_cmt[2] & 0x01 ) fprintf(fp, "SNP "); else fprintf(fp, "AVE "); if ( uc_cmt[2] >> 1 & 0x01 ) fprintf(fp, "ENG#"); else fprintf(fp, "SCI#"); fprintf(fp, "%d ", (uc_cmt[2] >> 2 & 0xf)); fprintf(fp, "DIV#%d ", (uc_cmt[2] >> 6 & 0x3)); //decribing INFO fprintf(fp, "DataID=%d ", (uc_cmt[3] & 0x3)); id = uc_cmt[3] & 0x3; fprintf(fp, "Pot(%d) ", (uc_cmt[3] >> 2 & 1)); fprintf(fp, "Inc:"); for (i = 3; i < 5; ++i) if ((uc_cmt[3] >> i & 1)) fprintf(fp, "*"); else fprintf(fp, "-"); fprintf(fp, "¥n"); if (i_mode == 2) { //Mモード i_s = 8; fprintf(fp, "INF2: 6b x5("); fprintf(fp, "%d ", uc_dat[i_s ] >> 2 & 0x3f); //6 fprintf(fp, "%d ", uc_dat[i_s ] << 4 & 0x30 | uc_dat[i_s + 1] >> 4 & 0x0f); //2 4 fprintf(fp, "%d ", uc_dat[i_s + 1] << 2 & 0x3c | uc_dat[i_s + 2] >> 6 & 0x03); // 4 2 fprintf(fp, "%d ", uc_dat[i_s + 2] & 0x3f); // 6 fprintf(fp, "%d) ", uc_dat[i_s + 3] >> 2 & 0x3f); // 6 fprintf(fp, "Sc#-MGF:%d ", uc_dat[i_s + 4]); fprintf(fp, "En#-VM:%d ", uc_dat[i_s + 5]); fprintf(fp, "En#-Swp:%d ", uc_dat[i_s + 6]); fprintf(fp, "Etbl:%d¥n", uc_dat[i_s + 7]); i_s += 8; fprintf(fp, "Et-OMN(2,4s):¥n"); if (id == 0) i_n = 1; else if (id == 1) i_n = 2; for (i = 0; i < i_n*32; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); i_s += i_n*32*2; fprintf(fp, "Et-PAP(2,4s): ¥n"); for (i = 0; i < i_n*64; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); i_s += i_n*64*2; fprintf(fp, "¥n"); fprintf(fp, "VM(2,4s): ¥n"); //USHORT(16bit) --> double(64bit) for (i = 0; i < i_n*13*6; ++i) us_vm[i] = uc_dat[2*i +i_s]*0x100 + uc_dat[2*i +1 +i_s]; USHORTtoDBL(f_vm, us_vm, i_n*13*6); for (i = 0; i < i_n*13*6; ++i) fprintf(fp, "%.2e ", f_vm[i]); for (i = 0; i < i_n*13*6; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); i_s += i_n*13*6*2; i = 0; if ((uc_cmt[3] >> 4 & 1)) { while (1) { fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); if (2*++i + i_s >= i_len) break; } fprintf(fp, "¥n"); } } else if (i_mode == 1) { //Lモード fprintf(fp, "Et-OMN(4s):¥n"); i_s = 8; for (i = 0; i < 16; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); if ((uc_cmt[3] >> 3 & 1)) { i_s = 8 +16*2; fprintf(fp, "INF2(16s): 6b x5("); fprintf(fp, "%d ", uc_dat[i_s ] >> 2 & 0x3f); //6 fprintf(fp, "%d ", uc_dat[i_s ] << 4 & 0x30 | uc_dat[i_s + 1] >> 4 & 0x0f); //2 4 fprintf(fp, "%d ", uc_dat[i_s + 1] << 2 & 0x3c | uc_dat[i_s + 2] >> 6 & 0x03); // 4 2 fprintf(fp, "%d ", uc_dat[i_s + 2] & 0x3f); // 6 fprintf(fp, "%d) ", uc_dat[i_s + 3] >> 2 & 0x3f); // 6 fprintf(fp, "Sc#-MGF:%d ", uc_dat[i_s + 4]); fprintf(fp, "En#-VM:%d ", uc_dat[i_s + 5]); fprintf(fp, "En#-Swp:%d ", uc_dat[i_s + 6]); fprintf(fp, "Etbl:%d¥n", uc_dat[i_s + 7]); i_s = 8 +16*2+8; fprintf(fp, "Et-PAP(16s):¥n"); for (i = 0; i < 64; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); i_s = 8 +16*2+8 +128; fprintf(fp, "VM(16s):¥n"); //USHORT(16bit) --> double(64bit) for (i = 0; i < 13*6; ++i) us_vm[i] = uc_dat[2*i +i_s]*0x100 + uc_dat[2*i +1 +i_s]; USHORTtoDBL(f_vm, us_vm, 13*6); for (i = 0; i < 13*6; ++i) fprintf(fp, "%.2e ", f_vm[i]); for (i = 0; i < 13*6; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); fprintf(fp, "¥n"); } i = 0; i_s = 8 + 16*2 +(uc_cmt[3] >> 3 & 1)*(8+156 + 128); if ((uc_cmt[3] >> 4 & 1)) { fprintf(fp, "3D-M(600s):¥n"); while (1) { fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); if (2*++i + i_s >= i_len) break; } fprintf(fp, "¥n"); } } else if (i_mode == 3) { //Hモード fprintf(fp, "3D-H(4s):¥n"); i = 0; i_s = 8; while (1) { fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); if (2*++i + i_s >= i_len) break; } fprintf(fp, "¥n"); } #endif } void proc_mia(unsigned char uc_cmt[], unsigned char uc_dat[], int i_mode) { int i, j, i_s; double f_vm[20]; unsigned short us_vm[20]; #ifdef DEC_PUTPUT //TI fprintf(fp, "%d ", uc_dat[1]*0x10000 + uc_dat[2]*0x100 + uc_dat[3]); //LMH fprintf(fp, "%d ", i_mode); //Length fprintf(fp, "%d %d 1111¥n", uc_cmt[4]*0x100 + uc_cmt[5], uc_cmt[6]*0x100 + uc_cmt[7]); #ifdef _PROC_MIA_VM_DEC i_s = 28; //TI fprintf(fp, "%d ", uc_dat[1]*0x10000 + uc_dat[2]*0x100 + uc_dat[3]); //SIZE fprintf(fp, "%d %d ", uc_cmt[4]*0x100 + uc_dat[5], uc_cmt[6]*0x100 + uc_cmt[7]); //MIA MODE fprintf(fp, "%d 9999¥n", uc_dat[8] >> 4 & 0xf); if(i_mode == 1) { //##### L ##### switch(uc_cmt[3] & 0x3) { case 0: //DataID = 0; for (i = 0; i < 20; ++i) us_vm[i] = uc_dat[2*i +i_s]*0x100 + uc_dat[2*i +1 +i_s]; USHORTtoDBL(f_vm, us_vm, 20); fprintf(fp, "1111 "); for (i = 0; i < 10; ++i) fprintf(fp, "%.2e ", f_vm[i]); fprintf(fp, "¥n"); fprintf(fp, "1112 "); fname = '../../mmo130514/dat/MIA.lm'; for (i = 10; i < 20; ++i) fprintf(fp, "%.2e ", f_vm[i]); fprintf(fp, "¥n"); i_s += 40; //VM(16s) if ((uc_cmt[3] >> 4 & 1)) { fprintf(fp, "1113 "); for (i = 0; i < 10; ++i) us_vm[i] = uc_dat[2*i +i_s]*0x100 + uc_dat[2*i +1 +i_s]; USHORTtoDBL(f_vm, us_vm, 10); for (i = 0; i < 10; ++i) fprintf(fp, "%.2e ", f_vm[i]); fprintf(fp, "¥n"); } break; case 1: case 2: fprintf(fp, "1111 "); for (i = 0; i < 10; ++i) us_vm[i] = uc_dat[2*i +i_s]*0x100 + uc_dat[2*i +1 +i_s]; USHORTtoDBL(f_vm, us_vm, 10); for (i = 0; i < 10; ++i) fprintf(fp, "%.2e ", f_vm[i]); fprintf(fp, "¥n"); break; default: break; } } #endif #else //fprintf(fp, "---------------------------------------------¥n"); //HEADER for (i = 0; i < 8; ++i) fprintf(fp, "%02X", uc_cmt[i]); fprintf(fp, " ¥n"); fprintf(fp, "HK:"); for (i = 0; i < 28; ++i) fprintf(fp, "%02X", uc_dat[i]); fprintf(fp, "¥n"); //TI fprintf(fp, "%02x%02x%02x%02x ", uc_dat[0],uc_dat[1],uc_dat[2],uc_dat[3]); //SIZE fprintf(fp, "%02x%02x<<%02x%02x ", uc_cmt[4],uc_dat[5],uc_cmt[6],uc_cmt[7]); //MIA MODE fprintf(fp, "MODE:%d ", uc_dat[8] >> 4 & 0xf); //decribing CMMNT if ( uc_cmt[2] & 0x01 ) fprintf(fp, "SNA "); else fprintf(fp, "AVE "); if ( uc_cmt[2] >> 1 & 0x01 ) fprintf(fp, "ENG#"); else fprintf(fp, "SCI#"); fprintf(fp, "%d ", (uc_cmt[2] >> 2 & 0xf)); //************************* // L mode //************************* if(i_mode == 1) { //INFO fprintf(fp, "DataID=%d ", (uc_cmt[3] & 0xf)); if ((uc_cmt[3] >> 4 & 1)) fprintf(fp, "*"); else fprintf(fp, "-"); if ((uc_cmt[3] >> 5 & 1)) fprintf(fp, "*"); else fprintf(fp, "-"); if ((uc_cmt[3] >> 6 & 1)) fprintf(fp, "*"); else fprintf(fp, "-"); if ((uc_cmt[3] >> 7 & 1)) fprintf(fp, "1¥n"); else fprintf(fp, "-¥n"); i_s = 28; if ( (uc_cmt[3] & 0x3) == 0 ) { //DataID = 0; //VM(4s) {SW + ALL} fprintf(fp, "VM(4s)[sw+all]:¥n"); for (i = 0; i < 10; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); for (i = 10; i < 20; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); //VM >> float for (i = 0; i < 20; ++i) us_vm[i] = uc_dat[2*i +i_s]*0x100 + uc_dat[2*i +1 +i_s]; USHORTtoDBL(f_vm, us_vm, 20); for (i = 0; i < 10; ++i) fprintf(fp, "%.2e ", f_vm[i]); fprintf(fp, "¥n"); for (i = 10; i < 20; ++i) fprintf(fp, "%.2e ", f_vm[i]); fprintf(fp, "¥n"); i_s += 40; //VM(16s) if ((uc_cmt[3] >> 4 & 1)) { fprintf(fp, "VM(16s)[sw]:¥n"); for (i = 0; i < 10; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); //VM >> float for (i = 0; i < 10; ++i) us_vm[i] = uc_dat[2*i +i_s]*0x100 + uc_dat[2*i +1 +i_s]; USHORTtoDBL(f_vm, us_vm, 10); for (i = 0; i < 10; ++i) fprintf(fp, "%.2e ", f_vm[i]); fprintf(fp, "¥n"); i_s += 20; } //Et(32s) if ((uc_cmt[3] >> 5 & 1)) { fprintf(fp, "Et(32s):¥n"); i = 0; for (i = 0; i < 128*5; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); i_s += 128*5*2; } //3D-LL(3600s) if (uc_cmt[3] >> 6 & 1) { if (uc_cmt[3] >> 7 & 1) fprintf(fp, "3D-LL(3600s)(0):¥n"); else fprintf(fp, "3D-LL(3600s)(1-15):¥n"); for (i = 0; i < 17*32; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); } } else if ( (uc_cmt[3] & 0x3) == 1 ) { //DataID = 1; //VM(4s) fprintf(fp, "VM(4s):¥n"); for (i = 0; i < 10; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); //VM >> float for (i = 0; i < 10; ++i) us_vm[i] = uc_dat[2*i +i_s]*0x100 + uc_dat[2*i +1 +i_s]; USHORTtoDBL(f_vm, us_vm, 10); for (i = 0; i < 10; ++i) fprintf(fp, "%.2e ", f_vm[i]); fprintf(fp, "¥n"); i_s += 20; //Et(4s) fprintf(fp, "Et(4s):¥n"); for (i = 0; i < 4*32; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); i_s += 4*32*2; //3D-LL(3600s) if (uc_cmt[3] >> 6 & 1) { if (uc_cmt[3] >> 7 & 1) fprintf(fp, "3D-LL(3600s)(0):¥n"); else fprintf(fp, "3D-LL(3600s)(1-15):¥n"); for (i = 0; i < 17*32; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); } } else if ( (uc_cmt[3] & 0x3) == 2 ) { //DataID = 2; //VM(4s) fprintf(fp, "VM(4s):¥n"); for (i = 0; i < 10; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); //VM >> float for (i = 0; i < 10; ++i) us_vm[i] = uc_dat[2*i +i_s]*0x100 + uc_dat[2*i +1 +i_s]; USHORTtoDBL(f_vm, us_vm, 10); for (i = 0; i < 10; ++i) fprintf(fp, "%.2e ", f_vm[i]); fprintf(fp, "¥n"); i_s += 20; //Et(4s) fprintf(fp, "Et(32s):¥n"); for (i = 0; i < 4*32; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); i_s += 4*32*2; //3D-LL(600s) if (uc_cmt[3] >> 6 & 1) { if (uc_cmt[3] >> 7 & 1) fprintf(fp, "3D-LL(600s)(0):¥n"); else fprintf(fp, "3D-LL(600s)(1-15):¥n"); for (i = 0; i < 9*32; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); } } else if ( (uc_cmt[3] & 0x3) == 3 ) { //DataID = 3 ENG //HV BLK AD(4s) fprintf(fp, "HV BLK AD(4s):¥n"); for (i = 0; i < 24; ++i) fprintf(fp, "%02x ", uc_dat[i +i_s]); fprintf(fp, "¥n"); } } //************************* // M mode //************************* else if (i_mode == 2) { //INFO fprintf(fp, "DataID=%d ", (uc_cmt[3] & 0xf)); fprintf(fp, "%d/n ¥n", (uc_cmt[3] >> 4 & 0xf)); i_s = 28; switch ( uc_cmt[3] & 0x3 ) { case 0: //MODE0 ALL fprintf(fp, "3D-L2(8s):¥n"); for (i = 0; i < 89*32; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); break; case 7: //MODE0 SW fprintf(fp, "SW-L2(4s):¥n"); for (i = 0; i < 4*17*32; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); break; case 1: //MODE1 fprintf(fp, "3D-L2(8s):¥n"); for (i = 0; i < 16*9*32; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); break; case 2: //MODE2 fprintf(fp, "3D-L2(8s):¥n"); for (i = 0; i < 89*32; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); break; case 3: //MODE2 fprintf(fp, "3D-L2(16s):¥n"); for (i = 0; i < 16*9*32; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); break; case 4: //ENG fprintf(fp, "ASIC param:¥n"); for (i = 0; i < 48; ++i) fprintf(fp, "%02x ", uc_dat[i +i_s]); fprintf(fp, "¥n"); i_s += 48; fprintf(fp, "HV BLK AD:¥n"); for (i = 0; i < 24*256; ++i) fprintf(fp, "%02x ", uc_dat[i +i_s]); fprintf(fp, "¥n"); break; default: fprintf(fp, "!!!!!!!!! NO DATA MODE !!!!!!!!¥n"); break; } } //************************* // H mode //************************* else if (i_mode == 3) { i_s = 28; fprintf(fp, "3D-H(2s or 4s):¥n"); switch ( uc_cmt[3] & 0x3 ) { case 0: //MODE0 ALL for (i = 0; i < 16*17*32 + 89*32; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); break; case 1: //MODE1 for (i = 0; i < 32*17*32; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); break; case 2: //MODE2 for (i = 0; i < 16*17*32; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); break; default: fprintf(fp, "!!!!!!!!! NO DATA MODE !!!!!!!!¥n"); break; } } #endif } void proc_msa(unsigned char uc_cmt[], unsigned char uc_dat[], int i_mode) { int i, i0, i_len, i_lenc, i_lenc0, j; i = 0; int i_cnti = 0; //連続パケット int i_size; int ip = 0; i_size = uc_cmt[4]*0x100 + uc_cmt[5]; #ifdef DEC_PUTPUT while (1) { if (i > i_size) break; if (i_cnti == 0) { //単独 or 複数の1stパケット i_len = msa_len(&uc_dat[i+9]); if (i_len <= 0) break; //TI fprintf(fp, "%d", uc_dat[i+1]*0x10000 + uc_dat[i+2]*0x100 + uc_dat[i+3]); fprintf(fp, " "); //Frame type fprintf(fp, "%d ", uc_dat[i+6]); //Frame counter fprintf(fp, "%d ", uc_dat[i+7]); //CRC Skipped //Packet HDR fprintf(fp, "%d ", uc_dat[i+9]); //Length fprintf(fp, "%d ", uc_dat[i+10]*0x100 + uc_dat[i+11]); //SCI Packet //for (j = i + 12; j < i + i_len + 9; ++j) fprintf(fp, "%02x ", uc_dat[j]); fprintf(fp, "¥n"); //連続パケットの判定 //TI上2桁が非一致且つパケットIDが有意 i0 = i + 9; if (!( uc_dat[i] == uc_dat[i0 + i_len] && uc_dat[i+1] == uc_dat[i0 + i_len+1] ) && msa_len( &uc_dat[i0 + i_len]) > 0) { i_cnti = 1; i_lenc = i_len; } else { i += i_len + 9; //次のパケットへ i_cnti = 0; } } if (i_cnti) { //連続パケット //TI fprintf(fp, "%d", uc_dat[i+1]*0x10000 + uc_dat[i+2]*0x100 + uc_dat[i+3]); fprintf(fp, " "); //Frame type fprintf(fp, "%d ", uc_dat[i+6]); //Frame counter fprintf(fp, "%d ", uc_dat[i+7]); //CRC Skipped //Packet HDR fprintf(fp, "%d ", uc_dat[i0 + i_lenc]); //Length fprintf(fp, "%d¥n", uc_dat[i0 + i_lenc+1]*0x100 + uc_dat[i0 + i_lenc+2]); //連続パレットなのに最大長の場合、 //次が継続パケットとなるので区切りまでしか進まない i_lenc0 = msa_len( &uc_dat[i0 + i_lenc]); if (i_lenc0 == 0x3f7) { i += 1024; i_cnti = 0; continue; } else if (i_lenc0 <= 0) break; //連続パケットの判定 //TI上2桁が非一致且つパケットIDが有意 i_lenc += i_lenc0; if ( (uc_dat[i] == uc_dat[i0 + i_lenc] && uc_dat[i+1] == uc_dat[i0 + i_lenc +1]) || msa_len( &uc_dat[i0 + i_lenc]) <= 0) { i += i_lenc + 9; i_cnti = 0; } } } #else while (1) { if (i > i_size) break; if (i_cnti == 0) { //単独 or 複数の1stパケット i_len = msa_len(&uc_dat[i+9]); if (i_len <= 0) break; //TI fprintf(fp, "%02x", uc_dat[i]); fprintf(fp, "%02x", uc_dat[i+1]); fprintf(fp, "%02x", uc_dat[i+2]); fprintf(fp, "%02x", uc_dat[i+3]); fprintf(fp, "%02x", uc_dat[i+4]); fprintf(fp, "%02x", uc_dat[i+5]); fprintf(fp, " "); //Frame type fprintf(fp, "%02x ", uc_dat[i+6]); //Frame counter fprintf(fp, "%02x ", uc_dat[i+7]); //CRC Skipped //Packet HDR fprintf(fp, "%02x ", uc_dat[i+9]); //Length fprintf(fp, "%02x", uc_dat[i+10]); fprintf(fp, "%02x ", uc_dat[i+11]); //#### SCI Packet #### //for (j = i + 12; j < i + i_len + 9; ++j) fprintf(fp, "%02x ", uc_dat[j]); //#################### fprintf(fp, "¥n"); //連続パケットの判定 //TI上2桁が非一致且つパケットIDが有意 i0 = i + 9; ip = 9 + i_len; //MSAパケット内のアドレス if (!( uc_dat[i] == uc_dat[i0 + i_len] && uc_dat[i+1] == uc_dat[i0 + i_len+1] ) && msa_len( &uc_dat[i0 + i_len]) > 0) { i_cnti = 1; i_lenc = i_len; } else { i += i_len + 9; //次のパケットへ i_cnti = 0; } } if (i_cnti) { //連続パケット //TI(先頭パケットと同一) fprintf(fp, "%02x", uc_dat[i]); fprintf(fp, "%02x", uc_dat[i+1]); fprintf(fp, "%02x", uc_dat[i+2]); fprintf(fp, "%02x", uc_dat[i+3]); fprintf(fp, "%02x", uc_dat[i+4]); fprintf(fp, "%02x", uc_dat[i+5]); fprintf(fp, " "); //Frame type fprintf(fp, "%02x ", uc_dat[i+6]); //Frame counter fprintf(fp, "%02x ", uc_dat[i+7]); //CRC Skipped //Packet HDR fprintf(fp, "%02x ", uc_dat[i0 + i_lenc]); fprintf(fp, "%02x", uc_dat[i0 + i_lenc+1]); fprintf(fp, "%02x ", uc_dat[i0 + i_lenc+2]); //Length i_lenc0 = msa_len( &uc_dat[i0 + i_lenc]); //#### SCI Packet #### //ip += 3; //for (j = i0 + i_lenc + 3; j < i0 + i_lenc + i_lenc0; ++j) { // if (++ip > 1024) break; // fprintf(fp, "%02x ", uc_dat[j]); //} //#################### fprintf(fp, "¥n"); //連続パレットなのに最大長の場合、 //次が継続パケットとなるので区切りまでしか進まない if (i_lenc0 == 0x3f7) { i += 1024; i_cnti = 0; continue; } else if (i_lenc0 <= 0) break; //連続パケットの判定 //TI上2桁が非一致且つパケットIDが有意 i_lenc += i_lenc0; if ( (uc_dat[i] == uc_dat[i0 + i_lenc] && uc_dat[i+1] == uc_dat[i0 + i_lenc +1]) || msa_len( &uc_dat[i0 + i_lenc]) <= 0) { i += i_lenc + 9; i_cnti = 0; } } } #endif } int msa_len(unsigned char hdr[]) { int ans; if (hdr[0] == 0xf0) ans = 14; //MISHK else if (hdr[0] == 0xf1) ans = 128; //COMHK+FULLHK else if (hdr[0] == 0xfa || //SCI 1st hdr[0] == 0xfb) ans = 256*hdr[1] + hdr[2]; //SCI cont. else if (hdr[0] == 1 || //EVT post report 16 hdr[0] == 3 || //EVT progtrss report 16 hdr[0] == 12 || //EVT Memory error 22 hdr[0] == 13 || //EVT General errpr 22 hdr[0] == 14 ) ans = hdr[1]; //EVT CMD error 14 else if (hdr[0] >= 20 && hdr[0] <= 199) ans = hdr[1]; //EVT UDP, .. OCL program else if (hdr[0] == 254 ) ans = 12; //EVT Memory check report else ans = -1; return (ans); } void swt_endian(unsigned char uc_in[], unsigned char uc_out[], int i_len) { int i; for (i = 0; i < i_len/2; ++i) { uc_out[2*i] = uc_in[2*i + 1]; uc_out[2*i + 1] = uc_in[2*i]; } } char USHORTtoDBL(double *pf_outbuf, unsigned short *pus_inbuf, unsigned int len) { int i; //共用体 union { double d;//1(sign) + 11(exponent) + 52(fraction) unsigned char uc[8]; } un_dat; for(i = 0; i < len; i++){ //1(sign) + 5(exponent) + 10(fraction) --> // 1(sign) + 11(exponent) + 52(fraction) //1 + 11 + 52 if (*pus_inbuf == 0x7c00) { //+無限大 un_dat.uc[7] = 0x7f; un_dat.uc[6] = 0xf0; un_dat.uc[5] = 0; un_dat.uc[4] = 0; un_dat.uc[3] = 0; un_dat.uc[2] = 0; un_dat.uc[1] = 0; un_dat.uc[0] = 0; } else if (*pus_inbuf == 0xfc00) { //-無限大 un_dat.uc[7] = 0xff; un_dat.uc[6] = 0xf0; un_dat.uc[5] = 0; un_dat.uc[4] = 0; un_dat.uc[3] = 0; un_dat.uc[2] = 0; un_dat.uc[1] = 0; un_dat.uc[0] = 0; } else if (*pus_inbuf == 0) { //0 un_dat.d = 0; } else { //exp != 0 正規化 if ((*pus_inbuf >> 14) & 0x01) un_dat.uc[7] = (*pus_inbuf >> 8 & 0xc0); //exp > 0x0f else un_dat.uc[7] = (*pus_inbuf >> 8 & 0xc0) | 0x3f;//exp <= 0x0f un_dat.uc[6] = (((*pus_inbuf >> 8 & 0x3f) << 2) | (((*pus_inbuf & 0xff) >> 6) & 0x03) ); un_dat.uc[5] = (((*pus_inbuf & 0xff) & 0x3f) << 2); un_dat.uc[4] = 0; un_dat.uc[3] = 0; un_dat.uc[2] = 0; un_dat.uc[1] = 0; un_dat.uc[0] = 0; } *pf_outbuf++ = un_dat.d; pus_inbuf++; } return TRUE; }