gccDppConsole Test C++ SDK
1.0.0.0
DPP C++ Console Demonstration
|
00001 #include "ParsePacket.h" 00002 00003 CParsePacket::CParsePacket(void) 00004 { 00005 } 00006 00007 CParsePacket::~CParsePacket(void) 00008 { 00009 } 00010 00011 void CParsePacket::ParsePacketStatus(unsigned char P[], Packet_In *PIN) 00012 { 00013 short X; 00014 long CSum; 00015 00016 CSum = 0; 00017 if (P[0] == SYNC1_) { 00018 if (P[1] == SYNC2_) { 00019 if (P[4] < 128) { // LEN MSB < 128, i.e. LEN < 32768 00020 PIN->LEN = (P[4] * 256) + P[5]; 00021 PIN->PID1 = P[2]; 00022 PIN->PID2 = P[3]; 00023 for (X=0;X <=(PIN->LEN+5);X++) { // add up all the bytes except checksum 00024 CSum = CSum + P[X]; 00025 } 00026 CSum = CSum + 256 * (long)(P[PIN->LEN + 6]) + (long)(P[PIN->LEN + 7]); 00027 PIN->CheckSum = CSum; 00028 if ((CSum & 0xFFFF) == 0) { 00029 PIN->STATUS = 0; // packet is OK 00030 if (PIN->LEN > 0) { 00031 for (X=6;X <=(PIN->LEN+5);X++) { 00032 PIN->DATA[X - 6] = P[X]; 00033 } 00034 } 00035 } else { 00036 PIN->STATUS = PID2_ACK_CHECKSUM_ERROR; // checksum error 00037 } 00038 } else { 00039 PIN->STATUS = PID2_ACK_LEN_ERROR; // length error 00040 } 00041 } else { 00042 PIN->STATUS = PID2_ACK_SYNC_ERROR; // sync error 00043 } 00044 } else { 00045 PIN->STATUS = PID2_ACK_SYNC_ERROR ; // sync error 00046 } 00047 } 00048 00049 string CParsePacket::PID2_TextToString(string strPacketSource, unsigned char PID2) 00050 { 00051 string cstrPID2; 00052 cstrPID2 = ""; 00053 switch (PID2) { 00054 case PID2_ACK_OK: // ACK OK 00055 //PID2_TextToString = strPacketSource + ": OK\t"; 00056 //cstrPID2 = "ACK_OK"; 00057 cstrPID2 = ""; 00058 //ACK_Received = True 00059 break; 00060 case PID2_ACK_SYNC_ERROR: 00061 cstrPID2 = strPacketSource + ": Sync Error\t"; 00062 break; 00063 case PID2_ACK_PID_ERROR: 00064 cstrPID2 = strPacketSource + ": PID Error\t"; 00065 break; 00066 case PID2_ACK_LEN_ERROR: 00067 cstrPID2 = strPacketSource + ": Length Error\t"; 00068 break; 00069 case PID2_ACK_CHECKSUM_ERROR: 00070 cstrPID2 = strPacketSource + ": Checksum Error\t"; 00071 break; 00072 case PID2_ACK_BAD_PARAM: // now msg includes bad parameter 00073 // put the error extractor in a new function 00074 //[] If PIN.LEN > 0 Then ' BAD CMD (PID2=7), BAD PARAM (PID2=5), NO PC5 (PID2=11) errors return offending command string 00075 // [] T$ = "" 00076 // [] For X = 0 To PIN.LEN - 1 00077 // [] T$ = T$ + Chr(PIN.DATA(X)) 00078 // [] Next X 00079 // [] End If 00080 cstrPID2 = strPacketSource + ": Bad Parameter\t"; 00081 break; 00082 case PID2_ACK_BAD_HEX_REC: 00083 cstrPID2 = strPacketSource + ": Bad HEX Record\t"; 00084 break; 00085 00086 00087 00088 00089 case PID2_ACK_FPGA_ERROR: 00090 cstrPID2 = strPacketSource + ": FPGA not initialized\t"; 00091 break; 00092 case PID2_ACK_CP2201_NOT_FOUND: 00093 cstrPID2 = strPacketSource + ": CP2201 not found\t"; 00094 break; 00095 case PID2_ACK_SCOPE_DATA_NOT_AVAIL: 00096 cstrPID2 = strPacketSource + ": No scope data\t"; 00097 break; 00098 case PID2_ACK_PC5_NOT_PRESENT: 00099 cstrPID2 = strPacketSource + ": PC5 not present\t"; 00100 break; 00101 case PID2_ACK_OK_ETHERNET_SHARE_REQ: 00102 cstrPID2 = strPacketSource + ": Ethernet sharing request\t"; 00103 break; 00104 case PID2_ACK_ETHERNET_BUSY: 00105 cstrPID2 = strPacketSource + ": Ethernet sharing request\t"; 00106 break; 00107 //[] Case :TextLog "ACK: PC5 NOT DETECTED '" + T$ + "'" + vbCrLf 00108 case PID2_ACK_CAL_DATA_NOT_PRESENT: 00109 cstrPID2 = strPacketSource + ": Calibration data not present\t"; 00110 break; 00111 case PID2_ACK_UNRECOG: 00112 cstrPID2 = strPacketSource + ": Unrecognized Command\t"; 00113 break; 00114 default: 00115 cstrPID2 = strPacketSource + ": Unrecognized Error\t"; 00116 break; 00117 } 00118 return cstrPID2; 00119 } 00120 00121 long CParsePacket::ParsePacket(unsigned char P[], Packet_In *PIN) 00122 { 00123 long ParsePkt; 00124 ParsePkt = preqProcessNone; 00125 ParsePacketStatus (P, PIN); 00126 if (PIN->STATUS == PID2_ACK_OK) { // no errors 00127 if ((PIN->PID1 == PID1_RCV_STATUS) && (PIN->PID2 == PID2_SEND_DP4_STYLE_STATUS)) { // DP4-style status 00128 ParsePkt = preqProcessStatus; 00129 } else if ((PIN->PID1 == PID1_RCV_SPECTRUM) && ((PIN->PID2 >= RCVPT_256_CHANNEL_SPECTRUM) && (PIN->PID2 <= RCVPT_8192_CHANNEL_SPECTRUM_STATUS))) { // spectrum / spectrum+status 00130 ParsePkt = preqProcessSpectrum; 00131 //} else if ((PIN->PID1 == PID1_RCV_SCOPE_MISC) && (PIN->PID2 == PID2_SEND_SCOPE_DATA)) { //scope data packet 00132 // ParsePkt = preqProcessScopeData; 00133 //} else if ((PIN->PID1 == PID1_RCV_SCOPE_MISC) && (PIN->PID2 == PID2_SEND_512_BYTE_MISC_DATA)) { //text data packet 00134 // ParsePkt = preqProcessTextData; 00135 } else if ((PIN->PID1 == PID1_RCV_SCOPE_MISC) && (PIN->PID2 == RCVPT_SCOPE_DATA)) { //scope data packet 00136 //ScopeOverFlow = false; 00137 ParsePkt = preqProcessScopeData; 00138 } else if ((PIN->PID1 == PID1_RCV_SCOPE_MISC) && (PIN->PID2 == RCVPT_512_BYTE_MISC_DATA)) { //text data packet 00139 ParsePkt = preqProcessTextData; 00140 } else if ((PIN->PID1 == PID1_RCV_SCOPE_MISC) && (PIN->PID2 == RCVPT_SCOPE_DATA_WITH_OVERFLOW)) { //scope data with overflow packet 00141 //ScopeOverFlow = true; 00142 //ParsePkt = preqProcessScopeData; 00143 ParsePkt = preqProcessScopeDataOverFlow; 00144 } else if ((PIN->PID1 == PID1_RCV_SCOPE_MISC) && (PIN->PID2 == RCVPT_ETHERNET_SETTINGS)) { //ethernet settings packet 00145 //ParsePkt = preqProcessInetSettings; 00146 } else if ((PIN->PID1 == PID1_RCV_SCOPE_MISC) && (PIN->PID2 == RCVPT_DIAGNOSTIC_DATA)) { //diagnostic data packet 00147 ParsePkt = preqProcessDiagData; 00148 //} else if ((PIN->PID1 == PID1_RCV_SCOPE_MISC) && (PIN->PID2 == RCVPT_HARDWARE_DESCRIPTION)) { //hardware description packet 00149 //ParsePkt = preqProcessHwDesc; 00150 } else if ((PIN->PID1 == PID1_RCV_SCOPE_MISC) && (PIN->PID2 == RCVPT_CONFIG_READBACK)) { 00151 ParsePkt = preqProcessCfgRead; 00152 //} else if ((PIN->PID1 == PID1_RCV_SCOPE_MISC) && (PIN->PID2 == RCVPT_NETFINDER_READBACK)) { 00153 //ParsePkt = preqProcessNetFindRead; 00154 } else if ((PIN->PID1 == PID1_RCV_SCOPE_MISC) && (PIN->PID2 == RCVPT_OPTION_PA_CALIBRATION)) { 00155 ParsePkt = preqProcessPaCal; 00156 } else if (PIN->PID1 == PID1_ACK) { 00157 ParsePkt = preqProcessAck; 00158 } else { 00159 PIN->STATUS = PID2_ACK_PID_ERROR; // unknown PID 00160 ParsePkt = preqProcessError; 00161 } 00162 } else { 00163 ParsePkt = preqProcessError; 00164 } 00165 00166 //PIN->PID1 = 0; // overwrite the PIDs so packet can't be erroneously processed again 00167 //PIN->PID2 = 0; 00168 00169 return ParsePkt; 00170 } 00171 00172 //ElseIf PIN.PID2 = 7 Then ' Config readback response packet 00173 // txtConfig.Text = "" 00174 // For X = 0 To PIN.LEN - 1 00175 // txtConfig.Text = txtConfig.Text + Chr(PIN.DATA(X)) 00176 // If Chr(PIN.DATA(X)) = ";" Then 00177 // txtConfig.Text = txtConfig.Text + vbCrLf 00178 // End If 00179 // Next X 00180 00181 00182 00183 00184 00185 00186 00187