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

Fixed furi_assert fail for view dispatcher custom callback set function

Sandro Kalatozishvili 2 лет назад
Родитель
Сommit
c26ea5ca18
5 измененных файлов с 27 добавлено и 22 удалено
  1. 2 1
      deploy.sh
  2. 1 1
      xremote.h
  3. 8 2
      xremote_learn.c
  4. 14 16
      xremote_signal.c
  5. 2 2
      xremote_signal.h

+ 2 - 1
deploy.sh

@@ -4,6 +4,7 @@
 
 # Change it according to the root path of the used firmware
 FLIPPER_FIRMWARE="/opt/flipper/firmwares/unleashed-firmware"
+#FLIPPER_FIRMWARE="/opt/flipper/firmwares/flipperzero-firmware"
 
 # Private variables
 XREMOTE_PROJ_PATH=$(dirname $(readlink -f "$0"))
@@ -26,4 +27,4 @@ for arg in "$@"; do
     if [[ $arg == "--run" || $arg == "-r" ]]; then
         [ $DEPLOY_DONE -eq 1 ] && sudo qflipper
     fi
-done
+done

+ 1 - 1
xremote.h

@@ -10,6 +10,6 @@
 
 #define XREMOTE_VERSION_MAJOR 1
 #define XREMOTE_VERSION_MINOR 0
-#define XREMOTE_BUILD_NUMBER 4
+#define XREMOTE_BUILD_NUMBER 5
 
 void xremote_get_version(char* version, size_t length);

+ 8 - 2
xremote_learn.c

@@ -255,6 +255,12 @@ static void xremote_learn_finish(XRemoteLearnContext* learn_ctx) {
     xremote_learn_switch_to_view(learn_ctx, XRemoteViewSubmenu);
 }
 
+static bool xremote_learn_custom_event_dummy_callback(void* context, uint32_t event) {
+    UNUSED(context);
+    UNUSED(event);
+    return true;
+}
+
 static bool xremote_learn_custom_event_callback(void* context, uint32_t event) {
     xremote_app_assert(context, false);
     XRemoteLearnContext* learn_ctx = context;
@@ -363,8 +369,8 @@ static void xremote_learn_context_free(XRemoteLearnContext* learn_ctx) {
     xremote_learn_exit_dialog_free(learn_ctx);
 
     ViewDispatcher* view_disp = learn_ctx->app_ctx->view_dispatcher;
-    view_dispatcher_set_custom_event_callback(view_disp, NULL);
-    view_dispatcher_set_event_callback_context(view_disp, NULL);
+    view_dispatcher_set_custom_event_callback(
+        view_disp, xremote_learn_custom_event_dummy_callback);
 
     view_dispatcher_remove_view(view_disp, XRemoteViewTextInput);
     text_input_free(learn_ctx->text_input);

+ 14 - 16
xremote_signal.c

@@ -91,34 +91,32 @@ void xremote_signal_receiver_set_rx_callback(
     rx_ctx->rx_callback = rx_callback;
 }
 
-void xremote_signal_receiver_start(XRemoteSignalReceiver* rx_ctx) {
-    xremote_app_assert_void((rx_ctx && rx_ctx->worker && !rx_ctx->started));
+void xremote_signal_receiver_attach(XRemoteSignalReceiver* rx_ctx) {
+    xremote_app_assert_void((rx_ctx && rx_ctx->worker));
     infrared_worker_rx_set_received_signal_callback(
-        rx_ctx->worker, xremote_signal_receiver_rx_callback, (void*)rx_ctx);
+        rx_ctx->worker, xremote_signal_receiver_rx_callback, rx_ctx);
+}
 
+void xremote_signal_receiver_detach(XRemoteSignalReceiver* rx_ctx) {
+    xremote_app_assert_void((rx_ctx && rx_ctx->worker));
+    infrared_worker_rx_set_received_signal_callback(rx_ctx->worker, NULL, NULL);
+}
+
+void xremote_signal_receiver_start(XRemoteSignalReceiver* rx_ctx) {
+    xremote_app_assert_void((rx_ctx && !rx_ctx->started));
+    xremote_signal_receiver_attach(rx_ctx);
     infrared_worker_rx_start(rx_ctx->worker);
     xremote_app_notification_blink(rx_ctx->notifications);
     rx_ctx->started = true;
 }
 
 void xremote_signal_receiver_stop(XRemoteSignalReceiver* rx_ctx) {
-    xremote_app_assert_void((rx_ctx && rx_ctx->worker && rx_ctx->started));
-    infrared_worker_rx_set_received_signal_callback(rx_ctx->worker, NULL, NULL);
+    xremote_app_assert_void((rx_ctx && rx_ctx->started));
+    xremote_signal_receiver_detach(rx_ctx);
     infrared_worker_rx_stop(rx_ctx->worker);
     rx_ctx->started = false;
 }
 
-void xremote_signal_receiver_pause(XRemoteSignalReceiver* rx_ctx) {
-    xremote_app_assert_void((rx_ctx && rx_ctx->worker));
-    infrared_worker_rx_set_received_signal_callback(rx_ctx->worker, NULL, NULL);
-}
-
-void xremote_signal_receiver_resume(XRemoteSignalReceiver* rx_ctx) {
-    xremote_app_assert_void((rx_ctx && rx_ctx->worker));
-    infrared_worker_rx_set_received_signal_callback(
-        rx_ctx->worker, xremote_signal_receiver_rx_callback, (void*)rx_ctx);
-}
-
 InfraredSignal* xremote_signal_receiver_get_signal(XRemoteSignalReceiver* rx_ctx) {
     xremote_app_assert(rx_ctx, NULL);
     return rx_ctx->signal;

+ 2 - 2
xremote_signal.h

@@ -29,5 +29,5 @@ InfraredSignal* xremote_signal_receiver_get_signal(XRemoteSignalReceiver* rx_ctx
 void xremote_signal_receiver_start(XRemoteSignalReceiver* rx_ctx);
 void xremote_signal_receiver_stop(XRemoteSignalReceiver* rx_ctx);
 
-void xremote_signal_receiver_pause(XRemoteSignalReceiver* rx_ctx);
-void xremote_signal_receiver_resume(XRemoteSignalReceiver* rx_ctx);
+void xremote_signal_receiver_detach(XRemoteSignalReceiver* rx_ctx);
+void xremote_signal_receiver_attach(XRemoteSignalReceiver* rx_ctx);