//#define DEC_PUTPUT // 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*); // ***************** 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*** //i_APID1 = 0x0d; i_APID2 = 0x28; //MEA1 MISSION //i_APID1 = 0x0d; i_APID2 = 0x30; //MEA2 MISSION //i_APID1 = 0x0d; i_APID2 = 0x38; //MIA MISSION i_APID1 = 0x0d; i_APID2 = 0x40; //MSA MISSION //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_lm; }//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_lm; }//H-mode //TI of 1st Header #ifdef DEC_PUTPUT fprintf(fp, "%d", uc_dat[7]*0x10000 + uc_dat[8]*0x100 + uc_dat[9]); #else 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; i_len = uc_cmt[4]*0x100 + uc_cmt[5]; 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 if ( uc_cmt[2] & 0x01 ) fprintf(fp, "SNAPSHOT "); else fprintf(fp, "AVERAGE "); if ( uc_cmt[2] >> 1 & 0x01 ) fprintf(fp, "ENG#"); else fprintf(fp, "SCI#"); fprintf(fp, "%d ", (uc_cmt[2] >> 2 & 0xf)); fprintf(fp, "%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)); for (i = 3; i < 5; ++i) if ((uc_cmt[3] >> i & 1)) fprintf(fp, "*"); else fprintf(fp, "-"); fprintf(fp, " %d/n¥n", uc_cmt[3] >> 5 & 0xC0); if (i_mode == 2) { 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"); 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) { 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"); 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) { 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"); } } void proc_mia(unsigned char uc_cmt[], unsigned char uc_dat[], int i_mode) { /* //************************* // L mode //************************* if(i_mode == 1) { if ( (uc_dat[addr+11] & 0x3) == 0 ) { //DataID = 0; //VM(4s) fprintf(fp, "VM(4s):¥n"); i_s = addr + 44; 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"); i_s = addr + 64; 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(16s) if ((uc_dat[addr+11] >> 4 & 1)) { fprintf(fp, "VM(16s):¥n"); i_s = addr + 84; 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"); } //Et(32s) if ((uc_dat[addr+11] >> 5 & 1)) { fprintf(fp, "Et(32s):¥n"); i = 0; i_s = addr + 84 + 20*(uc_dat[addr+11] >> 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 >= len + 3) break; } fprintf(fp, "¥n"); } //3D-LL(3600s) if ((uc_dat[addr+11] >> 6 & 1) && !(uc_dat[addr+11] >> 5 & 1)) { fprintf(fp, "3D-LL(3600s):¥n"); i = 0; i_s = addr + 84 + 20*(uc_dat[addr+11] >> 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 >= len + 3) break; } fprintf(fp, "¥n"); } } else if ( (uc_dat[addr+11] & 0x3) == 1 ) { //DataID = 1; //VM(4s) fprintf(fp, "VM(4s):¥n"); i_s = addr + 44; 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"); //Et(4s) fprintf(fp, "Et(4s):¥n"); i_s = addr + 64; 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"); //3D-LL(3600s) if ((uc_dat[addr+11] >> 6 & 1)) { fprintf(fp, "3D-LL(3600s):¥n"); i = 0; i_s = addr + 64 + 256; while (1) { fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); if (2*++i + i_s >= len + 3) break; } fprintf(fp, "¥n"); } } else if ( (uc_dat[addr+11] & 0x3) == 2 ) { //DataID = 2; //VM(4s) fprintf(fp, "VM(4s):¥n"); i_s = addr + 44; 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"); //Et(4s) fprintf(fp, "Et(32s):¥n"); i_s = addr + 64; 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"); //3D-LL(600s) if ((uc_dat[addr+11] >> 6 & 1)) { fprintf(fp, "3D-LL(3600s):¥n"); i_s = addr + 64 + 256; 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_dat[addr+11] & 0x3) == 3 ) { //DataID = 3 ENG //HV BLK AD(4s) fprintf(fp, "HV BLK AD(4s):¥n"); i_s = addr + 44; for (i = 0; i < 24; ++i) fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); fprintf(fp, "¥n"); } } //************************* // M mode //************************* else if (i_mode == 2) { fprintf(fp, "3D-L2(8s or 16s):¥n"); i = 0; i_s = addr + 44; while (1) { fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); if (2*++i + i_s >= len + 3) break; } } //************************* // H mode //************************* else if (i_mode == 3) { fprintf(fp, "3D-H(2s or 4s):¥n"); i = 0; i_s = addr + 44; while (1) { fprintf(fp, "%02x%02x ", uc_dat[2*i +i_s], uc_dat[2*i +1 +i_s]); if (2*++i + i_s >= len + 3) break; } } */ } void proc_msa(unsigned char uc_cmt[], unsigned char uc_dat[], int i_mode) { int i, i0, i_len, j; i = 0; //for (i = 0; i < 20; ++i) fprintf(fp, "%02x ", uc_dat[i]); //fprintf(fp, "¥n"); //return; #ifdef DEC_PUTPUT while (1) { 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上3桁が非一致且つパケット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) { 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]); //Packet HDR fprintf(fp, "%d ", uc_dat[i0 + i_len]); //Length fprintf(fp, "%d¥n", uc_dat[i0 + i_len+1]*0x100 + uc_dat[i0 + i_len+2]); if (msa_len( &uc_dat[i0 + i_len]) == 0x3f7) //連続パレットなのに最大長の場合 i += 1024; //次が継続パケットとなる else i += i_len + 9 + msa_len( &uc_dat[i0 + i_len]); } else i += i_len + 9; //次のパケットへ } #else while (1) { 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上3桁が非一致且つパケット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) { fprintf(fp, "%02x", uc_dat[i+0]); 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]); //Packet HDR fprintf(fp, "%02x ", uc_dat[i0 + i_len]); fprintf(fp, "%02x", uc_dat[i0 + i_len+1]); fprintf(fp, "%02x¥n", uc_dat[i0 + i_len+2]); if (msa_len( &uc_dat[i0 + i_len]) == 0x3f7) //連続パレットなのに最大長の場合 i += 1024; //次が継続パケットとなる else i += i_len + 9 + msa_len( &uc_dat[i0 + i_len]); } else i += i_len + 9; //次のパケットへ } #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]; } }