opus.c 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. #include <stdlib.h>
  2. #include "opus.h"
  3. CalypsoApp* get_opus_contract_structure() {
  4. CalypsoApp* OpusContractStructure = malloc(sizeof(CalypsoApp));
  5. if(!OpusContractStructure) {
  6. return NULL;
  7. }
  8. int app_elements_count = 2;
  9. OpusContractStructure->type = CALYPSO_APP_CONTRACT;
  10. OpusContractStructure->container = malloc(sizeof(CalypsoContainerElement));
  11. OpusContractStructure->container->elements =
  12. malloc(app_elements_count * sizeof(CalypsoElement));
  13. OpusContractStructure->container->size = app_elements_count;
  14. OpusContractStructure->container->elements[0] =
  15. make_calypso_final_element("ContractUnknownA", 3, "Unknown A", CALYPSO_FINAL_TYPE_NUMBER);
  16. OpusContractStructure->container->elements[1] = make_calypso_bitmap_element(
  17. "Contract",
  18. 4,
  19. (CalypsoElement[]){
  20. make_calypso_final_element(
  21. "ContractProvider", 8, "Provider", CALYPSO_FINAL_TYPE_UNKNOWN),
  22. make_calypso_final_element("ContractTariff", 16, "Tariff", CALYPSO_FINAL_TYPE_TARIFF),
  23. make_calypso_bitmap_element(
  24. "ContractDates",
  25. 2,
  26. (CalypsoElement[]){
  27. make_calypso_final_element(
  28. "ContractStartDate", 14, "Start date", CALYPSO_FINAL_TYPE_DATE),
  29. make_calypso_final_element(
  30. "ContractEndDate", 14, "End date", CALYPSO_FINAL_TYPE_DATE),
  31. }),
  32. make_calypso_bitmap_element(
  33. "ContractSaleData",
  34. 6,
  35. (CalypsoElement[]){
  36. make_calypso_final_element(
  37. "ContractUnknownB", 17, "Unknown B", CALYPSO_FINAL_TYPE_NUMBER),
  38. make_calypso_final_element(
  39. "ContractSaleDate", 14, "Sale date", CALYPSO_FINAL_TYPE_DATE),
  40. make_calypso_final_element(
  41. "ContractSaleTime", 11, "Sale time", CALYPSO_FINAL_TYPE_TIME),
  42. make_calypso_final_element(
  43. "ContractUnknownC", 36, "Unknown C", CALYPSO_FINAL_TYPE_NUMBER),
  44. make_calypso_final_element(
  45. "ContractStatus", 8, "Status", CALYPSO_FINAL_TYPE_UNKNOWN),
  46. make_calypso_final_element(
  47. "ContractUnknownD", 36, "Unknown D", CALYPSO_FINAL_TYPE_NUMBER),
  48. }),
  49. });
  50. return OpusContractStructure;
  51. }
  52. CalypsoApp* get_opus_event_structure() {
  53. CalypsoApp* OpusEventStructure = malloc(sizeof(CalypsoApp));
  54. if(!OpusEventStructure) {
  55. return NULL;
  56. }
  57. int app_elements_count = 4;
  58. OpusEventStructure->type = CALYPSO_APP_EVENT;
  59. OpusEventStructure->container = malloc(sizeof(CalypsoContainerElement));
  60. OpusEventStructure->container->elements = malloc(app_elements_count * sizeof(CalypsoElement));
  61. OpusEventStructure->container->size = app_elements_count;
  62. OpusEventStructure->container->elements[0] =
  63. make_calypso_final_element("EventDateStamp", 14, "Event date", CALYPSO_FINAL_TYPE_DATE);
  64. OpusEventStructure->container->elements[1] =
  65. make_calypso_final_element("EventTimeStamp", 11, "Event time", CALYPSO_FINAL_TYPE_TIME);
  66. OpusEventStructure->container->elements[2] =
  67. make_calypso_final_element("EventUnknownX", 19, "Unknown X", CALYPSO_FINAL_TYPE_NUMBER);
  68. OpusEventStructure->container->elements[3] = make_calypso_bitmap_element(
  69. "Event",
  70. 9,
  71. (CalypsoElement[]){
  72. make_calypso_final_element("EventUnknownA", 8, "Unknown A", CALYPSO_FINAL_TYPE_UNKNOWN),
  73. make_calypso_final_element(
  74. "EventResult", 8, "Code Résultat", CALYPSO_FINAL_TYPE_UNKNOWN),
  75. make_calypso_final_element(
  76. "EventServiceProvider",
  77. 8,
  78. "Identité de l’exploitant",
  79. CALYPSO_FINAL_TYPE_SERVICE_PROVIDER),
  80. make_calypso_final_element(
  81. "EventLocationId", 16, "Lieu de l’événement", CALYPSO_FINAL_TYPE_UNKNOWN),
  82. make_calypso_final_element(
  83. "EventRouteNumber", 16, "Référence de la ligne", CALYPSO_FINAL_TYPE_UNKNOWN),
  84. make_calypso_final_element(
  85. "EventUnknownD", 16, "Unknown D", CALYPSO_FINAL_TYPE_UNKNOWN),
  86. make_calypso_final_element(
  87. "EventUnknownE", 16, "Unknown E", CALYPSO_FINAL_TYPE_UNKNOWN),
  88. make_calypso_final_element(
  89. "EventContractPointer",
  90. 5,
  91. "Référence du contrat concerné",
  92. CALYPSO_FINAL_TYPE_UNKNOWN),
  93. make_calypso_bitmap_element(
  94. "EventData",
  95. 7,
  96. (CalypsoElement[]){
  97. make_calypso_final_element(
  98. "EventDataDateFirstStamp",
  99. 14,
  100. "Date de la première montée",
  101. CALYPSO_FINAL_TYPE_DATE),
  102. make_calypso_final_element(
  103. "EventDataTimeFirstStamp",
  104. 11,
  105. "Heure de la première montée",
  106. CALYPSO_FINAL_TYPE_TIME),
  107. make_calypso_final_element(
  108. "EventDataSimulation", 1, "Simulation", CALYPSO_FINAL_TYPE_UNKNOWN),
  109. make_calypso_final_element(
  110. "EventDataRouteDirection", 4, "Sens", CALYPSO_FINAL_TYPE_UNKNOWN),
  111. make_calypso_final_element(
  112. "EventUnknownG", 4, "Unknown G", CALYPSO_FINAL_TYPE_UNKNOWN),
  113. make_calypso_final_element(
  114. "EventUnknownH", 4, "Unknown H", CALYPSO_FINAL_TYPE_UNKNOWN),
  115. make_calypso_final_element(
  116. "EventUnknownI", 4, "Unknown I", CALYPSO_FINAL_TYPE_UNKNOWN),
  117. }),
  118. });
  119. return OpusEventStructure;
  120. /*
  121. EventDateStamp: 10011111100001
  122. EventTimeStamp: 01111110001
  123. UNKNOWN: 0000000000000000000
  124. EventBitmap: 110011110
  125. EventResult: 00000000
  126. EventServiceProvider: 00000010
  127. EventLocationId: 0000000001100101
  128. EventRouteNumber: 0000000011011011
  129. EventContractPointer: 00100
  130. EventDataBitmap: 0001111
  131. EventDataDateFirstStamp: 10011111100001
  132. EventDataTimeFirstStamp: 01111011100
  133. EventDataSimulation: 0
  134. EventDataRouteDirection: 0110
  135. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  136. */
  137. /*
  138. EventDateStamp: 10011111100001
  139. EventTimeStamp: 01111011100
  140. UNKNOWN: 0000000000000000000
  141. EventBitmap: 110011110
  142. EventResult: 00000000
  143. EventServiceProvider: 00000010
  144. EventLocationId: 0000000011001001
  145. EventRouteNumber: 0000000000000010
  146. EventContractPointer: 00100
  147. EventDataBitmap: 0001111
  148. EventDataDateFirstStamp: 10011111100001
  149. EventDataTimeFirstStamp: 01111011100
  150. EventDataSimulation: 0
  151. EventDataRouteDirection: 0001
  152. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  153. */
  154. /*
  155. EventDateStamp: 10011111100001
  156. EventTimeStamp: 01010011111
  157. UNKNOWN: 0000000000000000000
  158. EventBitmap: 110011110
  159. EventResult: 00000000
  160. EventServiceProvider: 00000010
  161. EventLocationId: 0000000011001001
  162. EventRouteNumber: 0000000000000010
  163. EventContractPointer: 00100
  164. EventDataBitmap: 0001111
  165. EventDataDateFirstStamp: 10011111100001
  166. EventDataTimeFirstStamp: 01000101111
  167. EventDataSimulation: 0
  168. EventDataRouteDirection: 0001
  169. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  170. */
  171. }
  172. CalypsoApp* get_opus_env_holder_structure() {
  173. CalypsoApp* OpusEnvHolderStructure = malloc(sizeof(CalypsoApp));
  174. if(!OpusEnvHolderStructure) {
  175. return NULL;
  176. }
  177. int app_elements_count = 3;
  178. OpusEnvHolderStructure->type = CALYPSO_APP_ENV_HOLDER;
  179. OpusEnvHolderStructure->container = malloc(sizeof(CalypsoContainerElement));
  180. OpusEnvHolderStructure->container->elements =
  181. malloc(app_elements_count * sizeof(CalypsoElement));
  182. OpusEnvHolderStructure->container->size = app_elements_count;
  183. OpusEnvHolderStructure->container->elements[0] = make_calypso_final_element(
  184. "EnvApplicationVersionNumber",
  185. 6,
  186. "Numéro de version de l’application Billettique",
  187. CALYPSO_FINAL_TYPE_NUMBER);
  188. OpusEnvHolderStructure->container->elements[1] = make_calypso_bitmap_element(
  189. "Env",
  190. 7,
  191. (CalypsoElement[]){
  192. make_calypso_final_element(
  193. "EnvNetworkId", 24, "Identification du réseau", CALYPSO_FINAL_TYPE_NUMBER),
  194. make_calypso_final_element(
  195. "EnvApplicationIssuerId",
  196. 8,
  197. "Identification de l’émetteur de l’application",
  198. CALYPSO_FINAL_TYPE_UNKNOWN),
  199. make_calypso_final_element(
  200. "EnvApplicationValidityEndDate",
  201. 14,
  202. "Date de fin de validité de l’application",
  203. CALYPSO_FINAL_TYPE_DATE),
  204. make_calypso_bitmap_element(
  205. "EnvData",
  206. 4,
  207. (CalypsoElement[]){
  208. make_calypso_final_element(
  209. "EnvDataCardStatus", 1, "Statut de la carte", CALYPSO_FINAL_TYPE_UNKNOWN),
  210. make_calypso_final_element(
  211. "EnvData2", 0, "Données complémentaires", CALYPSO_FINAL_TYPE_UNKNOWN),
  212. make_calypso_final_element(
  213. "EnvData_CardUtilisation",
  214. 1,
  215. "Utilisation de la carte",
  216. CALYPSO_FINAL_TYPE_UNKNOWN),
  217. make_calypso_final_element(
  218. "EnvData4", 0, "Données complémentaires", CALYPSO_FINAL_TYPE_UNKNOWN),
  219. }),
  220. make_calypso_final_element("EnvUnknownA", 0, "Unknown A", CALYPSO_FINAL_TYPE_UNKNOWN),
  221. make_calypso_final_element("EnvUnknownB", 0, "Unknown B", CALYPSO_FINAL_TYPE_UNKNOWN),
  222. make_calypso_final_element("EnvUnknownC", 0, "Unknown C", CALYPSO_FINAL_TYPE_UNKNOWN),
  223. });
  224. /*
  225. HolderProf1Number "01"
  226. HolderProf1Date - ok
  227. HolderData_Language "FR"
  228. HolderData_ResidenceCode 0
  229. HolderBirthDate - ok
  230. */
  231. OpusEnvHolderStructure->container->elements[2] = make_calypso_bitmap_element(
  232. "Holder",
  233. 8,
  234. (CalypsoElement[]){
  235. make_calypso_bitmap_element(
  236. "HolderBirthBitmap",
  237. 2,
  238. (CalypsoElement[]){
  239. make_calypso_final_element(
  240. "HolderBirthDate", 32, "Date de naissance", CALYPSO_FINAL_TYPE_DATE),
  241. make_calypso_final_element(
  242. "HolderBirthUnknownA", 0, "Unknown A", CALYPSO_FINAL_TYPE_UNKNOWN),
  243. }),
  244. make_calypso_repeater_element(
  245. "HolderProfilesList",
  246. 4,
  247. make_calypso_bitmap_element(
  248. "HolderProfile",
  249. 3,
  250. (CalypsoElement[]){
  251. make_calypso_final_element(
  252. "HolderProfileNumber", 6, "Numéro de profil", CALYPSO_FINAL_TYPE_NUMBER),
  253. make_calypso_final_element(
  254. "HolderProfileDate", 14, "Date de profil", CALYPSO_FINAL_TYPE_DATE),
  255. make_calypso_final_element(
  256. "HolderProfileUnknownA", 0, "Unknown A", CALYPSO_FINAL_TYPE_UNKNOWN),
  257. })),
  258. make_calypso_final_element(
  259. "HolderData_Language", 6, "Langue de l'utilisateur", CALYPSO_FINAL_TYPE_UNKNOWN),
  260. make_calypso_final_element(
  261. "HolderUnknownA", 0, "Unknown A", CALYPSO_FINAL_TYPE_UNKNOWN),
  262. make_calypso_final_element(
  263. "HolderUnknownB", 0, "Unknown B", CALYPSO_FINAL_TYPE_UNKNOWN),
  264. make_calypso_final_element(
  265. "HolderUnknownC", 0, "Unknown C", CALYPSO_FINAL_TYPE_UNKNOWN),
  266. make_calypso_final_element(
  267. "HolderUnknownD", 0, "Unknown D", CALYPSO_FINAL_TYPE_UNKNOWN),
  268. make_calypso_final_element(
  269. "HolderUnknownE", 0, "Unknown E", CALYPSO_FINAL_TYPE_UNKNOWN),
  270. });
  271. return OpusEnvHolderStructure;
  272. /*
  273. missing: EnvDataCardStatus=false, EnvData_CardUtilisation=true, HolderProf1Number="01", HolderData_ResidenceCode=0
  274. EnvApplicationVersionNumber: 000001
  275. EnvBitmap: 0001111
  276. EnvNetworkId: 000100100100000000000001
  277. EnvApplicationIssuerId: 00100000
  278. EnvApplicationValidityEndDate: 10100100100010
  279. EnvDataBitmap: 0101
  280. EnvDataCardStatus: 0
  281. EnvData_CardUtilisation: 1
  282. HolderBitmap: 00000111
  283. HolderBirthBitmap: 01
  284. HolderBirthDate: 00100000000001010000100000000111
  285. HolderProfilesList: 0001
  286. HolderProfileBitmap: 011
  287. HolderProfileNumber: 000001
  288. HolderProfileDate: 10100100100010
  289. HolderData_Language: 110001
  290. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  291. */
  292. /*
  293. EnvApplicationVersionNumber: 000001
  294. EnvBitmap: 0001111
  295. EnvNetworkId: 000100100100000000000001
  296. EnvApplicationIssuerId: 00100000
  297. EnvApplicationValidityEndDate: 10110101101010
  298. 0101010000011101
  299. HolderBirthDate: 00011001011100100000001000000001
  300. HolderProfCount: 0000
  301. HolderData_Language: 110001
  302. 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  303. */
  304. }