structures.h 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. #pragma once
  2. #include <furi.h>
  3. #include <furi_hal.h>
  4. #include <expansion/expansion.h>
  5. #include <gui/gui.h>
  6. #include <gui/view.h>
  7. #include <gui/view_dispatcher.h>
  8. #include <gui/modules/submenu.h>
  9. #include <gui/modules/text_input.h>
  10. #include <gui/modules/popup.h>
  11. #include <gui/modules/byte_input.h>
  12. #include <gui/modules/widget.h>
  13. #include <gui/modules/variable_item_list.h>
  14. #include <notification/notification.h>
  15. #include <notification/notification_messages.h>
  16. #include <dolphin/dolphin.h>
  17. #include <gui/elements.h>
  18. #include <storage/storage.h>
  19. #include <flipper_format/flipper_format.h>
  20. #include <toolbox/path.h>
  21. #include <stdio.h>
  22. #include <stdlib.h>
  23. #include <string.h>
  24. #include "helpers/uart_helper.h"
  25. #include "helpers/yrm100x_uart.h"
  26. #include "helpers/yrm100x_buffer.h"
  27. #include "helpers/yrm100x_worker.h"
  28. #include <simultaneous_rfid_reader_icons.h>
  29. //Submenu enums for different screens
  30. typedef enum {
  31. UHFReaderSubmenuIndexRead,
  32. UHFReaderSubmenuIndexDelete,
  33. UHFReaderSubmenuIndexTagInfo,
  34. UHFReaderSubmenuIndexTagRename,
  35. UHFReaderSubmenuIndexEpcLock,
  36. UHFReaderSubmenuIndexTidLock,
  37. UHFReaderSubmenuIndexUserLock,
  38. UHFReaderSubmenuIndexApLock,
  39. UHFReaderSubmenuIndexKillLock,
  40. UHFReaderSubmenuIndexTagWrite,
  41. UHFReaderSubmenuIndexTagLock,
  42. UHFReaderSubmenuIndexTagKill,
  43. UHFReaderSubmenuIndexSetKillPwd,
  44. UHFReaderSubmenuIndexKillTag,
  45. UHFReaderSubmenuIndexTagDelete,
  46. UHFReaderSubmenuIndexSaved,
  47. UHFReaderSubmenuIndexConfig,
  48. UHFReaderSubmenuIndexAbout,
  49. UHFReaderSubmenuIndexStartReading,
  50. UHFReaderSubmenuIndexStartWriting,
  51. UHFReaderSubmenuIndexSelectTag,
  52. UHFReaderSubmenuIndexSetPower,
  53. UHFReaderSubmenuIndexTagAction,
  54. UHFReaderSubmenuIndexSetAccessPwd,
  55. } UHFReaderSubmenuIndex;
  56. //Defining views for the application
  57. typedef enum {
  58. UHFReaderViewSubmenu,
  59. UHFReaderViewDeleteSuccess,
  60. UHFReaderViewConfigure,
  61. UHFReaderViewEpcDump,
  62. UHFReaderViewEpcInfo,
  63. UHFReaderViewDelete,
  64. UHFReaderViewAbout,
  65. UHFReaderViewRead,
  66. UHFReaderViewSaveInput,
  67. UHFReaderViewRenameInput,
  68. UHFReaderViewEpcWriteInput,
  69. UHFReaderViewWrite,
  70. UHFReaderViewLock,
  71. UHFReaderViewKill,
  72. UHFReaderViewSaved,
  73. UHFReaderViewTagAction,
  74. UHFReaderViewSelectSavedTag,
  75. UHFReaderViewSetPower,
  76. UHFReaderViewSetReadAp,
  77. UHFReaderViewSetKillPwd,
  78. UHFReaderViewSetAccessPwd,
  79. UHFReaderViewKillConfirm,
  80. UHFReaderViewLockPopup,
  81. } UHFReaderView;
  82. //Event IDs for the app
  83. typedef enum {
  84. UHFReaderEventIdRedrawScreen = 0,
  85. UHFReaderEventIdOkPressed = 42,
  86. UHFCustomEventReserved = 100,
  87. UHFCustomEventWorkerExit = 105,
  88. UHFCustomEventWorkerExitAborted = 106,
  89. } UHFReaderEventId;
  90. //State of the reader app when communicating with raspberry pi zero over uart
  91. typedef enum {
  92. UHFReaderStateIdle,
  93. UHFReaderStateWaitForNumber,
  94. UHFReaderStateCollectEPCs,
  95. UHFReaderStateDoneCollecting,
  96. UHFReaderStateWaitForTID,
  97. UHFReaderStateCollectTIDs,
  98. UHFReaderStateDoneCollectingTIDs,
  99. UHFReaderStateWaitForRES,
  100. UHFReaderStateCollectRESs,
  101. UHFReaderStateDoneCollectingRESs,
  102. UHFReaderStateWaitForMEM,
  103. UHFReaderStateCollectMEMs,
  104. UHFReaderStateDoneCollectingMEMs
  105. } UHFReaderState;
  106. //LED blinking notification sequence
  107. static const NotificationSequence uhf_sequence_blink_start_cyan = {
  108. &message_blink_start_10,
  109. &message_blink_set_color_cyan,
  110. &message_do_not_reset,
  111. NULL,
  112. };
  113. //LED blinking notification sequence for stopping
  114. static const NotificationSequence uhf_sequence_blink_stop = {
  115. &message_blink_stop,
  116. NULL,
  117. };
  118. //The main UHFReaderApp Struct
  119. typedef struct {
  120. ViewDispatcher* ViewDispatcher;
  121. NotificationApp* Notifications;
  122. Submenu* Submenu;
  123. Submenu* SubmenuSaved;
  124. Submenu* SubmenuTagActions;
  125. Submenu* SubmenuLockActions;
  126. Submenu* SubmenuKillActions;
  127. TextInput* TextInput;
  128. ByteInput* ApInput;
  129. ByteInput* KillInput;
  130. ByteInput* SetApInput;
  131. ByteInput* KillConfirmInput;
  132. TextInput* SaveInput;
  133. TextInput* RenameInput;
  134. TextInput* EpcWrite;
  135. Popup* LockPopup;
  136. VariableItemList* VariableItemListConfig;
  137. VariableItemList* VariableItemListLock;
  138. VariableItem* Setting2Item;
  139. VariableItem* SettingApPwdItem;
  140. VariableItem* SettingLockApPwdItem;
  141. VariableItem* SettingLockResultItem;
  142. VariableItem* WriteSettingApPwdItem;
  143. Widget* WidgetAbout;
  144. View* ViewRead;
  145. View* ViewWrite;
  146. View* ViewDelete;
  147. View* ViewLock;
  148. View* ViewDeleteSuccess;
  149. View* ViewEpc;
  150. View* ViewEpcInfo;
  151. char* TempBuffer;
  152. uint8_t* ApTempBuffer;
  153. uint8_t* KillPwdTempBuffer;
  154. uint8_t* KillConfirmPwdTempBuffer;
  155. uint8_t* SetPwdTempBuffer;
  156. char* TempSaveBuffer;
  157. char* FileName;
  158. char* EpcToSave;
  159. char* Setting1ConfigLabel;
  160. char* Setting1Names[2];
  161. char* SettingLockBankConfigLabel;
  162. char* SettingLockBankNames[5];
  163. char* SettingLockActionConfigLabel;
  164. char* SettingLockActionNames[4];
  165. char* Setting2ConfigLabel;
  166. char* Setting2EntryText;
  167. char* Setting2DefaultValue;
  168. char* Setting3ConfigLabel;
  169. char* Setting3Names[2];
  170. char* SettingModuleNames[3];
  171. char* SettingSavingNames[2];
  172. char* SettingBaudNames[3];
  173. char* SettingRegionNames[5];
  174. char* SettingModuleConfigLabel;
  175. char* SettingSavingConfigLabel;
  176. char* SettingBaudConfigLabel;
  177. char* SettingRegionConfigLabel;
  178. char* SettingLockExecuteConfigLabel;
  179. char* SettingLockExecuteResult;
  180. uint32_t TempBufferSize;
  181. uint8_t ApInputBufferSize;
  182. uint8_t KillPwdInputBufferSize;
  183. uint32_t TempBufferSaveSize;
  184. uint32_t NameSize;
  185. uint32_t SelectedTagIndex;
  186. uint32_t NumberOfSavedTags;
  187. uint32_t NumberOfTidsToRead;
  188. uint32_t NumberOfResToRead;
  189. uint32_t NumberOfMemToRead;
  190. uint32_t CurEpcIndex;
  191. uint32_t CurTidIndex;
  192. uint32_t CurResIndex;
  193. uint32_t CurMemIndex;
  194. uint32_t UHFBaudRate;
  195. UartHelper* UartHelper;
  196. FuriString* EpcNameDelete;
  197. FuriString* EpcDelete;
  198. FuriString* EpcName;
  199. FuriString* Setting2PowerStr;
  200. FuriString* DefaultLockAccessPwdStr;
  201. FuriString* DefaultLockResultStr;
  202. FuriString* EpcToWrite;
  203. FuriString* DefaultAccessPwdStr;
  204. bool IsReading;
  205. bool IsWriting;
  206. bool ReaderConnected;
  207. FuriTimer* Timer;
  208. Storage* TagStorage;
  209. FlipperFormat* EpcFile;
  210. FlipperFormat* EpcIndexFile;
  211. UHFReaderState State;
  212. size_t NumberOfEpcsToRead;
  213. size_t NameSizeParse;
  214. uint8_t Setting3Index;
  215. uint8_t SettingModuleIndex;
  216. uint8_t SettingSavingIndex;
  217. uint8_t UHFSaveType;
  218. uint8_t SettingBaudIndex;
  219. uint8_t SettingRegionIndex;
  220. uint8_t SettingLockBankIndex;
  221. uint8_t SettingLockActionIndex;
  222. uint8_t Setting1Index;
  223. uint8_t Setting1Values[2];
  224. uint8_t SettingLockBankValues[5];
  225. uint8_t SettingLockActionValues[4];
  226. uint8_t Setting3Values[2];
  227. uint8_t SettingModuleValues[3];
  228. uint8_t SettingSavingValues[2];
  229. uint8_t SettingBaudValues[3];
  230. uint8_t SettingRegionValues[5];
  231. uint8_t UHFModuleType;
  232. uint8_t UHFRegionType;
  233. char** EpcValues;
  234. char** TidValues;
  235. char** ResValues;
  236. char** MemValues;
  237. UHFWorker* YRM100XWorker;
  238. char* ReadAccessPasswordLabel;
  239. char* AccessPasswordPlaceHolder;
  240. char* DefaultAccessPassword;
  241. char* SettingApLabel;
  242. char* SettingApDefaultPassword;
  243. char* KillPasswordPlaceHolder;
  244. char* DefaultKillPassword;
  245. char* SetAccessPasswordPlaceHolder;
  246. char* KillConfirmPasswordPlaceHolder;
  247. BankType DefaultLockBank;
  248. LockType DefaultLockType;
  249. //Buffers for YRM100 functionality
  250. size_t EpcBytesLen;
  251. size_t ResBytesLen;
  252. size_t TidBytesLen;
  253. size_t UserBytesLen;
  254. size_t PcBytesLen;
  255. size_t CrcBytesLen;
  256. uint8_t* EpcBytes;
  257. uint8_t* ResBytes;
  258. uint8_t* TidBytes;
  259. uint8_t* UserBytes;
  260. uint16_t* PcBytes;
  261. uint16_t* CrcBytes;
  262. } UHFReaderApp;
  263. //The model for the configure/read screen
  264. typedef struct {
  265. uint32_t Setting1Index;
  266. FuriString* Setting2Power;
  267. FuriString* SettingReadAp;
  268. uint32_t Setting3Index;
  269. bool IsReading;
  270. FuriString* EpcName;
  271. uint32_t CurEpcIndex;
  272. FuriString* EpcValue;
  273. uint32_t NumEpcsRead;
  274. FuriString* Setting1Value;
  275. FuriString* Setting3Value;
  276. FuriString* Pc;
  277. FuriString* Crc;
  278. uint32_t ScrollOffset;
  279. char* ScrollingText;
  280. } UHFReaderConfigModel;
  281. //Model for the write screen
  282. typedef struct {
  283. uint32_t Setting1Index;
  284. FuriString* Setting2Power;
  285. uint32_t Setting3Index;
  286. bool IsWriting;
  287. FuriString* EpcName;
  288. FuriString* WriteFunction;
  289. FuriString* EpcValue;
  290. FuriString* WriteStatus;
  291. FuriString* NewEpcValue;
  292. FuriString* TidValue;
  293. FuriString* NewTidValue;
  294. FuriString* ResValue;
  295. FuriString* NewResValue;
  296. FuriString* MemValue;
  297. FuriString* NewMemValue;
  298. FuriString* Setting1Value;
  299. FuriString* Setting3Value;
  300. FuriString* Crc;
  301. FuriString* Pc;
  302. FuriString* SettingKillPwd;
  303. } UHFReaderWriteModel;
  304. //Model for the delete screen
  305. typedef struct {
  306. uint32_t SelectedTagIndex;
  307. FuriString* SelectedTagName;
  308. FuriString* SelectedTagEpc;
  309. uint32_t ScrollOffset;
  310. char* ScrollingText;
  311. } UHFReaderDeleteModel;
  312. //Model use for handling UHF RFID tag data
  313. typedef struct {
  314. FuriString* Reserved;
  315. FuriString* Epc;
  316. FuriString* Tid;
  317. FuriString* User;
  318. FuriString* Crc;
  319. FuriString* Pc;
  320. uint32_t CurEpcIndex;
  321. uint32_t ScrollOffsetEpc;
  322. char* ScrollingTextEpc;
  323. uint32_t ScrollOffsetTid;
  324. char* ScrollingTextTid;
  325. uint32_t ScrollOffsetRes;
  326. char* ScrollingTextRes;
  327. uint32_t ScrollOffsetMem;
  328. char* ScrollingTextMem;
  329. } UHFRFIDTagModel;