comparison Discovery/Src/show_logbook.c @ 202:d328abe2e44e

Merged heinrichsweikamp/ostc4 into default
author Thorsten <ideenmodellierer@o2mail.de>
date Sun, 17 Mar 2019 19:16:59 +0100
parents f11f0bf6ef2d
children 5a633dece17a
comparison
equal deleted inserted replaced
201:4073b8091224 202:d328abe2e44e
38 #include <stdio.h> 38 #include <stdio.h>
39 #include <stdlib.h> // for abs() 39 #include <stdlib.h> // for abs()
40 40
41 /* Private variables ---------------------------------------------------------*/ 41 /* Private variables ---------------------------------------------------------*/
42 42
43 GFX_DrawCfgScreen tLOGscreen; 43 static GFX_DrawCfgScreen tLOGscreen;
44 GFX_DrawCfgScreen tLOGbackground; 44 static GFX_DrawCfgScreen tLOGbackground;
45 45
46 46
47 void print_gas_name(char* output,uint8_t lengh,uint8_t oxygen,uint8_t helium); 47 static void print_gas_name(char* output,uint8_t lengh,uint8_t oxygen,uint8_t helium);
48 int16_t get_colour(int16_t color); 48 static int16_t get_colour(int16_t color);
49 49
50 /* Overview */ 50 /* Overview */
51 void show_logbook_logbook_show_log_page1(GFX_DrawCfgScreen *hgfx, uint8_t StepBackwards); 51 static void show_logbook_logbook_show_log_page1(GFX_DrawCfgScreen *hgfx, uint8_t StepBackwards);
52 /* Temperature */ 52 /* Temperature */
53 void show_logbook_logbook_show_log_page2(GFX_DrawCfgScreen *hgfx, uint8_t StepBackwards); 53 static void show_logbook_logbook_show_log_page2(GFX_DrawCfgScreen *hgfx, uint8_t StepBackwards);
54 /* Gas List */ 54 /* Gas List */
55 void show_logbook_logbook_show_log_page3(GFX_DrawCfgScreen *hgfx, uint8_t StepBackwards); 55 static void show_logbook_logbook_show_log_page3(GFX_DrawCfgScreen *hgfx, uint8_t StepBackwards);
56 /* ppO2 */ 56 /* ppO2 */
57 void show_logbook_logbook_show_log_page4(GFX_DrawCfgScreen *hgfx, uint8_t StepBackwards); 57 static void show_logbook_logbook_show_log_page4(GFX_DrawCfgScreen *hgfx, uint8_t StepBackwards);
58 58
59 59 static inline uint32_t MaxU32LOG(uint32_t a, uint32_t b)
60 inline uint32_t MinU32LOG(uint32_t a, uint32_t b)
61 {
62 return ((a<b)?a:b);
63 }
64
65 uint32_t MaxU32LOG(uint32_t a, uint32_t b)
66 { 60 {
67 return((a>b)?a:b); 61 return((a>b)?a:b);
68 } 62 }
69
70 void write_label_(GFX_DrawCfgScreen *screenInput, SWindowGimpStyle win, const tFont *Font, uint8_t color, const char *text)
71 {
72 GFX_DrawCfgWindow hgfx;
73
74 if( win.right > 799)
75 win.right = 799;
76
77 if(win.top > 479)
78 win.top = 479;
79 hgfx.Image = screenInput;
80 hgfx.WindowNumberOfTextLines = 1;
81 hgfx.WindowLineSpacing = 0;
82 hgfx.WindowTab = 0;
83 hgfx.WindowX0 = win.left;
84 hgfx.WindowX1 = win.right;
85 hgfx.WindowY1 = 479 - win.top;
86 if(hgfx.WindowY1 < Font->height)
87 hgfx.WindowY0 = 0;
88 else
89 hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
90
91 GFX_write_label(Font, &hgfx, text, color);
92 }
93
94 63
95 /** 64 /**
96 ****************************************************************************** 65 ******************************************************************************
97 * @brief GFX write label. / print coordinate system & depth graph 66 * @brief GFX write label. / print coordinate system & depth graph
98 * @author Peter Ryser 67 * @author Peter Ryser
106 * @param dataLength: 75 * @param dataLength:
107 * @param depthdata: 76 * @param depthdata:
108 * @param colordata: 1 77 * @param colordata: 1
109 * @retval None 78 * @retval None
110 */ 79 */
111 void show_logbook_draw_depth_graph(GFX_DrawCfgScreen *hgfx, uint8_t StepBackwards, SWindowGimpStyle* window, short mode, uint16_t dataLength, uint16_t* depthdata, uint8_t * colordata, uint16_t * decostopdata) 80 static void show_logbook_draw_depth_graph(GFX_DrawCfgScreen *hgfx, uint8_t StepBackwards, SWindowGimpStyle* window, short mode, uint16_t dataLength, uint16_t* depthdata, uint8_t * colordata, uint16_t * decostopdata)
112 { 81 {
113 SLogbookHeader logbookHeader; 82 SLogbookHeader logbookHeader;
114 SWindowGimpStyle wintemp = *window; 83 SWindowGimpStyle wintemp = *window;
115 SWindowGimpStyle winsmal; 84 SWindowGimpStyle winsmal;
116 logbook_getHeader(StepBackwards, &logbookHeader); 85 logbook_getHeader(StepBackwards, &logbookHeader);
283 * @retval *OutputStepOfScale, *OutputMaxValueOnScale, *OutputTop, *OutputBottom 252 * @retval *OutputStepOfScale, *OutputMaxValueOnScale, *OutputTop, *OutputBottom
284 253
285 * fit to multiples of 1�C (data format is 1/10�C) 254 * fit to multiples of 1�C (data format is 1/10�C)
286 */ 255 */
287 256
288 void scaleAdapt( int InputTop, int InputBottom, 257 static void scaleAdapt( int InputTop, int InputBottom,
289 int16_t *OutputMinValue, int16_t *OutputMaxValue, int *OutputTop, int *OutputBottom, 258 int16_t *OutputMinValue, int16_t *OutputMaxValue, int *OutputTop, int *OutputBottom,
290 uint16_t *OutputStepOfScale, int16_t *OutputMaxValueOnScale) 259 uint16_t *OutputStepOfScale, int16_t *OutputMaxValueOnScale)
291 { 260 {
292 // uint16_t oldScale; 261 // uint16_t oldScale;
293 uint16_t newScale; 262 uint16_t newScale;
385 * pixel 390 gesamt h�he 354 * pixel 390 gesamt h�he
386 355
387 * for temperature, input is �C * 10 356 * for temperature, input is �C * 10
388 */ 357 */
389 358
390 void scaleHelper( uint16_t InputDataLength, int16_t *InputDataArray, int InputTop, int InputBottom, 359 static void scaleHelper( uint16_t InputDataLength, int16_t *InputDataArray, int InputTop, int InputBottom,
391 int16_t *OutputMinValue, int16_t *OutputMaxValue, int *OutputTop, int *OutputBottom, 360 int16_t *OutputMinValue, int16_t *OutputMaxValue, int *OutputTop, int *OutputBottom,
392 uint16_t *OutputStepOfScale, int16_t *OutputMaxValueOnScale) 361 uint16_t *OutputStepOfScale, int16_t *OutputMaxValueOnScale)
393 { 362 {
394 int32_t datamin = INT16_MAX; // 32 bit for delta calculation ( delta is unsigned -> value can be 2x INT16_MAX) 363 int32_t datamin = INT16_MAX; // 32 bit for delta calculation ( delta is unsigned -> value can be 2x INT16_MAX)
395 int32_t datamax = INT16_MIN; 364 int32_t datamax = INT16_MIN;
439 ****************************************************************************** 408 ******************************************************************************
440 * 409 *
441 * @param hgfx: 410 * @param hgfx:
442 * @retval None 411 * @retval None
443 */ 412 */
444 void show_logbook_logbook_show_log_page1(GFX_DrawCfgScreen *hgfx,uint8_t StepBackwards) 413 static void show_logbook_logbook_show_log_page1(GFX_DrawCfgScreen *hgfx,uint8_t StepBackwards)
445 { 414 {
446 SWindowGimpStyle wintemp; 415 SWindowGimpStyle wintemp;
447 SWindowGimpStyle winsmal; 416 SWindowGimpStyle winsmal;
448 wintemp.left = 50; 417 wintemp.left = 50;
449 wintemp.right = 799 - wintemp.left; 418 wintemp.right = 799 - wintemp.left;
659 628
660 show_logbook_draw_depth_graph(hgfx, StepBackwards, &wintemp, 1, dataLength, depthdata, gasdata, NULL); 629 show_logbook_draw_depth_graph(hgfx, StepBackwards, &wintemp, 1, dataLength, depthdata, gasdata, NULL);
661 } 630 }
662 631
663 632
664 void show_logbook_logbook_show_log_page2(GFX_DrawCfgScreen *hgfx, uint8_t StepBackwards) 633 static void show_logbook_logbook_show_log_page2(GFX_DrawCfgScreen *hgfx, uint8_t StepBackwards)
665 { 634 {
666 //*** Page2: Depth and Temperature **** 635 //*** Page2: Depth and Temperature ****
667 636
668 SWindowGimpStyle wintemp; 637 SWindowGimpStyle wintemp;
669 SWindowGimpStyle winsmal; 638 SWindowGimpStyle winsmal;
749 wintemp.top = newTop; 718 wintemp.top = newTop;
750 GFX_graph_print(hgfx,&wintemp,0,1,maxVal,minVal, (uint16_t *)tempdata,dataLength,CLUT_LogbookTemperature, NULL); 719 GFX_graph_print(hgfx,&wintemp,0,1,maxVal,minVal, (uint16_t *)tempdata,dataLength,CLUT_LogbookTemperature, NULL);
751 } 720 }
752 721
753 722
754 void show_logbook_logbook_show_log_page2_original(GFX_DrawCfgScreen *hgfx, uint8_t StepBackwards) 723 static void build_logbook_test(uint8_t page, uint8_t StepBackwards)
755 {
756 //*** Page2: Depth and Temperature ****
757
758 SWindowGimpStyle wintemp;
759 SWindowGimpStyle winsmal;
760 wintemp.left = 50;
761 wintemp.right = 799 - wintemp.left;
762 wintemp.top = 50;
763 wintemp.bottom = 479 - 40;
764
765 SLogbookHeader logbookHeader;
766
767 logbook_getHeader(StepBackwards,&logbookHeader);
768 uint16_t dataLength = 0;
769 uint16_t depthdata[1000];
770 uint8_t gasdata[1000];
771 int16_t tempdata[1000];
772 uint16_t decoDepthdata[1000];
773 uint16_t *pDecoDepthData = 0;
774
775 dataLength = logbook_readSampleData(StepBackwards, 1000, depthdata,gasdata, tempdata, NULL, NULL, NULL, NULL, NULL, NULL, NULL, decoDepthdata);
776
777 /* test
778 for(int i = 0; i<dataLength/2; i++)
779 decoDepthdata[i] = 300;
780
781 for(int i = dataLength/2; i<dataLength; i++)
782 decoDepthdata[i] = 1200;
783 */
784 for(int i = 0; i<dataLength; i++)
785 {
786 if(decoDepthdata[i] >= 300)
787 {
788 pDecoDepthData = decoDepthdata;
789 break;
790 }
791 }
792 //--- print coordinate system & depth graph ---
793 show_logbook_draw_depth_graph(hgfx, StepBackwards, &wintemp, 0, dataLength, depthdata, gasdata, pDecoDepthData);
794
795 //*** Temperature *************************************************
796
797
798 int16_t datamax = -1000; // �C * 10
799 int16_t datamin = +1000;
800 for(int i = 0; i < dataLength;i++)
801 {
802 if(tempdata[i]>datamax)
803 datamax = tempdata[i];
804 if(tempdata[i]< datamin)
805 datamin = tempdata[i];
806 }
807 float maxTmp = ((float)datamax) /10.f;
808 float minTmp = ((float)datamin) /10.f;
809 int deltaTmp = maxTmp - minTmp;
810 int tmpstep = 2;
811
812 // 5 different scales: 1�C, 2�C, 4�C, 5�C, 10�C
813 // with 6 lines == 5 steps
814 if((deltaTmp) <=5)
815 {
816 tmpstep = 1;
817 }
818 else
819 if(deltaTmp <= (5*2))
820 {
821 tmpstep = 2;
822 }
823 else
824 if(deltaTmp <= (5 * 4))
825 {
826 tmpstep = 4;
827 }
828 else
829 if(deltaTmp <= (5 * 5))
830 {
831 tmpstep = 5;
832 }
833 else
834 {
835 tmpstep = 10;
836 }
837 // int steps = deltaTmp/tmpstep;
838
839
840 // int steps = deltaTmp/5;
841 // int tmpstep = 5;
842 // if(steps > 4)
843 // tmpstep = 10;
844
845 int maxtmpline = 0;
846 int mintmpline = 0;
847 if(minTmp < 0)
848 {
849 if(minTmp >= -5)
850 {
851 mintmpline = -5;
852
853 }
854 else if(minTmp >= -10)
855 {
856 mintmpline = -10;
857 }
858 else
859 mintmpline = -15;
860 }
861
862 if(maxTmp > 0)
863 {
864 while(maxtmpline < maxTmp)
865 maxtmpline += tmpstep;
866 }
867
868 if(tmpstep < 5)
869 maxtmpline = MaxU32LOG(maxtmpline, 10);
870 else if(tmpstep == 5)
871 maxtmpline = MaxU32LOG(maxtmpline, 25);
872 else
873 maxtmpline = 50;
874
875 maxtmpline += mintmpline;
876
877 //--- print temperature labels ---
878 // input maxtmpline, tmpstep, deltaline
879
880 winsmal.left = wintemp.right +6;
881 winsmal.top = wintemp.top - 3;
882 winsmal.right = wintemp.right + 30;
883 winsmal.bottom = winsmal.top + 16;
884
885 write_label_(hgfx, winsmal,&FontT24,CLUT_LogbookTemperature,"[C]");
886
887 int deltaline = (wintemp.bottom - wintemp.top)/5;
888 char msg[3];
889 int tmp = maxtmpline;
890 for(int i = 1; i<=5; i++)
891 {
892 tmp -= tmpstep;
893 //if(tmp < 0)
894 //break;
895 winsmal.top = wintemp.top + deltaline * i - 14;
896 winsmal.bottom = winsmal.top + 16;
897 snprintf(msg,3,"%2i",tmp);
898 write_label_(hgfx, winsmal,&FontT24,CLUT_LogbookTemperature,msg);
899 }
900
901
902 //--- print temperature graph ---
903 // input tempdata[i], maxtmpline, mintmpline, maxTmp, minTmp, deltaline, wintemp.top, dataLength, datamax,
904
905 //adapt window
906 float ftmp =((maxtmpline - minTmp) * deltaline) /tmpstep + wintemp.top;
907 wintemp.bottom = ftmp;
908 if((ftmp - (int)ftmp) >= 0.5f)
909 wintemp.bottom++;
910
911 ftmp = ((maxtmpline - maxTmp) * deltaline) /tmpstep + wintemp.top;
912 wintemp.top = ftmp;
913 if((ftmp - (int)ftmp) >= 0.5f)
914 wintemp.top++;
915
916 if(wintemp.top <= wintemp.bottom)
917 {
918 for(int i = 0; i < dataLength;i++)
919 {
920 tempdata[i] -= mintmpline;
921 }
922 datamax -= mintmpline;
923 // hw 160518
924 // es wird nur das Fenster (wintemp.top, wintemp.bottom) verwendet in dem Daten sind
925 // daher muss datamin angegeben werden
926 // der Gesamtbereich ist uninteressant
927 // Bsp Temperatur von 8�C bis 5�C
928 // Y-Achse ist 10�C (oben) bis 0�C (unten)
929 // aber wintemp.top ist 127
930 // und wintemp.bottom ist 243
931 GFX_graph_print(hgfx,&wintemp,0,1,datamax,datamin, (uint16_t *)tempdata,dataLength,CLUT_LogbookTemperature, NULL);
932 }
933 }
934
935
936 void build_logbook_test(uint8_t page, uint8_t StepBackwards)
937 { 724 {
938 uint32_t lastScreen,lastBackground; 725 uint32_t lastScreen,lastBackground;
939 726
940 lastScreen = tLOGscreen.FBStartAdress; 727 lastScreen = tLOGscreen.FBStartAdress;
941 lastBackground = tLOGbackground.FBStartAdress; 728 lastBackground = tLOGbackground.FBStartAdress;
998 releaseFrame(16,tLOGscreen.FBStartAdress); 785 releaseFrame(16,tLOGscreen.FBStartAdress);
999 releaseFrame(17,tLOGbackground.FBStartAdress); 786 releaseFrame(17,tLOGbackground.FBStartAdress);
1000 } 787 }
1001 788
1002 789
1003 void show_logbook_logbook_show_log_page3(GFX_DrawCfgScreen *hgfx, uint8_t StepBackwards) 790 static void show_logbook_logbook_show_log_page3(GFX_DrawCfgScreen *hgfx, uint8_t StepBackwards)
1004 { 791 {
1005 SWindowGimpStyle wintemp; 792 SWindowGimpStyle wintemp;
1006 SWindowGimpStyle winsmal; 793 SWindowGimpStyle winsmal;
1007 wintemp.left = 50; 794 wintemp.left = 50;
1008 wintemp.right = 799 - wintemp.left; 795 wintemp.right = 799 - wintemp.left;
1049 else 836 else
1050 button_start_single_action(surf1_menu_logbook_current_page, surf1_menu_logbook_show_log_page1, surf1_menu_logbook_show_log_next); 837 button_start_single_action(surf1_menu_logbook_current_page, surf1_menu_logbook_show_log_page1, surf1_menu_logbook_show_log_next);
1051 */ 838 */
1052 } 839 }
1053 840
1054 void show_logbook_logbook_show_log_page4(GFX_DrawCfgScreen *hgfx, uint8_t StepBackwards) 841 static void show_logbook_logbook_show_log_page4(GFX_DrawCfgScreen *hgfx, uint8_t StepBackwards)
1055 { SWindowGimpStyle wintemp; 842 { SWindowGimpStyle wintemp;
1056 SWindowGimpStyle winsmal; 843 SWindowGimpStyle winsmal;
1057 wintemp.left = 50; 844 wintemp.left = 50;
1058 wintemp.right = 799 - wintemp.left; 845 wintemp.right = 799 - wintemp.left;
1059 wintemp.top = 50; 846 wintemp.top = 50;
1215 1002
1216 //--- define buttons --- 1003 //--- define buttons ---
1217 //button_start_single_action(surf1_menu_logbook_current_page, surf1_menu_logbook_show_log_page1, surf1_menu_logbook_show_log_next); 1004 //button_start_single_action(surf1_menu_logbook_current_page, surf1_menu_logbook_show_log_page1, surf1_menu_logbook_show_log_next);
1218 } 1005 }
1219 1006
1220 void print_gas_name(char* output,uint8_t length,uint8_t oxygen,uint8_t helium) 1007 static void print_gas_name(char* output,uint8_t length,uint8_t oxygen,uint8_t helium)
1221 { 1008 {
1222 if(helium == 0) 1009 if(helium == 0)
1223 { 1010 {
1224 if(oxygen == 21) 1011 if(oxygen == 21)
1225 snprintf(output, length, "Air"); 1012 snprintf(output, length, "Air");
1236 snprintf(output, length, "TMX%i/%i", oxygen, helium); 1023 snprintf(output, length, "TMX%i/%i", oxygen, helium);
1237 } 1024 }
1238 1025
1239 } 1026 }
1240 1027
1241 int16_t get_colour(int16_t color) 1028 static int16_t get_colour(int16_t color)
1242 { 1029 {
1243 return CLUT_GasSensor1 + color; 1030 return CLUT_GasSensor1 + color;
1244 } 1031 }