nmrr 2 лет назад
Родитель
Сommit
b4525b7174
2 измененных файлов с 60 добавлено и 12 удалено
  1. 1 1
      application.fam
  2. 59 11
      flipper_geiger.c

+ 1 - 1
application.fam

@@ -7,7 +7,7 @@ App(
     requires=[
         "gui",
     ],
-    stack_size=1 * 1024,
+    stack_size=2 * 1024,
     fap_icon="geiger.png",
     fap_category="Tools",
 )

+ 59 - 11
flipper_geiger.c

@@ -28,12 +28,15 @@ typedef struct {
     InputEvent input;
 } EventApp;
 
+#define lineArraySize 128
+
 typedef struct {
     FuriMutex* mutex;
     uint32_t cps, cpm;
-    uint32_t line[SCREEN_SIZE_X/2];
+    uint32_t line[lineArraySize];
     float coef;
     uint8_t data;
+    uint8_t zoom;
 } mutexStruct;
 
 static void draw_callback(Canvas* canvas, void* ctx) 
@@ -54,12 +57,39 @@ static void draw_callback(Canvas* canvas, void* ctx)
     else if (mutexDraw.data == 4) snprintf(buffer, sizeof(buffer), "%ld cps - %.2f mR/h", mutexDraw.cps, ((double)mutexDraw.cpm*(double)CONVERSION_FACTOR)/(double)10);
     else snprintf(buffer, sizeof(buffer), "%ld cps - %.2f uR/h", mutexDraw.cps, ((double)mutexDraw.cpm*(double)CONVERSION_FACTOR)*(double)100);
 
-    for (int i=0;i<SCREEN_SIZE_X;i+=2)
+
+    if (mutexDraw.zoom == 0)
     {
-        float Y = SCREEN_SIZE_Y-(mutexDraw.line[i/2]*mutexDraw.coef);
+        for (int i=0;i<SCREEN_SIZE_X;i+=8)
+        {
+            float Y = SCREEN_SIZE_Y-(mutexDraw.line[i/8]*mutexDraw.coef);
+            for (int j=0;j<8;j++)canvas_draw_line(canvas, i+j, Y, i+j, SCREEN_SIZE_Y);
+        }
+    }
+    else if (mutexDraw.zoom == 1)
+    {
+        for (int i=0;i<SCREEN_SIZE_X;i+=4)
+        {
+            float Y = SCREEN_SIZE_Y-(mutexDraw.line[i/4]*mutexDraw.coef);
+            for (int j=0;j<4;j++)canvas_draw_line(canvas, i+j, Y, i+j, SCREEN_SIZE_Y);
+        }
+    }
+    else if (mutexDraw.zoom == 2)
+    {
+        for (int i=0;i<SCREEN_SIZE_X;i+=2)
+        {
+            float Y = SCREEN_SIZE_Y-(mutexDraw.line[i/2]*mutexDraw.coef);
+            for (int j=0;j<2;j++)canvas_draw_line(canvas, i+j, Y, i+j, SCREEN_SIZE_Y);
+        }
+    }
+    else if (mutexDraw.zoom == 3)
+    {
+        for (int i=0;i<SCREEN_SIZE_X;i++)
+        {
+            float Y = SCREEN_SIZE_Y-(mutexDraw.line[i]*mutexDraw.coef);
 
-        canvas_draw_line(canvas, i, Y, i, SCREEN_SIZE_Y);
-        canvas_draw_line(canvas, i+1, Y, i+1, SCREEN_SIZE_Y);
+            canvas_draw_line(canvas, i, Y, i, SCREEN_SIZE_Y);
+        }
     }
 
     canvas_set_font(canvas, FontPrimary);
@@ -106,9 +136,10 @@ int32_t flipper_geiger_app()
     mutexStruct mutexVal;
     mutexVal.cps = 0;
     mutexVal.cpm = 0;
-    for (int i=0;i<SCREEN_SIZE_X/2;i++) mutexVal.line[i] = 0;
+    for (int i=0;i<lineArraySize;i++) mutexVal.line[i] = 0;
     mutexVal.coef = 1;
     mutexVal.data = 0;
+    mutexVal.zoom = 2;
 
     uint32_t counter = 0;
 
@@ -143,18 +174,18 @@ int32_t flipper_geiger_app()
         {   
             if(event.type == EventTypeInput) 
             {
-                if(event.input.key == InputKeyBack) 
+                if(event.input.key == InputKeyBack && event.input.type == InputTypeLong) 
                 {
                     break;
                 }
-                else if(event.input.key == InputKeyOk && event.input.type == InputTypeShort)
+                else if(event.input.key == InputKeyOk && event.input.type == InputTypeLong)
                 {
                     counter = 0;
                     furi_mutex_acquire(mutexVal.mutex, FuriWaitForever);
 
                     mutexVal.cps = 0;
                     mutexVal.cpm = 0;
-                    for (int i=0;i<SCREEN_SIZE_X/2;i++) mutexVal.line[i] = 0;
+                    for (int i=0;i<lineArraySize;i++) mutexVal.line[i] = 0;
 
                     screenRefresh = 1;
                     furi_mutex_release(mutexVal.mutex);
@@ -176,6 +207,23 @@ int32_t flipper_geiger_app()
                     if (mutexVal.data != 5) mutexVal.data++;
                     else mutexVal.data = 0;
 
+                    screenRefresh = 1;
+                    furi_mutex_release(mutexVal.mutex);
+                }
+                else if((event.input.key == InputKeyUp && event.input.type == InputTypeShort))
+                {
+                    furi_mutex_acquire(mutexVal.mutex, FuriWaitForever);
+                    if (mutexVal.zoom != 0) mutexVal.zoom--;
+
+                    screenRefresh = 1;
+                    furi_mutex_release(mutexVal.mutex);
+
+                }
+                else if((event.input.key == InputKeyDown && event.input.type == InputTypeShort))
+                {
+                    furi_mutex_acquire(mutexVal.mutex, FuriWaitForever);
+                    if (mutexVal.zoom != 3) mutexVal.zoom++;
+
                     screenRefresh = 1;
                     furi_mutex_release(mutexVal.mutex);
                 }
@@ -184,7 +232,7 @@ int32_t flipper_geiger_app()
             {
                 furi_mutex_acquire(mutexVal.mutex, FuriWaitForever);
 
-                for (int i=0;i<SCREEN_SIZE_X/2-1;i++) mutexVal.line[SCREEN_SIZE_X/2-1-i] = mutexVal.line[SCREEN_SIZE_X/2-2-i]; 
+                for (int i=0;i<lineArraySize-1;i++) mutexVal.line[lineArraySize-1-i] = mutexVal.line[lineArraySize-2-i]; 
 
                 mutexVal.line[0] = counter;
                 mutexVal.cps = counter;
@@ -192,7 +240,7 @@ int32_t flipper_geiger_app()
 
                 mutexVal.cpm = mutexVal.line[0];
                 uint32_t max = mutexVal.line[0];
-                for (int i=1;i<SCREEN_SIZE_X/2;i++)
+                for (int i=1;i<lineArraySize;i++)
                 {
                     if (i < 60) mutexVal.cpm += mutexVal.line[i];
                     if (mutexVal.line[i] > max) max = mutexVal.line[i];