subghz_test.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636
  1. #include <furi.h>
  2. #include <furi_hal.h>
  3. #include "../minunit.h"
  4. #include <lib/subghz/receiver.h>
  5. #include <lib/subghz/transmitter.h>
  6. #include <lib/subghz/subghz_keystore.h>
  7. #include <lib/subghz/subghz_file_encoder_worker.h>
  8. #include <lib/subghz/protocols/registry.h>
  9. #include <flipper_format/flipper_format_i.h>
  10. #define TAG "SubGhz TEST"
  11. #define KEYSTORE_DIR_NAME EXT_PATH("subghz/assets/keeloq_mfcodes")
  12. #define CAME_ATOMO_DIR_NAME EXT_PATH("subghz/assets/came_atomo")
  13. #define NICE_FLOR_S_DIR_NAME EXT_PATH("subghz/assets/nice_flor_s")
  14. #define TEST_RANDOM_DIR_NAME EXT_PATH("unit_tests/subghz/test_random_raw.sub")
  15. #define TEST_RANDOM_COUNT_PARSE 233
  16. #define TEST_TIMEOUT 10000
  17. static SubGhzEnvironment* environment_handler;
  18. static SubGhzReceiver* receiver_handler;
  19. //static SubGhzTransmitter* transmitter_handler;
  20. static SubGhzFileEncoderWorker* file_worker_encoder_handler;
  21. static uint16_t subghz_test_decoder_count = 0;
  22. static void subghz_test_rx_callback(
  23. SubGhzReceiver* receiver,
  24. SubGhzProtocolDecoderBase* decoder_base,
  25. void* context) {
  26. UNUSED(receiver);
  27. UNUSED(context);
  28. FuriString* text;
  29. text = furi_string_alloc();
  30. subghz_protocol_decoder_base_get_string(decoder_base, text);
  31. subghz_receiver_reset(receiver_handler);
  32. FURI_LOG_T(TAG, "\r\n%s", furi_string_get_cstr(text));
  33. furi_string_free(text);
  34. subghz_test_decoder_count++;
  35. }
  36. static void subghz_test_init(void) {
  37. environment_handler = subghz_environment_alloc();
  38. subghz_environment_set_came_atomo_rainbow_table_file_name(
  39. environment_handler, CAME_ATOMO_DIR_NAME);
  40. subghz_environment_set_nice_flor_s_rainbow_table_file_name(
  41. environment_handler, NICE_FLOR_S_DIR_NAME);
  42. receiver_handler = subghz_receiver_alloc_init(environment_handler);
  43. subghz_receiver_set_filter(receiver_handler, SubGhzProtocolFlag_Decodable);
  44. subghz_receiver_set_rx_callback(receiver_handler, subghz_test_rx_callback, NULL);
  45. }
  46. static void subghz_test_deinit(void) {
  47. subghz_receiver_free(receiver_handler);
  48. subghz_environment_free(environment_handler);
  49. }
  50. static bool subghz_decoder_test(const char* path, const char* name_decoder) {
  51. subghz_test_decoder_count = 0;
  52. uint32_t test_start = furi_get_tick();
  53. SubGhzProtocolDecoderBase* decoder =
  54. subghz_receiver_search_decoder_base_by_name(receiver_handler, name_decoder);
  55. if(decoder) {
  56. file_worker_encoder_handler = subghz_file_encoder_worker_alloc();
  57. if(subghz_file_encoder_worker_start(file_worker_encoder_handler, path)) {
  58. // the worker needs a file in order to open and read part of the file
  59. furi_delay_ms(100);
  60. LevelDuration level_duration;
  61. while(furi_get_tick() - test_start < TEST_TIMEOUT) {
  62. level_duration =
  63. subghz_file_encoder_worker_get_level_duration(file_worker_encoder_handler);
  64. if(!level_duration_is_reset(level_duration)) {
  65. bool level = level_duration_get_level(level_duration);
  66. uint32_t duration = level_duration_get_duration(level_duration);
  67. // Yield, to load data inside the worker
  68. furi_thread_yield();
  69. decoder->protocol->decoder->feed(decoder, level, duration);
  70. } else {
  71. break;
  72. }
  73. }
  74. furi_delay_ms(10);
  75. }
  76. if(subghz_file_encoder_worker_is_running(file_worker_encoder_handler)) {
  77. subghz_file_encoder_worker_stop(file_worker_encoder_handler);
  78. }
  79. subghz_file_encoder_worker_free(file_worker_encoder_handler);
  80. }
  81. FURI_LOG_T(TAG, "\r\n Decoder count parse \033[0;33m%d\033[0m ", subghz_test_decoder_count);
  82. if(furi_get_tick() - test_start > TEST_TIMEOUT) {
  83. printf("\033[0;31mTest decoder %s ERROR TimeOut\033[0m\r\n", name_decoder);
  84. return false;
  85. } else {
  86. return subghz_test_decoder_count ? true : false;
  87. }
  88. }
  89. static bool subghz_decode_random_test(const char* path) {
  90. subghz_test_decoder_count = 0;
  91. subghz_receiver_reset(receiver_handler);
  92. uint32_t test_start = furi_get_tick();
  93. file_worker_encoder_handler = subghz_file_encoder_worker_alloc();
  94. if(subghz_file_encoder_worker_start(file_worker_encoder_handler, path)) {
  95. // the worker needs a file in order to open and read part of the file
  96. furi_delay_ms(100);
  97. LevelDuration level_duration;
  98. while(furi_get_tick() - test_start < TEST_TIMEOUT * 10) {
  99. level_duration =
  100. subghz_file_encoder_worker_get_level_duration(file_worker_encoder_handler);
  101. if(!level_duration_is_reset(level_duration)) {
  102. bool level = level_duration_get_level(level_duration);
  103. uint32_t duration = level_duration_get_duration(level_duration);
  104. // Yield, to load data inside the worker
  105. furi_thread_yield();
  106. subghz_receiver_decode(receiver_handler, level, duration);
  107. } else {
  108. break;
  109. }
  110. }
  111. furi_delay_ms(10);
  112. if(subghz_file_encoder_worker_is_running(file_worker_encoder_handler)) {
  113. subghz_file_encoder_worker_stop(file_worker_encoder_handler);
  114. }
  115. subghz_file_encoder_worker_free(file_worker_encoder_handler);
  116. }
  117. FURI_LOG_D(TAG, "\r\n Decoder count parse \033[0;33m%d\033[0m ", subghz_test_decoder_count);
  118. if(furi_get_tick() - test_start > TEST_TIMEOUT * 10) {
  119. printf("\033[0;31mRandom test ERROR TimeOut\033[0m\r\n");
  120. return false;
  121. } else if(subghz_test_decoder_count == TEST_RANDOM_COUNT_PARSE) {
  122. return true;
  123. } else {
  124. return false;
  125. }
  126. }
  127. static bool subghz_encoder_test(const char* path) {
  128. subghz_test_decoder_count = 0;
  129. uint32_t test_start = furi_get_tick();
  130. FuriString* temp_str;
  131. temp_str = furi_string_alloc();
  132. bool file_load = false;
  133. Storage* storage = furi_record_open(RECORD_STORAGE);
  134. FlipperFormat* fff_data_file = flipper_format_file_alloc(storage);
  135. do {
  136. if(!flipper_format_file_open_existing(fff_data_file, path)) {
  137. FURI_LOG_E(TAG, "Error open file %s", path);
  138. break;
  139. }
  140. if(!flipper_format_read_string(fff_data_file, "Preset", temp_str)) {
  141. FURI_LOG_E(TAG, "Missing Preset");
  142. break;
  143. }
  144. if(!flipper_format_read_string(fff_data_file, "Protocol", temp_str)) {
  145. FURI_LOG_E(TAG, "Missing Protocol");
  146. break;
  147. }
  148. file_load = true;
  149. } while(false);
  150. if(file_load) {
  151. SubGhzTransmitter* transmitter =
  152. subghz_transmitter_alloc_init(environment_handler, furi_string_get_cstr(temp_str));
  153. subghz_transmitter_deserialize(transmitter, fff_data_file);
  154. SubGhzProtocolDecoderBase* decoder = subghz_receiver_search_decoder_base_by_name(
  155. receiver_handler, furi_string_get_cstr(temp_str));
  156. if(decoder) {
  157. LevelDuration level_duration;
  158. while(furi_get_tick() - test_start < TEST_TIMEOUT) {
  159. level_duration = subghz_transmitter_yield(transmitter);
  160. if(!level_duration_is_reset(level_duration)) {
  161. bool level = level_duration_get_level(level_duration);
  162. uint32_t duration = level_duration_get_duration(level_duration);
  163. decoder->protocol->decoder->feed(decoder, level, duration);
  164. } else {
  165. break;
  166. }
  167. }
  168. furi_delay_ms(10);
  169. }
  170. subghz_transmitter_free(transmitter);
  171. }
  172. flipper_format_free(fff_data_file);
  173. FURI_LOG_T(TAG, "\r\n Decoder count parse \033[0;33m%d\033[0m ", subghz_test_decoder_count);
  174. if(furi_get_tick() - test_start > TEST_TIMEOUT) {
  175. printf(
  176. "\033[0;31mTest encoder %s ERROR TimeOut\033[0m\r\n", furi_string_get_cstr(temp_str));
  177. subghz_test_decoder_count = 0;
  178. }
  179. furi_string_free(temp_str);
  180. return subghz_test_decoder_count ? true : false;
  181. }
  182. MU_TEST(subghz_keystore_test) {
  183. mu_assert(
  184. subghz_environment_load_keystore(environment_handler, KEYSTORE_DIR_NAME),
  185. "Test keystore error");
  186. }
  187. //test decoders
  188. MU_TEST(subghz_decoder_came_atomo_test) {
  189. mu_assert(
  190. subghz_decoder_test(
  191. EXT_PATH("unit_tests/subghz/came_atomo_raw.sub"), SUBGHZ_PROTOCOL_CAME_ATOMO_NAME),
  192. "Test decoder " SUBGHZ_PROTOCOL_CAME_ATOMO_NAME " error\r\n");
  193. }
  194. MU_TEST(subghz_decoder_came_test) {
  195. mu_assert(
  196. subghz_decoder_test(EXT_PATH("unit_tests/subghz/came_raw.sub"), SUBGHZ_PROTOCOL_CAME_NAME),
  197. "Test decoder " SUBGHZ_PROTOCOL_CAME_NAME " error\r\n");
  198. }
  199. MU_TEST(subghz_decoder_came_twee_test) {
  200. mu_assert(
  201. subghz_decoder_test(
  202. EXT_PATH("unit_tests/subghz/came_twee_raw.sub"), SUBGHZ_PROTOCOL_CAME_TWEE_NAME),
  203. "Test decoder " SUBGHZ_PROTOCOL_CAME_TWEE_NAME " error\r\n");
  204. }
  205. MU_TEST(subghz_decoder_faac_slh_test) {
  206. mu_assert(
  207. subghz_decoder_test(
  208. EXT_PATH("unit_tests/subghz/faac_slh_raw.sub"), SUBGHZ_PROTOCOL_FAAC_SLH_NAME),
  209. "Test decoder " SUBGHZ_PROTOCOL_FAAC_SLH_NAME " error\r\n");
  210. }
  211. MU_TEST(subghz_decoder_gate_tx_test) {
  212. mu_assert(
  213. subghz_decoder_test(
  214. EXT_PATH("unit_tests/subghz/gate_tx_raw.sub"), SUBGHZ_PROTOCOL_GATE_TX_NAME),
  215. "Test decoder " SUBGHZ_PROTOCOL_GATE_TX_NAME " error\r\n");
  216. }
  217. MU_TEST(subghz_decoder_hormann_hsm_test) {
  218. mu_assert(
  219. subghz_decoder_test(
  220. EXT_PATH("unit_tests/subghz/hormann_hsm_raw.sub"), SUBGHZ_PROTOCOL_HORMANN_HSM_NAME),
  221. "Test decoder " SUBGHZ_PROTOCOL_HORMANN_HSM_NAME " error\r\n");
  222. }
  223. MU_TEST(subghz_decoder_ido_test) {
  224. mu_assert(
  225. subghz_decoder_test(
  226. EXT_PATH("unit_tests/subghz/ido_117_111_raw.sub"), SUBGHZ_PROTOCOL_IDO_NAME),
  227. "Test decoder " SUBGHZ_PROTOCOL_IDO_NAME " error\r\n");
  228. }
  229. MU_TEST(subghz_decoder_keelog_test) {
  230. mu_assert(
  231. subghz_decoder_test(
  232. EXT_PATH("unit_tests/subghz/doorhan_raw.sub"), SUBGHZ_PROTOCOL_KEELOQ_NAME),
  233. "Test decoder " SUBGHZ_PROTOCOL_KEELOQ_NAME " error\r\n");
  234. }
  235. MU_TEST(subghz_decoder_kia_seed_test) {
  236. mu_assert(
  237. subghz_decoder_test(
  238. EXT_PATH("unit_tests/subghz/kia_seed_raw.sub"), SUBGHZ_PROTOCOL_KIA_NAME),
  239. "Test decoder " SUBGHZ_PROTOCOL_KIA_NAME " error\r\n");
  240. }
  241. MU_TEST(subghz_decoder_nero_radio_test) {
  242. mu_assert(
  243. subghz_decoder_test(
  244. EXT_PATH("unit_tests/subghz/nero_radio_raw.sub"), SUBGHZ_PROTOCOL_NERO_RADIO_NAME),
  245. "Test decoder " SUBGHZ_PROTOCOL_NERO_RADIO_NAME " error\r\n");
  246. }
  247. MU_TEST(subghz_decoder_nero_sketch_test) {
  248. mu_assert(
  249. subghz_decoder_test(
  250. EXT_PATH("unit_tests/subghz/nero_sketch_raw.sub"), SUBGHZ_PROTOCOL_NERO_SKETCH_NAME),
  251. "Test decoder " SUBGHZ_PROTOCOL_NERO_SKETCH_NAME " error\r\n");
  252. }
  253. MU_TEST(subghz_decoder_nice_flo_test) {
  254. mu_assert(
  255. subghz_decoder_test(
  256. EXT_PATH("unit_tests/subghz/nice_flo_raw.sub"), SUBGHZ_PROTOCOL_NICE_FLO_NAME),
  257. "Test decoder " SUBGHZ_PROTOCOL_NICE_FLO_NAME " error\r\n");
  258. }
  259. MU_TEST(subghz_decoder_nice_flor_s_test) {
  260. mu_assert(
  261. subghz_decoder_test(
  262. EXT_PATH("unit_tests/subghz/nice_flor_s_raw.sub"), SUBGHZ_PROTOCOL_NICE_FLOR_S_NAME),
  263. "Test decoder " SUBGHZ_PROTOCOL_NICE_FLOR_S_NAME " error\r\n");
  264. }
  265. MU_TEST(subghz_decoder_princeton_test) {
  266. mu_assert(
  267. subghz_decoder_test(
  268. EXT_PATH("unit_tests/subghz/Princeton_raw.sub"), SUBGHZ_PROTOCOL_PRINCETON_NAME),
  269. "Test decoder " SUBGHZ_PROTOCOL_PRINCETON_NAME " error\r\n");
  270. }
  271. MU_TEST(subghz_decoder_scher_khan_magic_code_test) {
  272. mu_assert(
  273. subghz_decoder_test(
  274. EXT_PATH("unit_tests/subghz/scher_khan_magic_code.sub"),
  275. SUBGHZ_PROTOCOL_SCHER_KHAN_NAME),
  276. "Test decoder " SUBGHZ_PROTOCOL_SCHER_KHAN_NAME " error\r\n");
  277. }
  278. MU_TEST(subghz_decoder_somfy_keytis_test) {
  279. mu_assert(
  280. subghz_decoder_test(
  281. EXT_PATH("unit_tests/subghz/Somfy_keytis_raw.sub"), SUBGHZ_PROTOCOL_SOMFY_KEYTIS_NAME),
  282. "Test decoder " SUBGHZ_PROTOCOL_SOMFY_KEYTIS_NAME " error\r\n");
  283. }
  284. MU_TEST(subghz_decoder_somfy_telis_test) {
  285. mu_assert(
  286. subghz_decoder_test(
  287. EXT_PATH("unit_tests/subghz/somfy_telis_raw.sub"), SUBGHZ_PROTOCOL_SOMFY_TELIS_NAME),
  288. "Test decoder " SUBGHZ_PROTOCOL_SOMFY_TELIS_NAME " error\r\n");
  289. }
  290. MU_TEST(subghz_decoder_star_line_test) {
  291. mu_assert(
  292. subghz_decoder_test(
  293. EXT_PATH("unit_tests/subghz/cenmax_raw.sub"), SUBGHZ_PROTOCOL_STAR_LINE_NAME),
  294. "Test decoder " SUBGHZ_PROTOCOL_STAR_LINE_NAME " error\r\n");
  295. }
  296. MU_TEST(subghz_decoder_linear_test) {
  297. mu_assert(
  298. subghz_decoder_test(
  299. EXT_PATH("unit_tests/subghz/linear_raw.sub"), SUBGHZ_PROTOCOL_LINEAR_NAME),
  300. "Test decoder " SUBGHZ_PROTOCOL_LINEAR_NAME " error\r\n");
  301. }
  302. MU_TEST(subghz_decoder_megacode_test) {
  303. mu_assert(
  304. subghz_decoder_test(
  305. EXT_PATH("unit_tests/subghz/megacode_raw.sub"), SUBGHZ_PROTOCOL_MEGACODE_NAME),
  306. "Test decoder " SUBGHZ_PROTOCOL_MEGACODE_NAME " error\r\n");
  307. }
  308. MU_TEST(subghz_decoder_secplus_v1_test) {
  309. mu_assert(
  310. subghz_decoder_test(
  311. EXT_PATH("unit_tests/subghz/security_pls_1_0_raw.sub"),
  312. SUBGHZ_PROTOCOL_SECPLUS_V1_NAME),
  313. "Test decoder " SUBGHZ_PROTOCOL_SECPLUS_V1_NAME " error\r\n");
  314. }
  315. MU_TEST(subghz_decoder_secplus_v2_test) {
  316. mu_assert(
  317. subghz_decoder_test(
  318. EXT_PATH("unit_tests/subghz/security_pls_2_0_raw.sub"),
  319. SUBGHZ_PROTOCOL_SECPLUS_V2_NAME),
  320. "Test decoder " SUBGHZ_PROTOCOL_SECPLUS_V2_NAME " error\r\n");
  321. }
  322. MU_TEST(subghz_decoder_holtek_test) {
  323. mu_assert(
  324. subghz_decoder_test(
  325. EXT_PATH("unit_tests/subghz/holtek_raw.sub"), SUBGHZ_PROTOCOL_HOLTEK_NAME),
  326. "Test decoder " SUBGHZ_PROTOCOL_HOLTEK_NAME " error\r\n");
  327. }
  328. MU_TEST(subghz_decoder_power_smart_test) {
  329. mu_assert(
  330. subghz_decoder_test(
  331. EXT_PATH("unit_tests/subghz/power_smart_raw.sub"), SUBGHZ_PROTOCOL_POWER_SMART_NAME),
  332. "Test decoder " SUBGHZ_PROTOCOL_POWER_SMART_NAME " error\r\n");
  333. }
  334. MU_TEST(subghz_decoder_marantec_test) {
  335. mu_assert(
  336. subghz_decoder_test(
  337. EXT_PATH("unit_tests/subghz/marantec_raw.sub"), SUBGHZ_PROTOCOL_MARANTEC_NAME),
  338. "Test decoder " SUBGHZ_PROTOCOL_MARANTEC_NAME " error\r\n");
  339. }
  340. MU_TEST(subghz_decoder_bett_test) {
  341. mu_assert(
  342. subghz_decoder_test(EXT_PATH("unit_tests/subghz/bett_raw.sub"), SUBGHZ_PROTOCOL_BETT_NAME),
  343. "Test decoder " SUBGHZ_PROTOCOL_BETT_NAME " error\r\n");
  344. }
  345. MU_TEST(subghz_decoder_doitrand_test) {
  346. mu_assert(
  347. subghz_decoder_test(
  348. EXT_PATH("unit_tests/subghz/doitrand_raw.sub"), SUBGHZ_PROTOCOL_DOITRAND_NAME),
  349. "Test decoder " SUBGHZ_PROTOCOL_DOITRAND_NAME " error\r\n");
  350. }
  351. MU_TEST(subghz_decoder_phoenix_v2_test) {
  352. mu_assert(
  353. subghz_decoder_test(
  354. EXT_PATH("unit_tests/subghz/phoenix_v2_raw.sub"), SUBGHZ_PROTOCOL_PHOENIX_V2_NAME),
  355. "Test decoder " SUBGHZ_PROTOCOL_PHOENIX_V2_NAME " error\r\n");
  356. }
  357. MU_TEST(subghz_decoder_honeywell_wdb_test) {
  358. mu_assert(
  359. subghz_decoder_test(
  360. EXT_PATH("unit_tests/subghz/honeywell_wdb_raw.sub"),
  361. SUBGHZ_PROTOCOL_HONEYWELL_WDB_NAME),
  362. "Test decoder " SUBGHZ_PROTOCOL_HONEYWELL_WDB_NAME " error\r\n");
  363. }
  364. MU_TEST(subghz_decoder_magellen_test) {
  365. mu_assert(
  366. subghz_decoder_test(
  367. EXT_PATH("unit_tests/subghz/magellen_raw.sub"), SUBGHZ_PROTOCOL_MAGELLEN_NAME),
  368. "Test decoder " SUBGHZ_PROTOCOL_MAGELLEN_NAME " error\r\n");
  369. }
  370. MU_TEST(subghz_decoder_intertechno_v3_test) {
  371. mu_assert(
  372. subghz_decoder_test(
  373. EXT_PATH("unit_tests/subghz/intertechno_v3_raw.sub"),
  374. SUBGHZ_PROTOCOL_INTERTECHNO_V3_NAME),
  375. "Test decoder " SUBGHZ_PROTOCOL_INTERTECHNO_V3_NAME " error\r\n");
  376. }
  377. MU_TEST(subghz_decoder_clemsa_test) {
  378. mu_assert(
  379. subghz_decoder_test(
  380. EXT_PATH("unit_tests/subghz/clemsa_raw.sub"), SUBGHZ_PROTOCOL_CLEMSA_NAME),
  381. "Test decoder " SUBGHZ_PROTOCOL_CLEMSA_NAME " error\r\n");
  382. }
  383. MU_TEST(subghz_decoder_oregon2_test) {
  384. mu_assert(
  385. subghz_decoder_test(
  386. EXT_PATH("unit_tests/subghz/oregon2_raw.sub"), SUBGHZ_PROTOCOL_OREGON2_NAME),
  387. "Test decoder " SUBGHZ_PROTOCOL_OREGON2_NAME " error\r\n");
  388. }
  389. //test encoders
  390. MU_TEST(subghz_encoder_princeton_test) {
  391. mu_assert(
  392. subghz_encoder_test(EXT_PATH("unit_tests/subghz/princeton.sub")),
  393. "Test encoder " SUBGHZ_PROTOCOL_PRINCETON_NAME " error\r\n");
  394. }
  395. MU_TEST(subghz_encoder_came_test) {
  396. mu_assert(
  397. subghz_encoder_test(EXT_PATH("unit_tests/subghz/came.sub")),
  398. "Test encoder " SUBGHZ_PROTOCOL_CAME_NAME " error\r\n");
  399. }
  400. MU_TEST(subghz_encoder_came_twee_test) {
  401. mu_assert(
  402. subghz_encoder_test(EXT_PATH("unit_tests/subghz/came_twee.sub")),
  403. "Test encoder " SUBGHZ_PROTOCOL_CAME_TWEE_NAME " error\r\n");
  404. }
  405. MU_TEST(subghz_encoder_gate_tx_test) {
  406. mu_assert(
  407. subghz_encoder_test(EXT_PATH("unit_tests/subghz/gate_tx.sub")),
  408. "Test encoder " SUBGHZ_PROTOCOL_GATE_TX_NAME " error\r\n");
  409. }
  410. MU_TEST(subghz_encoder_nice_flo_test) {
  411. mu_assert(
  412. subghz_encoder_test(EXT_PATH("unit_tests/subghz/nice_flo.sub")),
  413. "Test encoder " SUBGHZ_PROTOCOL_NICE_FLO_NAME " error\r\n");
  414. }
  415. MU_TEST(subghz_encoder_keelog_test) {
  416. mu_assert(
  417. subghz_encoder_test(EXT_PATH("unit_tests/subghz/doorhan.sub")),
  418. "Test encoder " SUBGHZ_PROTOCOL_KEELOQ_NAME " error\r\n");
  419. }
  420. MU_TEST(subghz_encoder_linear_test) {
  421. mu_assert(
  422. subghz_encoder_test(EXT_PATH("unit_tests/subghz/linear.sub")),
  423. "Test encoder " SUBGHZ_PROTOCOL_LINEAR_NAME " error\r\n");
  424. }
  425. MU_TEST(subghz_encoder_megacode_test) {
  426. mu_assert(
  427. subghz_encoder_test(EXT_PATH("unit_tests/subghz/megacode.sub")),
  428. "Test encoder " SUBGHZ_PROTOCOL_MEGACODE_NAME " error\r\n");
  429. }
  430. MU_TEST(subghz_encoder_holtek_test) {
  431. mu_assert(
  432. subghz_encoder_test(EXT_PATH("unit_tests/subghz/holtek.sub")),
  433. "Test encoder " SUBGHZ_PROTOCOL_HOLTEK_NAME " error\r\n");
  434. }
  435. MU_TEST(subghz_encoder_secplus_v1_test) {
  436. mu_assert(
  437. subghz_encoder_test(EXT_PATH("unit_tests/subghz/security_pls_1_0.sub")),
  438. "Test encoder " SUBGHZ_PROTOCOL_SECPLUS_V1_NAME " error\r\n");
  439. }
  440. MU_TEST(subghz_encoder_secplus_v2_test) {
  441. mu_assert(
  442. subghz_encoder_test(EXT_PATH("unit_tests/subghz/security_pls_2_0.sub")),
  443. "Test encoder " SUBGHZ_PROTOCOL_SECPLUS_V2_NAME " error\r\n");
  444. }
  445. MU_TEST(subghz_encoder_power_smart_test) {
  446. mu_assert(
  447. subghz_encoder_test(EXT_PATH("unit_tests/subghz/power_smart.sub")),
  448. "Test encoder " SUBGHZ_PROTOCOL_POWER_SMART_NAME " error\r\n");
  449. }
  450. MU_TEST(subghz_encoder_marantec_test) {
  451. mu_assert(
  452. subghz_encoder_test(EXT_PATH("unit_tests/subghz/marantec.sub")),
  453. "Test encoder " SUBGHZ_PROTOCOL_MARANTEC_NAME " error\r\n");
  454. }
  455. MU_TEST(subghz_encoder_bett_test) {
  456. mu_assert(
  457. subghz_encoder_test(EXT_PATH("unit_tests/subghz/bett.sub")),
  458. "Test encoder " SUBGHZ_PROTOCOL_BETT_NAME " error\r\n");
  459. }
  460. MU_TEST(subghz_encoder_doitrand_test) {
  461. mu_assert(
  462. subghz_encoder_test(EXT_PATH("unit_tests/subghz/doitrand.sub")),
  463. "Test encoder " SUBGHZ_PROTOCOL_DOITRAND_NAME " error\r\n");
  464. }
  465. MU_TEST(subghz_encoder_phoenix_v2_test) {
  466. mu_assert(
  467. subghz_encoder_test(EXT_PATH("unit_tests/subghz/phoenix_v2.sub")),
  468. "Test encoder " SUBGHZ_PROTOCOL_PHOENIX_V2_NAME " error\r\n");
  469. }
  470. MU_TEST(subghz_encoder_honeywell_wdb_test) {
  471. mu_assert(
  472. subghz_encoder_test(EXT_PATH("unit_tests/subghz/honeywell_wdb.sub")),
  473. "Test encoder " SUBGHZ_PROTOCOL_HONEYWELL_WDB_NAME " error\r\n");
  474. }
  475. MU_TEST(subghz_encoder_magellen_test) {
  476. mu_assert(
  477. subghz_encoder_test(EXT_PATH("unit_tests/subghz/magellen.sub")),
  478. "Test encoder " SUBGHZ_PROTOCOL_MAGELLEN_NAME " error\r\n");
  479. }
  480. MU_TEST(subghz_encoder_intertechno_v3_test) {
  481. mu_assert(
  482. subghz_encoder_test(EXT_PATH("unit_tests/subghz/intertechno_v3.sub")),
  483. "Test encoder " SUBGHZ_PROTOCOL_INTERTECHNO_V3_NAME " error\r\n");
  484. }
  485. MU_TEST(subghz_encoder_clemsa_test) {
  486. mu_assert(
  487. subghz_encoder_test(EXT_PATH("unit_tests/subghz/clemsa.sub")),
  488. "Test encoder " SUBGHZ_PROTOCOL_CLEMSA_NAME " error\r\n");
  489. }
  490. MU_TEST(subghz_random_test) {
  491. mu_assert(subghz_decode_random_test(TEST_RANDOM_DIR_NAME), "Random test error\r\n");
  492. }
  493. MU_TEST_SUITE(subghz) {
  494. subghz_test_init();
  495. MU_RUN_TEST(subghz_keystore_test);
  496. MU_RUN_TEST(subghz_decoder_came_atomo_test);
  497. MU_RUN_TEST(subghz_decoder_came_test);
  498. MU_RUN_TEST(subghz_decoder_came_twee_test);
  499. MU_RUN_TEST(subghz_decoder_faac_slh_test);
  500. MU_RUN_TEST(subghz_decoder_gate_tx_test);
  501. MU_RUN_TEST(subghz_decoder_hormann_hsm_test);
  502. MU_RUN_TEST(subghz_decoder_ido_test);
  503. MU_RUN_TEST(subghz_decoder_keelog_test);
  504. MU_RUN_TEST(subghz_decoder_kia_seed_test);
  505. MU_RUN_TEST(subghz_decoder_nero_radio_test);
  506. MU_RUN_TEST(subghz_decoder_nero_sketch_test);
  507. MU_RUN_TEST(subghz_decoder_nice_flo_test);
  508. MU_RUN_TEST(subghz_decoder_nice_flor_s_test);
  509. MU_RUN_TEST(subghz_decoder_princeton_test);
  510. MU_RUN_TEST(subghz_decoder_scher_khan_magic_code_test);
  511. MU_RUN_TEST(subghz_decoder_somfy_keytis_test);
  512. MU_RUN_TEST(subghz_decoder_somfy_telis_test);
  513. MU_RUN_TEST(subghz_decoder_star_line_test);
  514. MU_RUN_TEST(subghz_decoder_linear_test);
  515. MU_RUN_TEST(subghz_decoder_megacode_test);
  516. MU_RUN_TEST(subghz_decoder_secplus_v1_test);
  517. MU_RUN_TEST(subghz_decoder_secplus_v2_test);
  518. MU_RUN_TEST(subghz_decoder_holtek_test);
  519. MU_RUN_TEST(subghz_decoder_power_smart_test);
  520. MU_RUN_TEST(subghz_decoder_marantec_test);
  521. MU_RUN_TEST(subghz_decoder_bett_test);
  522. MU_RUN_TEST(subghz_decoder_doitrand_test);
  523. MU_RUN_TEST(subghz_decoder_phoenix_v2_test);
  524. MU_RUN_TEST(subghz_decoder_honeywell_wdb_test);
  525. MU_RUN_TEST(subghz_decoder_magellen_test);
  526. MU_RUN_TEST(subghz_decoder_intertechno_v3_test);
  527. MU_RUN_TEST(subghz_decoder_clemsa_test);
  528. MU_RUN_TEST(subghz_decoder_oregon2_test);
  529. MU_RUN_TEST(subghz_encoder_princeton_test);
  530. MU_RUN_TEST(subghz_encoder_came_test);
  531. MU_RUN_TEST(subghz_encoder_came_twee_test);
  532. MU_RUN_TEST(subghz_encoder_gate_tx_test);
  533. MU_RUN_TEST(subghz_encoder_nice_flo_test);
  534. MU_RUN_TEST(subghz_encoder_keelog_test);
  535. MU_RUN_TEST(subghz_encoder_linear_test);
  536. MU_RUN_TEST(subghz_encoder_megacode_test);
  537. MU_RUN_TEST(subghz_encoder_holtek_test);
  538. MU_RUN_TEST(subghz_encoder_secplus_v1_test);
  539. MU_RUN_TEST(subghz_encoder_secplus_v2_test);
  540. MU_RUN_TEST(subghz_encoder_power_smart_test);
  541. MU_RUN_TEST(subghz_encoder_marantec_test);
  542. MU_RUN_TEST(subghz_encoder_bett_test);
  543. MU_RUN_TEST(subghz_encoder_doitrand_test);
  544. MU_RUN_TEST(subghz_encoder_phoenix_v2_test);
  545. MU_RUN_TEST(subghz_encoder_honeywell_wdb_test);
  546. MU_RUN_TEST(subghz_encoder_magellen_test);
  547. MU_RUN_TEST(subghz_encoder_intertechno_v3_test);
  548. MU_RUN_TEST(subghz_encoder_clemsa_test);
  549. MU_RUN_TEST(subghz_random_test);
  550. subghz_test_deinit();
  551. }
  552. int run_minunit_test_subghz() {
  553. MU_RUN_SUITE(subghz);
  554. return MU_EXIT_CODE;
  555. }