Просмотр исходного кода

[FL-2870] Printf function attributes (#1841)

* Furi strings: printf attribute
* Logs: printf attribute
* Plugins: adapt
* Plugins: accommodate
* Unit tests: accommodate

Co-authored-by: あく <alleteam@gmail.com>
Sergey Gavrilov 3 лет назад
Родитель
Сommit
4000f0cac5
78 измененных файлов с 187 добавлено и 156 удалено
  1. 5 5
      applications/debug/unit_tests/infrared/infrared_test.c
  2. 5 5
      applications/debug/unit_tests/nfc/nfc_test.c
  3. 2 2
      applications/main/archive/helpers/archive_favorites.h
  4. 4 2
      applications/main/archive/helpers/archive_files.h
  5. 3 3
      applications/main/bad_usb/bad_usb_script.c
  6. 1 1
      applications/main/bad_usb/views/bad_usb_view.c
  7. 1 1
      applications/main/fap_loader/elf_cpp/elf_hashtable.cpp
  8. 2 2
      applications/main/infrared/infrared.c
  9. 2 2
      applications/main/infrared/infrared_signal.c
  10. 1 1
      applications/main/nfc/scenes/nfc_scene_mf_classic_keys_list.c
  11. 2 2
      applications/main/nfc/scenes/nfc_scene_mf_desfire_read_success.c
  12. 2 2
      applications/main/nfc/scenes/nfc_scene_nfc_data_info.c
  13. 4 4
      applications/main/subghz/helpers/subghz_frequency_analyzer_worker.c
  14. 3 3
      applications/main/subghz/subghz_cli.c
  15. 1 1
      applications/main/subghz/subghz_i.c
  16. 3 3
      applications/plugins/music_player/music_player_worker.c
  17. 2 2
      applications/services/bt/bt_service/bt.c
  18. 2 2
      applications/services/desktop/animations/animation_storage.c
  19. 1 1
      applications/services/dolphin/helpers/dolphin_state.c
  20. 3 3
      applications/services/gui/gui.c
  21. 5 4
      applications/services/gui/modules/file_browser_worker.c
  22. 2 2
      applications/services/gui/view_dispatcher.c
  23. 9 9
      applications/services/rpc/rpc_app.c
  24. 1 1
      applications/services/rpc/rpc_cli.c
  25. 2 2
      applications/services/rpc/rpc_debug.c
  26. 22 6
      applications/services/storage/storage_external_api.c
  27. 7 7
      applications/services/storage/storages/storage_int.c
  28. 4 4
      applications/system/updater/util/update_task_worker_flasher.c
  29. 2 2
      firmware/targets/f7/ble_glue/gap.c
  30. 2 2
      firmware/targets/f7/ble_glue/serial_service.c
  31. 2 1
      firmware/targets/f7/furi_hal/furi_hal_console.h
  32. 3 3
      firmware/targets/f7/furi_hal/furi_hal_flash.c
  33. 2 2
      firmware/targets/f7/furi_hal/furi_hal_memory.c
  34. 3 3
      firmware/targets/f7/furi_hal/furi_hal_power.c
  35. 1 1
      firmware/targets/f7/furi_hal/furi_hal_subghz.c
  36. 2 1
      furi/core/log.h
  37. 6 3
      furi/core/string.h
  38. 1 1
      lib/lfrfid/lfrfid_raw_worker.c
  39. 1 1
      lib/lfrfid/protocols/protocol_gallagher.c
  40. 1 1
      lib/lfrfid/protocols/protocol_keri.c
  41. 1 1
      lib/lfrfid/protocols/protocol_paradox.c
  42. 1 1
      lib/lfrfid/protocols/protocol_pyramid.c
  43. 1 1
      lib/nfc/helpers/mf_classic_dict.c
  44. 1 1
      lib/nfc/helpers/mfkey32.c
  45. 2 1
      lib/nfc/nfc_worker.c
  46. 1 1
      lib/nfc/parsers/all_in_one.c
  47. 1 1
      lib/nfc/parsers/plantain_4k_parser.c
  48. 1 1
      lib/nfc/parsers/plantain_parser.c
  49. 1 1
      lib/nfc/parsers/two_cities.c
  50. 2 2
      lib/nfc/protocols/mifare_classic.c
  51. 4 4
      lib/nfc/protocols/mifare_desfire.c
  52. 2 2
      lib/nfc/protocols/mifare_ultralight.c
  53. 7 4
      lib/print/printf_tiny.h
  54. 1 1
      lib/subghz/protocols/came_atomo.c
  55. 1 1
      lib/subghz/protocols/came_twee.c
  56. 1 1
      lib/subghz/protocols/doitrand.c
  57. 1 1
      lib/subghz/protocols/faac_slh.c
  58. 1 1
      lib/subghz/protocols/gate_tx.c
  59. 1 1
      lib/subghz/protocols/honeywell_wdb.c
  60. 1 1
      lib/subghz/protocols/ido.c
  61. 2 2
      lib/subghz/protocols/keeloq.c
  62. 1 1
      lib/subghz/protocols/kia.c
  63. 1 1
      lib/subghz/protocols/magellen.c
  64. 1 1
      lib/subghz/protocols/marantec.c
  65. 2 2
      lib/subghz/protocols/megacode.c
  66. 1 1
      lib/subghz/protocols/nice_flor_s.c
  67. 2 2
      lib/subghz/protocols/oregon2.c
  68. 1 1
      lib/subghz/protocols/phoenix_v2.c
  69. 1 1
      lib/subghz/protocols/princeton.c
  70. 1 1
      lib/subghz/protocols/princeton_for_testing.c
  71. 1 1
      lib/subghz/protocols/raw.c
  72. 1 1
      lib/subghz/protocols/scher_khan.c
  73. 2 2
      lib/subghz/protocols/secplus_v1.c
  74. 1 1
      lib/subghz/protocols/secplus_v2.c
  75. 1 1
      lib/subghz/protocols/somfy_keytis.c
  76. 1 1
      lib/subghz/protocols/somfy_telis.c
  77. 2 2
      lib/subghz/protocols/star_line.c
  78. 6 3
      lib/toolbox/stream/stream.h

+ 5 - 5
applications/debug/unit_tests/infrared/infrared_test.c

@@ -221,13 +221,13 @@ static void infrared_test_run_encoder(InfraredProtocol protocol, uint32_t test_i
     const char* protocol_name = infrared_get_protocol_name(protocol);
     const char* protocol_name = infrared_get_protocol_name(protocol);
     mu_assert(infrared_test_prepare_file(protocol_name), "Failed to prepare test file");
     mu_assert(infrared_test_prepare_file(protocol_name), "Failed to prepare test file");
 
 
-    furi_string_printf(buf, "encoder_input%d", test_index);
+    furi_string_printf(buf, "encoder_input%ld", test_index);
     mu_assert(
     mu_assert(
         infrared_test_load_messages(
         infrared_test_load_messages(
             test->ff, furi_string_get_cstr(buf), &input_messages, &input_messages_count),
             test->ff, furi_string_get_cstr(buf), &input_messages, &input_messages_count),
         "Failed to load messages from file");
         "Failed to load messages from file");
 
 
-    furi_string_printf(buf, "encoder_expected%d", test_index);
+    furi_string_printf(buf, "encoder_expected%ld", test_index);
     mu_assert(
     mu_assert(
         infrared_test_load_raw_signal(
         infrared_test_load_raw_signal(
             test->ff, furi_string_get_cstr(buf), &expected_timings, &expected_timings_count),
             test->ff, furi_string_get_cstr(buf), &expected_timings, &expected_timings_count),
@@ -277,7 +277,7 @@ static void infrared_test_run_encoder_decoder(InfraredProtocol protocol, uint32_
     const char* protocol_name = infrared_get_protocol_name(protocol);
     const char* protocol_name = infrared_get_protocol_name(protocol);
     mu_assert(infrared_test_prepare_file(protocol_name), "Failed to prepare test file");
     mu_assert(infrared_test_prepare_file(protocol_name), "Failed to prepare test file");
 
 
-    furi_string_printf(buf, "encoder_decoder_input%d", test_index);
+    furi_string_printf(buf, "encoder_decoder_input%ld", test_index);
     mu_assert(
     mu_assert(
         infrared_test_load_messages(
         infrared_test_load_messages(
             test->ff, furi_string_get_cstr(buf), &input_messages, &input_messages_count),
             test->ff, furi_string_get_cstr(buf), &input_messages, &input_messages_count),
@@ -336,13 +336,13 @@ static void infrared_test_run_decoder(InfraredProtocol protocol, uint32_t test_i
         infrared_test_prepare_file(infrared_get_protocol_name(protocol)),
         infrared_test_prepare_file(infrared_get_protocol_name(protocol)),
         "Failed to prepare test file");
         "Failed to prepare test file");
 
 
-    furi_string_printf(buf, "decoder_input%d", test_index);
+    furi_string_printf(buf, "decoder_input%ld", test_index);
     mu_assert(
     mu_assert(
         infrared_test_load_raw_signal(
         infrared_test_load_raw_signal(
             test->ff, furi_string_get_cstr(buf), &timings, &timings_count),
             test->ff, furi_string_get_cstr(buf), &timings, &timings_count),
         "Failed to load raw signal from file");
         "Failed to load raw signal from file");
 
 
-    furi_string_printf(buf, "decoder_expected%d", test_index);
+    furi_string_printf(buf, "decoder_expected%ld", test_index);
     mu_assert(
     mu_assert(
         infrared_test_load_messages(
         infrared_test_load_messages(
             test->ff, furi_string_get_cstr(buf), &messages, &messages_count),
             test->ff, furi_string_get_cstr(buf), &messages, &messages_count),

+ 5 - 5
applications/debug/unit_tests/nfc/nfc_test.c

@@ -112,7 +112,7 @@ static bool nfc_test_digital_signal_test_encode(
         // Check timings
         // Check timings
         if(time > encode_max_time) {
         if(time > encode_max_time) {
             FURI_LOG_E(
             FURI_LOG_E(
-                TAG, "Encoding time: %d us while accepted value: %d us", time, encode_max_time);
+                TAG, "Encoding time: %ld us while accepted value: %ld us", time, encode_max_time);
             break;
             break;
         }
         }
 
 
@@ -132,7 +132,7 @@ static bool nfc_test_digital_signal_test_encode(
             ref_timings_sum += ref[i];
             ref_timings_sum += ref[i];
             if(timings_diff > timing_tolerance) {
             if(timings_diff > timing_tolerance) {
                 FURI_LOG_E(
                 FURI_LOG_E(
-                    TAG, "Too big differece in %d timings. Ref: %d, DUT: %d", i, ref[i], dut[i]);
+                    TAG, "Too big differece in %d timings. Ref: %ld, DUT: %ld", i, ref[i], dut[i]);
                 timing_check_success = false;
                 timing_check_success = false;
                 break;
                 break;
             }
             }
@@ -143,16 +143,16 @@ static bool nfc_test_digital_signal_test_encode(
         if(sum_diff > timings_sum_tolerance) {
         if(sum_diff > timings_sum_tolerance) {
             FURI_LOG_E(
             FURI_LOG_E(
                 TAG,
                 TAG,
-                "Too big difference in timings sum. Ref: %d, DUT: %d",
+                "Too big difference in timings sum. Ref: %ld, DUT: %ld",
                 ref_timings_sum,
                 ref_timings_sum,
                 dut_timings_sum);
                 dut_timings_sum);
             break;
             break;
         }
         }
 
 
-        FURI_LOG_I(TAG, "Encoding time: %d us. Acceptable time: %d us", time, encode_max_time);
+        FURI_LOG_I(TAG, "Encoding time: %ld us. Acceptable time: %ld us", time, encode_max_time);
         FURI_LOG_I(
         FURI_LOG_I(
             TAG,
             TAG,
-            "Timings sum difference: %d [1/64MHZ]. Acceptable difference: %d [1/64MHz]",
+            "Timings sum difference: %ld [1/64MHZ]. Acceptable difference: %ld [1/64MHz]",
             sum_diff,
             sum_diff,
             timings_sum_tolerance);
             timings_sum_tolerance);
         success = true;
         success = true;

+ 2 - 2
applications/main/archive/helpers/archive_favorites.h

@@ -7,8 +7,8 @@
 
 
 uint16_t archive_favorites_count(void* context);
 uint16_t archive_favorites_count(void* context);
 bool archive_favorites_read(void* context);
 bool archive_favorites_read(void* context);
-bool archive_favorites_delete(const char* format, ...);
-bool archive_is_favorite(const char* format, ...);
+bool archive_favorites_delete(const char* format, ...) _ATTRIBUTE((__format__(__printf__, 1, 2)));
+bool archive_is_favorite(const char* format, ...) _ATTRIBUTE((__format__(__printf__, 1, 2)));
 bool archive_favorites_rename(const char* src, const char* dst);
 bool archive_favorites_rename(const char* src, const char* dst);
 void archive_add_to_favorites(const char* file_path);
 void archive_add_to_favorites(const char* file_path);
 void archive_favorites_save(void* context);
 void archive_favorites_save(void* context);

+ 4 - 2
applications/main/archive/helpers/archive_files.h

@@ -86,5 +86,7 @@ ARRAY_DEF(
 
 
 void archive_set_file_type(ArchiveFile_t* file, const char* path, bool is_folder, bool is_app);
 void archive_set_file_type(ArchiveFile_t* file, const char* path, bool is_folder, bool is_app);
 bool archive_get_items(void* context, const char* path);
 bool archive_get_items(void* context, const char* path);
-void archive_file_append(const char* path, const char* format, ...);
-void archive_delete_file(void* context, const char* format, ...);
+void archive_file_append(const char* path, const char* format, ...)
+    _ATTRIBUTE((__format__(__printf__, 2, 3)));
+void archive_delete_file(void* context, const char* format, ...)
+    _ATTRIBUTE((__format__(__printf__, 2, 3)));

+ 3 - 3
applications/main/bad_usb/bad_usb_script.c

@@ -323,7 +323,7 @@ static bool ducky_set_usb_id(BadUsbScript* bad_usb, const char* line) {
         }
         }
         FURI_LOG_D(
         FURI_LOG_D(
             WORKER_TAG,
             WORKER_TAG,
-            "set id: %04X:%04X mfr:%s product:%s",
+            "set id: %04lX:%04lX mfr:%s product:%s",
             bad_usb->hid_cfg.vid,
             bad_usb->hid_cfg.vid,
             bad_usb->hid_cfg.pid,
             bad_usb->hid_cfg.pid,
             bad_usb->hid_cfg.manuf,
             bad_usb->hid_cfg.manuf,
@@ -388,7 +388,7 @@ static int32_t ducky_script_execute_next(BadUsbScript* bad_usb, File* script_fil
             return 0;
             return 0;
         } else if(delay_val < 0) { // Script error
         } else if(delay_val < 0) { // Script error
             bad_usb->st.error_line = bad_usb->st.line_cur - 1;
             bad_usb->st.error_line = bad_usb->st.line_cur - 1;
-            FURI_LOG_E(WORKER_TAG, "Unknown command at line %lu", bad_usb->st.line_cur - 1);
+            FURI_LOG_E(WORKER_TAG, "Unknown command at line %u", bad_usb->st.line_cur - 1);
             return SCRIPT_STATE_ERROR;
             return SCRIPT_STATE_ERROR;
         } else {
         } else {
             return (delay_val + bad_usb->defdelay);
             return (delay_val + bad_usb->defdelay);
@@ -420,7 +420,7 @@ static int32_t ducky_script_execute_next(BadUsbScript* bad_usb, File* script_fil
                 delay_val = ducky_parse_line(bad_usb, bad_usb->line);
                 delay_val = ducky_parse_line(bad_usb, bad_usb->line);
                 if(delay_val < 0) {
                 if(delay_val < 0) {
                     bad_usb->st.error_line = bad_usb->st.line_cur;
                     bad_usb->st.error_line = bad_usb->st.line_cur;
-                    FURI_LOG_E(WORKER_TAG, "Unknown command at line %lu", bad_usb->st.line_cur);
+                    FURI_LOG_E(WORKER_TAG, "Unknown command at line %u", bad_usb->st.line_cur);
                     return SCRIPT_STATE_ERROR;
                     return SCRIPT_STATE_ERROR;
                 } else {
                 } else {
                     return (delay_val + bad_usb->defdelay);
                     return (delay_val + bad_usb->defdelay);

+ 1 - 1
applications/main/bad_usb/views/bad_usb_view.c

@@ -91,7 +91,7 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) {
         furi_string_reset(disp_str);
         furi_string_reset(disp_str);
         canvas_draw_icon(canvas, 117, 22, &I_Percent_10x14);
         canvas_draw_icon(canvas, 117, 22, &I_Percent_10x14);
         canvas_set_font(canvas, FontSecondary);
         canvas_set_font(canvas, FontSecondary);
-        furi_string_printf(disp_str, "delay %us", model->state.delay_remain);
+        furi_string_printf(disp_str, "delay %lus", model->state.delay_remain);
         canvas_draw_str_aligned(
         canvas_draw_str_aligned(
             canvas, 127, 46, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
             canvas, 127, 46, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
         furi_string_reset(disp_str);
         furi_string_reset(disp_str);

+ 1 - 1
applications/main/fap_loader/elf_cpp/elf_hashtable.cpp

@@ -31,7 +31,7 @@ bool elf_resolve_from_hashtable(const char* name, Elf32_Addr* address) {
 
 
     auto find_res = std::lower_bound(elf_api_table.cbegin(), elf_api_table.cend(), key);
     auto find_res = std::lower_bound(elf_api_table.cbegin(), elf_api_table.cend(), key);
     if((find_res == elf_api_table.cend() || (find_res->hash != gnu_sym_hash))) {
     if((find_res == elf_api_table.cend() || (find_res->hash != gnu_sym_hash))) {
-        FURI_LOG_W(TAG, "Cant find symbol '%s' (hash %x)!", name, gnu_sym_hash);
+        FURI_LOG_W(TAG, "Cant find symbol '%s' (hash %lx)!", name, gnu_sym_hash);
         result = false;
         result = false;
     } else {
     } else {
         result = true;
         result = true;

+ 2 - 2
applications/main/infrared/infrared.c

@@ -92,14 +92,14 @@ static void infrared_find_vacant_remote_name(FuriString* name, const char* path)
         uint32_t i = 1;
         uint32_t i = 1;
         do {
         do {
             furi_string_printf(
             furi_string_printf(
-                path_temp, "%s%u%s", furi_string_get_cstr(base_path), ++i, INFRARED_APP_EXTENSION);
+                path_temp, "%s%lu%s", furi_string_get_cstr(base_path), ++i, INFRARED_APP_EXTENSION);
             status = storage_common_stat(storage, furi_string_get_cstr(path_temp), NULL);
             status = storage_common_stat(storage, furi_string_get_cstr(path_temp), NULL);
         } while(status == FSE_OK);
         } while(status == FSE_OK);
 
 
         furi_string_free(path_temp);
         furi_string_free(path_temp);
 
 
         if(status == FSE_NOT_EXIST) {
         if(status == FSE_NOT_EXIST) {
-            furi_string_cat_printf(name, "%u", i);
+            furi_string_cat_printf(name, "%lu", i);
         }
         }
     }
     }
 
 

+ 2 - 2
applications/main/infrared/infrared_signal.c

@@ -61,7 +61,7 @@ static bool infrared_signal_is_raw_valid(InfraredRawSignal* raw) {
     if((raw->frequency > INFRARED_MAX_FREQUENCY) || (raw->frequency < INFRARED_MIN_FREQUENCY)) {
     if((raw->frequency > INFRARED_MAX_FREQUENCY) || (raw->frequency < INFRARED_MIN_FREQUENCY)) {
         FURI_LOG_E(
         FURI_LOG_E(
             TAG,
             TAG,
-            "Frequency is out of range (%lX - %lX): %lX",
+            "Frequency is out of range (%X - %X): %lX",
             INFRARED_MIN_FREQUENCY,
             INFRARED_MIN_FREQUENCY,
             INFRARED_MAX_FREQUENCY,
             INFRARED_MAX_FREQUENCY,
             raw->frequency);
             raw->frequency);
@@ -74,7 +74,7 @@ static bool infrared_signal_is_raw_valid(InfraredRawSignal* raw) {
     } else if((raw->timings_size <= 0) || (raw->timings_size > MAX_TIMINGS_AMOUNT)) {
     } else if((raw->timings_size <= 0) || (raw->timings_size > MAX_TIMINGS_AMOUNT)) {
         FURI_LOG_E(
         FURI_LOG_E(
             TAG,
             TAG,
-            "Timings amount is out of range (0 - %lX): %lX",
+            "Timings amount is out of range (0 - %X): %X",
             MAX_TIMINGS_AMOUNT,
             MAX_TIMINGS_AMOUNT,
             raw->timings_size);
             raw->timings_size);
         return false;
         return false;

+ 1 - 1
applications/main/nfc/scenes/nfc_scene_mf_classic_keys_list.c

@@ -27,7 +27,7 @@ void nfc_scene_mf_classic_keys_list_prepare(Nfc* nfc, MfClassicDict* dict) {
         char* current_key = (char*)malloc(sizeof(char) * 13);
         char* current_key = (char*)malloc(sizeof(char) * 13);
         strncpy(current_key, furi_string_get_cstr(temp_key), 12);
         strncpy(current_key, furi_string_get_cstr(temp_key), 12);
         MfClassicUserKeys_push_back(nfc->mfc_key_strs, current_key);
         MfClassicUserKeys_push_back(nfc->mfc_key_strs, current_key);
-        FURI_LOG_D("ListKeys", "Key %d: %s", index, current_key);
+        FURI_LOG_D("ListKeys", "Key %ld: %s", index, current_key);
         submenu_add_item(
         submenu_add_item(
             submenu, current_key, index++, nfc_scene_mf_classic_keys_list_submenu_callback, nfc);
             submenu, current_key, index++, nfc_scene_mf_classic_keys_list_submenu_callback, nfc);
     }
     }

+ 2 - 2
applications/main/nfc/scenes/nfc_scene_mf_desfire_read_success.c

@@ -28,11 +28,11 @@ void nfc_scene_mf_desfire_read_success_on_enter(void* context) {
 
 
     uint32_t bytes_total = 1 << (data->version.sw_storage >> 1);
     uint32_t bytes_total = 1 << (data->version.sw_storage >> 1);
     uint32_t bytes_free = data->free_memory ? data->free_memory->bytes : 0;
     uint32_t bytes_free = data->free_memory ? data->free_memory->bytes : 0;
-    furi_string_cat_printf(temp_str, "\n%d", bytes_total);
+    furi_string_cat_printf(temp_str, "\n%ld", bytes_total);
     if(data->version.sw_storage & 1) {
     if(data->version.sw_storage & 1) {
         furi_string_push_back(temp_str, '+');
         furi_string_push_back(temp_str, '+');
     }
     }
-    furi_string_cat_printf(temp_str, " bytes, %d bytes free\n", bytes_free);
+    furi_string_cat_printf(temp_str, " bytes, %ld bytes free\n", bytes_free);
 
 
     uint16_t n_apps = 0;
     uint16_t n_apps = 0;
     uint16_t n_files = 0;
     uint16_t n_files = 0;

+ 2 - 2
applications/main/nfc/scenes/nfc_scene_nfc_data_info.c

@@ -59,11 +59,11 @@ void nfc_scene_nfc_data_info_on_enter(void* context) {
         MifareDesfireData* data = &dev_data->mf_df_data;
         MifareDesfireData* data = &dev_data->mf_df_data;
         uint32_t bytes_total = 1 << (data->version.sw_storage >> 1);
         uint32_t bytes_total = 1 << (data->version.sw_storage >> 1);
         uint32_t bytes_free = data->free_memory ? data->free_memory->bytes : 0;
         uint32_t bytes_free = data->free_memory ? data->free_memory->bytes : 0;
-        furi_string_cat_printf(temp_str, "\n%d", bytes_total);
+        furi_string_cat_printf(temp_str, "\n%ld", bytes_total);
         if(data->version.sw_storage & 1) {
         if(data->version.sw_storage & 1) {
             furi_string_push_back(temp_str, '+');
             furi_string_push_back(temp_str, '+');
         }
         }
-        furi_string_cat_printf(temp_str, " bytes, %d bytes free\n", bytes_free);
+        furi_string_cat_printf(temp_str, " bytes, %ld bytes free\n", bytes_free);
 
 
         uint16_t n_apps = 0;
         uint16_t n_apps = 0;
         uint16_t n_files = 0;
         uint16_t n_files = 0;

+ 4 - 4
applications/main/subghz/helpers/subghz_frequency_analyzer_worker.c

@@ -149,7 +149,7 @@ static int32_t subghz_frequency_analyzer_worker_thread(void* context) {
 
 
         FURI_LOG_T(
         FURI_LOG_T(
             TAG,
             TAG,
-            "RSSI: avg %f, max %f at %u, min %f",
+            "RSSI: avg %f, max %f at %lu, min %f",
             (double)(rssi_avg / rssi_avg_samples),
             (double)(rssi_avg / rssi_avg_samples),
             (double)frequency_rssi.rssi_coarse,
             (double)frequency_rssi.rssi_coarse,
             frequency_rssi.frequency_coarse,
             frequency_rssi.frequency_coarse,
@@ -180,7 +180,7 @@ static int32_t subghz_frequency_analyzer_worker_thread(void* context) {
 
 
                     rssi = furi_hal_subghz_get_rssi();
                     rssi = furi_hal_subghz_get_rssi();
 
 
-                    FURI_LOG_T(TAG, "#:%u:%f", frequency, (double)rssi);
+                    FURI_LOG_T(TAG, "#:%lu:%f", frequency, (double)rssi);
 
 
                     if(frequency_rssi.rssi_fine < rssi) {
                     if(frequency_rssi.rssi_fine < rssi) {
                         frequency_rssi.rssi_fine = rssi;
                         frequency_rssi.rssi_fine = rssi;
@@ -193,7 +193,7 @@ static int32_t subghz_frequency_analyzer_worker_thread(void* context) {
         // Deliver results fine
         // Deliver results fine
         if(frequency_rssi.rssi_fine > SUBGHZ_FREQUENCY_ANALYZER_THRESHOLD) {
         if(frequency_rssi.rssi_fine > SUBGHZ_FREQUENCY_ANALYZER_THRESHOLD) {
             FURI_LOG_D(
             FURI_LOG_D(
-                TAG, "=:%u:%f", frequency_rssi.frequency_fine, (double)frequency_rssi.rssi_fine);
+                TAG, "=:%lu:%f", frequency_rssi.frequency_fine, (double)frequency_rssi.rssi_fine);
 
 
             instance->sample_hold_counter = 20;
             instance->sample_hold_counter = 20;
             rssi_temp = frequency_rssi.rssi_fine;
             rssi_temp = frequency_rssi.rssi_fine;
@@ -217,7 +217,7 @@ static int32_t subghz_frequency_analyzer_worker_thread(void* context) {
             (instance->sample_hold_counter < 10)) {
             (instance->sample_hold_counter < 10)) {
             FURI_LOG_D(
             FURI_LOG_D(
                 TAG,
                 TAG,
-                "~:%u:%f",
+                "~:%lu:%f",
                 frequency_rssi.frequency_coarse,
                 frequency_rssi.frequency_coarse,
                 (double)frequency_rssi.rssi_coarse);
                 (double)frequency_rssi.rssi_coarse);
 
 

+ 3 - 3
applications/main/subghz/subghz_cli.c

@@ -151,8 +151,8 @@ void subghz_cli_command_tx(Cli* cli, FuriString* args, void* context) {
         "Protocol: Princeton\n"
         "Protocol: Princeton\n"
         "Bit: 24\n"
         "Bit: 24\n"
         "Key: 00 00 00 00 00 %02X %02X %02X\n"
         "Key: 00 00 00 00 00 %02X %02X %02X\n"
-        "TE: %d\n"
-        "Repeat: %d\n",
+        "TE: %ld\n"
+        "Repeat: %ld\n",
         (uint8_t)((key >> 16) & 0xFF),
         (uint8_t)((key >> 16) & 0xFF),
         (uint8_t)((key >> 8) & 0xFF),
         (uint8_t)((key >> 8) & 0xFF),
         (uint8_t)(key & 0xFF),
         (uint8_t)(key & 0xFF),
@@ -794,7 +794,7 @@ static bool subghz_on_system_start_istream_decode_band(
 
 
     FURI_LOG_I(
     FURI_LOG_I(
         "SubGhzOnStart",
         "SubGhzOnStart",
-        "Add allowed band: start %dHz, stop %dHz, power_limit %ddBm, duty_cycle %d%%",
+        "Add allowed band: start %ldHz, stop %ldHz, power_limit %ddBm, duty_cycle %d%%",
         band.start,
         band.start,
         band.end,
         band.end,
         band.power_limit,
         band.power_limit,

+ 1 - 1
applications/main/subghz/subghz_i.c

@@ -60,7 +60,7 @@ void subghz_get_frequency_modulation(SubGhz* subghz, FuriString* frequency, Furi
             subghz->txrx->preset->frequency / 10000 % 100);
             subghz->txrx->preset->frequency / 10000 % 100);
     }
     }
     if(modulation != NULL) {
     if(modulation != NULL) {
-        furi_string_printf(modulation, "%0.2s", furi_string_get_cstr(subghz->txrx->preset->name));
+        furi_string_printf(modulation, "%2s", furi_string_get_cstr(subghz->txrx->preset->name));
     }
     }
 }
 }
 
 

+ 3 - 3
applications/plugins/music_player/music_player_worker.c

@@ -258,7 +258,7 @@ static bool music_player_worker_parse_notes(MusicPlayerWorker* instance, const c
             if(!is_valid) {
             if(!is_valid) {
                 FURI_LOG_E(
                 FURI_LOG_E(
                     TAG,
                     TAG,
-                    "Invalid note: %u%c%c%u.%u",
+                    "Invalid note: %lu%c%c%lu.%lu",
                     duration,
                     duration,
                     note_char == '\0' ? '_' : note_char,
                     note_char == '\0' ? '_' : note_char,
                     sharp_char == '\0' ? '_' : sharp_char,
                     sharp_char == '\0' ? '_' : sharp_char,
@@ -281,7 +281,7 @@ static bool music_player_worker_parse_notes(MusicPlayerWorker* instance, const c
             if(music_player_worker_add_note(instance, semitone, duration, dots)) {
             if(music_player_worker_add_note(instance, semitone, duration, dots)) {
                 FURI_LOG_D(
                 FURI_LOG_D(
                     TAG,
                     TAG,
-                    "Added note: %c%c%u.%u = %u %u",
+                    "Added note: %c%c%lu.%lu = %u %lu",
                     note_char == '\0' ? '_' : note_char,
                     note_char == '\0' ? '_' : note_char,
                     sharp_char == '\0' ? '_' : sharp_char,
                     sharp_char == '\0' ? '_' : sharp_char,
                     octave,
                     octave,
@@ -291,7 +291,7 @@ static bool music_player_worker_parse_notes(MusicPlayerWorker* instance, const c
             } else {
             } else {
                 FURI_LOG_E(
                 FURI_LOG_E(
                     TAG,
                     TAG,
-                    "Invalid note: %c%c%u.%u = %u %u",
+                    "Invalid note: %c%c%lu.%lu = %u %lu",
                     note_char == '\0' ? '_' : note_char,
                     note_char == '\0' ? '_' : note_char,
                     sharp_char == '\0' ? '_' : sharp_char,
                     sharp_char == '\0' ? '_' : sharp_char,
                     octave,
                     octave,

+ 2 - 2
applications/services/bt/bt_service/bt.c

@@ -77,7 +77,7 @@ static bool bt_pin_code_verify_event_handler(Bt* bt, uint32_t pin) {
     notification_message(bt->notification, &sequence_display_backlight_on);
     notification_message(bt->notification, &sequence_display_backlight_on);
     FuriString* pin_str;
     FuriString* pin_str;
     dialog_message_set_icon(bt->dialog_message, &I_BLE_Pairing_128x64, 0, 0);
     dialog_message_set_icon(bt->dialog_message, &I_BLE_Pairing_128x64, 0, 0);
-    pin_str = furi_string_alloc_printf("Verify code\n%06d", pin);
+    pin_str = furi_string_alloc_printf("Verify code\n%06ld", pin);
     dialog_message_set_text(
     dialog_message_set_text(
         bt->dialog_message, furi_string_get_cstr(pin_str), 64, 4, AlignCenter, AlignTop);
         bt->dialog_message, furi_string_get_cstr(pin_str), 64, 4, AlignCenter, AlignTop);
     dialog_message_set_buttons(bt->dialog_message, "Cancel", "OK", NULL);
     dialog_message_set_buttons(bt->dialog_message, "Cancel", "OK", NULL);
@@ -277,7 +277,7 @@ static bool bt_on_gap_event_callback(GapEvent event, void* context) {
 static void bt_on_key_storage_change_callback(uint8_t* addr, uint16_t size, void* context) {
 static void bt_on_key_storage_change_callback(uint8_t* addr, uint16_t size, void* context) {
     furi_assert(context);
     furi_assert(context);
     Bt* bt = context;
     Bt* bt = context;
-    FURI_LOG_I(TAG, "Changed addr start: %08lX, size changed: %d", addr, size);
+    FURI_LOG_I(TAG, "Changed addr start: %p, size changed: %d", addr, size);
     BtMessage message = {.type = BtMessageTypeKeysStorageUpdated};
     BtMessage message = {.type = BtMessageTypeKeysStorageUpdated};
     furi_check(
     furi_check(
         furi_message_queue_put(bt->message_queue, &message, FuriWaitForever) == FuriStatusOk);
         furi_message_queue_put(bt->message_queue, &message, FuriWaitForever) == FuriStatusOk);

+ 2 - 2
applications/services/desktop/animations/animation_storage.c

@@ -304,7 +304,7 @@ static bool animation_storage_load_frames(
         if(file_info.size > max_filesize) {
         if(file_info.size > max_filesize) {
             FURI_LOG_E(
             FURI_LOG_E(
                 TAG,
                 TAG,
-                "Filesize %d, max: %d (width %d, height %d)",
+                "Filesize %lld, max: %d (width %d, height %d)",
                 file_info.size,
                 file_info.size,
                 max_filesize,
                 max_filesize,
                 width,
                 width,
@@ -329,7 +329,7 @@ static bool animation_storage_load_frames(
     if(!frames_ok) {
     if(!frames_ok) {
         FURI_LOG_E(
         FURI_LOG_E(
             TAG,
             TAG,
-            "Load \'%s\' failed, %dx%d, size: %d",
+            "Load \'%s\' failed, %dx%d, size: %lld",
             furi_string_get_cstr(filename),
             furi_string_get_cstr(filename),
             width,
             width,
             height,
             height,

+ 1 - 1
applications/services/dolphin/helpers/dolphin_state.c

@@ -171,7 +171,7 @@ void dolphin_state_on_deed(DolphinState* dolphin_state, DolphinDeed deed) {
 
 
     FURI_LOG_D(
     FURI_LOG_D(
         TAG,
         TAG,
-        "icounter %d, butthurt %d",
+        "icounter %ld, butthurt %ld",
         dolphin_state->data.icounter,
         dolphin_state->data.icounter,
         dolphin_state->data.butthurt);
         dolphin_state->data.butthurt);
 }
 }

+ 3 - 3
applications/services/gui/gui.c

@@ -260,7 +260,7 @@ void gui_input(Gui* gui, InputEvent* input_event) {
             "non-complementary input, discarding key: %s type: %s, sequence: %p",
             "non-complementary input, discarding key: %s type: %s, sequence: %p",
             input_get_key_name(input_event->key),
             input_get_key_name(input_event->key),
             input_get_type_name(input_event->type),
             input_get_type_name(input_event->type),
-            input_event->sequence);
+            (void*)input_event->sequence);
         return;
         return;
     }
     }
 
 
@@ -290,7 +290,7 @@ void gui_input(Gui* gui, InputEvent* input_event) {
             view_port,
             view_port,
             input_get_key_name(input_event->key),
             input_get_key_name(input_event->key),
             input_get_type_name(input_event->type),
             input_get_type_name(input_event->type),
-            input_event->sequence);
+            (void*)input_event->sequence);
         view_port_input(gui->ongoing_input_view_port, input_event);
         view_port_input(gui->ongoing_input_view_port, input_event);
     } else {
     } else {
         FURI_LOG_D(
         FURI_LOG_D(
@@ -300,7 +300,7 @@ void gui_input(Gui* gui, InputEvent* input_event) {
             view_port,
             view_port,
             input_get_key_name(input_event->key),
             input_get_key_name(input_event->key),
             input_get_type_name(input_event->type),
             input_get_type_name(input_event->type),
-            input_event->sequence);
+            (void*)input_event->sequence);
     }
     }
 
 
     gui_unlock(gui);
     gui_unlock(gui);

+ 5 - 4
applications/services/gui/modules/file_browser_worker.c

@@ -291,7 +291,7 @@ static int32_t browser_worker(void* context) {
             browser_folder_init(browser, path, filename, &items_cnt, &file_idx);
             browser_folder_init(browser, path, filename, &items_cnt, &file_idx);
             FURI_LOG_D(
             FURI_LOG_D(
                 TAG,
                 TAG,
-                "Enter folder: %s items: %u idx: %d",
+                "Enter folder: %s items: %lu idx: %ld",
                 furi_string_get_cstr(path),
                 furi_string_get_cstr(path),
                 items_cnt,
                 items_cnt,
                 file_idx);
                 file_idx);
@@ -313,7 +313,7 @@ static int32_t browser_worker(void* context) {
             }
             }
             FURI_LOG_D(
             FURI_LOG_D(
                 TAG,
                 TAG,
-                "Exit to: %s items: %u idx: %d",
+                "Exit to: %s items: %lu idx: %ld",
                 furi_string_get_cstr(path),
                 furi_string_get_cstr(path),
                 items_cnt,
                 items_cnt,
                 file_idx);
                 file_idx);
@@ -330,7 +330,7 @@ static int32_t browser_worker(void* context) {
             browser_folder_init(browser, path, filename, &items_cnt, &file_idx);
             browser_folder_init(browser, path, filename, &items_cnt, &file_idx);
             FURI_LOG_D(
             FURI_LOG_D(
                 TAG,
                 TAG,
-                "Refresh folder: %s items: %u idx: %d",
+                "Refresh folder: %s items: %lu idx: %ld",
                 furi_string_get_cstr(path),
                 furi_string_get_cstr(path),
                 items_cnt,
                 items_cnt,
                 browser->item_sel_idx);
                 browser->item_sel_idx);
@@ -340,7 +340,8 @@ static int32_t browser_worker(void* context) {
         }
         }
 
 
         if(flags & WorkerEvtLoad) {
         if(flags & WorkerEvtLoad) {
-            FURI_LOG_D(TAG, "Load offset: %u cnt: %u", browser->load_offset, browser->load_count);
+            FURI_LOG_D(
+                TAG, "Load offset: %lu cnt: %lu", browser->load_offset, browser->load_count);
             browser_folder_load(browser, path, browser->load_offset, browser->load_count);
             browser_folder_load(browser, path, browser->load_offset, browser->load_count);
         }
         }
 
 

+ 2 - 2
applications/services/gui/view_dispatcher.c

@@ -246,7 +246,7 @@ void view_dispatcher_handle_input(ViewDispatcher* view_dispatcher, InputEvent* e
             "non-complementary input, discarding key: %s, type: %s, sequence: %p",
             "non-complementary input, discarding key: %s, type: %s, sequence: %p",
             input_get_key_name(event->key),
             input_get_key_name(event->key),
             input_get_type_name(event->type),
             input_get_type_name(event->type),
-            event->sequence);
+            (void*)event->sequence);
         return;
         return;
     }
     }
 
 
@@ -286,7 +286,7 @@ void view_dispatcher_handle_input(ViewDispatcher* view_dispatcher, InputEvent* e
             view_dispatcher->current_view,
             view_dispatcher->current_view,
             input_get_key_name(event->key),
             input_get_key_name(event->key),
             input_get_type_name(event->type),
             input_get_type_name(event->type),
-            event->sequence);
+            (void*)event->sequence);
         view_input(view_dispatcher->ongoing_input_view, event);
         view_input(view_dispatcher->ongoing_input_view, event);
     }
     }
 }
 }

+ 9 - 9
applications/services/rpc/rpc_app.c

@@ -32,7 +32,7 @@ static void rpc_system_app_start_process(const PB_Main* request, void* context)
     furi_assert(!rpc_app->last_id);
     furi_assert(!rpc_app->last_id);
     furi_assert(!rpc_app->last_data);
     furi_assert(!rpc_app->last_data);
 
 
-    FURI_LOG_D(TAG, "StartProcess: id %d", request->command_id);
+    FURI_LOG_D(TAG, "StartProcess: id %ld", request->command_id);
 
 
     PB_CommandStatus result = PB_CommandStatus_ERROR_APP_CANT_START;
     PB_CommandStatus result = PB_CommandStatus_ERROR_APP_CANT_START;
 
 
@@ -63,7 +63,7 @@ static void rpc_system_app_start_process(const PB_Main* request, void* context)
 
 
     furi_record_close(RECORD_LOADER);
     furi_record_close(RECORD_LOADER);
 
 
-    FURI_LOG_D(TAG, "StartProcess: response id %d, result %d", request->command_id, result);
+    FURI_LOG_D(TAG, "StartProcess: response id %ld, result %d", request->command_id, result);
     rpc_send_and_release_empty(session, request->command_id, result);
     rpc_send_and_release_empty(session, request->command_id, result);
 }
 }
 
 
@@ -108,7 +108,7 @@ static void rpc_system_app_exit_request(const PB_Main* request, void* context) {
     PB_CommandStatus status;
     PB_CommandStatus status;
 
 
     if(rpc_app->app_callback) {
     if(rpc_app->app_callback) {
-        FURI_LOG_D(TAG, "ExitRequest: id %d", request->command_id);
+        FURI_LOG_D(TAG, "ExitRequest: id %ld", request->command_id);
         furi_assert(!rpc_app->last_id);
         furi_assert(!rpc_app->last_id);
         furi_assert(!rpc_app->last_data);
         furi_assert(!rpc_app->last_data);
         rpc_app->last_id = request->command_id;
         rpc_app->last_id = request->command_id;
@@ -116,7 +116,7 @@ static void rpc_system_app_exit_request(const PB_Main* request, void* context) {
     } else {
     } else {
         status = PB_CommandStatus_ERROR_APP_NOT_RUNNING;
         status = PB_CommandStatus_ERROR_APP_NOT_RUNNING;
         FURI_LOG_E(
         FURI_LOG_E(
-            TAG, "ExitRequest: APP_NOT_RUNNING, id %d, status: %d", request->command_id, status);
+            TAG, "ExitRequest: APP_NOT_RUNNING, id %ld, status: %d", request->command_id, status);
         rpc_send_and_release_empty(session, request->command_id, status);
         rpc_send_and_release_empty(session, request->command_id, status);
     }
     }
 }
 }
@@ -132,7 +132,7 @@ static void rpc_system_app_load_file(const PB_Main* request, void* context) {
 
 
     PB_CommandStatus status;
     PB_CommandStatus status;
     if(rpc_app->app_callback) {
     if(rpc_app->app_callback) {
-        FURI_LOG_D(TAG, "LoadFile: id %d", request->command_id);
+        FURI_LOG_D(TAG, "LoadFile: id %ld", request->command_id);
         furi_assert(!rpc_app->last_id);
         furi_assert(!rpc_app->last_id);
         furi_assert(!rpc_app->last_data);
         furi_assert(!rpc_app->last_data);
         rpc_app->last_id = request->command_id;
         rpc_app->last_id = request->command_id;
@@ -141,7 +141,7 @@ static void rpc_system_app_load_file(const PB_Main* request, void* context) {
     } else {
     } else {
         status = PB_CommandStatus_ERROR_APP_NOT_RUNNING;
         status = PB_CommandStatus_ERROR_APP_NOT_RUNNING;
         FURI_LOG_E(
         FURI_LOG_E(
-            TAG, "LoadFile: APP_NOT_RUNNING, id %d, status: %d", request->command_id, status);
+            TAG, "LoadFile: APP_NOT_RUNNING, id %ld, status: %d", request->command_id, status);
         rpc_send_and_release_empty(session, request->command_id, status);
         rpc_send_and_release_empty(session, request->command_id, status);
     }
     }
 }
 }
@@ -166,7 +166,7 @@ static void rpc_system_app_button_press(const PB_Main* request, void* context) {
     } else {
     } else {
         status = PB_CommandStatus_ERROR_APP_NOT_RUNNING;
         status = PB_CommandStatus_ERROR_APP_NOT_RUNNING;
         FURI_LOG_E(
         FURI_LOG_E(
-            TAG, "ButtonPress: APP_NOT_RUNNING, id %d, status: %d", request->command_id, status);
+            TAG, "ButtonPress: APP_NOT_RUNNING, id %ld, status: %d", request->command_id, status);
         rpc_send_and_release_empty(session, request->command_id, status);
         rpc_send_and_release_empty(session, request->command_id, status);
     }
     }
 }
 }
@@ -190,7 +190,7 @@ static void rpc_system_app_button_release(const PB_Main* request, void* context)
     } else {
     } else {
         status = PB_CommandStatus_ERROR_APP_NOT_RUNNING;
         status = PB_CommandStatus_ERROR_APP_NOT_RUNNING;
         FURI_LOG_E(
         FURI_LOG_E(
-            TAG, "ButtonRelease: APP_NOT_RUNNING, id %d, status: %d", request->command_id, status);
+            TAG, "ButtonRelease: APP_NOT_RUNNING, id %ld, status: %d", request->command_id, status);
         rpc_send_and_release_empty(session, request->command_id, status);
         rpc_send_and_release_empty(session, request->command_id, status);
     }
     }
 }
 }
@@ -243,7 +243,7 @@ void rpc_system_app_confirm(RpcAppSystem* rpc_app, RpcAppSystemEvent event, bool
             free(rpc_app->last_data);
             free(rpc_app->last_data);
             rpc_app->last_data = NULL;
             rpc_app->last_data = NULL;
         }
         }
-        FURI_LOG_D(TAG, "AppConfirm: event %d last_id %d status %d", event, last_id, status);
+        FURI_LOG_D(TAG, "AppConfirm: event %d last_id %ld status %d", event, last_id, status);
         rpc_send_and_release_empty(session, last_id, status);
         rpc_send_and_release_empty(session, last_id, status);
         break;
         break;
     default:
     default:

+ 1 - 1
applications/services/rpc/rpc_cli.c

@@ -44,7 +44,7 @@ void rpc_cli_command_start_session(Cli* cli, FuriString* args, void* context) {
     Rpc* rpc = context;
     Rpc* rpc = context;
 
 
     uint32_t mem_before = memmgr_get_free_heap();
     uint32_t mem_before = memmgr_get_free_heap();
-    FURI_LOG_D(TAG, "Free memory %d", mem_before);
+    FURI_LOG_D(TAG, "Free memory %ld", mem_before);
 
 
     furi_hal_usb_lock();
     furi_hal_usb_lock();
     RpcSession* rpc_session = rpc_session_open(rpc);
     RpcSession* rpc_session = rpc_session_open(rpc);

+ 2 - 2
applications/services/rpc/rpc_debug.c

@@ -158,9 +158,9 @@ void rpc_debug_print_message(const PB_Main* message) {
     case PB_Main_storage_info_response_tag: {
     case PB_Main_storage_info_response_tag: {
         furi_string_cat_printf(str, "\tinfo_response {\r\n");
         furi_string_cat_printf(str, "\tinfo_response {\r\n");
         furi_string_cat_printf(
         furi_string_cat_printf(
-            str, "\t\ttotal_space: %lu\r\n", message->content.storage_info_response.total_space);
+            str, "\t\ttotal_space: %llu\r\n", message->content.storage_info_response.total_space);
         furi_string_cat_printf(
         furi_string_cat_printf(
-            str, "\t\tfree_space: %lu\r\n", message->content.storage_info_response.free_space);
+            str, "\t\tfree_space: %llu\r\n", message->content.storage_info_response.free_space);
         break;
         break;
     }
     }
     case PB_Main_storage_stat_request_tag: {
     case PB_Main_storage_stat_request_tag: {

+ 22 - 6
applications/services/storage/storage_external_api.c

@@ -119,7 +119,11 @@ bool storage_file_open(
     furi_event_flag_free(event);
     furi_event_flag_free(event);
 
 
     FURI_LOG_T(
     FURI_LOG_T(
-        TAG, "File %p - %p open (%s)", (uint32_t)file - SRAM_BASE, file->file_id - SRAM_BASE, path);
+        TAG,
+        "File %p - %p open (%s)",
+        (void*)((uint32_t)file - SRAM_BASE),
+        (void*)(file->file_id - SRAM_BASE),
+        path);
 
 
     return result;
     return result;
 }
 }
@@ -132,7 +136,11 @@ bool storage_file_close(File* file) {
     S_API_MESSAGE(StorageCommandFileClose);
     S_API_MESSAGE(StorageCommandFileClose);
     S_API_EPILOGUE;
     S_API_EPILOGUE;
 
 
-    FURI_LOG_T(TAG, "File %p - %p closed", (uint32_t)file - SRAM_BASE, file->file_id - SRAM_BASE);
+    FURI_LOG_T(
+        TAG,
+        "File %p - %p closed",
+        (void*)((uint32_t)file - SRAM_BASE),
+        (void*)(file->file_id - SRAM_BASE));
     file->type = FileTypeClosed;
     file->type = FileTypeClosed;
 
 
     return S_RETURN_BOOL;
     return S_RETURN_BOOL;
@@ -291,7 +299,11 @@ bool storage_dir_open(File* file, const char* path) {
     furi_event_flag_free(event);
     furi_event_flag_free(event);
 
 
     FURI_LOG_T(
     FURI_LOG_T(
-        TAG, "Dir %p - %p open (%s)", (uint32_t)file - SRAM_BASE, file->file_id - SRAM_BASE, path);
+        TAG,
+        "Dir %p - %p open (%s)",
+        (void*)((uint32_t)file - SRAM_BASE),
+        (void*)(file->file_id - SRAM_BASE),
+        path);
 
 
     return result;
     return result;
 }
 }
@@ -303,7 +315,11 @@ bool storage_dir_close(File* file) {
     S_API_MESSAGE(StorageCommandDirClose);
     S_API_MESSAGE(StorageCommandDirClose);
     S_API_EPILOGUE;
     S_API_EPILOGUE;
 
 
-    FURI_LOG_T(TAG, "Dir %p - %p closed", (uint32_t)file - SRAM_BASE, file->file_id - SRAM_BASE);
+    FURI_LOG_T(
+        TAG,
+        "Dir %p - %p closed",
+        (void*)((uint32_t)file - SRAM_BASE),
+        (void*)(file->file_id - SRAM_BASE));
 
 
     file->type = FileTypeClosed;
     file->type = FileTypeClosed;
 
 
@@ -675,7 +691,7 @@ File* storage_file_alloc(Storage* storage) {
     file->type = FileTypeClosed;
     file->type = FileTypeClosed;
     file->storage = storage;
     file->storage = storage;
 
 
-    FURI_LOG_T(TAG, "File/Dir %p alloc", (uint32_t)file - SRAM_BASE);
+    FURI_LOG_T(TAG, "File/Dir %p alloc", (void*)((uint32_t)file - SRAM_BASE));
 
 
     return file;
     return file;
 }
 }
@@ -697,7 +713,7 @@ void storage_file_free(File* file) {
         }
         }
     }
     }
 
 
-    FURI_LOG_T(TAG, "File/Dir %p free", (uint32_t)file - SRAM_BASE);
+    FURI_LOG_T(TAG, "File/Dir %p free", (void*)((uint32_t)file - SRAM_BASE));
     free(file);
     free(file);
 }
 }
 
 

+ 7 - 7
applications/services/storage/storages/storage_int.c

@@ -77,12 +77,12 @@ static int storage_int_device_read(
 
 
     FURI_LOG_T(
     FURI_LOG_T(
         TAG,
         TAG,
-        "Device read: block %d, off %d, buffer: %p, size %d, translated address: %p",
+        "Device read: block %ld, off %ld, buffer: %p, size %ld, translated address: %p",
         block,
         block,
         off,
         off,
         buffer,
         buffer,
         size,
         size,
-        address);
+        (void*)address);
 
 
     memcpy(buffer, (void*)address, size);
     memcpy(buffer, (void*)address, size);
 
 
@@ -100,12 +100,12 @@ static int storage_int_device_prog(
 
 
     FURI_LOG_T(
     FURI_LOG_T(
         TAG,
         TAG,
-        "Device prog: block %d, off %d, buffer: %p, size %d, translated address: %p",
+        "Device prog: block %ld, off %ld, buffer: %p, size %ld, translated address: %p",
         block,
         block,
         off,
         off,
         buffer,
         buffer,
         size,
         size,
-        address);
+        (void*)address);
 
 
     int ret = 0;
     int ret = 0;
     while(size > 0) {
     while(size > 0) {
@@ -122,7 +122,7 @@ static int storage_int_device_erase(const struct lfs_config* c, lfs_block_t bloc
     LFSData* lfs_data = c->context;
     LFSData* lfs_data = c->context;
     size_t page = lfs_data->start_page + block;
     size_t page = lfs_data->start_page + block;
 
 
-    FURI_LOG_D(TAG, "Device erase: page %d, translated page: %x", block, page);
+    FURI_LOG_D(TAG, "Device erase: page %ld, translated page: %x", block, page);
 
 
     furi_hal_flash_erase(page);
     furi_hal_flash_erase(page);
     return 0;
     return 0;
@@ -740,8 +740,8 @@ void storage_int_init(StorageData* storage) {
     LFSData* lfs_data = storage_int_lfs_data_alloc();
     LFSData* lfs_data = storage_int_lfs_data_alloc();
     FURI_LOG_I(
     FURI_LOG_I(
         TAG,
         TAG,
-        "Config: start %p, read %d, write %d, page size: %d, page count: %d, cycles: %d",
-        lfs_data->start_address,
+        "Config: start %p, read %ld, write %ld, page size: %ld, page count: %ld, cycles: %ld",
+        (void*)lfs_data->start_address,
         lfs_data->config.read_size,
         lfs_data->config.read_size,
         lfs_data->config.prog_size,
         lfs_data->config.prog_size,
         lfs_data->config.block_size,
         lfs_data->config.block_size,

+ 4 - 4
applications/system/updater/util/update_task_worker_flasher.c

@@ -271,7 +271,7 @@ bool update_task_validate_optionbytes(UpdateTask* update_task) {
             match = false;
             match = false;
             FURI_LOG_E(
             FURI_LOG_E(
                 TAG,
                 TAG,
-                "OB MISMATCH: #%d: real %08X != %08X (exp.), full %08X",
+                "OB MISMATCH: #%d: real %08lX != %08lX (exp.), full %08lX",
                 idx,
                 idx,
                 device_ob_value_masked,
                 device_ob_value_masked,
                 ref_value,
                 ref_value,
@@ -289,7 +289,7 @@ bool update_task_validate_optionbytes(UpdateTask* update_task) {
                     (manifest->ob_reference.obs[idx].values.base &
                     (manifest->ob_reference.obs[idx].values.base &
                      manifest->ob_write_mask.obs[idx].values.base);
                      manifest->ob_write_mask.obs[idx].values.base);
 
 
-                FURI_LOG_W(TAG, "Fixing up OB byte #%d to %08X", idx, patched_value);
+                FURI_LOG_W(TAG, "Fixing up OB byte #%d to %08lX", idx, patched_value);
                 ob_dirty = true;
                 ob_dirty = true;
 
 
                 bool is_fixed = furi_hal_flash_ob_set_word(idx, patched_value) &&
                 bool is_fixed = furi_hal_flash_ob_set_word(idx, patched_value) &&
@@ -301,7 +301,7 @@ bool update_task_validate_optionbytes(UpdateTask* update_task) {
                      * reference value */
                      * reference value */
                     FURI_LOG_W(
                     FURI_LOG_W(
                         TAG,
                         TAG,
-                        "OB #%d is FUBAR (fixed&masked %08X, not %08X)",
+                        "OB #%d is FUBAR (fixed&masked %08lX, not %08lX)",
                         idx,
                         idx,
                         patched_value,
                         patched_value,
                         ref_value);
                         ref_value);
@@ -310,7 +310,7 @@ bool update_task_validate_optionbytes(UpdateTask* update_task) {
         } else {
         } else {
             FURI_LOG_D(
             FURI_LOG_D(
                 TAG,
                 TAG,
-                "OB MATCH: #%d: real %08X == %08X (exp.)",
+                "OB MATCH: #%d: real %08lX == %08lX (exp.)",
                 idx,
                 idx,
                 device_ob_value_masked,
                 device_ob_value_masked,
                 ref_value);
                 ref_value);

+ 2 - 2
firmware/targets/f7/ble_glue/gap.c

@@ -184,7 +184,7 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification(void* pckt) {
             if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagLock)) {
             if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagLock)) {
                 FURI_LOG_I(TAG, "Pass key request event. Pin: ******");
                 FURI_LOG_I(TAG, "Pass key request event. Pin: ******");
             } else {
             } else {
-                FURI_LOG_I(TAG, "Pass key request event. Pin: %06d", pin);
+                FURI_LOG_I(TAG, "Pass key request event. Pin: %06ld", pin);
             }
             }
             GapEvent event = {.type = GapEventTypePinCodeShow, .data.pin_code = pin};
             GapEvent event = {.type = GapEventTypePinCodeShow, .data.pin_code = pin};
             gap->on_event_cb(event, gap->context);
             gap->on_event_cb(event, gap->context);
@@ -227,7 +227,7 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification(void* pckt) {
         case EVT_BLUE_GAP_NUMERIC_COMPARISON_VALUE: {
         case EVT_BLUE_GAP_NUMERIC_COMPARISON_VALUE: {
             uint32_t pin =
             uint32_t pin =
                 ((aci_gap_numeric_comparison_value_event_rp0*)(blue_evt->data))->Numeric_Value;
                 ((aci_gap_numeric_comparison_value_event_rp0*)(blue_evt->data))->Numeric_Value;
-            FURI_LOG_I(TAG, "Verify numeric comparison: %06d", pin);
+            FURI_LOG_I(TAG, "Verify numeric comparison: %06ld", pin);
             GapEvent event = {.type = GapEventTypePinCodeVerify, .data.pin_code = pin};
             GapEvent event = {.type = GapEventTypePinCodeVerify, .data.pin_code = pin};
             bool result = gap->on_event_cb(event, gap->context);
             bool result = gap->on_event_cb(event, gap->context);
             aci_gap_numeric_comparison_value_confirm_yesno(gap->service.connection_handle, result);
             aci_gap_numeric_comparison_value_confirm_yesno(gap->service.connection_handle, result);

+ 2 - 2
firmware/targets/f7/ble_glue/serial_service.c

@@ -63,13 +63,13 @@ static SVCCTL_EvtAckStatus_t serial_svc_event_handler(void* event) {
                             .size = attribute_modified->Attr_Data_Length,
                             .size = attribute_modified->Attr_Data_Length,
                         }};
                         }};
                     uint32_t buff_free_size = serial_svc->callback(event, serial_svc->context);
                     uint32_t buff_free_size = serial_svc->callback(event, serial_svc->context);
-                    FURI_LOG_D(TAG, "Available buff size: %d", buff_free_size);
+                    FURI_LOG_D(TAG, "Available buff size: %ld", buff_free_size);
                     furi_check(furi_mutex_release(serial_svc->buff_size_mtx) == FuriStatusOk);
                     furi_check(furi_mutex_release(serial_svc->buff_size_mtx) == FuriStatusOk);
                 }
                 }
                 ret = SVCCTL_EvtAckFlowEnable;
                 ret = SVCCTL_EvtAckFlowEnable;
             }
             }
         } else if(blecore_evt->ecode == ACI_GATT_SERVER_CONFIRMATION_VSEVT_CODE) {
         } else if(blecore_evt->ecode == ACI_GATT_SERVER_CONFIRMATION_VSEVT_CODE) {
-            FURI_LOG_T(TAG, "Ack received", blecore_evt->ecode);
+            FURI_LOG_T(TAG, "Ack received");
             if(serial_svc->callback) {
             if(serial_svc->callback) {
                 SerialServiceEvent event = {
                 SerialServiceEvent event = {
                     .event = SerialServiceEventTypeDataSent,
                     .event = SerialServiceEventTypeDataSent,

+ 2 - 1
firmware/targets/f7/furi_hal/furi_hal_console.h

@@ -2,6 +2,7 @@
 
 
 #include <stddef.h>
 #include <stddef.h>
 #include <stdint.h>
 #include <stdint.h>
+#include <stdio.h>
 
 
 #ifdef __cplusplus
 #ifdef __cplusplus
 extern "C" {
 extern "C" {
@@ -27,7 +28,7 @@ void furi_hal_console_tx_with_new_line(const uint8_t* buffer, size_t buffer_size
  * @param format 
  * @param format 
  * @param ... 
  * @param ... 
  */
  */
-void furi_hal_console_printf(const char format[], ...);
+void furi_hal_console_printf(const char format[], ...) _ATTRIBUTE((__format__(__printf__, 1, 2)));
 
 
 void furi_hal_console_puts(const char* data);
 void furi_hal_console_puts(const char* data);
 
 

+ 3 - 3
firmware/targets/f7/furi_hal/furi_hal_flash.c

@@ -83,7 +83,7 @@ void furi_hal_flash_init() {
     // WRITE_REG(FLASH->SR, FLASH_SR_OPTVERR);
     // WRITE_REG(FLASH->SR, FLASH_SR_OPTVERR);
     /* Actually, reset all error flags on start */
     /* Actually, reset all error flags on start */
     if(READ_BIT(FLASH->SR, FURI_HAL_FLASH_SR_ERRORS)) {
     if(READ_BIT(FLASH->SR, FURI_HAL_FLASH_SR_ERRORS)) {
-        FURI_LOG_E(TAG, "FLASH->SR 0x%08X", FLASH->SR);
+        FURI_LOG_E(TAG, "FLASH->SR 0x%08lX", FLASH->SR);
         WRITE_REG(FLASH->SR, FURI_HAL_FLASH_SR_ERRORS);
         WRITE_REG(FLASH->SR, FURI_HAL_FLASH_SR_ERRORS);
     }
     }
 }
 }
@@ -514,10 +514,10 @@ bool furi_hal_flash_ob_set_word(size_t word_idx, const uint32_t value) {
 
 
     FURI_LOG_W(
     FURI_LOG_W(
         TAG,
         TAG,
-        "Setting OB reg %d for word %d (addr 0x%08X) to 0x%08X",
+        "Setting OB reg %d for word %d (addr 0x%08lX) to 0x%08lX",
         reg_def->ob_reg,
         reg_def->ob_reg,
         word_idx,
         word_idx,
-        reg_def->ob_register_address,
+        (uint32_t)reg_def->ob_register_address,
         value);
         value);
 
 
     /* 1. Clear OPTLOCK option lock bit with the clearing sequence */
     /* 1. Clear OPTLOCK option lock bit with the clearing sequence */

+ 2 - 2
firmware/targets/f7/furi_hal/furi_hal_memory.c

@@ -55,9 +55,9 @@ void furi_hal_memory_init() {
         memory->region[SRAM_B].size = sram2b_unprotected_size;
         memory->region[SRAM_B].size = sram2b_unprotected_size;
 
 
         FURI_LOG_I(
         FURI_LOG_I(
-            TAG, "SRAM2A: 0x%p, %d", memory->region[SRAM_A].start, memory->region[SRAM_A].size);
+            TAG, "SRAM2A: 0x%p, %ld", memory->region[SRAM_A].start, memory->region[SRAM_A].size);
         FURI_LOG_I(
         FURI_LOG_I(
-            TAG, "SRAM2B: 0x%p, %d", memory->region[SRAM_B].start, memory->region[SRAM_B].size);
+            TAG, "SRAM2B: 0x%p, %ld", memory->region[SRAM_B].start, memory->region[SRAM_B].size);
 
 
         if((memory->region[SRAM_A].size > 0) || (memory->region[SRAM_B].size > 0)) {
         if((memory->region[SRAM_A].size > 0) || (memory->region[SRAM_B].size > 0)) {
             if((memory->region[SRAM_A].size > 0)) {
             if((memory->region[SRAM_A].size > 0)) {

+ 3 - 3
firmware/targets/f7/furi_hal/furi_hal_power.c

@@ -569,13 +569,13 @@ void furi_hal_power_info_get(FuriHalPowerInfoCallback out, void* context) {
     furi_string_printf(value, "%u", furi_hal_power_get_bat_health_pct());
     furi_string_printf(value, "%u", furi_hal_power_get_bat_health_pct());
     out("battery_health", furi_string_get_cstr(value), false, context);
     out("battery_health", furi_string_get_cstr(value), false, context);
 
 
-    furi_string_printf(value, "%u", furi_hal_power_get_battery_remaining_capacity());
+    furi_string_printf(value, "%lu", furi_hal_power_get_battery_remaining_capacity());
     out("capacity_remain", furi_string_get_cstr(value), false, context);
     out("capacity_remain", furi_string_get_cstr(value), false, context);
 
 
-    furi_string_printf(value, "%u", furi_hal_power_get_battery_full_capacity());
+    furi_string_printf(value, "%lu", furi_hal_power_get_battery_full_capacity());
     out("capacity_full", furi_string_get_cstr(value), false, context);
     out("capacity_full", furi_string_get_cstr(value), false, context);
 
 
-    furi_string_printf(value, "%u", furi_hal_power_get_battery_design_capacity());
+    furi_string_printf(value, "%lu", furi_hal_power_get_battery_design_capacity());
     out("capacity_design", furi_string_get_cstr(value), true, context);
     out("capacity_design", furi_string_get_cstr(value), true, context);
 
 
     furi_string_free(value);
     furi_string_free(value);

+ 1 - 1
firmware/targets/f7/furi_hal/furi_hal_subghz.c

@@ -173,7 +173,7 @@ void furi_hal_subghz_load_custom_preset(uint8_t* preset_data) {
             i += 2;
             i += 2;
         }
         }
         for(uint8_t y = i; y < i + 10; y++) {
         for(uint8_t y = i; y < i + 10; y++) {
-            FURI_LOG_D(TAG, "PA[%lu]:  %02X", y, preset_data[y]);
+            FURI_LOG_D(TAG, "PA[%u]:  %02X", y, preset_data[y]);
         }
         }
     }
     }
 }
 }

+ 2 - 1
furi/core/log.h

@@ -51,7 +51,8 @@ void furi_log_init();
  * @param format 
  * @param format 
  * @param ... 
  * @param ... 
  */
  */
-void furi_log_print_format(FuriLogLevel level, const char* tag, const char* format, ...);
+void furi_log_print_format(FuriLogLevel level, const char* tag, const char* format, ...)
+    _ATTRIBUTE((__format__(__printf__, 3, 4)));
 
 
 /** Set log level
 /** Set log level
  *
  *

+ 6 - 3
furi/core/string.h

@@ -57,7 +57,8 @@ FuriString* furi_string_alloc_set_str(const char cstr_source[]);
  * @param ... 
  * @param ... 
  * @return FuriString* 
  * @return FuriString* 
  */
  */
-FuriString* furi_string_alloc_printf(const char format[], ...);
+FuriString* furi_string_alloc_printf(const char format[], ...)
+    _ATTRIBUTE((__format__(__printf__, 1, 2)));
 
 
 /**
 /**
  * @brief Allocate new FuriString and printf to it.
  * @brief Allocate new FuriString and printf to it.
@@ -214,7 +215,8 @@ void furi_string_set_n(FuriString* string, const FuriString* source, size_t offs
  * @param ... 
  * @param ... 
  * @return int 
  * @return int 
  */
  */
-int furi_string_printf(FuriString* string, const char format[], ...);
+int furi_string_printf(FuriString* string, const char format[], ...)
+    _ATTRIBUTE((__format__(__printf__, 2, 3)));
 
 
 /**
 /**
  * @brief Format in the string the given printf format
  * @brief Format in the string the given printf format
@@ -259,7 +261,8 @@ void furi_string_cat_str(FuriString* string_1, const char cstring_2[]);
  * @param ... 
  * @param ... 
  * @return int 
  * @return int 
  */
  */
-int furi_string_cat_printf(FuriString* string, const char format[], ...);
+int furi_string_cat_printf(FuriString* string, const char format[], ...)
+    _ATTRIBUTE((__format__(__printf__, 2, 3)));
 
 
 /**
 /**
  * @brief Append to the string the formatted string of the given printf format.
  * @brief Append to the string the formatted string of the given printf format.

+ 1 - 1
lib/lfrfid/lfrfid_raw_worker.c

@@ -338,7 +338,7 @@ static int32_t lfrfid_raw_emulate_worker_thread(void* thread_context) {
     }
     }
 
 
     if(data->ctx.overrun_count) {
     if(data->ctx.overrun_count) {
-        FURI_LOG_E(TAG_EMULATE, "overruns: %lu", data->ctx.overrun_count);
+        FURI_LOG_E(TAG_EMULATE, "overruns: %u", data->ctx.overrun_count);
     }
     }
 
 
     furi_stream_buffer_free(data->ctx.stream);
     furi_stream_buffer_free(data->ctx.stream);

+ 1 - 1
lib/lfrfid/protocols/protocol_gallagher.c

@@ -276,7 +276,7 @@ void protocol_gallagher_render_data(ProtocolGallagher* protocol, FuriString* res
     uint32_t card_id = bit_lib_get_bits_32(protocol->data, 32, 32);
     uint32_t card_id = bit_lib_get_bits_32(protocol->data, 32, 32);
 
 
     furi_string_cat_printf(result, "Region: %u, Issue Level: %u\r\n", rc, il);
     furi_string_cat_printf(result, "Region: %u, Issue Level: %u\r\n", rc, il);
-    furi_string_cat_printf(result, "FC: %u, C: %lu\r\n", fc, card_id);
+    furi_string_cat_printf(result, "FC: %lu, C: %lu\r\n", fc, card_id);
 };
 };
 
 
 const ProtocolBase protocol_gallagher = {
 const ProtocolBase protocol_gallagher = {

+ 1 - 1
lib/lfrfid/protocols/protocol_keri.c

@@ -218,7 +218,7 @@ void protocol_keri_render_data(ProtocolKeri* protocol, FuriString* result) {
     uint32_t fc = 0;
     uint32_t fc = 0;
     uint32_t cn = 0;
     uint32_t cn = 0;
     protocol_keri_descramble(&fc, &cn, &data);
     protocol_keri_descramble(&fc, &cn, &data);
-    furi_string_printf(result, "Internal ID: %u\r\nFC: %u, Card: %u\r\n", internal_id, fc, cn);
+    furi_string_printf(result, "Internal ID: %lu\r\nFC: %lu, Card: %lu\r\n", internal_id, fc, cn);
 }
 }
 
 
 bool protocol_keri_write_data(ProtocolKeri* protocol, void* data) {
 bool protocol_keri_write_data(ProtocolKeri* protocol, void* data) {

+ 1 - 1
lib/lfrfid/protocols/protocol_paradox.c

@@ -142,7 +142,7 @@ void protocol_paradox_render_data(ProtocolParadox* protocol, FuriString* result)
     uint16_t card_id = bit_lib_get_bits_16(decoded_data, 18, 16);
     uint16_t card_id = bit_lib_get_bits_16(decoded_data, 18, 16);
 
 
     furi_string_cat_printf(result, "Facility: %u\r\n", fc);
     furi_string_cat_printf(result, "Facility: %u\r\n", fc);
-    furi_string_cat_printf(result, "Card: %lu\r\n", card_id);
+    furi_string_cat_printf(result, "Card: %u\r\n", card_id);
     furi_string_cat_printf(result, "Data: ");
     furi_string_cat_printf(result, "Data: ");
     for(size_t i = 0; i < PARADOX_DECODED_DATA_SIZE; i++) {
     for(size_t i = 0; i < PARADOX_DECODED_DATA_SIZE; i++) {
         furi_string_cat_printf(result, "%02X", decoded_data[i]);
         furi_string_cat_printf(result, "%02X", decoded_data[i]);

+ 1 - 1
lib/lfrfid/protocols/protocol_pyramid.c

@@ -243,7 +243,7 @@ void protocol_pyramid_render_data(ProtocolPyramid* protocol, FuriString* result)
     uint8_t* decoded_data = protocol->data;
     uint8_t* decoded_data = protocol->data;
     uint8_t format_length = decoded_data[0];
     uint8_t format_length = decoded_data[0];
 
 
-    furi_string_cat_printf(result, "Format: 26\r\n", format_length);
+    furi_string_cat_printf(result, "Format: %d\r\n", format_length);
     if(format_length == 26) {
     if(format_length == 26) {
         uint8_t facility;
         uint8_t facility;
         bit_lib_copy_bits(&facility, 0, 8, decoded_data, 8);
         bit_lib_copy_bits(&facility, 0, 8, decoded_data, 8);

+ 1 - 1
lib/nfc/helpers/mf_classic_dict.c

@@ -87,7 +87,7 @@ MfClassicDict* mf_classic_dict_alloc(MfClassicDictType dict_type) {
         stream_rewind(dict->stream);
         stream_rewind(dict->stream);
 
 
         dict_loaded = true;
         dict_loaded = true;
-        FURI_LOG_I(TAG, "Loaded dictionary with %d keys", dict->total_keys);
+        FURI_LOG_I(TAG, "Loaded dictionary with %ld keys", dict->total_keys);
     } while(false);
     } while(false);
 
 
     if(!dict_loaded) {
     if(!dict_loaded) {

+ 1 - 1
lib/nfc/helpers/mfkey32.c

@@ -92,7 +92,7 @@ void mfkey32_set_callback(Mfkey32* instance, Mfkey32ParseDataCallback callback,
 
 
 static bool mfkey32_write_params(Mfkey32* instance, Mfkey32Params* params) {
 static bool mfkey32_write_params(Mfkey32* instance, Mfkey32Params* params) {
     FuriString* str = furi_string_alloc_printf(
     FuriString* str = furi_string_alloc_printf(
-        "Sec %d key %c cuid %08x nt0 %08x nr0 %08x ar0 %08x nt1 %08x nr1 %08x ar1 %08x\n",
+        "Sec %d key %c cuid %08lx nt0 %08lx nr0 %08lx ar0 %08lx nt1 %08lx nr1 %08lx ar1 %08lx\n",
         params->sector,
         params->sector,
         params->key == MfClassicKeyA ? 'A' : 'B',
         params->key == MfClassicKeyA ? 'A' : 'B',
         params->cuid,
         params->cuid,

+ 2 - 1
lib/nfc/nfc_worker.c

@@ -522,7 +522,8 @@ void nfc_worker_mf_classic_dict_attack(NfcWorker* nfc_worker) {
         return;
         return;
     }
     }
 
 
-    FURI_LOG_D(TAG, "Start Dictionary attack, Key Count %d", mf_classic_dict_get_total_keys(dict));
+    FURI_LOG_D(
+        TAG, "Start Dictionary attack, Key Count %ld", mf_classic_dict_get_total_keys(dict));
     for(size_t i = 0; i < total_sectors; i++) {
     for(size_t i = 0; i < total_sectors; i++) {
         FURI_LOG_I(TAG, "Sector %d", i);
         FURI_LOG_I(TAG, "Sector %d", i);
         nfc_worker->callback(NfcWorkerEventNewSector, nfc_worker->context);
         nfc_worker->callback(NfcWorkerEventNewSector, nfc_worker->context);

+ 1 - 1
lib/nfc/parsers/all_in_one.c

@@ -108,6 +108,6 @@ bool all_in_one_parser_parse(NfcDeviceData* dev_data) {
 
 
     // Format string for rides count
     // Format string for rides count
     furi_string_printf(
     furi_string_printf(
-        dev_data->parsed_data, "\e#All-In-One\nNumber: %u\nRides left: %u", serial, ride_count);
+        dev_data->parsed_data, "\e#All-In-One\nNumber: %lu\nRides left: %u", serial, ride_count);
     return true;
     return true;
 }
 }

+ 1 - 1
lib/nfc/parsers/plantain_4k_parser.c

@@ -132,7 +132,7 @@ bool plantain_4k_parser_parse(NfcDeviceData* dev_data) {
 
 
     furi_string_printf(
     furi_string_printf(
         dev_data->parsed_data,
         dev_data->parsed_data,
-        "\e#Plantain\nN:%s\nBalance:%d\n",
+        "\e#Plantain\nN:%s\nBalance:%ld\n",
         furi_string_get_cstr(card_number_str),
         furi_string_get_cstr(card_number_str),
         balance);
         balance);
     furi_string_free(card_number_str);
     furi_string_free(card_number_str);

+ 1 - 1
lib/nfc/parsers/plantain_parser.c

@@ -105,7 +105,7 @@ bool plantain_parser_parse(NfcDeviceData* dev_data) {
 
 
     furi_string_printf(
     furi_string_printf(
         dev_data->parsed_data,
         dev_data->parsed_data,
-        "\e#Plantain\nN:%s\nBalance:%d\n",
+        "\e#Plantain\nN:%s\nBalance:%ld\n",
         furi_string_get_cstr(card_number_str),
         furi_string_get_cstr(card_number_str),
         balance);
         balance);
     furi_string_free(card_number_str);
     furi_string_free(card_number_str);

+ 1 - 1
lib/nfc/parsers/two_cities.c

@@ -149,7 +149,7 @@ bool two_cities_parser_parse(NfcDeviceData* dev_data) {
 
 
     furi_string_printf(
     furi_string_printf(
         dev_data->parsed_data,
         dev_data->parsed_data,
-        "\e#Troika+Plantain\nPN: %s\nPB: %d rur.\nTN: %d\nTB: %d rur.\n",
+        "\e#Troika+Plantain\nPN: %s\nPB: %ld rur.\nTN: %ld\nTB: %d rur.\n",
         furi_string_get_cstr(card_number_str),
         furi_string_get_cstr(card_number_str),
         balance,
         balance,
         troika_number,
         troika_number,

+ 2 - 2
lib/nfc/protocols/mifare_classic.c

@@ -847,7 +847,7 @@ bool mf_classic_emulator(MfClassicEmulator* emulator, FuriHalNfcTxRxContext* tx_
 
 
             FURI_LOG_D(
             FURI_LOG_D(
                 TAG,
                 TAG,
-                "%08x key%c block %d nt/nr/ar: %08x %08x %08x",
+                "%08lx key%c block %d nt/nr/ar: %08lx %08lx %08lx",
                 emulator->cuid,
                 emulator->cuid,
                 access_key == MfClassicKeyA ? 'A' : 'B',
                 access_key == MfClassicKeyA ? 'A' : 'B',
                 sector_trailer_block,
                 sector_trailer_block,
@@ -858,7 +858,7 @@ bool mf_classic_emulator(MfClassicEmulator* emulator, FuriHalNfcTxRxContext* tx_
             crypto1_word(&emulator->crypto, nr, 1);
             crypto1_word(&emulator->crypto, nr, 1);
             uint32_t cardRr = ar ^ crypto1_word(&emulator->crypto, 0, 0);
             uint32_t cardRr = ar ^ crypto1_word(&emulator->crypto, 0, 0);
             if(cardRr != prng_successor(nonce, 64)) {
             if(cardRr != prng_successor(nonce, 64)) {
-                FURI_LOG_T(TAG, "Wrong AUTH! %08X != %08X", cardRr, prng_successor(nonce, 64));
+                FURI_LOG_T(TAG, "Wrong AUTH! %08lX != %08lX", cardRr, prng_successor(nonce, 64));
                 // Don't send NACK, as the tag doesn't send it
                 // Don't send NACK, as the tag doesn't send it
                 command_processed = true;
                 command_processed = true;
                 break;
                 break;

+ 4 - 4
lib/nfc/protocols/mifare_desfire.c

@@ -108,7 +108,7 @@ void mf_df_cat_version(MifareDesfireVersion* version, FuriString* out) {
 }
 }
 
 
 void mf_df_cat_free_mem(MifareDesfireFreeMemory* free_mem, FuriString* out) {
 void mf_df_cat_free_mem(MifareDesfireFreeMemory* free_mem, FuriString* out) {
-    furi_string_cat_printf(out, "freeMem %d\n", free_mem->bytes);
+    furi_string_cat_printf(out, "freeMem %ld\n", free_mem->bytes);
 }
 }
 
 
 void mf_df_cat_key_settings(MifareDesfireKeySettings* ks, FuriString* out) {
 void mf_df_cat_key_settings(MifareDesfireKeySettings* ks, FuriString* out) {
@@ -191,10 +191,10 @@ void mf_df_cat_file(MifareDesfireFile* file, FuriString* out) {
     case MifareDesfireFileTypeValue:
     case MifareDesfireFileTypeValue:
         size = 4;
         size = 4;
         furi_string_cat_printf(
         furi_string_cat_printf(
-            out, "lo %d hi %d\n", file->settings.value.lo_limit, file->settings.value.hi_limit);
+            out, "lo %ld hi %ld\n", file->settings.value.lo_limit, file->settings.value.hi_limit);
         furi_string_cat_printf(
         furi_string_cat_printf(
             out,
             out,
-            "limit %d enabled %d\n",
+            "limit %ld enabled %d\n",
             file->settings.value.limited_credit_value,
             file->settings.value.limited_credit_value,
             file->settings.value.limited_credit_enabled);
             file->settings.value.limited_credit_enabled);
         break;
         break;
@@ -203,7 +203,7 @@ void mf_df_cat_file(MifareDesfireFile* file, FuriString* out) {
         size = file->settings.record.size;
         size = file->settings.record.size;
         num = file->settings.record.cur;
         num = file->settings.record.cur;
         furi_string_cat_printf(out, "size %d\n", size);
         furi_string_cat_printf(out, "size %d\n", size);
-        furi_string_cat_printf(out, "num %d max %d\n", num, file->settings.record.max);
+        furi_string_cat_printf(out, "num %d max %ld\n", num, file->settings.record.max);
         break;
         break;
     }
     }
     uint8_t* data = file->contents;
     uint8_t* data = file->contents;

+ 2 - 2
lib/nfc/protocols/mifare_ultralight.c

@@ -193,7 +193,7 @@ bool mf_ultralight_authenticate(FuriHalNfcTxRxContext* tx_rx, uint32_t key, uint
             *pack = (tx_rx->rx_data[1] << 8) | tx_rx->rx_data[0];
             *pack = (tx_rx->rx_data[1] << 8) | tx_rx->rx_data[0];
         }
         }
 
 
-        FURI_LOG_I(TAG, "Auth success. Password: %08X. PACK: %04X", key, *pack);
+        FURI_LOG_I(TAG, "Auth success. Password: %08lX. PACK: %04X", key, *pack);
         authenticated = true;
         authenticated = true;
     } while(false);
     } while(false);
 
 
@@ -1050,7 +1050,7 @@ static void mf_ul_make_ascii_mirror(MfUltralightEmulator* emulator, FuriString*
             if(mirror_conf == MfUltralightMirrorUidCounter)
             if(mirror_conf == MfUltralightMirrorUidCounter)
                 furi_string_cat(str, uid_printed ? "x" : " ");
                 furi_string_cat(str, uid_printed ? "x" : " ");
 
 
-            furi_string_cat_printf(str, "%06X", emulator->data.counter[2]);
+            furi_string_cat_printf(str, "%06lX", emulator->data.counter[2]);
         }
         }
     }
     }
 }
 }

+ 7 - 4
lib/print/printf_tiny.h

@@ -34,6 +34,7 @@
 
 
 #include <stdarg.h>
 #include <stdarg.h>
 #include <stddef.h>
 #include <stddef.h>
+#include <stdio.h>
 
 
 #ifdef __cplusplus
 #ifdef __cplusplus
 extern "C" {
 extern "C" {
@@ -54,7 +55,7 @@ void _putchar(char character);
  * \param format A string that specifies the format of the output
  * \param format A string that specifies the format of the output
  * \return The number of characters that are written into the array, not counting the terminating null character
  * \return The number of characters that are written into the array, not counting the terminating null character
  */
  */
-int printf_(const char* format, ...);
+int printf_(const char* format, ...) _ATTRIBUTE((__format__(__printf__, 1, 2)));
 
 
 /**
 /**
  * Tiny sprintf implementation
  * Tiny sprintf implementation
@@ -63,7 +64,7 @@ int printf_(const char* format, ...);
  * \param format A string that specifies the format of the output
  * \param format A string that specifies the format of the output
  * \return The number of characters that are WRITTEN into the buffer, not counting the terminating null character
  * \return The number of characters that are WRITTEN into the buffer, not counting the terminating null character
  */
  */
-int sprintf_(char* buffer, const char* format, ...);
+int sprintf_(char* buffer, const char* format, ...) _ATTRIBUTE((__format__(__printf__, 2, 3)));
 
 
 /**
 /**
  * Tiny snprintf/vsnprintf implementation
  * Tiny snprintf/vsnprintf implementation
@@ -75,7 +76,8 @@ int sprintf_(char* buffer, const char* format, ...);
  *         null character. A value equal or larger than count indicates truncation. Only when the returned value
  *         null character. A value equal or larger than count indicates truncation. Only when the returned value
  *         is non-negative and less than count, the string has been completely written.
  *         is non-negative and less than count, the string has been completely written.
  */
  */
-int snprintf_(char* buffer, size_t count, const char* format, ...);
+int snprintf_(char* buffer, size_t count, const char* format, ...)
+    _ATTRIBUTE((__format__(__printf__, 3, 4)));
 int vsnprintf_(char* buffer, size_t count, const char* format, va_list va);
 int vsnprintf_(char* buffer, size_t count, const char* format, va_list va);
 
 
 /**
 /**
@@ -94,7 +96,8 @@ int vprintf_(const char* format, va_list va);
  * \param format A string that specifies the format of the output
  * \param format A string that specifies the format of the output
  * \return The number of characters that are sent to the output function, not counting the terminating null character
  * \return The number of characters that are sent to the output function, not counting the terminating null character
  */
  */
-int fctprintf(void (*out)(char character, void* arg), void* arg, const char* format, ...);
+int fctprintf(void (*out)(char character, void* arg), void* arg, const char* format, ...)
+    _ATTRIBUTE((__format__(__printf__, 3, 4)));
 
 
 #ifdef __cplusplus
 #ifdef __cplusplus
 }
 }

+ 1 - 1
lib/subghz/protocols/came_atomo.c

@@ -338,7 +338,7 @@ void subghz_protocol_decoder_came_atomo_get_string(void* context, FuriString* ou
         "%s %db\r\n"
         "%s %db\r\n"
         "Key:0x%lX%08lX\r\n"
         "Key:0x%lX%08lX\r\n"
         "Sn:0x%08lX  Btn:0x%01X\r\n"
         "Sn:0x%08lX  Btn:0x%01X\r\n"
-        "Cnt:0x%03X\r\n",
+        "Cnt:0x%03lX\r\n",
 
 
         instance->generic.protocol_name,
         instance->generic.protocol_name,
         instance->generic.data_count_bit,
         instance->generic.data_count_bit,

+ 1 - 1
lib/subghz/protocols/came_twee.c

@@ -457,7 +457,7 @@ void subghz_protocol_decoder_came_twee_get_string(void* context, FuriString* out
         output,
         output,
         "%s %db\r\n"
         "%s %db\r\n"
         "Key:0x%lX%08lX\r\n"
         "Key:0x%lX%08lX\r\n"
-        "Btn:%lX\r\n"
+        "Btn:%X\r\n"
         "DIP:" DIP_PATTERN "\r\n",
         "DIP:" DIP_PATTERN "\r\n",
         instance->generic.protocol_name,
         instance->generic.protocol_name,
         instance->generic.data_count_bit,
         instance->generic.data_count_bit,

+ 1 - 1
lib/subghz/protocols/doitrand.c

@@ -345,7 +345,7 @@ void subghz_protocol_decoder_doitrand_get_string(void* context, FuriString* outp
         output,
         output,
         "%s %dbit\r\n"
         "%s %dbit\r\n"
         "Key:%02lX%08lX\r\n"
         "Key:%02lX%08lX\r\n"
-        "Btn:%lX\r\n"
+        "Btn:%X\r\n"
         "DIP:" DIP_PATTERN "\r\n",
         "DIP:" DIP_PATTERN "\r\n",
         instance->generic.protocol_name,
         instance->generic.protocol_name,
         instance->generic.data_count_bit,
         instance->generic.data_count_bit,

+ 1 - 1
lib/subghz/protocols/faac_slh.c

@@ -222,7 +222,7 @@ void subghz_protocol_decoder_faac_slh_get_string(void* context, FuriString* outp
         "Key:%lX%08lX\r\n"
         "Key:%lX%08lX\r\n"
         "Fix:%08lX \r\n"
         "Fix:%08lX \r\n"
         "Hop:%08lX \r\n"
         "Hop:%08lX \r\n"
-        "Sn:%07lX Btn:%lX\r\n",
+        "Sn:%07lX Btn:%X\r\n",
         instance->generic.protocol_name,
         instance->generic.protocol_name,
         instance->generic.data_count_bit,
         instance->generic.data_count_bit,
         (uint32_t)(instance->generic.data >> 32),
         (uint32_t)(instance->generic.data >> 32),

+ 1 - 1
lib/subghz/protocols/gate_tx.c

@@ -325,7 +325,7 @@ void subghz_protocol_decoder_gate_tx_get_string(void* context, FuriString* outpu
         output,
         output,
         "%s %dbit\r\n"
         "%s %dbit\r\n"
         "Key:%06lX\r\n"
         "Key:%06lX\r\n"
-        "Sn:%05lX  Btn:%lX\r\n",
+        "Sn:%05lX  Btn:%X\r\n",
         instance->generic.protocol_name,
         instance->generic.protocol_name,
         instance->generic.data_count_bit,
         instance->generic.data_count_bit,
         (uint32_t)(instance->generic.data & 0xFFFFFF),
         (uint32_t)(instance->generic.data & 0xFFFFFF),

+ 1 - 1
lib/subghz/protocols/honeywell_wdb.c

@@ -385,7 +385,7 @@ void subghz_protocol_decoder_honeywell_wdb_get_string(void* context, FuriString*
         "Key:0x%lX%08lX\r\n"
         "Key:0x%lX%08lX\r\n"
         "Sn:0x%05lX\r\n"
         "Sn:0x%05lX\r\n"
         "DT:%s  Al:%s\r\n"
         "DT:%s  Al:%s\r\n"
-        "SK:%01lX R:%01lX LBat:%01lX\r\n",
+        "SK:%01X R:%01X LBat:%01X\r\n",
         instance->generic.protocol_name,
         instance->generic.protocol_name,
         instance->generic.data_count_bit,
         instance->generic.data_count_bit,
         (uint32_t)((instance->generic.data >> 32) & 0xFFFFFFFF),
         (uint32_t)((instance->generic.data >> 32) & 0xFFFFFFFF),

+ 1 - 1
lib/subghz/protocols/ido.c

@@ -221,7 +221,7 @@ void subghz_protocol_decoder_ido_get_string(void* context, FuriString* output) {
         "Key:0x%lX%08lX\r\n"
         "Key:0x%lX%08lX\r\n"
         "Fix:%06lX \r\n"
         "Fix:%06lX \r\n"
         "Hop:%06lX \r\n"
         "Hop:%06lX \r\n"
-        "Sn:%05lX Btn:%lX\r\n",
+        "Sn:%05lX Btn:%X\r\n",
         instance->generic.protocol_name,
         instance->generic.protocol_name,
         instance->generic.data_count_bit,
         instance->generic.data_count_bit,
         (uint32_t)(instance->generic.data >> 32),
         (uint32_t)(instance->generic.data >> 32),

+ 2 - 2
lib/subghz/protocols/keeloq.c

@@ -700,8 +700,8 @@ void subghz_protocol_decoder_keeloq_get_string(void* context, FuriString* output
         output,
         output,
         "%s %dbit\r\n"
         "%s %dbit\r\n"
         "Key:%08lX%08lX\r\n"
         "Key:%08lX%08lX\r\n"
-        "Fix:0x%08lX    Cnt:%04X\r\n"
-        "Hop:0x%08lX    Btn:%01lX\r\n"
+        "Fix:0x%08lX    Cnt:%04lX\r\n"
+        "Hop:0x%08lX    Btn:%01X\r\n"
         "MF:%s\r\n"
         "MF:%s\r\n"
         "Sn:0x%07lX \r\n",
         "Sn:0x%07lX \r\n",
         instance->generic.protocol_name,
         instance->generic.protocol_name,

+ 1 - 1
lib/subghz/protocols/kia.c

@@ -268,7 +268,7 @@ void subghz_protocol_decoder_kia_get_string(void* context, FuriString* output) {
         output,
         output,
         "%s %dbit\r\n"
         "%s %dbit\r\n"
         "Key:%08lX%08lX\r\n"
         "Key:%08lX%08lX\r\n"
-        "Sn:%07lX Btn:%lX Cnt:%04X\r\n",
+        "Sn:%07lX Btn:%X Cnt:%04lX\r\n",
         instance->generic.protocol_name,
         instance->generic.protocol_name,
         instance->generic.data_count_bit,
         instance->generic.data_count_bit,
         code_found_hi,
         code_found_hi,

+ 1 - 1
lib/subghz/protocols/magellen.c

@@ -432,7 +432,7 @@ void subghz_protocol_decoder_magellen_get_string(void* context, FuriString* outp
         output,
         output,
         "%s %dbit\r\n"
         "%s %dbit\r\n"
         "Key:0x%08lX\r\n"
         "Key:0x%08lX\r\n"
-        "Sn:%03d%03d, Event:0x%02X\r\n"
+        "Sn:%03ld%03ld, Event:0x%02X\r\n"
         "Stat:",
         "Stat:",
         instance->generic.protocol_name,
         instance->generic.protocol_name,
         instance->generic.data_count_bit,
         instance->generic.data_count_bit,

+ 1 - 1
lib/subghz/protocols/marantec.c

@@ -383,7 +383,7 @@ void subghz_protocol_decoder_marantec_get_string(void* context, FuriString* outp
         "%s %db\r\n"
         "%s %db\r\n"
         "Key:0x%lX%08lX\r\n"
         "Key:0x%lX%08lX\r\n"
         "Sn:0x%07lX \r\n"
         "Sn:0x%07lX \r\n"
-        "Btn:%lX\r\n",
+        "Btn:%X\r\n",
         instance->generic.protocol_name,
         instance->generic.protocol_name,
         instance->generic.data_count_bit,
         instance->generic.data_count_bit,
         (uint32_t)(instance->generic.data >> 32),
         (uint32_t)(instance->generic.data >> 32),

+ 2 - 2
lib/subghz/protocols/megacode.c

@@ -417,8 +417,8 @@ void subghz_protocol_decoder_megacode_get_string(void* context, FuriString* outp
         output,
         output,
         "%s %dbit\r\n"
         "%s %dbit\r\n"
         "Key:0x%06lX\r\n"
         "Key:0x%06lX\r\n"
-        "Sn:0x%04lX - %d\r\n"
-        "Facility:%X Btn:%X\r\n",
+        "Sn:0x%04lX - %ld\r\n"
+        "Facility:%lX Btn:%X\r\n",
         instance->generic.protocol_name,
         instance->generic.protocol_name,
         instance->generic.data_count_bit,
         instance->generic.data_count_bit,
         (uint32_t)instance->generic.data,
         (uint32_t)instance->generic.data,

+ 1 - 1
lib/subghz/protocols/nice_flor_s.c

@@ -368,7 +368,7 @@ void subghz_protocol_decoder_nice_flor_s_get_string(void* context, FuriString* o
         "%s %dbit\r\n"
         "%s %dbit\r\n"
         "Key:0x%lX%08lX\r\n"
         "Key:0x%lX%08lX\r\n"
         "Sn:%05lX\r\n"
         "Sn:%05lX\r\n"
-        "Cnt:%04X Btn:%02lX\r\n",
+        "Cnt:%04lX Btn:%02X\r\n",
         instance->generic.protocol_name,
         instance->generic.protocol_name,
         instance->generic.data_count_bit,
         instance->generic.data_count_bit,
         code_found_hi,
         code_found_hi,

+ 2 - 2
lib/subghz/protocols/oregon2.c

@@ -253,7 +253,7 @@ static void
         val = ((var_data >> 4) & 0xF) * 10 + ((var_data >> 8) & 0xF);
         val = ((var_data >> 4) & 0xF) * 10 + ((var_data >> 8) & 0xF);
         furi_string_cat_printf(
         furi_string_cat_printf(
             output,
             output,
-            "Temp: %s%d.%d C\r\n",
+            "Temp: %s%ld.%ld C\r\n",
             (var_data & 0xF) ? "-" : "+",
             (var_data & 0xF) ? "-" : "+",
             val,
             val,
             (uint32_t)(var_data >> 12) & 0xF);
             (uint32_t)(var_data >> 12) & 0xF);
@@ -286,7 +286,7 @@ void subghz_protocol_decoder_oregon2_get_string(void* context, FuriString* outpu
     furi_string_cat_printf(
     furi_string_cat_printf(
         output,
         output,
         "%s\r\n"
         "%s\r\n"
-        "ID: 0x%04lX, ch: %d%s, rc: 0x%02lX\r\n",
+        "ID: 0x%04lX, ch: %ld%s, rc: 0x%02lX\r\n",
         instance->generic.protocol_name,
         instance->generic.protocol_name,
         (uint32_t)sensor_id,
         (uint32_t)sensor_id,
         (uint32_t)(instance->generic.data >> 12) & 0xF,
         (uint32_t)(instance->generic.data >> 12) & 0xF,

+ 1 - 1
lib/subghz/protocols/phoenix_v2.c

@@ -329,7 +329,7 @@ void subghz_protocol_decoder_phoenix_v2_get_string(void* context, FuriString* ou
         "%s %dbit\r\n"
         "%s %dbit\r\n"
         "Key:%02lX%08lX\r\n"
         "Key:%02lX%08lX\r\n"
         "Sn:0x%07lX \r\n"
         "Sn:0x%07lX \r\n"
-        "Btn:%lX\r\n",
+        "Btn:%X\r\n",
         instance->generic.protocol_name,
         instance->generic.protocol_name,
         instance->generic.data_count_bit,
         instance->generic.data_count_bit,
         (uint32_t)(instance->generic.data >> 32) & 0xFFFFFFFF,
         (uint32_t)(instance->generic.data >> 32) & 0xFFFFFFFF,

+ 1 - 1
lib/subghz/protocols/princeton.c

@@ -364,7 +364,7 @@ void subghz_protocol_decoder_princeton_get_string(void* context, FuriString* out
         "Key:0x%08lX\r\n"
         "Key:0x%08lX\r\n"
         "Yek:0x%08lX\r\n"
         "Yek:0x%08lX\r\n"
         "Sn:0x%05lX Btn:%01X\r\n"
         "Sn:0x%05lX Btn:%01X\r\n"
-        "Te:%dus\r\n",
+        "Te:%ldus\r\n",
         instance->generic.protocol_name,
         instance->generic.protocol_name,
         instance->generic.data_count_bit,
         instance->generic.data_count_bit,
         (uint32_t)(instance->generic.data & 0xFFFFFF),
         (uint32_t)(instance->generic.data & 0xFFFFFF),

+ 1 - 1
lib/subghz/protocols/princeton_for_testing.c

@@ -94,7 +94,7 @@ void subghz_encoder_princeton_for_testing_print_log(void* context) {
         ((float)instance->time_high / (instance->time_high + instance->time_low)) * 100;
         ((float)instance->time_high / (instance->time_high + instance->time_low)) * 100;
     FURI_LOG_I(
     FURI_LOG_I(
         TAG "Encoder",
         TAG "Encoder",
-        "Radio tx_time=%dus  ON=%dus, OFF=%dus, DutyCycle=%d,%d%%",
+        "Radio tx_time=%ldus  ON=%ldus, OFF=%ldus, DutyCycle=%ld,%ld%%",
         instance->time_high + instance->time_low,
         instance->time_high + instance->time_low,
         instance->time_high,
         instance->time_high,
         instance->time_low,
         instance->time_low,

+ 1 - 1
lib/subghz/protocols/raw.c

@@ -115,7 +115,7 @@ bool subghz_protocol_raw_save_to_file_init(
         // Open file
         // Open file
         if(!flipper_format_file_open_always(
         if(!flipper_format_file_open_always(
                instance->flipper_file, furi_string_get_cstr(temp_str))) {
                instance->flipper_file, furi_string_get_cstr(temp_str))) {
-            FURI_LOG_E(TAG, "Unable to open file for write: %s", temp_str);
+            FURI_LOG_E(TAG, "Unable to open file for write: %s", furi_string_get_cstr(temp_str));
             break;
             break;
         }
         }
 
 

+ 1 - 1
lib/subghz/protocols/scher_khan.c

@@ -274,7 +274,7 @@ void subghz_protocol_decoder_scher_khan_get_string(void* context, FuriString* ou
         output,
         output,
         "%s %dbit\r\n"
         "%s %dbit\r\n"
         "Key:0x%lX%08lX\r\n"
         "Key:0x%lX%08lX\r\n"
-        "Sn:%07lX Btn:%lX Cnt:%04X\r\n"
+        "Sn:%07lX Btn:%X Cnt:%04lX\r\n"
         "Pt: %s\r\n",
         "Pt: %s\r\n",
         instance->generic.protocol_name,
         instance->generic.protocol_name,
         instance->generic.data_count_bit,
         instance->generic.data_count_bit,

+ 2 - 2
lib/subghz/protocols/secplus_v1.c

@@ -606,7 +606,7 @@ void subghz_protocol_decoder_secplus_v1_get_string(void* context, FuriString* ou
         furi_string_cat_printf(
         furi_string_cat_printf(
             output,
             output,
             "Sn:0x%08lX\r\n"
             "Sn:0x%08lX\r\n"
-            "Cnt:0x%03X\r\n"
+            "Cnt:0x%03lX\r\n"
             "Sw_id:0x%X\r\n",
             "Sw_id:0x%X\r\n",
             instance->generic.serial,
             instance->generic.serial,
             instance->generic.cnt,
             instance->generic.cnt,
@@ -625,7 +625,7 @@ void subghz_protocol_decoder_secplus_v1_get_string(void* context, FuriString* ou
         furi_string_cat_printf(
         furi_string_cat_printf(
             output,
             output,
             "Sn:0x%08lX\r\n"
             "Sn:0x%08lX\r\n"
-            "Cnt:0x%03X\r\n"
+            "Cnt:0x%03lX\r\n"
             "Sw_id:0x%X\r\n",
             "Sw_id:0x%X\r\n",
             instance->generic.serial,
             instance->generic.serial,
             instance->generic.cnt,
             instance->generic.cnt,

+ 1 - 1
lib/subghz/protocols/secplus_v2.c

@@ -821,7 +821,7 @@ void subghz_protocol_decoder_secplus_v2_get_string(void* context, FuriString* ou
         "Pk1:0x%lX%08lX\r\n"
         "Pk1:0x%lX%08lX\r\n"
         "Pk2:0x%lX%08lX\r\n"
         "Pk2:0x%lX%08lX\r\n"
         "Sn:0x%08lX  Btn:0x%01X\r\n"
         "Sn:0x%08lX  Btn:0x%01X\r\n"
-        "Cnt:0x%03X\r\n",
+        "Cnt:0x%03lX\r\n",
 
 
         instance->generic.protocol_name,
         instance->generic.protocol_name,
         instance->generic.data_count_bit,
         instance->generic.data_count_bit,

+ 1 - 1
lib/subghz/protocols/somfy_keytis.c

@@ -437,7 +437,7 @@ void subghz_protocol_decoder_somfy_keytis_get_string(void* context, FuriString*
         "%s %db\r\n"
         "%s %db\r\n"
         "%lX%08lX%06lX\r\n"
         "%lX%08lX%06lX\r\n"
         "Sn:0x%06lX \r\n"
         "Sn:0x%06lX \r\n"
-        "Cnt:0x%04X\r\n"
+        "Cnt:0x%04lX\r\n"
         "Btn:%s\r\n",
         "Btn:%s\r\n",
 
 
         instance->generic.protocol_name,
         instance->generic.protocol_name,

+ 1 - 1
lib/subghz/protocols/somfy_telis.c

@@ -374,7 +374,7 @@ void subghz_protocol_decoder_somfy_telis_get_string(void* context, FuriString* o
         "%s %db\r\n"
         "%s %db\r\n"
         "Key:0x%lX%08lX\r\n"
         "Key:0x%lX%08lX\r\n"
         "Sn:0x%06lX \r\n"
         "Sn:0x%06lX \r\n"
-        "Cnt:0x%04X\r\n"
+        "Cnt:0x%04lX\r\n"
         "Btn:%s\r\n",
         "Btn:%s\r\n",
 
 
         instance->generic.protocol_name,
         instance->generic.protocol_name,

+ 2 - 2
lib/subghz/protocols/star_line.c

@@ -373,8 +373,8 @@ void subghz_protocol_decoder_star_line_get_string(void* context, FuriString* out
         output,
         output,
         "%s %dbit\r\n"
         "%s %dbit\r\n"
         "Key:%08lX%08lX\r\n"
         "Key:%08lX%08lX\r\n"
-        "Fix:0x%08lX    Cnt:%04X\r\n"
-        "Hop:0x%08lX    Btn:%02lX\r\n"
+        "Fix:0x%08lX    Cnt:%04lX\r\n"
+        "Hop:0x%08lX    Btn:%02X\r\n"
         "MF:%s\r\n"
         "MF:%s\r\n"
         "Sn:0x%07lX \r\n",
         "Sn:0x%07lX \r\n",
         instance->generic.protocol_name,
         instance->generic.protocol_name,

+ 6 - 3
lib/toolbox/stream/stream.h

@@ -143,7 +143,8 @@ size_t stream_write_cstring(Stream* stream, const char* string);
  * @param ... 
  * @param ... 
  * @return size_t how many bytes was written
  * @return size_t how many bytes was written
  */
  */
-size_t stream_write_format(Stream* stream, const char* format, ...);
+size_t stream_write_format(Stream* stream, const char* format, ...)
+    _ATTRIBUTE((__format__(__printf__, 2, 3)));
 
 
 /**
 /**
  * Write formatted string to the stream, va_list version
  * Write formatted string to the stream, va_list version
@@ -200,7 +201,8 @@ bool stream_insert_cstring(Stream* stream, const char* string);
  * @return true if the operation was successful
  * @return true if the operation was successful
  * @return false on error
  * @return false on error
  */
  */
-bool stream_insert_format(Stream* stream, const char* format, ...);
+bool stream_insert_format(Stream* stream, const char* format, ...)
+    _ATTRIBUTE((__format__(__printf__, 2, 3)));
 
 
 /**
 /**
  * Insert formatted string to the stream, va_list version
  * Insert formatted string to the stream, va_list version
@@ -251,7 +253,8 @@ bool stream_delete_and_insert_cstring(Stream* stream, size_t delete_size, const
  * @return true if the operation was successful
  * @return true if the operation was successful
  * @return false on error
  * @return false on error
  */
  */
-bool stream_delete_and_insert_format(Stream* stream, size_t delete_size, const char* format, ...);
+bool stream_delete_and_insert_format(Stream* stream, size_t delete_size, const char* format, ...)
+    _ATTRIBUTE((__format__(__printf__, 3, 4)));
 
 
 /**
 /**
  * Delete N chars from the stream and insert formatted string to the stream, va_list version
  * Delete N chars from the stream and insert formatted string to the stream, va_list version