irda-app-brute-force.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "irda-app-brute-force.hpp"
  2. void IrdaAppBruteForce::add_record(int index, const char* name) {
  3. records[name].index = index;
  4. records[name].amount = 0;
  5. }
  6. bool IrdaAppBruteForce::calculate_messages() {
  7. bool fs_res = false;
  8. fs_res = file_parser.get_fs_api().file.open(
  9. &file, universal_db_filename, FSAM_READ, FSOM_OPEN_EXISTING);
  10. if(!fs_res) {
  11. file_parser.get_sd_api().show_error(file_parser.get_sd_api().context, "Can't open file");
  12. return false;
  13. }
  14. file_parser.reset();
  15. while(1) {
  16. auto message = file_parser.read_message(&file);
  17. if(!message) break;
  18. auto element = records.find(message->name);
  19. if(element != records.cend()) {
  20. ++element->second.amount;
  21. }
  22. }
  23. file_parser.get_fs_api().file.close(&file);
  24. return true;
  25. }
  26. void IrdaAppBruteForce::stop_bruteforce() {
  27. if(current_record.size()) {
  28. file_parser.get_fs_api().file.close(&file);
  29. current_record.clear();
  30. }
  31. }
  32. // TODO: [FL-1418] replace with timer-chained consequence of messages.
  33. bool IrdaAppBruteForce::send_next_bruteforce(const IrdaAppSignalTransceiver& transceiver) {
  34. furi_assert(current_record.size());
  35. std::unique_ptr<IrdaAppFileParser::IrdaFileMessage> message;
  36. do {
  37. message = file_parser.read_message(&file);
  38. } while(message && current_record.compare(message->name));
  39. if(message) {
  40. transceiver.send_message(&message->message);
  41. }
  42. return !!message;
  43. }
  44. bool IrdaAppBruteForce::start_bruteforce(int index, int& record_amount) {
  45. file_parser.reset();
  46. for(const auto& it : records) {
  47. if(it.second.index == index) {
  48. record_amount = it.second.amount;
  49. current_record = it.first;
  50. break;
  51. }
  52. }
  53. if(record_amount) {
  54. bool fs_res = file_parser.get_fs_api().file.open(
  55. &file, universal_db_filename, FSAM_READ, FSOM_OPEN_EXISTING);
  56. if(fs_res) {
  57. return true;
  58. } else {
  59. file_parser.get_sd_api().show_error(
  60. file_parser.get_sd_api().context, "Can't open file");
  61. }
  62. }
  63. return false;
  64. }