intercode.c 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711
  1. #include <stdlib.h>
  2. #include "intercode.h"
  3. CalypsoApp* get_intercode_structure_env_holder() {
  4. CalypsoApp* IntercodeEnvHolderStructure = malloc(sizeof(CalypsoApp));
  5. if(!IntercodeEnvHolderStructure) {
  6. return NULL;
  7. }
  8. int app_elements_count = 3;
  9. IntercodeEnvHolderStructure->type = CALYPSO_APP_ENV_HOLDER;
  10. IntercodeEnvHolderStructure->container = malloc(sizeof(CalypsoContainerElement));
  11. IntercodeEnvHolderStructure->container->elements =
  12. malloc(app_elements_count * sizeof(CalypsoElement));
  13. IntercodeEnvHolderStructure->container->size = app_elements_count;
  14. IntercodeEnvHolderStructure->container->elements[0] = make_calypso_final_element(
  15. "EnvApplicationVersionNumber",
  16. 6,
  17. "Numéro de version de l’application Billettique",
  18. CALYPSO_FINAL_TYPE_NUMBER);
  19. IntercodeEnvHolderStructure->container->elements[1] = make_calypso_bitmap_element(
  20. "Env",
  21. 7,
  22. (CalypsoElement[]){
  23. make_calypso_final_element(
  24. "EnvNetworkId", 24, "Identification du réseau", CALYPSO_FINAL_TYPE_NUMBER),
  25. make_calypso_final_element(
  26. "EnvApplicationIssuerId",
  27. 8,
  28. "Identification de l’émetteur de l’application",
  29. CALYPSO_FINAL_TYPE_UNKNOWN),
  30. make_calypso_final_element(
  31. "EnvApplicationValidityEndDate",
  32. 14,
  33. "Date de fin de validité de l’application",
  34. CALYPSO_FINAL_TYPE_DATE),
  35. make_calypso_final_element(
  36. "EnvPayMethod", 11, "Code mode de paiement", CALYPSO_FINAL_TYPE_PAY_METHOD),
  37. make_calypso_final_element(
  38. "EnvAuthenticator",
  39. 16,
  40. "Code de contrôle de l’intégrité des données",
  41. CALYPSO_FINAL_TYPE_UNKNOWN),
  42. make_calypso_final_element(
  43. "EnvSelectList",
  44. 32,
  45. "Bitmap de tableau de paramètre multiple",
  46. CALYPSO_FINAL_TYPE_UNKNOWN),
  47. make_calypso_container_element(
  48. "EnvData",
  49. 2,
  50. (CalypsoElement[]){
  51. make_calypso_final_element(
  52. "EnvDataCardStatus", 1, "Statut de la carte", CALYPSO_FINAL_TYPE_UNKNOWN),
  53. make_calypso_final_element(
  54. "EnvData2", 0, "Données complémentaires", CALYPSO_FINAL_TYPE_UNKNOWN),
  55. }),
  56. });
  57. IntercodeEnvHolderStructure->container->elements[2] = make_calypso_bitmap_element(
  58. "Holder",
  59. 8,
  60. (CalypsoElement[]){
  61. make_calypso_bitmap_element(
  62. "HolderName",
  63. 2,
  64. (CalypsoElement[]){
  65. make_calypso_final_element(
  66. "HolderSurname", 85, "Nom du porteur", CALYPSO_FINAL_TYPE_STRING),
  67. make_calypso_final_element(
  68. "HolderForename",
  69. 85,
  70. "Prénom de naissance du porteur",
  71. CALYPSO_FINAL_TYPE_STRING),
  72. }),
  73. make_calypso_bitmap_element(
  74. "HolderBirth",
  75. 2,
  76. (CalypsoElement[]){
  77. make_calypso_final_element(
  78. "HolderBirthDate", 32, "Date de naissance", CALYPSO_FINAL_TYPE_DATE),
  79. make_calypso_final_element(
  80. "HolderBirthPlace",
  81. 115,
  82. "Lieu de naissance (23 caractères)",
  83. CALYPSO_FINAL_TYPE_STRING),
  84. }),
  85. make_calypso_final_element(
  86. "HolderBirthName",
  87. 85,
  88. "Nom de naissance du porteur (17 caractères)",
  89. CALYPSO_FINAL_TYPE_STRING),
  90. make_calypso_final_element(
  91. "HolderIdNumber", 32, "Identifiant Porteur", CALYPSO_FINAL_TYPE_NUMBER),
  92. make_calypso_final_element(
  93. "HolderCountryAlpha", 24, "Pays du titulaire", CALYPSO_FINAL_TYPE_UNKNOWN),
  94. make_calypso_final_element(
  95. "HolderCompany", 32, "Société du titulaire", CALYPSO_FINAL_TYPE_UNKNOWN),
  96. make_calypso_bitmap_element(
  97. "HolderProfiles",
  98. 4,
  99. (CalypsoElement[]){
  100. make_calypso_bitmap_element(
  101. "HolderProfileBitmap",
  102. 3,
  103. (CalypsoElement[]){
  104. make_calypso_final_element(
  105. "HolderNetworkId", 24, "Réseau", CALYPSO_FINAL_TYPE_UNKNOWN),
  106. make_calypso_final_element(
  107. "HolderProfileNumber",
  108. 8,
  109. "Numéro du statut",
  110. CALYPSO_FINAL_TYPE_NUMBER),
  111. make_calypso_final_element(
  112. "HolderProfileDate",
  113. 14,
  114. "Date de fin de validité du statut",
  115. CALYPSO_FINAL_TYPE_DATE),
  116. }),
  117. }),
  118. make_calypso_bitmap_element(
  119. "HolderData",
  120. 12,
  121. (CalypsoElement[]){
  122. make_calypso_final_element(
  123. "HolderDataCardStatus", 4, "Type de carte", CALYPSO_FINAL_TYPE_UNKNOWN),
  124. make_calypso_final_element(
  125. "HolderDataTeleReglement", 4, "Télérèglement", CALYPSO_FINAL_TYPE_UNKNOWN),
  126. make_calypso_final_element(
  127. "HolderDataResidence", 17, "Ville du domicile", CALYPSO_FINAL_TYPE_UNKNOWN),
  128. make_calypso_final_element(
  129. "HolderDataCommercialID", 6, "Produit carte", CALYPSO_FINAL_TYPE_NUMBER),
  130. make_calypso_final_element(
  131. "HolderDataWorkPlace", 17, "Lieu de travail", CALYPSO_FINAL_TYPE_UNKNOWN),
  132. make_calypso_final_element(
  133. "HolderDataStudyPlace", 17, "Lieu d'étude", CALYPSO_FINAL_TYPE_UNKNOWN),
  134. make_calypso_final_element(
  135. "HolderDataSaleDevice",
  136. 16,
  137. "Numéro logique de SAM",
  138. CALYPSO_FINAL_TYPE_NUMBER),
  139. make_calypso_final_element(
  140. "HolderDataAuthenticator", 16, "Signature", CALYPSO_FINAL_TYPE_UNKNOWN),
  141. make_calypso_final_element(
  142. "HolderDataProfileStartDate1",
  143. 14,
  144. "Date de début de validité du statut",
  145. CALYPSO_FINAL_TYPE_DATE),
  146. make_calypso_final_element(
  147. "HolderDataProfileStartDate2",
  148. 14,
  149. "Date de début de validité du statut",
  150. CALYPSO_FINAL_TYPE_DATE),
  151. make_calypso_final_element(
  152. "HolderDataProfileStartDate3",
  153. 14,
  154. "Date de début de validité du statut",
  155. CALYPSO_FINAL_TYPE_DATE),
  156. make_calypso_final_element(
  157. "HolderDataProfileStartDate4",
  158. 14,
  159. "Date de début de validité du statut",
  160. CALYPSO_FINAL_TYPE_DATE),
  161. }),
  162. });
  163. return IntercodeEnvHolderStructure;
  164. }
  165. CalypsoApp* get_intercode_structure_contract() {
  166. CalypsoApp* IntercodeContractStructure = malloc(sizeof(CalypsoApp));
  167. if(!IntercodeContractStructure) {
  168. return NULL;
  169. }
  170. int app_elements_count = 1;
  171. IntercodeContractStructure->type = CALYPSO_APP_CONTRACT;
  172. IntercodeContractStructure->container = malloc(sizeof(CalypsoContainerElement));
  173. IntercodeContractStructure->container->elements =
  174. malloc(app_elements_count * sizeof(CalypsoElement));
  175. IntercodeContractStructure->container->size = app_elements_count;
  176. IntercodeContractStructure->container->elements[0] = make_calypso_bitmap_element(
  177. "Contract",
  178. 20,
  179. (CalypsoElement[]){
  180. make_calypso_final_element(
  181. "ContractNetworkId", 24, "Identification du réseau", CALYPSO_FINAL_TYPE_UNKNOWN),
  182. make_calypso_final_element(
  183. "ContractProvider",
  184. 8,
  185. "Identification de l’exploitant",
  186. CALYPSO_FINAL_TYPE_UNKNOWN),
  187. make_calypso_final_element(
  188. "ContractTariff", 16, "Code tarif", CALYPSO_FINAL_TYPE_TARIFF),
  189. make_calypso_final_element(
  190. "ContractSerialNumber", 32, "Numéro TCN", CALYPSO_FINAL_TYPE_UNKNOWN),
  191. make_calypso_bitmap_element(
  192. "ContractCustomerInfoBitmap",
  193. 2,
  194. (CalypsoElement[]){
  195. make_calypso_final_element(
  196. "ContractCustomerProfile",
  197. 6,
  198. "Statut du titulaire ou Taux de réduction applicable",
  199. CALYPSO_FINAL_TYPE_UNKNOWN),
  200. make_calypso_final_element(
  201. "ContractCustomerNumber",
  202. 32,
  203. "Numéro de client",
  204. CALYPSO_FINAL_TYPE_UNKNOWN),
  205. }),
  206. make_calypso_bitmap_element(
  207. "ContractPassengerInfoBitmap",
  208. 2,
  209. (CalypsoElement[]){
  210. make_calypso_final_element(
  211. "ContractPassengerClass",
  212. 8,
  213. "Classe de service des voyageurs",
  214. CALYPSO_FINAL_TYPE_UNKNOWN),
  215. make_calypso_final_element(
  216. "ContractPassengerTotal",
  217. 8,
  218. "Nombre total de voyageurs",
  219. CALYPSO_FINAL_TYPE_UNKNOWN),
  220. }),
  221. make_calypso_final_element(
  222. "ContractVehicleClassAllowed",
  223. 6,
  224. "Classes de véhicule autorisé",
  225. CALYPSO_FINAL_TYPE_UNKNOWN),
  226. make_calypso_final_element(
  227. "ContractPaymentPointer",
  228. 32,
  229. "Pointeurs sur les événements de paiement",
  230. CALYPSO_FINAL_TYPE_UNKNOWN),
  231. make_calypso_final_element(
  232. "ContractPayMethod", 11, "Code mode de paiement", CALYPSO_FINAL_TYPE_PAY_METHOD),
  233. make_calypso_final_element(
  234. "ContractServices", 16, "Services autorisés", CALYPSO_FINAL_TYPE_UNKNOWN),
  235. make_calypso_final_element(
  236. "ContractPriceAmount", 16, "Montant total", CALYPSO_FINAL_TYPE_AMOUNT),
  237. make_calypso_final_element(
  238. "ContractPriceUnit", 16, "Code de monnaie", CALYPSO_FINAL_TYPE_UNKNOWN),
  239. make_calypso_bitmap_element(
  240. "ContractRestrictionBitmap",
  241. 7,
  242. (CalypsoElement[]){
  243. make_calypso_final_element(
  244. "ContractRestrictStart", 11, "", CALYPSO_FINAL_TYPE_UNKNOWN),
  245. make_calypso_final_element(
  246. "ContractRestrictEnd", 11, "", CALYPSO_FINAL_TYPE_UNKNOWN),
  247. make_calypso_final_element(
  248. "ContractRestrictDay", 8, "", CALYPSO_FINAL_TYPE_UNKNOWN),
  249. make_calypso_final_element(
  250. "ContractRestrictTimeCode", 8, "", CALYPSO_FINAL_TYPE_UNKNOWN),
  251. make_calypso_final_element(
  252. "ContractRestrictCode",
  253. 8,
  254. "Code de restriction",
  255. CALYPSO_FINAL_TYPE_UNKNOWN),
  256. make_calypso_final_element(
  257. "ContractRestrictProduct",
  258. 16,
  259. "Produit de restriction",
  260. CALYPSO_FINAL_TYPE_UNKNOWN),
  261. make_calypso_final_element(
  262. "ContractRestrictLocation",
  263. 16,
  264. "Référence du lieu de restriction",
  265. CALYPSO_FINAL_TYPE_UNKNOWN),
  266. }),
  267. make_calypso_bitmap_element(
  268. "ContractValidityInfoBitmap",
  269. 9,
  270. (CalypsoElement[]){
  271. make_calypso_final_element(
  272. "ContractValidityStartDate",
  273. 14,
  274. "Date de début de validité",
  275. CALYPSO_FINAL_TYPE_DATE),
  276. make_calypso_final_element(
  277. "ContractValidityStartTime",
  278. 11,
  279. "Heure de début de validité",
  280. CALYPSO_FINAL_TYPE_TIME),
  281. make_calypso_final_element(
  282. "ContractValidityEndDate",
  283. 14,
  284. "Date de fin de validité",
  285. CALYPSO_FINAL_TYPE_DATE),
  286. make_calypso_final_element(
  287. "ContractValidityEndTime",
  288. 11,
  289. "Heure de fin de validité",
  290. CALYPSO_FINAL_TYPE_TIME),
  291. make_calypso_final_element(
  292. "ContractValidityDuration",
  293. 8,
  294. "Durée de validité",
  295. CALYPSO_FINAL_TYPE_UNKNOWN),
  296. make_calypso_final_element(
  297. "ContractValidityLimiteDate",
  298. 14,
  299. "Date limite de première utilisation",
  300. CALYPSO_FINAL_TYPE_DATE),
  301. make_calypso_final_element(
  302. "ContractValidityZones",
  303. 8,
  304. "Numéros des zones autorisées",
  305. CALYPSO_FINAL_TYPE_ZONES),
  306. make_calypso_final_element(
  307. "ContractValidityJourneys",
  308. 16,
  309. "Nombre de voyages autorisés",
  310. CALYPSO_FINAL_TYPE_UNKNOWN),
  311. make_calypso_final_element(
  312. "ContractPeriodJourneys",
  313. 16,
  314. "Nombre de voyages autorisés par période",
  315. CALYPSO_FINAL_TYPE_UNKNOWN),
  316. }),
  317. make_calypso_bitmap_element(
  318. "ContractJourneyData",
  319. 8,
  320. (CalypsoElement[]){
  321. make_calypso_final_element(
  322. "ContractJourneyOrigin",
  323. 16,
  324. "Code lieu d’origine",
  325. CALYPSO_FINAL_TYPE_UNKNOWN),
  326. make_calypso_final_element(
  327. "ContractJourneyDestination",
  328. 16,
  329. "Code lieu de destination",
  330. CALYPSO_FINAL_TYPE_UNKNOWN),
  331. make_calypso_final_element(
  332. "ContractJourneyRouteNumbers",
  333. 16,
  334. "Numéros des lignes autorisées",
  335. CALYPSO_FINAL_TYPE_UNKNOWN),
  336. make_calypso_final_element(
  337. "ContractJourneyRouteVariants",
  338. 8,
  339. "Variantes aux numéros des lignes autorisées",
  340. CALYPSO_FINAL_TYPE_UNKNOWN),
  341. make_calypso_final_element(
  342. "ContractJourneyRun", 16, "Référence du voyage", CALYPSO_FINAL_TYPE_UNKNOWN),
  343. make_calypso_final_element(
  344. "ContractJourneyVia", 16, "Code lieu du via", CALYPSO_FINAL_TYPE_UNKNOWN),
  345. make_calypso_final_element(
  346. "ContractJourneyDistance", 16, "Distance", CALYPSO_FINAL_TYPE_UNKNOWN),
  347. make_calypso_final_element(
  348. "ContractJourneyInterchanges",
  349. 8,
  350. "Nombre de correspondances autorisées",
  351. CALYPSO_FINAL_TYPE_UNKNOWN),
  352. }),
  353. make_calypso_bitmap_element(
  354. "ContractSaleData",
  355. 4,
  356. (CalypsoElement[]){
  357. make_calypso_final_element(
  358. "ContractValiditySaleDate", 14, "Date de vente", CALYPSO_FINAL_TYPE_DATE),
  359. make_calypso_final_element(
  360. "ContractValiditySaleTime", 11, "Heure de vente", CALYPSO_FINAL_TYPE_TIME),
  361. make_calypso_final_element(
  362. "ContractValiditySaleAgent",
  363. 8,
  364. "Identification de l’exploitant de vente",
  365. CALYPSO_FINAL_TYPE_SERVICE_PROVIDER),
  366. make_calypso_final_element(
  367. "ContractValiditySaleDevice",
  368. 16,
  369. "Identification du terminal de vente",
  370. CALYPSO_FINAL_TYPE_UNKNOWN),
  371. }),
  372. make_calypso_final_element(
  373. "ContractStatus", 8, "État du contrat", CALYPSO_FINAL_TYPE_UNKNOWN),
  374. make_calypso_final_element(
  375. "ContractLoyaltyPoints",
  376. 16,
  377. "Nombre de points de fidélité",
  378. CALYPSO_FINAL_TYPE_NUMBER),
  379. make_calypso_final_element(
  380. "ContractAuthenticator",
  381. 16,
  382. "Code de contrôle de l’intégrité des données",
  383. CALYPSO_FINAL_TYPE_UNKNOWN),
  384. make_calypso_final_element(
  385. "ContractData(0..255)", 0, "Données complémentaires", CALYPSO_FINAL_TYPE_UNKNOWN),
  386. });
  387. return IntercodeContractStructure;
  388. }
  389. CalypsoApp* get_intercode_structure_event() {
  390. CalypsoApp* IntercodeEventStructure = malloc(sizeof(CalypsoApp));
  391. if(!IntercodeEventStructure) {
  392. return NULL;
  393. }
  394. int app_elements_count = 3;
  395. IntercodeEventStructure->type = CALYPSO_APP_EVENT;
  396. IntercodeEventStructure->container = malloc(sizeof(CalypsoContainerElement));
  397. IntercodeEventStructure->container->elements =
  398. malloc(app_elements_count * sizeof(CalypsoElement));
  399. IntercodeEventStructure->container->size = app_elements_count;
  400. IntercodeEventStructure->container->elements[0] = make_calypso_final_element(
  401. "EventDateStamp", 14, "Date de l’événement", CALYPSO_FINAL_TYPE_DATE);
  402. IntercodeEventStructure->container->elements[1] = make_calypso_final_element(
  403. "EventTimeStamp", 11, "Heure de l’événement", CALYPSO_FINAL_TYPE_TIME);
  404. IntercodeEventStructure->container->elements[2] = make_calypso_bitmap_element(
  405. "EventBitmap",
  406. 28,
  407. (CalypsoElement[]){
  408. make_calypso_final_element(
  409. "EventDisplayData", 8, "Données pour l’affichage", CALYPSO_FINAL_TYPE_UNKNOWN),
  410. make_calypso_final_element("EventNetworkId", 24, "Réseau", CALYPSO_FINAL_TYPE_NUMBER),
  411. make_calypso_final_element(
  412. "EventCode", 8, "Nature de l’événement", CALYPSO_FINAL_TYPE_UNKNOWN),
  413. make_calypso_final_element(
  414. "EventResult", 8, "Code Résultat", CALYPSO_FINAL_TYPE_UNKNOWN),
  415. make_calypso_final_element(
  416. "EventServiceProvider",
  417. 8,
  418. "Identité de l’exploitant",
  419. CALYPSO_FINAL_TYPE_SERVICE_PROVIDER),
  420. make_calypso_final_element(
  421. "EventNotokCounter", 8, "Compteur événements anormaux", CALYPSO_FINAL_TYPE_UNKNOWN),
  422. make_calypso_final_element(
  423. "EventSerialNumber",
  424. 24,
  425. "Numéro de série de l’événement",
  426. CALYPSO_FINAL_TYPE_UNKNOWN),
  427. make_calypso_final_element(
  428. "EventDestination", 16, "Destination de l’usager", CALYPSO_FINAL_TYPE_UNKNOWN),
  429. make_calypso_final_element(
  430. "EventLocationId", 16, "Lieu de l’événement", CALYPSO_FINAL_TYPE_UNKNOWN),
  431. make_calypso_final_element(
  432. "EventLocationGate", 8, "Identification du passage", CALYPSO_FINAL_TYPE_UNKNOWN),
  433. make_calypso_final_element(
  434. "EventDevice", 16, "Identificateur de l’équipement", CALYPSO_FINAL_TYPE_UNKNOWN),
  435. make_calypso_final_element(
  436. "EventRouteNumber", 16, "Référence de la ligne", CALYPSO_FINAL_TYPE_UNKNOWN),
  437. make_calypso_final_element(
  438. "EventRouteVariant",
  439. 8,
  440. "Référence d’une variante de la ligne",
  441. CALYPSO_FINAL_TYPE_UNKNOWN),
  442. make_calypso_final_element(
  443. "EventJourneyRun", 16, "Référence de la mission", CALYPSO_FINAL_TYPE_NUMBER),
  444. make_calypso_final_element(
  445. "EventVehicleId", 16, "Identificateur du véhicule", CALYPSO_FINAL_TYPE_NUMBER),
  446. make_calypso_final_element(
  447. "EventVehicleClass", 8, "Type de véhicule utilisé", CALYPSO_FINAL_TYPE_UNKNOWN),
  448. make_calypso_final_element(
  449. "EventLocationType",
  450. 5,
  451. "Type d’endroit (gare, arrêt de bus), ",
  452. CALYPSO_FINAL_TYPE_UNKNOWN),
  453. make_calypso_final_element(
  454. "EventEmployee", 240, "Code de l’employé impliqué", CALYPSO_FINAL_TYPE_UNKNOWN),
  455. make_calypso_final_element(
  456. "EventLocationReference",
  457. 16,
  458. "Référence du lieu de l’événement",
  459. CALYPSO_FINAL_TYPE_UNKNOWN),
  460. make_calypso_final_element(
  461. "EventJourneyInterchanges",
  462. 8,
  463. "Nombre de correspondances",
  464. CALYPSO_FINAL_TYPE_UNKNOWN),
  465. make_calypso_final_element(
  466. "EventPeriodJourneys", 16, "Nombre de voyage effectué", CALYPSO_FINAL_TYPE_UNKNOWN),
  467. make_calypso_final_element(
  468. "EventTotalJourneys",
  469. 16,
  470. "Nombre total de voyage autorisé",
  471. CALYPSO_FINAL_TYPE_UNKNOWN),
  472. make_calypso_final_element(
  473. "EventJourneyDistance", 16, "Distance parcourue", CALYPSO_FINAL_TYPE_UNKNOWN),
  474. make_calypso_final_element(
  475. "EventPriceAmount",
  476. 16,
  477. "Montant en jeu lors de l’événement",
  478. CALYPSO_FINAL_TYPE_UNKNOWN),
  479. make_calypso_final_element(
  480. "EventPriceUnit", 16, "Unité de montant en jeu", CALYPSO_FINAL_TYPE_UNKNOWN),
  481. make_calypso_final_element(
  482. "EventContractPointer",
  483. 5,
  484. "Référence du contrat concerné",
  485. CALYPSO_FINAL_TYPE_NUMBER),
  486. make_calypso_final_element(
  487. "EventAuthenticator", 16, "Code de sécurité", CALYPSO_FINAL_TYPE_UNKNOWN),
  488. make_calypso_bitmap_element(
  489. "EventData",
  490. 5,
  491. (CalypsoElement[]){
  492. make_calypso_final_element(
  493. "EventDataDateFirstStamp",
  494. 14,
  495. "Date de la première montée",
  496. CALYPSO_FINAL_TYPE_DATE),
  497. make_calypso_final_element(
  498. "EventDataTimeFirstStamp",
  499. 11,
  500. "Heure de la première montée",
  501. CALYPSO_FINAL_TYPE_TIME),
  502. make_calypso_final_element(
  503. "EventDataSimulation",
  504. 1,
  505. "Dernière validation (0=normal, 1=dégradé), ",
  506. CALYPSO_FINAL_TYPE_UNKNOWN),
  507. make_calypso_final_element(
  508. "EventDataTrip", 2, "Tronçon", CALYPSO_FINAL_TYPE_UNKNOWN),
  509. make_calypso_final_element(
  510. "EventDataRouteDirection", 2, "Sens", CALYPSO_FINAL_TYPE_UNKNOWN),
  511. }),
  512. });
  513. return IntercodeEventStructure;
  514. }
  515. CalypsoApp* get_intercode_structure_counter() {
  516. CalypsoApp* IntercodeCounterStructure = malloc(sizeof(CalypsoApp));
  517. if(!IntercodeCounterStructure) {
  518. return NULL;
  519. }
  520. int app_elements_count = 2;
  521. IntercodeCounterStructure->type = CALYPSO_APP_COUNTER;
  522. IntercodeCounterStructure->container = malloc(sizeof(CalypsoContainerElement));
  523. IntercodeCounterStructure->container->elements =
  524. malloc(app_elements_count * sizeof(CalypsoElement));
  525. IntercodeCounterStructure->container->size = app_elements_count;
  526. IntercodeCounterStructure->container->elements[0] = make_calypso_final_element(
  527. "CounterContractCount", 6, "Nombre de titres du carnet", CALYPSO_FINAL_TYPE_NUMBER);
  528. IntercodeCounterStructure->container->elements[1] = make_calypso_final_element(
  529. "CounterRelativeFirstStamp15mn",
  530. 18,
  531. "Temps relatif de la première validation (au quart d'heure près)",
  532. CALYPSO_FINAL_TYPE_NUMBER);
  533. return IntercodeCounterStructure;
  534. }
  535. const char* get_intercode_string_transition_type(int transition) {
  536. switch(transition) {
  537. case 0x1:
  538. return "Entry (First validation)";
  539. case 0x2:
  540. return "Exit";
  541. case 0x3:
  542. return "Validation";
  543. case 0x4:
  544. return "Inspection";
  545. case 0x5:
  546. return "Test validation";
  547. case 0x6:
  548. return "Entry (Interchange)";
  549. case 0x7:
  550. return "Exit (Interchange)";
  551. case 0x9:
  552. return "Validation cancelled";
  553. case 0xA:
  554. return "Entry (Public road)";
  555. case 0xB:
  556. return "Exit (Public road)";
  557. case 0xD:
  558. return "Distribution";
  559. case 0xF:
  560. return "Invalidation";
  561. default: {
  562. char* transition_str = malloc(6 * sizeof(char));
  563. snprintf(transition_str, 6, "%d", transition);
  564. return transition_str;
  565. }
  566. }
  567. }
  568. const char* get_intercode_string_event_result(int result) {
  569. switch(result) {
  570. case 0x0:
  571. return "OK";
  572. case 0x7:
  573. return "Transfer / Dysfunction";
  574. case 0x8:
  575. return "Disabled due to fraud";
  576. case 0x9:
  577. return "Disabled due to monetary fraud";
  578. case 0xA:
  579. return "Invalidation impossible";
  580. case 0x30:
  581. return "Double validation (Entry)";
  582. case 0x31:
  583. return "Invalid zone";
  584. case 0x32:
  585. return "Contract expired";
  586. case 0x33:
  587. return "Double validation (Exit)";
  588. default: {
  589. char* result_str = malloc(6 * sizeof(char));
  590. if(!result_str) {
  591. return "Unknown";
  592. }
  593. snprintf(result_str, 6, "%d", result);
  594. return result_str;
  595. }
  596. }
  597. }
  598. const char* get_intercode_string_version(int version) {
  599. // version is a 6 bits int
  600. // if the first 3 bits are 000, it's a 1.x version
  601. // if the first 3 bits are 001, it's a 2.x version
  602. // else, it's unknown
  603. int major = (version >> 3) & 0x07;
  604. if(major == 0) {
  605. return "Intercode I";
  606. } else if(major == 1) {
  607. return "Intercode II";
  608. }
  609. return "Unknown";
  610. }
  611. int get_intercode_string_subversion(int version) {
  612. // subversion is a 3 bits int
  613. return version & 0x07;
  614. }
  615. const char* get_intercode_string_holder_type(int card_status) {
  616. // b3 -> RFU
  617. // b2 -> linked to an organization
  618. // b1..b0 -> personalization status (0: anonymous, 1: identified, 2: personalized, 3: networkSpecific)
  619. int status = card_status & 0x03;
  620. switch(status) {
  621. case 0:
  622. return "Anonymous";
  623. case 1:
  624. return "Identified";
  625. case 2:
  626. return "Personalized";
  627. case 3:
  628. return "Network Specific";
  629. default:
  630. return "Unknown";
  631. }
  632. }
  633. bool is_intercode_string_holder_linked(int card_status) {
  634. // b3 -> RFU
  635. // b2 -> linked to an organization
  636. // b1..b0 -> personalization status (0: anonymous, 1: identified, 2: personalized, 3: networkSpecific)
  637. return card_status & 0x04;
  638. }
  639. const char* get_intercode_string_contract_status(int status) {
  640. switch(status) {
  641. case 0x0:
  642. return "Valid (never used)";
  643. case 0x1:
  644. return "Valid (used)";
  645. case 0x3:
  646. return "Renewal required";
  647. case 0xD:
  648. return "Not validable";
  649. case 0x13:
  650. return "Blocked";
  651. case 0x3F:
  652. return "Suspended";
  653. case 0x58:
  654. return "Invalid";
  655. case 0x7F:
  656. return "Refunded";
  657. case 0xFF:
  658. return "Erasable";
  659. default:
  660. return "Unknown";
  661. }
  662. }