فهرست منبع

i2cTools: Mutex, icons and name

Willy-JL 2 سال پیش
والد
کامیت
3850ec681d

+ 1 - 1
i2ctools/application.fam

@@ -1,6 +1,6 @@
 App(
     appid="i2ctools",
-    name="i2c Tools",
+    name="[I2C] i2c Tools",
     apptype=FlipperAppType.EXTERNAL,
     entry_point="i2ctools_app",
     cdefines=["APP_I2CTOOLS"],

+ 138 - 131
i2ctools/i2ctools.c

@@ -1,10 +1,9 @@
 #include "i2ctools_i.h"
 
 void i2ctools_draw_callback(Canvas* canvas, void* ctx) {
+    furi_assert(ctx);
     i2cTools* i2ctools = ctx;
-    if(furi_mutex_acquire(i2ctools->mutex, 200) != FuriStatusOk) {
-        return;
-    }
+    furi_mutex_acquire(i2ctools->mutex, FuriWaitForever);
 
     switch(i2ctools->main_view->current_view) {
     case MAIN_VIEW:
@@ -46,6 +45,11 @@ int32_t i2ctools_app(void* p) {
     // Alloc i2ctools
     i2cTools* i2ctools = malloc(sizeof(i2cTools));
     i2ctools->mutex = furi_mutex_alloc(FuriMutexTypeNormal);
+    if(!i2ctools->mutex) {
+        FURI_LOG_E(APP_NAME, "cannot create mutex\r\n");
+        free(i2ctools);
+        return -1;
+    }
 
     // Alloc viewport
     i2ctools->view_port = view_port_alloc();
@@ -69,143 +73,145 @@ int32_t i2ctools_app(void* p) {
     // Share scanner with sender
     i2ctools->sender->scanner = i2ctools->scanner;
 
-    while(furi_message_queue_get(event_queue, &event, FuriWaitForever) == FuriStatusOk) {
-        // Back
-        if(event.key == InputKeyBack && event.type == InputTypeRelease) {
-            if(i2ctools->main_view->current_view == MAIN_VIEW) {
-                break;
-            } else {
-                if(i2ctools->main_view->current_view == SNIFF_VIEW) {
-                    stop_interrupts();
-                    i2ctools->sniffer->started = false;
-                    i2ctools->sniffer->state = I2C_BUS_FREE;
-                }
-                i2ctools->main_view->current_view = MAIN_VIEW;
-            }
-        }
-        // Up
-        else if(event.key == InputKeyUp && event.type == InputTypeRelease) {
-            if(i2ctools->main_view->current_view == MAIN_VIEW) {
-                if((i2ctools->main_view->menu_index > SCAN_VIEW)) {
-                    i2ctools->main_view->menu_index--;
-                }
-            } else if(i2ctools->main_view->current_view == SCAN_VIEW) {
-                if(i2ctools->scanner->menu_index > 0) {
-                    i2ctools->scanner->menu_index--;
-                }
-            } else if(i2ctools->main_view->current_view == SNIFF_VIEW) {
-                if(i2ctools->sniffer->row_index > 0) {
-                    i2ctools->sniffer->row_index--;
-                }
-            } else if(i2ctools->main_view->current_view == SEND_VIEW) {
-                if(i2ctools->sender->value < 0xFF) {
-                    i2ctools->sender->value++;
-                    i2ctools->sender->sended = false;
-                }
-            }
-        }
-        // Long Up
-        else if(
-            event.key == InputKeyUp &&
-            (event.type == InputTypeLong || event.type == InputTypeRepeat)) {
-            if(i2ctools->main_view->current_view == SCAN_VIEW) {
-                if(i2ctools->scanner->menu_index > 5) {
-                    i2ctools->scanner->menu_index -= 5;
-                }
-            } else if(i2ctools->main_view->current_view == SEND_VIEW) {
-                if(i2ctools->sender->value < 0xF9) {
-                    i2ctools->sender->value += 5;
-                    i2ctools->sender->sended = false;
-                }
-            } else if(i2ctools->main_view->current_view == SNIFF_VIEW) {
-                if(i2ctools->sniffer->row_index > 5) {
-                    i2ctools->sniffer->row_index -= 5;
+    while(1) {
+        if(furi_message_queue_get(event_queue, &event, 100) == FuriStatusOk) {
+            // Back
+            if(event.key == InputKeyBack && event.type == InputTypeRelease) {
+                if(i2ctools->main_view->current_view == MAIN_VIEW) {
+                    break;
                 } else {
-                    i2ctools->sniffer->row_index = 0;
+                    if(i2ctools->main_view->current_view == SNIFF_VIEW) {
+                        stop_interrupts();
+                        i2ctools->sniffer->started = false;
+                        i2ctools->sniffer->state = I2C_BUS_FREE;
+                    }
+                    i2ctools->main_view->current_view = MAIN_VIEW;
                 }
             }
-        }
-        // Down
-        else if(event.key == InputKeyDown && event.type == InputTypeRelease) {
-            if(i2ctools->main_view->current_view == MAIN_VIEW) {
-                if(i2ctools->main_view->menu_index < MENU_SIZE - 1) {
-                    i2ctools->main_view->menu_index++;
-                }
-            } else if(i2ctools->main_view->current_view == SCAN_VIEW) {
-                if(i2ctools->scanner->menu_index < ((int)i2ctools->scanner->nb_found / 3)) {
-                    i2ctools->scanner->menu_index++;
-                }
-            } else if(i2ctools->main_view->current_view == SNIFF_VIEW) {
-                if((i2ctools->sniffer->row_index + 3) <
-                   (int)i2ctools->sniffer->frames[i2ctools->sniffer->menu_index].data_index) {
-                    i2ctools->sniffer->row_index++;
-                }
-            } else if(i2ctools->main_view->current_view == SEND_VIEW) {
-                if(i2ctools->sender->value > 0x00) {
-                    i2ctools->sender->value--;
-                    i2ctools->sender->sended = false;
+            // Up
+            else if(event.key == InputKeyUp && event.type == InputTypeRelease) {
+                if(i2ctools->main_view->current_view == MAIN_VIEW) {
+                    if((i2ctools->main_view->menu_index > SCAN_VIEW)) {
+                        i2ctools->main_view->menu_index--;
+                    }
+                } else if(i2ctools->main_view->current_view == SCAN_VIEW) {
+                    if(i2ctools->scanner->menu_index > 0) {
+                        i2ctools->scanner->menu_index--;
+                    }
+                } else if(i2ctools->main_view->current_view == SNIFF_VIEW) {
+                    if(i2ctools->sniffer->row_index > 0) {
+                        i2ctools->sniffer->row_index--;
+                    }
+                } else if(i2ctools->main_view->current_view == SEND_VIEW) {
+                    if(i2ctools->sender->value < 0xFF) {
+                        i2ctools->sender->value++;
+                        i2ctools->sender->sended = false;
+                    }
                 }
             }
-        }
-        // Long Down
-        else if(
-            event.key == InputKeyDown &&
-            (event.type == InputTypeLong || event.type == InputTypeRepeat)) {
-            if(i2ctools->main_view->current_view == SEND_VIEW) {
-                if(i2ctools->sender->value > 0x05) {
-                    i2ctools->sender->value -= 5;
-                    i2ctools->sender->sended = false;
-                } else {
-                    i2ctools->sender->value = 0;
-                    i2ctools->sender->sended = false;
-                }
-            } else if(i2ctools->main_view->current_view == SNIFF_VIEW) {
-                if((i2ctools->sniffer->row_index + 8) <
-                   (int)i2ctools->sniffer->frames[i2ctools->sniffer->menu_index].data_index) {
-                    i2ctools->sniffer->row_index += 5;
+            // Long Up
+            else if(
+                event.key == InputKeyUp &&
+                (event.type == InputTypeLong || event.type == InputTypeRepeat)) {
+                if(i2ctools->main_view->current_view == SCAN_VIEW) {
+                    if(i2ctools->scanner->menu_index > 5) {
+                        i2ctools->scanner->menu_index -= 5;
+                    }
+                } else if(i2ctools->main_view->current_view == SEND_VIEW) {
+                    if(i2ctools->sender->value < 0xF9) {
+                        i2ctools->sender->value += 5;
+                        i2ctools->sender->sended = false;
+                    }
+                } else if(i2ctools->main_view->current_view == SNIFF_VIEW) {
+                    if(i2ctools->sniffer->row_index > 5) {
+                        i2ctools->sniffer->row_index -= 5;
+                    } else {
+                        i2ctools->sniffer->row_index = 0;
+                    }
                 }
             }
-
-        } else if(event.key == InputKeyOk && event.type == InputTypeRelease) {
-            if(i2ctools->main_view->current_view == MAIN_VIEW) {
-                i2ctools->main_view->current_view = i2ctools->main_view->menu_index;
-            } else if(i2ctools->main_view->current_view == SCAN_VIEW) {
-                scan_i2c_bus(i2ctools->scanner);
-            } else if(i2ctools->main_view->current_view == SEND_VIEW) {
-                i2ctools->sender->must_send = true;
-            } else if(i2ctools->main_view->current_view == SNIFF_VIEW) {
-                if(i2ctools->sniffer->started) {
-                    stop_interrupts();
-                    i2ctools->sniffer->started = false;
-                    i2ctools->sniffer->state = I2C_BUS_FREE;
-                } else {
-                    start_interrupts(i2ctools->sniffer);
-                    i2ctools->sniffer->started = true;
-                    i2ctools->sniffer->state = I2C_BUS_FREE;
-                }
-            }
-        } else if(event.key == InputKeyRight && event.type == InputTypeRelease) {
-            if(i2ctools->main_view->current_view == SEND_VIEW) {
-                if(i2ctools->sender->address_idx < (i2ctools->scanner->nb_found - 1)) {
-                    i2ctools->sender->address_idx++;
-                    i2ctools->sender->sended = false;
-                }
-            } else if(i2ctools->main_view->current_view == SNIFF_VIEW) {
-                if(i2ctools->sniffer->menu_index < i2ctools->sniffer->frame_index) {
-                    i2ctools->sniffer->menu_index++;
-                    i2ctools->sniffer->row_index = 0;
+            // Down
+            else if(event.key == InputKeyDown && event.type == InputTypeRelease) {
+                if(i2ctools->main_view->current_view == MAIN_VIEW) {
+                    if(i2ctools->main_view->menu_index < MENU_SIZE - 1) {
+                        i2ctools->main_view->menu_index++;
+                    }
+                } else if(i2ctools->main_view->current_view == SCAN_VIEW) {
+                    if(i2ctools->scanner->menu_index < ((int)i2ctools->scanner->nb_found / 3)) {
+                        i2ctools->scanner->menu_index++;
+                    }
+                } else if(i2ctools->main_view->current_view == SNIFF_VIEW) {
+                    if((i2ctools->sniffer->row_index + 3) <
+                       (int)i2ctools->sniffer->frames[i2ctools->sniffer->menu_index].data_index) {
+                        i2ctools->sniffer->row_index++;
+                    }
+                } else if(i2ctools->main_view->current_view == SEND_VIEW) {
+                    if(i2ctools->sender->value > 0x00) {
+                        i2ctools->sender->value--;
+                        i2ctools->sender->sended = false;
+                    }
                 }
             }
-        } else if(event.key == InputKeyLeft && event.type == InputTypeRelease) {
-            if(i2ctools->main_view->current_view == SEND_VIEW) {
-                if(i2ctools->sender->address_idx > 0) {
-                    i2ctools->sender->address_idx--;
-                    i2ctools->sender->sended = false;
-                }
-            } else if(i2ctools->main_view->current_view == SNIFF_VIEW) {
-                if(i2ctools->sniffer->menu_index > 0) {
-                    i2ctools->sniffer->menu_index--;
-                    i2ctools->sniffer->row_index = 0;
+            // Long Down
+            else if(
+                event.key == InputKeyDown &&
+                (event.type == InputTypeLong || event.type == InputTypeRepeat)) {
+                if(i2ctools->main_view->current_view == SEND_VIEW) {
+                    if(i2ctools->sender->value > 0x05) {
+                        i2ctools->sender->value -= 5;
+                        i2ctools->sender->sended = false;
+                    } else {
+                        i2ctools->sender->value = 0;
+                        i2ctools->sender->sended = false;
+                    }
+                } else if(i2ctools->main_view->current_view == SNIFF_VIEW) {
+                    if((i2ctools->sniffer->row_index + 8) <
+                       (int)i2ctools->sniffer->frames[i2ctools->sniffer->menu_index].data_index) {
+                        i2ctools->sniffer->row_index += 5;
+                    }
+                }
+
+            } else if(event.key == InputKeyOk && event.type == InputTypeRelease) {
+                if(i2ctools->main_view->current_view == MAIN_VIEW) {
+                    i2ctools->main_view->current_view = i2ctools->main_view->menu_index;
+                } else if(i2ctools->main_view->current_view == SCAN_VIEW) {
+                    scan_i2c_bus(i2ctools->scanner);
+                } else if(i2ctools->main_view->current_view == SEND_VIEW) {
+                    i2ctools->sender->must_send = true;
+                } else if(i2ctools->main_view->current_view == SNIFF_VIEW) {
+                    if(i2ctools->sniffer->started) {
+                        stop_interrupts();
+                        i2ctools->sniffer->started = false;
+                        i2ctools->sniffer->state = I2C_BUS_FREE;
+                    } else {
+                        start_interrupts(i2ctools->sniffer);
+                        i2ctools->sniffer->started = true;
+                        i2ctools->sniffer->state = I2C_BUS_FREE;
+                    }
+                }
+            } else if(event.key == InputKeyRight && event.type == InputTypeRelease) {
+                if(i2ctools->main_view->current_view == SEND_VIEW) {
+                    if(i2ctools->sender->address_idx < (i2ctools->scanner->nb_found - 1)) {
+                        i2ctools->sender->address_idx++;
+                        i2ctools->sender->sended = false;
+                    }
+                } else if(i2ctools->main_view->current_view == SNIFF_VIEW) {
+                    if(i2ctools->sniffer->menu_index < i2ctools->sniffer->frame_index) {
+                        i2ctools->sniffer->menu_index++;
+                        i2ctools->sniffer->row_index = 0;
+                    }
+                }
+            } else if(event.key == InputKeyLeft && event.type == InputTypeRelease) {
+                if(i2ctools->main_view->current_view == SEND_VIEW) {
+                    if(i2ctools->sender->address_idx > 0) {
+                        i2ctools->sender->address_idx--;
+                        i2ctools->sender->sended = false;
+                    }
+                } else if(i2ctools->main_view->current_view == SNIFF_VIEW) {
+                    if(i2ctools->sniffer->menu_index > 0) {
+                        i2ctools->sniffer->menu_index--;
+                        i2ctools->sniffer->row_index = 0;
+                    }
                 }
             }
         }
@@ -218,6 +224,7 @@ int32_t i2ctools_app(void* p) {
     i2c_scanner_free(i2ctools->scanner);
     i2c_sender_free(i2ctools->sender);
     i2c_main_view_free(i2ctools->main_view);
+    furi_mutex_free(i2ctools->mutex);
     free(i2ctools);
     furi_record_close(RECORD_GUI);
     return 0;

BIN
i2ctools/images/ButtonDown_7x4.png


BIN
i2ctools/images/ButtonLeft_4x7.png


BIN
i2ctools/images/ButtonRight_4x7.png


BIN
i2ctools/images/ButtonUp_7x4.png


BIN
i2ctools/images/Ok_btn_9x9.png


BIN
i2ctools/images/Voltage_16x16.png


+ 2 - 0
i2ctools/views/infos_view.h

@@ -3,6 +3,8 @@
 #include <gui/gui.h>
 #include <i2ctools_icons.h>
 
+#include <assets_icons.h>
+
 #define INFOS_TEXT "INFOS"
 
 void draw_infos_view(Canvas* canvas);

+ 2 - 0
i2ctools/views/main_view.h

@@ -4,6 +4,8 @@
 #include <i2ctools_icons.h>
 #define APP_NAME "I2C Tools"
 
+#include <assets_icons.h>
+
 #define SCAN_MENU_TEXT "Scan"
 #define SCAN_MENU_X 90
 #define SCAN_MENU_Y 7

+ 2 - 0
i2ctools/views/scanner_view.h

@@ -4,6 +4,8 @@
 #include <i2ctools_icons.h>
 #include "../i2cscanner.h"
 
+#include <assets_icons.h>
+
 #define SCAN_TEXT "SCAN"
 
 void draw_scanner_view(Canvas* canvas, i2cScanner* i2c_scanner);

+ 2 - 0
i2ctools/views/sender_view.h

@@ -4,6 +4,8 @@
 #include <i2ctools_icons.h>
 #include "../i2csender.h"
 
+#include <assets_icons.h>
+
 #define SEND_TEXT "SEND"
 
 void draw_sender_view(Canvas* canvas, i2cSender* i2c_sender);

+ 2 - 0
i2ctools/views/sniffer_view.h

@@ -4,6 +4,8 @@
 #include <i2ctools_icons.h>
 #include "../i2csniffer.h"
 
+#include <assets_icons.h>
+
 #define SNIFF_TEXT "SNIFF"
 
 void draw_sniffer_view(Canvas* canvas, i2cSniffer* i2c_sniffer);