uhf_scene_settings.c 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. #include "../uhf_app_i.h"
  2. #include "../uhf_module.h"
  3. char* yes_no[] = {"No", "Yes"};
  4. void uhf_settings_set_module_baudrate(VariableItem* item) {
  5. M100Module* module = variable_item_get_context(item);
  6. uint8_t index = variable_item_get_current_value_index(item);
  7. if(index >= BAUD_RATES_COUNT) {
  8. return;
  9. }
  10. uint32_t baudrate = BAUD_RATES[index];
  11. m100_set_baudrate(module, baudrate);
  12. char text_buf[10];
  13. snprintf(text_buf, sizeof(text_buf), "%lu", module->uart->baudrate);
  14. variable_item_set_current_value_text(item, text_buf);
  15. }
  16. void uhf_settings_set_module_powerdb(VariableItem* item) {
  17. M100Module* uhf_module = variable_item_get_context(item);
  18. uint8_t index = variable_item_get_current_value_index(item);
  19. if(index >= POWER_DBM_COUNT) {
  20. return;
  21. }
  22. uint16_t power = POWER_DBM[index];
  23. m100_set_transmitting_power(uhf_module, power);
  24. char text_buf[10];
  25. snprintf(text_buf, sizeof(text_buf), "%ddBm", uhf_module->transmitting_power);
  26. variable_item_set_current_value_text(item, text_buf);
  27. }
  28. void uhf_settings_set_module_working_region(VariableItem* item) {
  29. M100Module* uhf_module = variable_item_get_context(item);
  30. uint8_t index = variable_item_get_current_value_index(item);
  31. if(index >= WORKING_REGIONS_COUNT) {
  32. return;
  33. }
  34. WorkingRegion region = WORKING_REGIONS[index];
  35. m100_set_working_region(uhf_module, region);
  36. variable_item_set_current_value_text(item, WORKING_REGIONS_STR[index]);
  37. }
  38. void uhf_settings_set_epc_write_mask(VariableItem* item) {
  39. M100Module* uhf_module = variable_item_get_context(item);
  40. uint8_t index = variable_item_get_current_value_index(item);
  41. variable_item_set_current_value_text(item, yes_no[index]);
  42. if(index) {
  43. m100_enable_write_mask(uhf_module, WRITE_EPC);
  44. return;
  45. }
  46. m100_disable_write_mask(uhf_module, WRITE_EPC);
  47. }
  48. void uhf_settings_set_tid_write_mask(VariableItem* item) {
  49. M100Module* uhf_module = variable_item_get_context(item);
  50. uint8_t index = variable_item_get_current_value_index(item);
  51. variable_item_set_current_value_text(item, yes_no[index]);
  52. if(index) {
  53. m100_enable_write_mask(uhf_module, WRITE_TID);
  54. return;
  55. }
  56. m100_disable_write_mask(uhf_module, WRITE_TID);
  57. }
  58. void uhf_settings_set_user_write_mask(VariableItem* item) {
  59. M100Module* uhf_module = variable_item_get_context(item);
  60. uint8_t index = variable_item_get_current_value_index(item);
  61. variable_item_set_current_value_text(item, yes_no[index]);
  62. if(index) {
  63. m100_enable_write_mask(uhf_module, WRITE_USER);
  64. return;
  65. }
  66. m100_disable_write_mask(uhf_module, WRITE_USER);
  67. }
  68. void uhf_settings_set_rfu_write_mask(VariableItem* item) {
  69. M100Module* uhf_module = variable_item_get_context(item);
  70. uint8_t index = variable_item_get_current_value_index(item);
  71. variable_item_set_current_value_text(item, yes_no[index]);
  72. if(index) {
  73. m100_enable_write_mask(uhf_module, WRITE_RFU);
  74. return;
  75. }
  76. m100_disable_write_mask(uhf_module, WRITE_RFU);
  77. }
  78. uint8_t uhf_settings_get_module_baudrate_index(M100Module* module) {
  79. for(uint8_t i = 0; i < BAUD_RATES_COUNT; i++) {
  80. if(BAUD_RATES[i] == module->uart->baudrate) {
  81. return i;
  82. }
  83. }
  84. return 0;
  85. }
  86. uint8_t uhf_settings_get_module_power_index(M100Module* module) {
  87. for(uint8_t i = 0; i < BAUD_RATES_COUNT; i++) {
  88. if(POWER_DBM[i] == module->transmitting_power) {
  89. return i;
  90. }
  91. }
  92. return 0;
  93. }
  94. uint8_t uhf_settings_get_module_working_region_index(M100Module* module) {
  95. for(uint8_t i = 0; i < WORKING_REGIONS_COUNT; i++) {
  96. if(WORKING_REGIONS[i] == module->region) {
  97. return i;
  98. }
  99. }
  100. return 0;
  101. }
  102. void uhf_scene_settings_on_enter(void* ctx) {
  103. UHFApp* uhf_app = ctx;
  104. M100Module* uhf_module = uhf_app->worker->module;
  105. VariableItem* item;
  106. VariableItemList* variable_item_list = uhf_app->variable_item_list;
  107. // Add baudrate item
  108. uint8_t value_index = uhf_settings_get_module_baudrate_index(uhf_module);
  109. char text_buf[10];
  110. snprintf(text_buf, sizeof(text_buf), "%lu", uhf_module->uart->baudrate);
  111. item = variable_item_list_add(
  112. variable_item_list,
  113. "Baudrate:",
  114. BAUD_RATES_COUNT,
  115. uhf_settings_set_module_baudrate,
  116. uhf_module);
  117. variable_item_set_current_value_text(item, text_buf);
  118. variable_item_set_current_value_index(item, value_index);
  119. // Add power item
  120. value_index = uhf_settings_get_module_power_index(uhf_module);
  121. item = variable_item_list_add(
  122. variable_item_list,
  123. "Power(DBM):",
  124. POWER_DBM_COUNT,
  125. uhf_settings_set_module_powerdb,
  126. uhf_module);
  127. snprintf(text_buf, sizeof(text_buf), "%ddBm", uhf_module->transmitting_power);
  128. variable_item_set_current_value_text(item, text_buf);
  129. variable_item_set_current_value_index(item, value_index);
  130. // Add working region item
  131. value_index = uhf_settings_get_module_working_region_index(uhf_module);
  132. item = variable_item_list_add(
  133. variable_item_list,
  134. "Region:",
  135. WORKING_REGIONS_COUNT,
  136. uhf_settings_set_module_working_region,
  137. uhf_module);
  138. variable_item_set_current_value_text(item, WORKING_REGIONS_STR[value_index]);
  139. variable_item_set_current_value_index(item, value_index);
  140. view_dispatcher_switch_to_view(uhf_app->view_dispatcher, UHFViewVariableItemList);
  141. // Add write modes
  142. value_index = m100_is_write_mask_enabled(uhf_module, WRITE_EPC) ? 1 : 0;
  143. item = variable_item_list_add(
  144. variable_item_list, "Write EPC:", 2, uhf_settings_set_epc_write_mask, uhf_module);
  145. variable_item_set_current_value_text(item, yes_no[value_index]);
  146. variable_item_set_current_value_index(item, value_index);
  147. value_index = m100_is_write_mask_enabled(uhf_module, WRITE_TID) ? 1 : 0;
  148. item = variable_item_list_add(
  149. variable_item_list, "Write TID:", 2, uhf_settings_set_tid_write_mask, uhf_module);
  150. variable_item_set_current_value_text(item, yes_no[value_index]);
  151. variable_item_set_current_value_index(item, value_index);
  152. value_index = m100_is_write_mask_enabled(uhf_module, WRITE_USER) ? 1 : 0;
  153. item = variable_item_list_add(
  154. variable_item_list, "Write User:", 2, uhf_settings_set_user_write_mask, uhf_module);
  155. variable_item_set_current_value_text(item, yes_no[value_index]);
  156. variable_item_set_current_value_index(item, value_index);
  157. value_index = m100_is_write_mask_enabled(uhf_module, WRITE_RFU) ? 1 : 0;
  158. item = variable_item_list_add(
  159. variable_item_list, "Write RFU:", 2, uhf_settings_set_rfu_write_mask, uhf_module);
  160. variable_item_set_current_value_text(item, yes_no[value_index]);
  161. variable_item_set_current_value_index(item, value_index);
  162. }
  163. bool uhf_scene_settings_on_event(void* ctx, SceneManagerEvent event) {
  164. UHFApp* uhf_app = ctx;
  165. UNUSED(uhf_app);
  166. UNUSED(event);
  167. return false;
  168. }
  169. void uhf_scene_settings_on_exit(void* ctx) {
  170. UHFApp* uhf_app = ctx;
  171. variable_item_list_set_selected_item(uhf_app->variable_item_list, 0);
  172. variable_item_list_reset(uhf_app->variable_item_list);
  173. }