/// <summary> /// Разбирает ДДД файл водителя(или другой карты) /// </summary> /// <param name="src">файл ДДД</param> /// <returns>обьект класса CardUnitClass</returns> public CardUnitClass CardUnitData_Parse(byte[] src) { bool parseResult = false; int pos = 0; cardUnitClass = new CardUnitClass(); while (true) { byte[] tag = new byte[3]; byte[] length = new byte[2]; int length_i = 0; byte[] value; // tag parser while (true) { if (src.Length < pos + 3) { // end of stream // break tag parser break; } // copy tag Array.Copy(src, pos, tag, 0, 3); pos += 3; isValidFileID(tag); if (fileId == -1) //Invalid Tag { if (HexBytes.CompareByteArrays(new byte[] { tag[0], tag[1] }, new byte[] { 0x76, 0x06 })) { // valid tag // OPTAC download tools with firmware < v2.3 write two bytes (76 06, SID/TREP?!) at the // beginning of a .DDD file that are out of specs... pos -= 1; } else { // invalid tag pos -= 2; } } else { parseResult = true; // break tag parser break; } }// end tag parser if (parseResult == false) { // break data parser break; } if (src.Length < pos + 2) { // break data parser break; } // copy length Array.Copy(src, pos, length, 0, 2); pos += 2; length_i = calculateLength(length); if (src.Length < pos + length_i) { parseResult = false; // break data parser break; } // copy value value = new byte[length_i]; Array.Copy(src, pos, value, 0, length_i); pos += length_i; // add data //------------------------------------------ // parseresult = cardData.add(tag, length, value); switch (fileId) { case 1://"EF_ICC"; { ef_icc = new EF_ICC(value); } break; case 2: //"EF_IC"; { ef_ic = new EF_IC(value); } break; case 3://EF_Card_Certificate { ef_card_certificate = new EF_Card_Certificate(value); ef_card_value = value; } break; case 4://EF_CA_Certificate { ef_ca_certificate = new EF_CA_Certificate(value); } break; case 5://EF_Application_Identification { ef_application_identification = new EF_Application_Identification(value); cardType = ef_application_identification.cardType; } break; case 6://EF_Identification { ef_identification = new EF_Identification(value, cardType); } break; case 7://EF_Card_Download (driver card) { ef_card_download = new EF_Card_Download(value, cardType); } break; case 8://EF_Driving_Licence_Info { ef_driving_licence_info = new EF_Driving_Licence_Info(value); } break; case 9://EF_Events_Data { ef_events_data = new EF_Events_Data(value, ef_application_identification.noOfEventsPerType); } break; case 10://EF_Faults_Data { ef_faults_data = new EF_Faults_Data(value, ef_application_identification.noOfFaultsPerType); } break; case 11://EF_Driver_Activity_Data { ef_driver_activity_data = new EF_Driver_Activity_Data(value, ef_application_identification.activityStructureLength); } break; case 12://EF_Vehicles_Used { ef_vehicles_used = new EF_Vehicles_Used(value, ef_application_identification.noOfCardVehicleRecords); } break; case 13://EF_Places { ef_places = new EF_Places(value, ef_application_identification.noOfCardPlaceRecords); } break; case 14://EF_Current_Usage { ef_current_usage = new EF_Current_Usage(value); } break; case 15://EF_Control_Activity_Data { ef_control_activity_data = new EF_Control_Activity_Data(value); } break; case 16://EF_Specific_Conditions { ef_specific_conditions = new EF_Specific_Conditions(value, cardType); } break; case 17://EF_Card_Download (workshop card) { ef_card_download = new EF_Card_Download(value, cardType); } break; case 18://EF_Calibration { ef_calibration = new EF_Calibration(value, ef_application_identification.noOfCalibrationRecords); } break; case 19://EF_Sensor_Installation_Data { ef_sensor_installation_data = new EF_Sensor_Installation_Data(value); } break; case 20://EF_Controller_Activity_Data { ef_controller_activity_data = new EF_Controller_Activity_Data(value, ef_application_identification.noOfControlActivityRecords); } break; case 21://EF_Company_Activity_Data { ef_company_activity_data = new EF_Company_Activity_Data(value, ef_application_identification.noOfCompanyActivityRecords); } break; case -222: { //skipping signature Info!! } break; default: { parseResult = false; } break; } //------------------------------------------ if (parseResult == false) { // break data parser break; } }// end data parser cardUnitClass.ef_application_identification = ef_application_identification; cardUnitClass.ef_ca_certificate = ef_ca_certificate; cardUnitClass.ef_calibration = ef_calibration; cardUnitClass.ef_card_certificate = ef_card_certificate; cardUnitClass.ef_card_download = ef_card_download; cardUnitClass.ef_company_activity_data = ef_company_activity_data; cardUnitClass.ef_control_activity_data = ef_control_activity_data; cardUnitClass.ef_controller_activity_data = ef_controller_activity_data; cardUnitClass.ef_current_usage = ef_current_usage; cardUnitClass.ef_driver_activity_data = ef_driver_activity_data; cardUnitClass.ef_driving_licence_info = ef_driving_licence_info; cardUnitClass.ef_events_data = ef_events_data; cardUnitClass.ef_faults_data = ef_faults_data; cardUnitClass.ef_ic = ef_ic; cardUnitClass.ef_icc = ef_icc; cardUnitClass.ef_identification = ef_identification; cardUnitClass.ef_places = ef_places; cardUnitClass.ef_sensor_installation_data = ef_sensor_installation_data; cardUnitClass.ef_specific_conditions = ef_specific_conditions; cardUnitClass.ef_vehicles_used = ef_vehicles_used; return cardUnitClass; }
///driversPreview protected void Driver_FileContents(object sender, EventArgs e) { EnableAllDriversPreviewButtons(); DriverFileContent_btn.Enabled = false; FilesPreviewPanel.Visible = true; string connectionString = ConfigurationSettings.AppSettings["fleetnetbaseConnectionString"]; DataBlock dataBlock = new DataBlock(connectionString, ConfigurationManager.AppSettings["language"]); try { int dataBlockId = Convert.ToInt32(onlyForInternal.Value); dataBlock.OpenConnection(); TextBoxTest.Text = ""; CardUnit.CardUnitClass driversCard = new CardUnit.CardUnitClass(); driversCard = dataBlock.cardUnitInfo.GetAllCardUnitClass_parsingDataBlock(dataBlockId); FilesPreviewDataGrid.DataSource = DriverPreviewDataTable.DriverPreview_FileContents(driversCard); FilesPreviewDataGrid.DataBind(); } catch (Exception ex) { Status.Text = ex.Message; TextBoxTest.Text = ""; TextBoxTest.Visible = false; StatusUpdatePanel.Update(); } finally { dataBlock.CloseConnection(); ModalPopupExtender1.Hide(); } }