intercode.c 30 KB

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