Mostrando entradas con la etiqueta tarjeta conductor. Mostrar todas las entradas
Mostrando entradas con la etiqueta tarjeta conductor. Mostrar todas las entradas

domingo, 28 de diciembre de 2014

Comenzando con la lectura de datos de la tarjeta del conductor

Después de algun tiempo desaparecido vuelvo a retomar el proyecto aparcado que tenia por las circunstancias de la vida.

Aqui os dejo un fragmento del codigo en la que el fichero del conductor del tacografo lo divido y analizo las diferentes partes en la que se compone segun BOE 105 de 2005 pag. 15127 observando un error en FID 500 que define Application_indentification cuyo FID es 501(hex 0x0500).

Codigo:

  1. FileInputStream fis = null;
  2. DataInputStream entrada = null;
  3. DataOutputStream salida = null;
  4. File fichero = new File("a.TGD");
  5. System.out.println("numero de byte del fichero: " + fichero.length());
  6. byte[] array_byte = new byte[(int) fichero.length()];
  7. byte n;

  8. try {
  9. String cadena;
  10. fis = new FileInputStream("a.TGD");
  11. entrada = new DataInputStream(fis);

  12. boolean ok = true;
  13. CardIccIdentification icc;
  14. while (true) {

  15. ArchivoElemental ae = new ArchivoElemental();
  16. // *************** id del archivo *********************
  17. cadena = String.format("0x%02x", entrada.readByte());
  18. cadena += String.format("%02x", entrada.readByte());
  19. ae.FIDhex = cadena;
  20. if (FIDtoStr(ae.FIDhex) != "") {
  21. ae.FID = FIDtoStr(cadena);
  22. }
  23. // **************** tipo de archivo (elemental o firma)
  24. // ********************
  25. ae.tipo = entrada.readByte();
  26. // **************** longitud del archivo (elemental o firma=128)
  27. // *************
  28. char longitud = entrada.readChar();
  29. int total = Integer.valueOf(longitud);
  30. ae.longitud = total;
  31. // ***************** datos archivo elemental
  32. // **************************************
  33. byte[] datos = new byte[total];
  34. entrada.read(datos, 0, total);
  35. ae.datos = datos;

  36. if (ae.tipo == 00 ) {
  37. System.out.println("FID : " + ae.FID);
  38. System.out.println(" FID HEX:" + ae.FIDhex);
  39. System.out.println("Longitud: " + ae.longitud);
  40. // salida=new DataOutputStream(new
  41. // FileOutputStream(ae.FID,true));
  42. // salida.write(datos);
  43. // salida.close();
  44. // for (byte da : datos) {
  45. // System.out.format("%h", da);
  46. // }

  47. }

  48. lista.add(ae);

  49. }

  50. } catch (FileNotFoundException e) {
  51. System.out.println(e.getMessage());
  52. } catch (EOFException e) {
  53. System.out.println("Fin de fichero");

  54. } catch (IOException e) {
  55. System.out.println(e.getMessage());
  56. } finally {
  57. try {
  58. if (fis != null) {
  59. fis.close();
  60. }
  61. if (entrada != null) {
  62. entrada.close();
  63. }
  64. } catch (IOException e) {
  65. System.out.println(e.getMessage());
  66. }
  67. }

  68. }

  69. public static String FIDtoStr(String word) {
  70. String cadena = "";
  71. switch (word) {
  72. case "0x0002":
  73. cadena = "ICC";
  74. break;
  75. case "0x0005":
  76. cadena = "IC";
  77. break;
  78. case "0x0501":
  79. cadena = "Application identification";
  80. break;
  81. case "0xc100":
  82. cadena = "Card certificate";
  83. break;
  84. case "0xc108":
  85. cadena = "CA certificate";
  86. break;
  87. case "0x0520":
  88. cadena = "Identification";
  89. break;
  90. case "0x050E":
  91. cadena = "Card download";
  92. break;
  93. case "0x0521":
  94. cadena = "Driving license info";
  95. break;
  96. case "0x0502":
  97. cadena = "Events data";
  98. break;
  99. case "0x0503":
  100. cadena = "Faults data";
  101. break;
  102. case "0x0504":
  103. cadena = "Driver activity data";
  104. break;
  105. case "0x0505":
  106. cadena = "Vehicles uses";
  107. break;
  108. case "0x0506":
  109. cadena = "Places";
  110. break;
  111. case "0x0507":
  112. cadena = "Currents usage";
  113. break;
  114. case "0x0508":
  115. cadena = "Control activity data";
  116. break;
  117. case "0x0522":
  118. cadena = "Specific conditions";
  119. break;
  120. default:
  121. cadena = "cadena desconocida";
  122. break;

  123. }
  124. return cadena;
  125. }
  126. }

Los resultados obtenidos son :



Una vez identificadas las partes de que se compone los archivos ahora viene estudiar algo de ASN.1 para el mapeo con las clases java arduo trabajo.