Merge remote-tracking branch 'origin/dev' into release-candidate
This commit is contained in:
		
						commit
						df6b81274b
					
				| @ -5,6 +5,7 @@ | |||||||
| #include <gui/modules/empty_screen.h> | #include <gui/modules/empty_screen.h> | ||||||
| #include <m-string.h> | #include <m-string.h> | ||||||
| #include <furi_hal_version.h> | #include <furi_hal_version.h> | ||||||
|  | #include <furi_hal_region.h> | ||||||
| #include <furi_hal_bt.h> | #include <furi_hal_bt.h> | ||||||
| 
 | 
 | ||||||
| typedef DialogMessageButton (*AboutDialogScreen)(DialogsApp* dialogs, DialogMessage* message); | typedef DialogMessageButton (*AboutDialogScreen)(DialogsApp* dialogs, DialogMessage* message); | ||||||
| @ -83,12 +84,13 @@ static DialogMessageButton hw_version_screen(DialogsApp* dialogs, DialogMessage* | |||||||
| 
 | 
 | ||||||
|     string_cat_printf( |     string_cat_printf( | ||||||
|         buffer, |         buffer, | ||||||
|         "%d.F%dB%dC%d %s %s\n", |         "%d.F%dB%dC%d %s:%s %s\n", | ||||||
|         furi_hal_version_get_hw_version(), |         furi_hal_version_get_hw_version(), | ||||||
|         furi_hal_version_get_hw_target(), |         furi_hal_version_get_hw_target(), | ||||||
|         furi_hal_version_get_hw_body(), |         furi_hal_version_get_hw_body(), | ||||||
|         furi_hal_version_get_hw_connect(), |         furi_hal_version_get_hw_connect(), | ||||||
|         furi_hal_version_get_hw_region_name(), |         furi_hal_version_get_hw_region_name(), | ||||||
|  |         furi_hal_region_get_name(), | ||||||
|         my_name ? my_name : "Unknown"); |         my_name ? my_name : "Unknown"); | ||||||
| 
 | 
 | ||||||
|     string_cat_printf(buffer, "Serial Number:\n"); |     string_cat_printf(buffer, "Serial Number:\n"); | ||||||
|  | |||||||
| @ -36,12 +36,13 @@ void desktop_debug_render(Canvas* canvas, void* model) { | |||||||
|         snprintf( |         snprintf( | ||||||
|             buffer, |             buffer, | ||||||
|             sizeof(buffer), |             sizeof(buffer), | ||||||
|             "%d.F%dB%dC%d %s %s", |             "%d.F%dB%dC%d %s:%s %s", | ||||||
|             furi_hal_version_get_hw_version(), |             furi_hal_version_get_hw_version(), | ||||||
|             furi_hal_version_get_hw_target(), |             furi_hal_version_get_hw_target(), | ||||||
|             furi_hal_version_get_hw_body(), |             furi_hal_version_get_hw_body(), | ||||||
|             furi_hal_version_get_hw_connect(), |             furi_hal_version_get_hw_connect(), | ||||||
|             furi_hal_version_get_hw_region_name(), |             furi_hal_version_get_hw_region_name(), | ||||||
|  |             furi_hal_region_get_name(), | ||||||
|             my_name ? my_name : "Unknown"); |             my_name ? my_name : "Unknown"); | ||||||
|         canvas_draw_str(canvas, 5, 19 + STATUS_BAR_Y_SHIFT, buffer); |         canvas_draw_str(canvas, 5, 19 + STATUS_BAR_Y_SHIFT, buffer); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -295,6 +295,13 @@ bool infrared_rename_current_remote(Infrared* infrared, const char* name) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void infrared_tx_start_signal(Infrared* infrared, InfraredSignal* signal) { | void infrared_tx_start_signal(Infrared* infrared, InfraredSignal* signal) { | ||||||
|  |     if(infrared->app_state.is_transmitting) { | ||||||
|  |         FURI_LOG_D(INFRARED_LOG_TAG, "Transmitter is already active"); | ||||||
|  |         return; | ||||||
|  |     } else { | ||||||
|  |         infrared->app_state.is_transmitting = true; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     if(infrared_signal_is_raw(signal)) { |     if(infrared_signal_is_raw(signal)) { | ||||||
|         InfraredRawSignal* raw = infrared_signal_get_raw_signal(signal); |         InfraredRawSignal* raw = infrared_signal_get_raw_signal(signal); | ||||||
|         infrared_worker_set_raw_signal(infrared->worker, raw->timings, raw->timings_size); |         infrared_worker_set_raw_signal(infrared->worker, raw->timings, raw->timings_size); | ||||||
| @ -304,8 +311,11 @@ void infrared_tx_start_signal(Infrared* infrared, InfraredSignal* signal) { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     DOLPHIN_DEED(DolphinDeedIrSend); |     DOLPHIN_DEED(DolphinDeedIrSend); | ||||||
|     infrared_worker_tx_start(infrared->worker); |  | ||||||
|     infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkStartSend); |     infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkStartSend); | ||||||
|  | 
 | ||||||
|  |     infrared_worker_tx_set_get_signal_callback( | ||||||
|  |         infrared->worker, infrared_worker_tx_get_signal_steady_callback, infrared); | ||||||
|  |     infrared_worker_tx_start(infrared->worker); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void infrared_tx_start_button_index(Infrared* infrared, size_t button_index) { | void infrared_tx_start_button_index(Infrared* infrared, size_t button_index) { | ||||||
| @ -324,7 +334,16 @@ void infrared_tx_start_received(Infrared* infrared) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void infrared_tx_stop(Infrared* infrared) { | void infrared_tx_stop(Infrared* infrared) { | ||||||
|  |     if(!infrared->app_state.is_transmitting) { | ||||||
|  |         FURI_LOG_D(INFRARED_LOG_TAG, "Transmitter is already stopped"); | ||||||
|  |         return; | ||||||
|  |     } else { | ||||||
|  |         infrared->app_state.is_transmitting = false; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     infrared_worker_tx_stop(infrared->worker); |     infrared_worker_tx_stop(infrared->worker); | ||||||
|  |     infrared_worker_tx_set_get_signal_callback(infrared->worker, NULL, NULL); | ||||||
|  | 
 | ||||||
|     infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkStop); |     infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkStop); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -43,6 +43,7 @@ | |||||||
| #define INFRARED_APP_EXTENSION ".ir" | #define INFRARED_APP_EXTENSION ".ir" | ||||||
| 
 | 
 | ||||||
| #define INFRARED_DEFAULT_REMOTE_NAME "Remote" | #define INFRARED_DEFAULT_REMOTE_NAME "Remote" | ||||||
|  | #define INFRARED_LOG_TAG "InfraredApp" | ||||||
| 
 | 
 | ||||||
| typedef enum { | typedef enum { | ||||||
|     InfraredButtonIndexNone = -1, |     InfraredButtonIndexNone = -1, | ||||||
| @ -63,6 +64,7 @@ typedef enum { | |||||||
| typedef struct { | typedef struct { | ||||||
|     bool is_learning_new_remote; |     bool is_learning_new_remote; | ||||||
|     bool is_debug_enabled; |     bool is_debug_enabled; | ||||||
|  |     bool is_transmitting; | ||||||
|     InfraredEditTarget edit_target : 8; |     InfraredEditTarget edit_target : 8; | ||||||
|     InfraredEditMode edit_mode : 8; |     InfraredEditMode edit_mode : 8; | ||||||
|     int32_t current_button_index; |     int32_t current_button_index; | ||||||
|  | |||||||
| @ -2,11 +2,6 @@ | |||||||
| 
 | 
 | ||||||
| #include <dolphin/dolphin.h> | #include <dolphin/dolphin.h> | ||||||
| 
 | 
 | ||||||
| typedef enum { |  | ||||||
|     InfraredSceneLearnSuccessStateIdle = 0, |  | ||||||
|     InfraredSceneLearnSuccessStateSending = 1, |  | ||||||
| } InfraredSceneLearnSuccessState; |  | ||||||
| 
 |  | ||||||
| static void | static void | ||||||
|     infrared_scene_learn_success_dialog_result_callback(DialogExResult result, void* context) { |     infrared_scene_learn_success_dialog_result_callback(DialogExResult result, void* context) { | ||||||
|     Infrared* infrared = context; |     Infrared* infrared = context; | ||||||
| @ -21,9 +16,6 @@ void infrared_scene_learn_success_on_enter(void* context) { | |||||||
|     DOLPHIN_DEED(DolphinDeedIrLearnSuccess); |     DOLPHIN_DEED(DolphinDeedIrLearnSuccess); | ||||||
|     infrared_play_notification_message(infrared, InfraredNotificationMessageGreenOn); |     infrared_play_notification_message(infrared, InfraredNotificationMessageGreenOn); | ||||||
| 
 | 
 | ||||||
|     infrared_worker_tx_set_get_signal_callback( |  | ||||||
|         infrared->worker, infrared_worker_tx_get_signal_steady_callback, context); |  | ||||||
| 
 |  | ||||||
|     if(infrared_signal_is_raw(signal)) { |     if(infrared_signal_is_raw(signal)) { | ||||||
|         InfraredRawSignal* raw = infrared_signal_get_raw_signal(signal); |         InfraredRawSignal* raw = infrared_signal_get_raw_signal(signal); | ||||||
|         dialog_ex_set_header(dialog_ex, "Unknown", 95, 10, AlignCenter, AlignCenter); |         dialog_ex_set_header(dialog_ex, "Unknown", 95, 10, AlignCenter, AlignCenter); | ||||||
| @ -63,57 +55,42 @@ void infrared_scene_learn_success_on_enter(void* context) { | |||||||
|     dialog_ex_set_context(dialog_ex, context); |     dialog_ex_set_context(dialog_ex, context); | ||||||
|     dialog_ex_enable_extended_events(dialog_ex); |     dialog_ex_enable_extended_events(dialog_ex); | ||||||
| 
 | 
 | ||||||
|     scene_manager_set_scene_state( |  | ||||||
|         infrared->scene_manager, InfraredSceneLearnSuccess, InfraredSceneLearnSuccessStateIdle); |  | ||||||
|     view_dispatcher_switch_to_view(infrared->view_dispatcher, InfraredViewDialogEx); |     view_dispatcher_switch_to_view(infrared->view_dispatcher, InfraredViewDialogEx); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool infrared_scene_learn_success_on_event(void* context, SceneManagerEvent event) { | bool infrared_scene_learn_success_on_event(void* context, SceneManagerEvent event) { | ||||||
|     Infrared* infrared = context; |     Infrared* infrared = context; | ||||||
|     SceneManager* scene_manager = infrared->scene_manager; |     SceneManager* scene_manager = infrared->scene_manager; | ||||||
|     uint32_t scene_state = scene_manager_get_scene_state(scene_manager, InfraredSceneLearnSuccess); |     const bool is_transmitter_idle = !infrared->app_state.is_transmitting; | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
|     if(event.type == SceneManagerEventTypeTick) { |     if(event.type == SceneManagerEventTypeTick) { | ||||||
|         if(scene_state == InfraredSceneLearnSuccessStateIdle) { |         if(is_transmitter_idle) { | ||||||
|             infrared_play_notification_message(infrared, InfraredNotificationMessageGreenOn); |             infrared_play_notification_message(infrared, InfraredNotificationMessageGreenOn); | ||||||
|         } |         } | ||||||
|         consumed = true; |         consumed = true; | ||||||
|     } else if(event.type == SceneManagerEventTypeBack) { |     } else if(event.type == SceneManagerEventTypeBack) { | ||||||
|         if(scene_state == InfraredSceneLearnSuccessStateIdle) { |         if(is_transmitter_idle) { | ||||||
|             scene_manager_next_scene(scene_manager, InfraredSceneAskBack); |             scene_manager_next_scene(scene_manager, InfraredSceneAskBack); | ||||||
|         } |         } | ||||||
|         consumed = true; |         consumed = true; | ||||||
|     } else if(event.type == SceneManagerEventTypeCustom) { |     } else if(event.type == SceneManagerEventTypeCustom) { | ||||||
|         if(event.event == DialogExResultLeft) { |         if(event.event == DialogExResultLeft) { | ||||||
|             if(scene_state == InfraredSceneLearnSuccessStateIdle) { |             if(is_transmitter_idle) { | ||||||
|                 scene_manager_next_scene(scene_manager, InfraredSceneAskRetry); |                 scene_manager_next_scene(scene_manager, InfraredSceneAskRetry); | ||||||
|             } |             } | ||||||
|             consumed = true; |             consumed = true; | ||||||
|         } else if(event.event == DialogExResultRight) { |         } else if(event.event == DialogExResultRight) { | ||||||
|             if(scene_state == InfraredSceneLearnSuccessStateIdle) { |             if(is_transmitter_idle) { | ||||||
|                 scene_manager_next_scene(scene_manager, InfraredSceneLearnEnterName); |                 scene_manager_next_scene(scene_manager, InfraredSceneLearnEnterName); | ||||||
|             } |             } | ||||||
|             consumed = true; |             consumed = true; | ||||||
|         } else if(event.event == DialogExPressCenter) { |         } else if(event.event == DialogExPressCenter) { | ||||||
|             if(scene_state == InfraredSceneLearnSuccessStateIdle) { |             infrared_tx_start_received(infrared); | ||||||
|                 scene_manager_set_scene_state( |  | ||||||
|                     scene_manager, |  | ||||||
|                     InfraredSceneLearnSuccess, |  | ||||||
|                     InfraredSceneLearnSuccessStateSending); |  | ||||||
|                 infrared_tx_start_received(infrared); |  | ||||||
|                 infrared_play_notification_message( |  | ||||||
|                     infrared, InfraredNotificationMessageBlinkStartSend); |  | ||||||
|             } |  | ||||||
|             consumed = true; |             consumed = true; | ||||||
|         } else if(event.event == DialogExReleaseCenter) { |         } else if(event.event == DialogExReleaseCenter) { | ||||||
|             if(scene_state == InfraredSceneLearnSuccessStateSending) { |             infrared_tx_stop(infrared); | ||||||
|                 scene_manager_set_scene_state( |             infrared_play_notification_message(infrared, InfraredNotificationMessageGreenOff); | ||||||
|                     scene_manager, InfraredSceneLearnSuccess, InfraredSceneLearnSuccessStateIdle); |  | ||||||
|                 infrared_tx_stop(infrared); |  | ||||||
|                 infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkStop); |  | ||||||
|                 infrared_play_notification_message(infrared, InfraredNotificationMessageGreenOff); |  | ||||||
|             } |  | ||||||
|             consumed = true; |             consumed = true; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -123,9 +100,5 @@ bool infrared_scene_learn_success_on_event(void* context, SceneManagerEvent even | |||||||
| 
 | 
 | ||||||
| void infrared_scene_learn_success_on_exit(void* context) { | void infrared_scene_learn_success_on_exit(void* context) { | ||||||
|     Infrared* infrared = context; |     Infrared* infrared = context; | ||||||
|     InfraredWorker* worker = infrared->worker; |  | ||||||
|     dialog_ex_reset(infrared->dialog_ex); |     dialog_ex_reset(infrared->dialog_ex); | ||||||
|     infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkStop); |  | ||||||
|     infrared_play_notification_message(infrared, InfraredNotificationMessageGreenOff); |  | ||||||
|     infrared_worker_tx_set_get_signal_callback(worker, NULL, NULL); |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -31,9 +31,6 @@ void infrared_scene_remote_on_enter(void* context) { | |||||||
|     ButtonMenu* button_menu = infrared->button_menu; |     ButtonMenu* button_menu = infrared->button_menu; | ||||||
|     SceneManager* scene_manager = infrared->scene_manager; |     SceneManager* scene_manager = infrared->scene_manager; | ||||||
| 
 | 
 | ||||||
|     infrared_worker_tx_set_get_signal_callback( |  | ||||||
|         infrared->worker, infrared_worker_tx_get_signal_steady_callback, infrared); |  | ||||||
| 
 |  | ||||||
|     size_t button_count = infrared_remote_get_button_count(remote); |     size_t button_count = infrared_remote_get_button_count(remote); | ||||||
|     for(size_t i = 0; i < button_count; ++i) { |     for(size_t i = 0; i < button_count; ++i) { | ||||||
|         InfraredRemoteButton* button = infrared_remote_get_button(remote, i); |         InfraredRemoteButton* button = infrared_remote_get_button(remote, i); | ||||||
| @ -73,12 +70,17 @@ void infrared_scene_remote_on_enter(void* context) { | |||||||
| bool infrared_scene_remote_on_event(void* context, SceneManagerEvent event) { | bool infrared_scene_remote_on_event(void* context, SceneManagerEvent event) { | ||||||
|     Infrared* infrared = context; |     Infrared* infrared = context; | ||||||
|     SceneManager* scene_manager = infrared->scene_manager; |     SceneManager* scene_manager = infrared->scene_manager; | ||||||
|  |     const bool is_transmitter_idle = !infrared->app_state.is_transmitting; | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
|     if(event.type == SceneManagerEventTypeBack) { |     if(event.type == SceneManagerEventTypeBack) { | ||||||
|         const uint32_t possible_scenes[] = {InfraredSceneRemoteList, InfraredSceneStart}; |         if(is_transmitter_idle) { | ||||||
|         consumed = scene_manager_search_and_switch_to_previous_scene_one_of( |             const uint32_t possible_scenes[] = {InfraredSceneRemoteList, InfraredSceneStart}; | ||||||
|             scene_manager, possible_scenes, COUNT_OF(possible_scenes)); |             consumed = scene_manager_search_and_switch_to_previous_scene_one_of( | ||||||
|  |                 scene_manager, possible_scenes, COUNT_OF(possible_scenes)); | ||||||
|  |         } else { | ||||||
|  |             consumed = true; | ||||||
|  |         } | ||||||
|     } else if(event.type == SceneManagerEventTypeCustom) { |     } else if(event.type == SceneManagerEventTypeCustom) { | ||||||
|         const uint16_t custom_type = infrared_custom_event_get_type(event.event); |         const uint16_t custom_type = infrared_custom_event_get_type(event.event); | ||||||
|         const int16_t button_index = infrared_custom_event_get_value(event.event); |         const int16_t button_index = infrared_custom_event_get_value(event.event); | ||||||
| @ -92,14 +94,19 @@ bool infrared_scene_remote_on_event(void* context, SceneManagerEvent event) { | |||||||
|             consumed = true; |             consumed = true; | ||||||
|         } else if(custom_type == InfraredCustomEventTypeMenuSelected) { |         } else if(custom_type == InfraredCustomEventTypeMenuSelected) { | ||||||
|             furi_assert(button_index < 0); |             furi_assert(button_index < 0); | ||||||
|             scene_manager_set_scene_state( |             if(is_transmitter_idle) { | ||||||
|                 scene_manager, InfraredSceneRemote, (unsigned)button_index); |                 scene_manager_set_scene_state( | ||||||
|             if(button_index == ButtonIndexPlus) { |                     scene_manager, InfraredSceneRemote, (unsigned)button_index); | ||||||
|                 infrared->app_state.is_learning_new_remote = false; |                 if(button_index == ButtonIndexPlus) { | ||||||
|                 scene_manager_next_scene(scene_manager, InfraredSceneLearn); |                     infrared->app_state.is_learning_new_remote = false; | ||||||
|                 consumed = true; |                     scene_manager_next_scene(scene_manager, InfraredSceneLearn); | ||||||
|             } else if(button_index == ButtonIndexEdit) { |                     consumed = true; | ||||||
|                 scene_manager_next_scene(scene_manager, InfraredSceneEdit); |                 } else if(button_index == ButtonIndexEdit) { | ||||||
|  |                     scene_manager_next_scene(scene_manager, InfraredSceneEdit); | ||||||
|  |                     consumed = true; | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |             } else { | ||||||
|                 consumed = true; |                 consumed = true; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @ -110,7 +117,5 @@ bool infrared_scene_remote_on_event(void* context, SceneManagerEvent event) { | |||||||
| 
 | 
 | ||||||
| void infrared_scene_remote_on_exit(void* context) { | void infrared_scene_remote_on_exit(void* context) { | ||||||
|     Infrared* infrared = context; |     Infrared* infrared = context; | ||||||
|     infrared_tx_stop(infrared); |  | ||||||
|     infrared_worker_tx_set_get_signal_callback(infrared->worker, NULL, NULL); |  | ||||||
|     button_menu_reset(infrared->button_menu); |     button_menu_reset(infrared->button_menu); | ||||||
| } | } | ||||||
|  | |||||||
| @ -44,8 +44,6 @@ bool infrared_scene_rpc_on_event(void* context, SceneManagerEvent event) { | |||||||
|             if(arg && (state == InfraredRpcStateIdle)) { |             if(arg && (state == InfraredRpcStateIdle)) { | ||||||
|                 string_set_str(infrared->file_path, arg); |                 string_set_str(infrared->file_path, arg); | ||||||
|                 result = infrared_remote_load(infrared->remote, infrared->file_path); |                 result = infrared_remote_load(infrared->remote, infrared->file_path); | ||||||
|                 infrared_worker_tx_set_get_signal_callback( |  | ||||||
|                     infrared->worker, infrared_worker_tx_get_signal_steady_callback, infrared); |  | ||||||
|                 if(result) { |                 if(result) { | ||||||
|                     scene_manager_set_scene_state( |                     scene_manager_set_scene_state( | ||||||
|                         infrared->scene_manager, InfraredSceneRpc, InfraredRpcStateLoaded); |                         infrared->scene_manager, InfraredSceneRpc, InfraredRpcStateLoaded); | ||||||
|  | |||||||
| @ -75,7 +75,10 @@ void furi_hal_clock_init() { | |||||||
|         LL_EXTI_LINE_18); /* Why? Because that's why. See RM0434, Table 61. CPU1 vector table. */ |         LL_EXTI_LINE_18); /* Why? Because that's why. See RM0434, Table 61. CPU1 vector table. */ | ||||||
|     LL_EXTI_EnableRisingTrig_0_31(LL_EXTI_LINE_18); |     LL_EXTI_EnableRisingTrig_0_31(LL_EXTI_LINE_18); | ||||||
|     LL_RCC_EnableIT_LSECSS(); |     LL_RCC_EnableIT_LSECSS(); | ||||||
|     LL_RCC_LSE_EnableCSS(); |     /* ES0394, extended case of 2.2.2 */ | ||||||
|  |     if(!LL_RCC_IsActiveFlag_BORRST()) { | ||||||
|  |         LL_RCC_LSE_EnableCSS(); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     /* Main PLL configuration and activation */ |     /* Main PLL configuration and activation */ | ||||||
|     LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 8, LL_RCC_PLLR_DIV_2); |     LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 8, LL_RCC_PLLR_DIV_2); | ||||||
|  | |||||||
| @ -262,6 +262,8 @@ const char* furi_hal_version_get_hw_region_name() { | |||||||
|         return "R02"; |         return "R02"; | ||||||
|     case FuriHalVersionRegionJp: |     case FuriHalVersionRegionJp: | ||||||
|         return "R03"; |         return "R03"; | ||||||
|  |     case FuriHalVersionRegionWorld: | ||||||
|  |         return "R04"; | ||||||
|     } |     } | ||||||
|     return "R??"; |     return "R??"; | ||||||
| } | } | ||||||
|  | |||||||
| @ -41,6 +41,7 @@ typedef enum { | |||||||
|     FuriHalVersionRegionEuRu = 0x01, |     FuriHalVersionRegionEuRu = 0x01, | ||||||
|     FuriHalVersionRegionUsCaAu = 0x02, |     FuriHalVersionRegionUsCaAu = 0x02, | ||||||
|     FuriHalVersionRegionJp = 0x03, |     FuriHalVersionRegionJp = 0x03, | ||||||
|  |     FuriHalVersionRegionWorld = 0x04, | ||||||
| } FuriHalVersionRegion; | } FuriHalVersionRegion; | ||||||
| 
 | 
 | ||||||
| /** Device Display */ | /** Device Display */ | ||||||
|  | |||||||
| @ -31,6 +31,7 @@ if not "%REAL_TOOLCHAIN_VERSION%" == "%FLIPPER_TOOLCHAIN_VERSION%" ( | |||||||
| 
 | 
 | ||||||
| set "HOME=%USERPROFILE%" | set "HOME=%USERPROFILE%" | ||||||
| set "PYTHONHOME=%FBT_TOOLCHAIN_ROOT%\python" | set "PYTHONHOME=%FBT_TOOLCHAIN_ROOT%\python" | ||||||
|  | set "PYTHONPATH=" | ||||||
| set "PATH=%FBT_TOOLCHAIN_ROOT%\python;%FBT_TOOLCHAIN_ROOT%\bin;%FBT_TOOLCHAIN_ROOT%\protoc\bin;%FBT_TOOLCHAIN_ROOT%\openocd\bin;%PATH%" | set "PATH=%FBT_TOOLCHAIN_ROOT%\python;%FBT_TOOLCHAIN_ROOT%\bin;%FBT_TOOLCHAIN_ROOT%\protoc\bin;%FBT_TOOLCHAIN_ROOT%\openocd\bin;%PATH%" | ||||||
| set "PROMPT=(fbt) %PROMPT%" | set "PROMPT=(fbt) %PROMPT%" | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Aleksandr Kutuzov
						Aleksandr Kutuzov