opus.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. #include <stdlib.h>
  2. #include "opus.h"
  3. CalypsoApp* get_opus_contract_structure() {
  4. /*
  5. En1545FixedInteger(CONTRACT_UNKNOWN_A, 3),
  6. En1545Bitmap(
  7. En1545FixedInteger(CONTRACT_PROVIDER, 8),
  8. En1545FixedInteger(CONTRACT_TARIFF, 16),
  9. En1545Bitmap(
  10. En1545FixedInteger.date(CONTRACT_START),
  11. En1545FixedInteger.date(CONTRACT_END)
  12. ),
  13. En1545Container(
  14. En1545FixedInteger(CONTRACT_UNKNOWN_B, 17),
  15. En1545FixedInteger.date(CONTRACT_SALE),
  16. En1545FixedInteger.timeLocal(CONTRACT_SALE),
  17. En1545FixedHex(CONTRACT_UNKNOWN_C, 36),
  18. En1545FixedInteger(CONTRACT_STATUS, 8),
  19. En1545FixedHex(CONTRACT_UNKNOWN_D, 36)
  20. )
  21. )
  22. */
  23. CalypsoApp* OpusContractStructure = malloc(sizeof(CalypsoApp));
  24. if(!OpusContractStructure) {
  25. return NULL;
  26. }
  27. int app_elements_count = 2;
  28. OpusContractStructure->type = CALYPSO_APP_CONTRACT;
  29. OpusContractStructure->container = malloc(sizeof(CalypsoContainerElement));
  30. OpusContractStructure->container->elements =
  31. malloc(app_elements_count * sizeof(CalypsoElement));
  32. OpusContractStructure->container->size = app_elements_count;
  33. OpusContractStructure->container->elements[0] =
  34. make_calypso_final_element("ContractUnknownA", 3, "Unknown A", CALYPSO_FINAL_TYPE_NUMBER);
  35. OpusContractStructure->container->elements[1] = make_calypso_bitmap_element(
  36. "Contract",
  37. 4,
  38. (CalypsoElement[]){
  39. make_calypso_final_element(
  40. "ContractProvider", 8, "Provider", CALYPSO_FINAL_TYPE_UNKNOWN),
  41. make_calypso_final_element("ContractTariff", 16, "Tariff", CALYPSO_FINAL_TYPE_TARIFF),
  42. make_calypso_bitmap_element(
  43. "ContractDates",
  44. 2,
  45. (CalypsoElement[]){
  46. make_calypso_final_element(
  47. "ContractStartDate", 14, "Start date", CALYPSO_FINAL_TYPE_DATE),
  48. make_calypso_final_element(
  49. "ContractEndDate", 14, "End date", CALYPSO_FINAL_TYPE_DATE),
  50. }),
  51. make_calypso_bitmap_element(
  52. "ContractSaleData",
  53. 6,
  54. (CalypsoElement[]){
  55. make_calypso_final_element(
  56. "ContractUnknownB", 17, "Unknown B", CALYPSO_FINAL_TYPE_NUMBER),
  57. make_calypso_final_element(
  58. "ContractSaleDate", 14, "Sale date", CALYPSO_FINAL_TYPE_DATE),
  59. make_calypso_final_element(
  60. "ContractSaleTime", 11, "Sale time", CALYPSO_FINAL_TYPE_TIME),
  61. make_calypso_final_element(
  62. "ContractUnknownC", 36, "Unknown C", CALYPSO_FINAL_TYPE_NUMBER),
  63. make_calypso_final_element(
  64. "ContractStatus", 8, "Status", CALYPSO_FINAL_TYPE_UNKNOWN),
  65. make_calypso_final_element(
  66. "ContractUnknownD", 36, "Unknown D", CALYPSO_FINAL_TYPE_NUMBER),
  67. }),
  68. });
  69. return OpusContractStructure;
  70. }
  71. CalypsoApp* get_opus_event_structure() {
  72. /*
  73. En1545Container(
  74. En1545FixedInteger.date(EVENT),
  75. En1545FixedInteger.timeLocal(EVENT),
  76. En1545FixedInteger("UnknownX", 19), // Possibly part of following bitmap
  77. En1545Bitmap(
  78. En1545FixedInteger(EVENT_UNKNOWN_A, 8),
  79. En1545FixedInteger(EVENT_UNKNOWN_B, 8),
  80. En1545FixedInteger(EVENT_SERVICE_PROVIDER, 8),
  81. En1545FixedInteger(EVENT_UNKNOWN_C, 16),
  82. En1545FixedInteger(EVENT_ROUTE_NUMBER, 16),
  83. // How 32 bits are split among next 2 fields is unclear
  84. En1545FixedInteger(EVENT_UNKNOWN_D, 16),
  85. En1545FixedInteger(EVENT_UNKNOWN_E, 16),
  86. En1545FixedInteger(EVENT_CONTRACT_POINTER, 5),
  87. En1545Bitmap(
  88. En1545FixedInteger.date(EVENT_FIRST_STAMP),
  89. En1545FixedInteger.timeLocal(EVENT_FIRST_STAMP),
  90. En1545FixedInteger("EventDataSimulation", 1),
  91. En1545FixedInteger(EVENT_UNKNOWN_F, 4),
  92. En1545FixedInteger(EVENT_UNKNOWN_G, 4),
  93. En1545FixedInteger(EVENT_UNKNOWN_H, 4),
  94. En1545FixedInteger(EVENT_UNKNOWN_I, 4)
  95. )
  96. )
  97. )
  98. */
  99. CalypsoApp* OpusEventStructure = malloc(sizeof(CalypsoApp));
  100. if(!OpusEventStructure) {
  101. return NULL;
  102. }
  103. int app_elements_count = 4;
  104. OpusEventStructure->type = CALYPSO_APP_EVENT;
  105. OpusEventStructure->container = malloc(sizeof(CalypsoContainerElement));
  106. OpusEventStructure->container->elements = malloc(app_elements_count * sizeof(CalypsoElement));
  107. OpusEventStructure->container->size = app_elements_count;
  108. OpusEventStructure->container->elements[0] =
  109. make_calypso_final_element("EventDateStamp", 14, "Event date", CALYPSO_FINAL_TYPE_DATE);
  110. OpusEventStructure->container->elements[1] =
  111. make_calypso_final_element("EventTimeStamp", 11, "Event time", CALYPSO_FINAL_TYPE_TIME);
  112. OpusEventStructure->container->elements[2] =
  113. make_calypso_final_element("EventUnknownX", 19, "Unknown X", CALYPSO_FINAL_TYPE_NUMBER);
  114. OpusEventStructure->container->elements[3] = make_calypso_bitmap_element(
  115. "Event",
  116. 9,
  117. (CalypsoElement[]){
  118. make_calypso_final_element("EventUnknownA", 8, "Unknown A", CALYPSO_FINAL_TYPE_NUMBER),
  119. make_calypso_final_element("EventUnknownB", 8, "Unknown B", CALYPSO_FINAL_TYPE_NUMBER),
  120. make_calypso_final_element(
  121. "EventServiceProvider", 8, "Service provider", CALYPSO_FINAL_TYPE_SERVICE_PROVIDER),
  122. make_calypso_final_element("EventUnknownC", 16, "Unknown C", CALYPSO_FINAL_TYPE_NUMBER),
  123. make_calypso_final_element(
  124. "EventRouteNumber", 16, "Route number", CALYPSO_FINAL_TYPE_NUMBER),
  125. make_calypso_final_element("EventUnknownD", 16, "Unknown D", CALYPSO_FINAL_TYPE_NUMBER),
  126. make_calypso_final_element("EventUnknownE", 16, "Unknown E", CALYPSO_FINAL_TYPE_NUMBER),
  127. make_calypso_final_element(
  128. "EventContractPointer", 5, "Contract pointer", CALYPSO_FINAL_TYPE_NUMBER),
  129. make_calypso_bitmap_element(
  130. "EventData",
  131. 7,
  132. (CalypsoElement[]){
  133. make_calypso_final_element(
  134. "EventFirstStampDate", 14, "First stamp date", CALYPSO_FINAL_TYPE_DATE),
  135. make_calypso_final_element(
  136. "EventFirstStampTime", 11, "First stamp time", CALYPSO_FINAL_TYPE_TIME),
  137. make_calypso_final_element(
  138. "EventDataSimulation", 1, "Simulation", CALYPSO_FINAL_TYPE_UNKNOWN),
  139. make_calypso_final_element(
  140. "EventUnknownF", 4, "Unknown F", CALYPSO_FINAL_TYPE_NUMBER),
  141. make_calypso_final_element(
  142. "EventUnknownG", 4, "Unknown G", CALYPSO_FINAL_TYPE_NUMBER),
  143. make_calypso_final_element(
  144. "EventUnknownH", 4, "Unknown H", CALYPSO_FINAL_TYPE_NUMBER),
  145. make_calypso_final_element(
  146. "EventUnknownI", 4, "Unknown I", CALYPSO_FINAL_TYPE_NUMBER),
  147. }),
  148. });
  149. return OpusEventStructure;
  150. }
  151. CalypsoApp* get_opus_env_holder_structure() {
  152. CalypsoApp* OpusEnvHolderStructure = malloc(sizeof(CalypsoApp));
  153. if(!OpusEnvHolderStructure) {
  154. return NULL;
  155. }
  156. int app_elements_count = 3;
  157. OpusEnvHolderStructure->type = CALYPSO_APP_ENV_HOLDER;
  158. OpusEnvHolderStructure->container = malloc(sizeof(CalypsoContainerElement));
  159. OpusEnvHolderStructure->container->elements =
  160. malloc(app_elements_count * sizeof(CalypsoElement));
  161. OpusEnvHolderStructure->container->size = app_elements_count;
  162. OpusEnvHolderStructure->container->elements[0] = make_calypso_final_element(
  163. "EnvApplicationVersionNumber",
  164. 6,
  165. "Numéro de version de l’application Billettique",
  166. CALYPSO_FINAL_TYPE_NUMBER);
  167. OpusEnvHolderStructure->container->elements[1] = make_calypso_bitmap_element(
  168. "Env",
  169. 7,
  170. (CalypsoElement[]){
  171. make_calypso_final_element(
  172. "EnvNetworkId", 24, "Identification du réseau", CALYPSO_FINAL_TYPE_NUMBER),
  173. make_calypso_final_element(
  174. "EnvApplicationIssuerId",
  175. 8,
  176. "Identification de l’émetteur de l’application",
  177. CALYPSO_FINAL_TYPE_UNKNOWN),
  178. make_calypso_final_element(
  179. "EnvApplicationValidityEndDate",
  180. 14,
  181. "Date de fin de validité de l’application",
  182. CALYPSO_FINAL_TYPE_DATE),
  183. make_calypso_final_element(
  184. "EnvPayMethod", 11, "Code mode de paiement", CALYPSO_FINAL_TYPE_PAY_METHOD),
  185. make_calypso_final_element(
  186. "EnvAuthenticator",
  187. 16,
  188. "Code de contrôle de l’intégrité des données",
  189. CALYPSO_FINAL_TYPE_UNKNOWN),
  190. make_calypso_final_element(
  191. "EnvSelectList",
  192. 32,
  193. "Bitmap de tableau de paramètre multiple",
  194. CALYPSO_FINAL_TYPE_UNKNOWN),
  195. make_calypso_container_element(
  196. "EnvData",
  197. 2,
  198. (CalypsoElement[]){
  199. make_calypso_final_element(
  200. "EnvDataCardStatus", 1, "Statut de la carte", CALYPSO_FINAL_TYPE_UNKNOWN),
  201. make_calypso_final_element(
  202. "EnvData2", 0, "Données complémentaires", CALYPSO_FINAL_TYPE_UNKNOWN),
  203. }),
  204. });
  205. OpusEnvHolderStructure->container->elements[2] = make_calypso_bitmap_element(
  206. "Holder",
  207. 2,
  208. (CalypsoElement[]){
  209. make_calypso_container_element(
  210. "HolderData",
  211. 5,
  212. (CalypsoElement[]){
  213. make_calypso_final_element(
  214. "HolderUnknownA", 3, "Unknown A", CALYPSO_FINAL_TYPE_NUMBER),
  215. make_calypso_final_element(
  216. "HolderBirthDate", 8, "Birth date", CALYPSO_FINAL_TYPE_DATE),
  217. make_calypso_final_element(
  218. "HolderUnknownB", 13, "Unknown B", CALYPSO_FINAL_TYPE_NUMBER),
  219. make_calypso_final_element(
  220. "HolderProfile", 17, "Profile", CALYPSO_FINAL_TYPE_DATE),
  221. make_calypso_final_element(
  222. "HolderUnknownC", 8, "Unknown C", CALYPSO_FINAL_TYPE_NUMBER),
  223. }),
  224. make_calypso_final_element("HolderUnknownD", 8, "Unknown D", CALYPSO_FINAL_TYPE_NUMBER),
  225. });
  226. return OpusEnvHolderStructure;
  227. }