Mercurial > public > ostc4
comparison Discovery/Src/gfx_engine.c @ 297:87d54b4fd946 cleanup-3
cleanup: remove unused code, make static, remove commented code
Cleanup only. No functional changes.
Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
author | Jan Mulder <jlmulder@xs4all.nl> |
---|---|
date | Thu, 16 May 2019 08:56:15 +0200 |
parents | 87f83879cecb |
children | e141b571a03d |
comparison
equal
deleted
inserted
replaced
296:87f83879cecb | 297:87d54b4fd946 |
---|---|
112 #define SDRAM_DOUBLE_BUFFER_END ((uint32_t)(SDRAM_DOUBLE_BUFFER_TWO + (2 * FBOffsetEachIndex))) | 112 #define SDRAM_DOUBLE_BUFFER_END ((uint32_t)(SDRAM_DOUBLE_BUFFER_TWO + (2 * FBOffsetEachIndex))) |
113 | 113 |
114 /* Semi Private variables ---------------------------------------------------------*/ | 114 /* Semi Private variables ---------------------------------------------------------*/ |
115 | 115 |
116 DMA2D_HandleTypeDef Dma2dHandle; | 116 DMA2D_HandleTypeDef Dma2dHandle; |
117 LTDC_HandleTypeDef LtdcHandle; | 117 static LTDC_HandleTypeDef LtdcHandle; |
118 | 118 |
119 /* Private variables ---------------------------------------------------------*/ | 119 /* Private variables ---------------------------------------------------------*/ |
120 | 120 |
121 uint8_t DMA2D_at_work = 0; | 121 static uint8_t DMA2D_at_work = 0; |
122 | 122 |
123 GFX_layerControl FrameHandler = { 0 }; | 123 static GFX_layerControl FrameHandler = { 0 }; |
124 | 124 |
125 uint32_t pInvisibleFrame = 0; | 125 static uint32_t pInvisibleFrame = 0; |
126 uint32_t pLogoFrame = 0; | 126 static uint32_t pLogoFrame = 0; |
127 uint8_t logoStatus; | 127 static uint8_t logoStatus; |
128 uint32_t pBackgroundHwFrame = 0; | 128 static uint32_t pBackgroundHwFrame = 0; |
129 uint8_t backgroundHwStatus; | 129 static uint8_t backgroundHwStatus; |
130 | 130 |
131 SFrameList frame[MAXFRAMES]; | 131 static SFrameList frame[MAXFRAMES]; |
132 | 132 |
133 #define MAXFRAMECOUNTER (28) | 133 #define MAXFRAMECOUNTER (28) |
134 uint8_t frameCounter[MAXFRAMECOUNTER] = { 0 }; | 134 static uint8_t frameCounter[MAXFRAMECOUNTER] = { 0 }; |
135 | 135 |
136 _Bool lock_changeLTDC = 0; | 136 static _Bool lock_changeLTDC = 0; |
137 | 137 |
138 static void GFX_clear_frame_immediately(uint32_t pDestination); | |
139 static void GFX_draw_image_color(GFX_DrawCfgScreen *hgfx, SWindowGimpStyle window, const tImage *image); | |
138 /* ITM Trace-----------------------------------------------------------------*/ | 140 /* ITM Trace-----------------------------------------------------------------*/ |
139 | 141 |
140 #include "stdio.h" | 142 #include "stdio.h" |
141 | 143 |
142 #define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n))) | 144 #define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n))) |
171 | 173 |
172 /* Private function prototypes -----------------------------------------------*/ | 174 /* Private function prototypes -----------------------------------------------*/ |
173 | 175 |
174 static uint32_t GFX_write_char(GFX_DrawCfgWindow* hgfx, GFX_CfgWriteString* cfg, uint8_t character, tFont *Font); | 176 static uint32_t GFX_write_char(GFX_DrawCfgWindow* hgfx, GFX_CfgWriteString* cfg, uint8_t character, tFont *Font); |
175 static uint32_t GFX_write_substring(GFX_CfgWriteString* cfg, GFX_DrawCfgWindow* hgfx, uint8_t textId, int8_t nextCharFor2Byte); | 177 static uint32_t GFX_write_substring(GFX_CfgWriteString* cfg, GFX_DrawCfgWindow* hgfx, uint8_t textId, int8_t nextCharFor2Byte); |
176 uint32_t GFX_write__Modify_Xdelta__Centered(GFX_CfgWriteString* cfg, GFX_DrawCfgWindow* hgfx, const char *pText); | 178 static uint32_t GFX_write__Modify_Xdelta__Centered(GFX_CfgWriteString* cfg, GFX_DrawCfgWindow* hgfx, const char *pText); |
177 uint32_t GFX_write__Modify_Xdelta__RightAlign(GFX_CfgWriteString* cfg, GFX_DrawCfgWindow* hgfx, const char *pTextInput); | 179 static uint32_t GFX_write__Modify_Xdelta__RightAlign(GFX_CfgWriteString* cfg, GFX_DrawCfgWindow* hgfx, const char *pTextInput); |
178 static void GFX_Error_Handler(void); | 180 static void GFX_Error_Handler(void); |
179 static void GFX_Dma2d_TransferComplete(DMA2D_HandleTypeDef* Dma2dHandle); | 181 static void GFX_Dma2d_TransferComplete(DMA2D_HandleTypeDef* Dma2dHandle); |
180 static void GFX_Dma2d_TransferError(DMA2D_HandleTypeDef* Dma2dHandle); | 182 static void GFX_Dma2d_TransferError(DMA2D_HandleTypeDef* Dma2dHandle); |
181 void GFX_clear_frame_dma2d(uint8_t frameId); | 183 static void GFX_clear_frame_dma2d(uint8_t frameId); |
182 | 184 |
183 uint32_t GFX_doubleBufferOne(void); | 185 static uint32_t GFX_doubleBufferOne(void); |
184 uint32_t GFX_doubleBufferTwo(void); | 186 static uint32_t GFX_doubleBufferTwo(void); |
185 | 187 |
186 | 188 |
187 /* Exported functions --------------------------------------------------------*/ | 189 /* Exported functions --------------------------------------------------------*/ |
188 | 190 |
189 uint8_t GFX_logoStatus(void) | 191 uint8_t GFX_logoStatus(void) |
190 { | 192 { |
191 return logoStatus; | 193 return logoStatus; |
192 } | 194 } |
193 | |
194 | |
195 void GFX_helper_font_memory_list(const tFont *Font) | |
196 { | |
197 int i; | |
198 uint8_t character; | |
199 | |
200 // ----------------------------- | |
201 | |
202 for(character = 0x20; character < 0xFF; character++) | |
203 { | |
204 for(i=0;i<Font->length;i++) | |
205 { | |
206 if(Font->chars[i].code == character) | |
207 { | |
208 printf("%02x: 0x%0lx 0x%0lx\n\r",(uint8_t)character, (uint32_t)(Font->chars[i].image->data),((uint32_t)(Font->chars[i+1].image->data)-(uint32_t)(Font->chars[i].image->data))); | |
209 break; | |
210 } | |
211 } | |
212 } | |
213 } | |
214 | |
215 | |
216 | 195 |
217 void GFX_SetWindowLayer0(uint32_t pDestination, int16_t XleftGimpStyle, int16_t XrightGimpStyle, int16_t YtopGimpStyle, int16_t YbottomGimpStyle) | 196 void GFX_SetWindowLayer0(uint32_t pDestination, int16_t XleftGimpStyle, int16_t XrightGimpStyle, int16_t YtopGimpStyle, int16_t YbottomGimpStyle) |
218 { | 197 { |
219 int16_t XSize, YSize, X0, Y0; | 198 int16_t XSize, YSize, X0, Y0; |
220 | 199 |
256 { | 235 { |
257 if(logoStatus == LOGOOFF) | 236 if(logoStatus == LOGOOFF) |
258 logoStatus = LOGOSTART; | 237 logoStatus = LOGOSTART; |
259 } | 238 } |
260 | 239 |
261 /* | |
262 uint8_t GFX_printf_firmware(char *text) | |
263 { | |
264 uint8_t zahl, ptr; | |
265 | |
266 ptr = 0; | |
267 zahl = settingsGetPointer()->firmwareVersion16to32bit.ub.first; | |
268 if(zahl >= 10) | |
269 { | |
270 text[ptr++] = '0' + (zahl / 10); | |
271 zahl = zahl - ((zahl / 10 ) * 10); | |
272 } | |
273 text[ptr++] = '0' + zahl; | |
274 text[ptr++] = '.'; | |
275 | |
276 zahl = settingsGetPointer()->firmwareVersion16to32bit.ub.second; | |
277 if(zahl >= 10) | |
278 { | |
279 text[ptr++] = '0' + (zahl / 10); | |
280 zahl = zahl - ((zahl / 10 ) * 10); | |
281 } | |
282 text[ptr++] = '0' + zahl; | |
283 text[ptr++] = '.'; | |
284 | |
285 zahl = settingsGetPointer()->firmwareVersion16to32bit.ub.third; | |
286 if(zahl >= 10) | |
287 { | |
288 text[ptr++] = '0' + (zahl / 10); | |
289 zahl = zahl - ((zahl / 10 ) * 10); | |
290 } | |
291 text[ptr++] = '0' + zahl; | |
292 | |
293 if(settingsGetPointer()->firmwareVersion16to32bit.ub.betaFlag) | |
294 { | |
295 text[ptr++] = ' '; | |
296 text[ptr++] = 'b'; | |
297 text[ptr++] = 'e'; | |
298 text[ptr++] = 't'; | |
299 text[ptr++] = 'a'; | |
300 } | |
301 text[ptr] = 0; | |
302 | |
303 return ptr; | |
304 } | |
305 */ | |
306 | 240 |
307 void GFX_hwBackgroundOn(void) | 241 void GFX_hwBackgroundOn(void) |
308 { | 242 { |
309 backgroundHwStatus = LOGOSTART; | 243 backgroundHwStatus = LOGOSTART; |
310 } | 244 } |
314 { | 248 { |
315 backgroundHwStatus = LOGOSTOP; | 249 backgroundHwStatus = LOGOSTOP; |
316 } | 250 } |
317 | 251 |
318 | 252 |
319 void GFX_build_hw_background_frame(void) | 253 static void GFX_build_hw_background_frame(void) |
320 { | 254 { |
321 GFX_DrawCfgScreen tLogoTemp; | 255 GFX_DrawCfgScreen tLogoTemp; |
322 SWindowGimpStyle windowGimp; | 256 SWindowGimpStyle windowGimp; |
323 | 257 |
324 pBackgroundHwFrame = getFrame(1); | 258 pBackgroundHwFrame = getFrame(1); |
348 write_content_simple(&tLogoTemp, 0, 800, 240-24, &FontT24,localtext,CLUT_Font020); | 282 write_content_simple(&tLogoTemp, 0, 800, 240-24, &FontT24,localtext,CLUT_Font020); |
349 */ | 283 */ |
350 } | 284 } |
351 | 285 |
352 | 286 |
353 | 287 static void GFX_build_logo_frame(void) |
354 | |
355 void GFX_build_logo_frame(void) | |
356 { | 288 { |
357 GFX_DrawCfgScreen tLogoTemp; | 289 GFX_DrawCfgScreen tLogoTemp; |
358 SWindowGimpStyle windowGimp; | 290 SWindowGimpStyle windowGimp; |
359 | 291 |
360 pLogoFrame = getFrame(1); | 292 pLogoFrame = getFrame(1); |
432 | 364 |
433 DMA2D_at_work = 255; | 365 DMA2D_at_work = 255; |
434 } | 366 } |
435 | 367 |
436 | 368 |
437 void GFX_init1_no_DMA(uint32_t * pDestinationOut, uint8_t blockFrames) | |
438 { | |
439 frame[0].StartAddress = FBGlobalStart; | |
440 GFX_clear_frame_immediately(frame[0].StartAddress); | |
441 frame[0].status = CLEAR; | |
442 frame[0].caller = 0; | |
443 | |
444 for(int i=1;i<MAXFRAMES;i++) | |
445 { | |
446 frame[i].StartAddress = frame[i-1].StartAddress + FBOffsetEachIndex; | |
447 GFX_clear_frame_immediately(frame[i].StartAddress); | |
448 frame[i].status = CLEAR; | |
449 frame[i].caller = 0; | |
450 } | |
451 | |
452 for(int i=0;i<blockFrames;i++) | |
453 { | |
454 frame[i].status = BLOCKED; | |
455 frame[i].caller = 1; | |
456 } | |
457 | |
458 pInvisibleFrame = getFrame(2); | |
459 *pDestinationOut = pInvisibleFrame; | |
460 | |
461 GFX_build_logo_frame(); | |
462 GFX_build_hw_background_frame(); | |
463 } | |
464 | |
465 | |
466 void GFX_init2_DMA(void) | |
467 { | |
468 /* Register to memory mode with ARGB8888 as color Mode */ | |
469 Dma2dHandle.Init.Mode = DMA2D_R2M; | |
470 Dma2dHandle.Init.ColorMode = DMA2D_ARGB4444;//to fake AL88, before: DMA2D_ARGB8888; | |
471 Dma2dHandle.Init.OutputOffset = 0; | |
472 | |
473 /* DMA2D Callbacks Configuration */ | |
474 Dma2dHandle.XferCpltCallback = GFX_Dma2d_TransferComplete; | |
475 Dma2dHandle.XferErrorCallback = GFX_Dma2d_TransferError; | |
476 | |
477 Dma2dHandle.Instance = DMA2D; | |
478 | |
479 /* DMA2D Initialisation */ | |
480 if(HAL_DMA2D_Init(&Dma2dHandle) != HAL_OK) | |
481 GFX_Error_Handler(); | |
482 | |
483 if(HAL_DMA2D_ConfigLayer(&Dma2dHandle, 1) != HAL_OK) | |
484 GFX_Error_Handler(); | |
485 | |
486 DMA2D_at_work = 255; | |
487 } | |
488 | |
489 | |
490 | |
491 void GFX_SetFrameTop(uint32_t pDestination) | 369 void GFX_SetFrameTop(uint32_t pDestination) |
492 { | 370 { |
493 lock_changeLTDC = 1; | 371 lock_changeLTDC = 1; |
494 uint8_t boolNextTop = !FrameHandler.boolNextTop; | 372 uint8_t boolNextTop = !FrameHandler.boolNextTop; |
495 | 373 |
525 GFX_SetFrameTop(pTop); | 403 GFX_SetFrameTop(pTop); |
526 GFX_SetFrameBottom(pBottom, 0, 0, 800, heightBottom); | 404 GFX_SetFrameBottom(pBottom, 0, 0, 800, heightBottom); |
527 } | 405 } |
528 | 406 |
529 | 407 |
530 uint32_t GFX_get_pActualFrameTop(void) | 408 static uint32_t GFX_get_pActualFrameTop(void) |
531 { | 409 { |
532 return FrameHandler.pActualTopBuffer; | 410 return FrameHandler.pActualTopBuffer; |
533 } | 411 } |
534 | 412 |
535 | 413 |
536 uint32_t GFX_get_pActualFrameBottom(void) | 414 static uint32_t GFX_get_pActualFrameBottom(void) |
537 { | 415 { |
538 return FrameHandler.actualBottom.pBuffer; | 416 return FrameHandler.actualBottom.pBuffer; |
539 } | 417 } |
540 | 418 |
541 | 419 |
770 } | 648 } |
771 offsetSourceStartOfLine -= 2; | 649 offsetSourceStartOfLine -= 2; |
772 } | 650 } |
773 } | 651 } |
774 | 652 |
775 HAL_StatusTypeDef GFX_SetBackgroundColor(uint32_t LayerIdx, uint8_t red, uint8_t green, uint8_t blue) | 653 |
776 { | 654 static void GFX_clear_frame_immediately(uint32_t pDestination) |
777 uint32_t tmp = 0; | |
778 uint32_t tmp1 = 0; | |
779 | |
780 /* Process locked */ | |
781 __HAL_LOCK(&LtdcHandle); | |
782 | |
783 /* Change LTDC peripheral state */ | |
784 LtdcHandle.State = HAL_LTDC_STATE_BUSY; | |
785 | |
786 /* Check the parameters */ | |
787 assert_param(IS_LTDC_LAYER(LayerIdx)); | |
788 | |
789 /* Copy new layer configuration into handle structure */ | |
790 LtdcHandle.LayerCfg[LayerIdx].Backcolor.Red = red; | |
791 LtdcHandle.LayerCfg[LayerIdx].Backcolor.Green = green; | |
792 LtdcHandle.LayerCfg[LayerIdx].Backcolor.Blue = blue; | |
793 | |
794 /* Configure the LTDC Layer */ | |
795 tmp = ((uint32_t)(green) << 8); | |
796 tmp1 = ((uint32_t)(red) << 16); | |
797 __HAL_LTDC_LAYER(&LtdcHandle, LayerIdx)->DCCR &= ~(LTDC_LxDCCR_DCBLUE | LTDC_LxDCCR_DCGREEN | LTDC_LxDCCR_DCRED | LTDC_LxDCCR_DCALPHA); | |
798 __HAL_LTDC_LAYER(&LtdcHandle, LayerIdx)->DCCR = (blue | tmp | tmp1 | 0xFF); | |
799 | |
800 /* Sets the Reload type */ | |
801 LtdcHandle.Instance->SRCR = LTDC_SRCR_IMR; | |
802 | |
803 /* Initialize the LTDC state*/ | |
804 LtdcHandle.State = HAL_LTDC_STATE_READY; | |
805 | |
806 /* Process unlocked */ | |
807 __HAL_UNLOCK(&LtdcHandle); | |
808 | |
809 return HAL_OK; | |
810 } | |
811 | |
812 | |
813 void GFX_clear_frame_immediately(uint32_t pDestination) | |
814 { | 655 { |
815 uint32_t i; | 656 uint32_t i; |
816 uint32_t* pfill = (uint32_t*) pDestination; | 657 uint32_t* pfill = (uint32_t*) pDestination; |
817 | 658 |
818 | 659 |
851 pDestination += nextlineStep; | 692 pDestination += nextlineStep; |
852 } | 693 } |
853 } | 694 } |
854 | 695 |
855 | 696 |
856 void GFX_clear_frame_dma2d(uint8_t frameId) | 697 static void GFX_clear_frame_dma2d(uint8_t frameId) |
857 { | 698 { |
858 if(frameId >= MAXFRAMES) | 699 if(frameId >= MAXFRAMES) |
859 return; | 700 return; |
860 | 701 |
861 DMA2D_at_work = frameId; | 702 DMA2D_at_work = frameId; |
887 *pfill++ = fillpattern; | 728 *pfill++ = fillpattern; |
888 } | 729 } |
889 } | 730 } |
890 | 731 |
891 | 732 |
892 void gfx_flip(point_t *p1, point_t *p2) | 733 static void gfx_flip(point_t *p1, point_t *p2) |
893 { | 734 { |
894 point_t temp; | 735 point_t temp; |
895 | 736 |
896 temp = *p1; | 737 temp = *p1; |
897 *p1 = *p2; | 738 *p1 = *p2; |
1112 } | 953 } |
1113 } | 954 } |
1114 } | 955 } |
1115 | 956 |
1116 | 957 |
1117 void GFX_draw_image_color(GFX_DrawCfgScreen *hgfx, SWindowGimpStyle window, const tImage *image) | 958 static void GFX_draw_image_color(GFX_DrawCfgScreen *hgfx, SWindowGimpStyle window, const tImage *image) |
1118 { | 959 { |
1119 uint16_t* pDestination; | 960 uint16_t* pDestination; |
1120 | 961 |
1121 uint32_t j; | 962 uint32_t j; |
1122 point_t start, stop; | 963 point_t start, stop; |
1158 } | 999 } |
1159 } | 1000 } |
1160 } | 1001 } |
1161 | 1002 |
1162 | 1003 |
1163 int16_Point_t switchToOctantZeroFrom(uint8_t octant, int16_t x, int16_t y) | |
1164 { | |
1165 int16_Point_t answer; | |
1166 switch(octant) | |
1167 { | |
1168 case 0:// return (x,y); | |
1169 answer.x = x; | |
1170 answer.y = y; | |
1171 break; | |
1172 case 1:// return (y,x); | |
1173 answer.x = y; | |
1174 answer.y = x; | |
1175 break; | |
1176 case 2:// return (y, -x); | |
1177 answer.x = y; | |
1178 answer.y = -x; | |
1179 break; | |
1180 case 3:// return (-x, y); | |
1181 answer.x = -x; | |
1182 answer.y = y; | |
1183 break; | |
1184 case 4:// return (-x, -y); | |
1185 answer.x = -x; | |
1186 answer.y = -y; | |
1187 break; | |
1188 case 5:// return (-y, -x); | |
1189 answer.x = -y; | |
1190 answer.y = -x; | |
1191 break; | |
1192 case 6:// return (-y, x); | |
1193 answer.x = -y; | |
1194 answer.y = x; | |
1195 break; | |
1196 case 7:// return (x, -y); | |
1197 answer.x = x; | |
1198 answer.y = -y; | |
1199 break; | |
1200 } | |
1201 return answer; | |
1202 } | |
1203 | |
1204 /* this is NOT fast nor optimized */ | 1004 /* this is NOT fast nor optimized */ |
1205 void GFX_draw_pixel(GFX_DrawCfgScreen *hgfx, int16_t x, int16_t y, uint8_t color) | 1005 static void GFX_draw_pixel(GFX_DrawCfgScreen *hgfx, int16_t x, int16_t y, uint8_t color) |
1206 { | 1006 { |
1207 uint16_t* pDestination; | 1007 uint16_t* pDestination; |
1208 | 1008 |
1209 SSettings* pSettings; | 1009 SSettings* pSettings; |
1210 pSettings = settingsGetPointer(); | 1010 pSettings = settingsGetPointer(); |
1219 { | 1019 { |
1220 pDestination += x * hgfx->ImageHeight; | 1020 pDestination += x * hgfx->ImageHeight; |
1221 pDestination += y; | 1021 pDestination += y; |
1222 } | 1022 } |
1223 *(__IO uint16_t*)pDestination = 0xFF << 8 | color; | 1023 *(__IO uint16_t*)pDestination = 0xFF << 8 | color; |
1224 } | |
1225 | |
1226 | |
1227 /* store the quarter circle for given radius */ | |
1228 void GFX_draw_circle_with_MEMORY(uint8_t use_memory, GFX_DrawCfgScreen *hgfx, point_t center, uint8_t radius, int8_t color) | |
1229 { | |
1230 } | 1024 } |
1231 | 1025 |
1232 /* this is NOT fast nor optimized */ | 1026 /* this is NOT fast nor optimized */ |
1233 void GFX_draw_circle(GFX_DrawCfgScreen *hgfx, point_t center, uint8_t radius, int8_t color) | 1027 void GFX_draw_circle(GFX_DrawCfgScreen *hgfx, point_t center, uint8_t radius, int8_t color) |
1234 { | 1028 { |
1391 // GFX_draw_colorline(hgfx, p1,p2, color ); | 1185 // GFX_draw_colorline(hgfx, p1,p2, color ); |
1392 GFX_draw_line(hgfx, p1,p2, color ); | 1186 GFX_draw_line(hgfx, p1,p2, color ); |
1393 } | 1187 } |
1394 } | 1188 } |
1395 } | 1189 } |
1396 | |
1397 /* drawVeilUntil ist auff�llen des Bereichs unter der Kurve mit etwas hellerer Farbe | |
1398 * Xdivide ist nichr benutzt, wird weggelassen in dieser Version | |
1399 */ | |
1400 /* | |
1401 void GFX_graph_print(GFX_DrawCfgScreen *hgfx, const SWindowGimpStyle *window, uint16_t drawVeilUntil, uint8_t Xdivide, uint16_t dataMin, uint16_t dataMax, uint16_t *data, uint16_t datalength, uint8_t color, uint8_t *colour_data) | |
1402 { | |
1403 if(window->bottom > 479) | |
1404 return; | |
1405 if(window->top > 479) | |
1406 return; | |
1407 if(window->right > 799) | |
1408 return; | |
1409 if(window->left > 799) | |
1410 return; | |
1411 if(window->bottom < 0) | |
1412 return; | |
1413 if(window->top < 0) | |
1414 return; | |
1415 if(window->right < 0) | |
1416 return; | |
1417 if(window->left < 0) | |
1418 return; | |
1419 if(window->bottom <= window->top) | |
1420 return; | |
1421 if(window->right <= window->left) | |
1422 return; | |
1423 | |
1424 uint16_t windowwidth = (uint16_t)window->right - (uint16_t)window->left; | |
1425 | |
1426 if(dataMax == dataMin) | |
1427 dataMax++; | |
1428 | |
1429 uint8_t invert = 0; | |
1430 if(dataMin > dataMax) | |
1431 { | |
1432 uint16_t dataFlip; | |
1433 dataFlip = dataMin; | |
1434 dataMin = dataMax; | |
1435 dataMax = dataFlip; | |
1436 invert = 1; | |
1437 } | |
1438 else | |
1439 invert = 0; | |
1440 | |
1441 uint16_t dataDelta = 0; | |
1442 dataDelta = dataMax - dataMin; | |
1443 | |
1444 uint8_t colormask = color; | |
1445 | |
1446 uint16_t loopX, loopData; | |
1447 loopX = 0; | |
1448 loopData = 0; | |
1449 while((loopX <= windowwidth) & (loopData < datalength)) | |
1450 { | |
1451 | |
1452 } | |
1453 | |
1454 | |
1455 uint32_t pDestination_zero_veil = 0; | |
1456 uint32_t pDestination = 0; | |
1457 uint32_t pDestinationOld = 0; | |
1458 int windowwidth = -1; | |
1459 int windowheight = -1; | |
1460 int w1 = -1; | |
1461 int w2 = -1; | |
1462 int value = -1; | |
1463 uint8_t colormask = 0; | |
1464 | |
1465 // preparation | |
1466 windowheight = window->bottom - window->top; | |
1467 windowwidth = window->right - window->left; | |
1468 pDestination_zero_veil = hgfx->FBStartAdress + 2 * ( (479 - (drawVeilUntil - 2) ) + ( (window->left) * hgfx->ImageHeight) ); | |
1469 | |
1470 while((w1 <= windowwidth) & (w2 < datalength)) | |
1471 { | |
1472 // before | |
1473 if(colour_data != NULL) | |
1474 { | |
1475 colormask = color + colour_data[w2]; | |
1476 } | |
1477 pDestination = hgfx->FBStartAdress + 2 * ( (479 - (window->top + value) ) + ( (w1 + window->left) * hgfx->ImageHeight) ); | |
1478 | |
1479 // after | |
1480 pDestination_zero_veil += (window->left) * hgfx->ImageHeight; | |
1481 } | |
1482 } | |
1483 */ | |
1484 | |
1485 | |
1486 | 1190 |
1487 // =============================================================================== | 1191 // =============================================================================== |
1488 // GFX_graph_print | 1192 // GFX_graph_print |
1489 /// @brief Print all those nice curves, especially in logbook und miniLiveLogGraph | 1193 /// @brief Print all those nice curves, especially in logbook und miniLiveLogGraph |
1490 /// @version 0.0.2 hw 160519 | 1194 /// @version 0.0.2 hw 160519 |
2015 } | 1719 } |
2016 } | 1720 } |
2017 } | 1721 } |
2018 | 1722 |
2019 | 1723 |
2020 | |
2021 | |
2022 /** | 1724 /** |
2023 ****************************************************************************** | 1725 ****************************************************************************** |
2024 * @brief GFX write label. / Write string with defined color | 1726 * @brief GFX write label. / Write string with defined color |
2025 * @author heinrichs weikamp gmbh | 1727 * @author heinrichs weikamp gmbh |
2026 * @version V0.0.1 | 1728 * @version V0.0.1 |
3272 * @param *cText: output | 2974 * @param *cText: output |
3273 * @param *pTextInput: input | 2975 * @param *pTextInput: input |
3274 * @param gfx_selected_language: gfx_selected_language | 2976 * @param gfx_selected_language: gfx_selected_language |
3275 * @retval counter and *cText content | 2977 * @retval counter and *cText content |
3276 */ | 2978 */ |
3277 int8_t GFX_write__Modify_helper(char *cText, const char *pTextInput, uint8_t gfx_selected_language) | 2979 static int8_t GFX_write__Modify_helper(char *cText, const char *pTextInput, uint8_t gfx_selected_language) |
3278 { | 2980 { |
3279 uint32_t pText, backup; | 2981 uint32_t pText, backup; |
3280 uint8_t textId; | 2982 uint8_t textId; |
3281 int8_t counter; | 2983 int8_t counter; |
3282 uint32_t found; | 2984 uint32_t found; |
3372 * @param *cfg: Ydelta, Font | 3074 * @param *cfg: Ydelta, Font |
3373 * @param *pText: character | 3075 * @param *pText: character |
3374 * @retval Ydelta: 0 if text has to start left ( and probably does not fit) | 3076 * @retval Ydelta: 0 if text has to start left ( and probably does not fit) |
3375 */ | 3077 */ |
3376 | 3078 |
3377 uint32_t GFX_write__Modify_Xdelta__Centered(GFX_CfgWriteString* cfg, GFX_DrawCfgWindow* hgfx, const char *pTextInput) | 3079 static uint32_t GFX_write__Modify_Xdelta__Centered(GFX_CfgWriteString* cfg, GFX_DrawCfgWindow* hgfx, const char *pTextInput) |
3378 { | 3080 { |
3379 char cText[101]; | 3081 char cText[101]; |
3380 uint32_t result; | 3082 uint32_t result; |
3381 uint32_t Xsum; | 3083 uint32_t Xsum; |
3382 uint32_t i, j; | 3084 uint32_t i, j; |
3442 result = 0; | 3144 result = 0; |
3443 return result; | 3145 return result; |
3444 } | 3146 } |
3445 | 3147 |
3446 | 3148 |
3447 uint32_t GFX_write__Modify_Xdelta__RightAlign(GFX_CfgWriteString* cfg, GFX_DrawCfgWindow* hgfx, const char *pTextInput) | 3149 static uint32_t GFX_write__Modify_Xdelta__RightAlign(GFX_CfgWriteString* cfg, GFX_DrawCfgWindow* hgfx, const char *pTextInput) |
3448 { | 3150 { |
3449 char cText[101]; | 3151 char cText[101]; |
3450 uint32_t result; | 3152 uint32_t result; |
3451 uint32_t Xsum; | 3153 uint32_t Xsum; |
3452 uint32_t i, j; | 3154 uint32_t i, j; |
3539 else | 3241 else |
3540 result = 0; | 3242 result = 0; |
3541 | 3243 |
3542 return result; | 3244 return result; |
3543 } | 3245 } |
3544 | |
3545 | |
3546 | 3246 |
3547 void GFX_LTDC_Init(void) | 3247 void GFX_LTDC_Init(void) |
3548 { | 3248 { |
3549 /* | 3249 /* |
3550 HSYNC=10 (9+1) | 3250 HSYNC=10 (9+1) |
3609 /* Initialization Error */ | 3309 /* Initialization Error */ |
3610 GFX_Error_Handler(); | 3310 GFX_Error_Handler(); |
3611 } | 3311 } |
3612 } | 3312 } |
3613 | 3313 |
3614 void GFX_VGA_LTDC_Init_test(void) | |
3615 { | |
3616 | |
3617 LtdcHandle.Init.HorizontalSync = 48; | |
3618 /* Vertical synchronization height = Vsync - 1 */ | |
3619 LtdcHandle.Init.VerticalSync = 3; | |
3620 /* Accumulated horizontal back porch = Hsync + HBP - 1 */ | |
3621 LtdcHandle.Init.AccumulatedHBP = 48 + 40 - 1; | |
3622 /* Accumulated vertical back porch = Vsync + VBP - 1 */ | |
3623 LtdcHandle.Init.AccumulatedVBP = 3 + 29 - 1; | |
3624 /* Accumulated active width = Hsync + HBP + Active Width - 1 */ | |
3625 LtdcHandle.Init.AccumulatedActiveW = 800 + 48 + 40 - 1;//499;//500;//499; | |
3626 /* Accumulated active height = Vsync + VBP + Active Heigh - 1 */ | |
3627 LtdcHandle.Init.AccumulatedActiveH = 480 + 3 + 29 - 1; | |
3628 /* Total width = Hsync + HBP + Active Width + HFP - 1 */ | |
3629 LtdcHandle.Init.TotalWidth = 800 + 48 + 40 - 1 + 40;//508;//507; | |
3630 /* Total height = Vsync + VBP + Active Heigh + VFP - 1 */ | |
3631 LtdcHandle.Init.TotalHeigh = 480 + 3 + 29 - 1 + 13; | |
3632 | |
3633 /* Configure R,G,B component values for LCD background color */ | |
3634 LtdcHandle.Init.Backcolor.Red= 0; | |
3635 LtdcHandle.Init.Backcolor.Blue= 0; | |
3636 LtdcHandle.Init.Backcolor.Green= 0; | |
3637 | |
3638 /* LCD clock configuration */ | |
3639 /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ | |
3640 /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */ | |
3641 /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/4 = 48 Mhz */ | |
3642 /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_8 = 48/4 = 6Mhz */ | |
3643 | |
3644 /* done in main.c SystemClockConfig | |
3645 | |
3646 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; | |
3647 PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; | |
3648 PeriphClkInitStruct.PLLSAI.PLLSAIR = 4; | |
3649 PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8; | |
3650 HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); | |
3651 */ | |
3652 /* Polarity */ | |
3653 LtdcHandle.Init.HSPolarity = LTDC_HSPOLARITY_AL; | |
3654 LtdcHandle.Init.VSPolarity = LTDC_VSPOLARITY_AL; | |
3655 LtdcHandle.Init.DEPolarity = LTDC_DEPOLARITY_AL; | |
3656 LtdcHandle.Init.PCPolarity = LTDC_PCPOLARITY_IPC;//LTDC_PCPOLARITY_IPC; | |
3657 | |
3658 LtdcHandle.Instance = LTDC; | |
3659 | |
3660 /* Configure the LTDC */ | |
3661 if(HAL_LTDC_Init(&LtdcHandle) != HAL_OK) // auch init der GPIO Pins | |
3662 { | |
3663 /* Initialization Error */ | |
3664 GFX_Error_Handler(); | |
3665 } | |
3666 } | |
3667 | |
3668 | |
3669 void GFX_VGA_LTDC_Init_org(void) | |
3670 { | |
3671 | |
3672 LtdcHandle.Init.HorizontalSync = 96; | |
3673 /* Vertical synchronization height = Vsync - 1 */ | |
3674 LtdcHandle.Init.VerticalSync = 2; | |
3675 /* Accumulated horizontal back porch = Hsync + HBP - 1 */ | |
3676 LtdcHandle.Init.AccumulatedHBP = 96 + 48; | |
3677 /* Accumulated vertical back porch = Vsync + VBP - 1 */ | |
3678 LtdcHandle.Init.AccumulatedVBP = 2 + 35; | |
3679 /* Accumulated active width = Hsync + HBP + Active Width - 1 */ | |
3680 LtdcHandle.Init.AccumulatedActiveW = 96 + 48 + 800;//499;//500;//499; | |
3681 /* Accumulated active height = Vsync + VBP + Active Heigh - 1 */ | |
3682 LtdcHandle.Init.AccumulatedActiveH = 2 + 35 + 480; | |
3683 /* Total width = Hsync + HBP + Active Width + HFP - 1 */ | |
3684 LtdcHandle.Init.TotalWidth = 96 + 48 + 800 + 12;//508;//507; | |
3685 /* Total height = Vsync + VBP + Active Heigh + VFP - 1 */ | |
3686 LtdcHandle.Init.TotalHeigh = 2 + 35 + 480 + 12; | |
3687 | |
3688 /* Configure R,G,B component values for LCD background color */ | |
3689 LtdcHandle.Init.Backcolor.Red= 0; | |
3690 LtdcHandle.Init.Backcolor.Blue= 0; | |
3691 LtdcHandle.Init.Backcolor.Green= 0; | |
3692 | |
3693 /* LCD clock configuration */ | |
3694 /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ | |
3695 /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */ | |
3696 /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/4 = 48 Mhz */ | |
3697 /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_8 = 48/4 = 6Mhz */ | |
3698 | |
3699 /* done in main.c SystemClockConfig | |
3700 | |
3701 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; | |
3702 PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; | |
3703 PeriphClkInitStruct.PLLSAI.PLLSAIR = 4; | |
3704 PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8; | |
3705 HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); | |
3706 */ | |
3707 /* Polarity */ | |
3708 LtdcHandle.Init.HSPolarity = LTDC_HSPOLARITY_AL; | |
3709 LtdcHandle.Init.VSPolarity = LTDC_VSPOLARITY_AH; | |
3710 LtdcHandle.Init.DEPolarity = LTDC_DEPOLARITY_AL; | |
3711 LtdcHandle.Init.PCPolarity = LTDC_PCPOLARITY_IPC;//LTDC_PCPOLARITY_IPC; | |
3712 | |
3713 LtdcHandle.Instance = LTDC; | |
3714 | |
3715 /* Configure the LTDC */ | |
3716 if(HAL_LTDC_Init(&LtdcHandle) != HAL_OK) // auch init der GPIO Pins | |
3717 { | |
3718 /* Initialization Error */ | |
3719 GFX_Error_Handler(); | |
3720 } | |
3721 } | |
3722 | |
3723 void GFX_VGA_LTDC_Init(void) | |
3724 //void GFX_VGA_LTDC_Init_640x480(void) | |
3725 { | |
3726 | |
3727 LtdcHandle.Init.HorizontalSync = 96; | |
3728 /* Vertical synchronization height = Vsync - 1 */ | |
3729 LtdcHandle.Init.VerticalSync = 2; | |
3730 /* Accumulated horizontal back porch = Hsync + HBP - 1 */ | |
3731 LtdcHandle.Init.AccumulatedHBP = 96 + 48; | |
3732 /* Accumulated vertical back porch = Vsync + VBP - 1 */ | |
3733 LtdcHandle.Init.AccumulatedVBP = 2 + 35; | |
3734 /* Accumulated active width = Hsync + HBP + Active Width - 1 */ | |
3735 LtdcHandle.Init.AccumulatedActiveW = 96 + 48 + 640;//499;//500;//499; | |
3736 /* Accumulated active height = Vsync + VBP + Active Heigh - 1 */ | |
3737 LtdcHandle.Init.AccumulatedActiveH = 2 + 35 + 480; | |
3738 /* Total width = Hsync + HBP + Active Width + HFP - 1 */ | |
3739 LtdcHandle.Init.TotalWidth = 96 + 48 + 640 + 12;//508;//507; | |
3740 /* Total height = Vsync + VBP + Active Heigh + VFP - 1 */ | |
3741 LtdcHandle.Init.TotalHeigh = 2 + 35 + 480 + 12; | |
3742 | |
3743 /* Configure R,G,B component values for LCD background color */ | |
3744 LtdcHandle.Init.Backcolor.Red= 0; | |
3745 LtdcHandle.Init.Backcolor.Blue= 0; | |
3746 LtdcHandle.Init.Backcolor.Green= 0; | |
3747 | |
3748 /* LCD clock configuration */ | |
3749 /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ | |
3750 /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */ | |
3751 /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/4 = 48 Mhz */ | |
3752 /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_8 = 48/4 = 6Mhz */ | |
3753 | |
3754 /* done in main.c SystemClockConfig | |
3755 | |
3756 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; | |
3757 PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; | |
3758 PeriphClkInitStruct.PLLSAI.PLLSAIR = 4; | |
3759 PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8; | |
3760 HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); | |
3761 */ | |
3762 /* Polarity */ | |
3763 LtdcHandle.Init.HSPolarity = LTDC_HSPOLARITY_AL; | |
3764 LtdcHandle.Init.VSPolarity = LTDC_VSPOLARITY_AH; | |
3765 LtdcHandle.Init.DEPolarity = LTDC_DEPOLARITY_AL; | |
3766 LtdcHandle.Init.PCPolarity = LTDC_PCPOLARITY_IPC;//LTDC_PCPOLARITY_IPC; | |
3767 | |
3768 LtdcHandle.Instance = LTDC; | |
3769 | |
3770 /* Configure the LTDC */ | |
3771 if(HAL_LTDC_Init(&LtdcHandle) != HAL_OK) // auch init der GPIO Pins | |
3772 { | |
3773 /* Initialization Error */ | |
3774 GFX_Error_Handler(); | |
3775 } | |
3776 } | |
3777 | |
3778 | |
3779 void GFX_LTDC_LayerDefaultInit(uint16_t LayerIndex, uint32_t FB_Address) | 3314 void GFX_LTDC_LayerDefaultInit(uint16_t LayerIndex, uint32_t FB_Address) |
3780 { | 3315 { |
3781 LTDC_LayerCfgTypeDef Layercfg; | 3316 LTDC_LayerCfgTypeDef Layercfg; |
3782 | 3317 |
3783 /* Layer Init */ | 3318 /* Layer Init */ |
3800 HAL_LTDC_ConfigCLUT(&LtdcHandle, ColorLUT, CLUT_END, LayerIndex); | 3335 HAL_LTDC_ConfigCLUT(&LtdcHandle, ColorLUT, CLUT_END, LayerIndex); |
3801 HAL_LTDC_ConfigLayer(&LtdcHandle, &Layercfg, LayerIndex); | 3336 HAL_LTDC_ConfigLayer(&LtdcHandle, &Layercfg, LayerIndex); |
3802 HAL_LTDC_EnableCLUT(&LtdcHandle, LayerIndex); | 3337 HAL_LTDC_EnableCLUT(&LtdcHandle, LayerIndex); |
3803 } | 3338 } |
3804 | 3339 |
3805 void GFX_VGA_LTDC_LayerDefaultInit(uint16_t LayerIndex, uint32_t FB_Address) | 3340 static uint32_t GFX_doubleBufferOne(void) |
3806 { | |
3807 LTDC_LayerCfgTypeDef Layercfg; | |
3808 | |
3809 /* Layer Init */ | |
3810 Layercfg.WindowX0 = 0; | |
3811 Layercfg.WindowX1 = 640; | |
3812 Layercfg.WindowY0 = 0; | |
3813 Layercfg.WindowY1 = 480; | |
3814 Layercfg.PixelFormat = LTDC_PIXEL_FORMAT_AL88;//LTDC_PIXEL_FORMAT_ARGB8888; | |
3815 Layercfg.FBStartAdress = FB_Address; | |
3816 Layercfg.Alpha = 255; | |
3817 Layercfg.Alpha0 = 0; | |
3818 Layercfg.Backcolor.Blue = 0; | |
3819 Layercfg.Backcolor.Green = 0; | |
3820 Layercfg.Backcolor.Red = 0; | |
3821 Layercfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA; | |
3822 Layercfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA; | |
3823 Layercfg.ImageWidth = 640; | |
3824 Layercfg.ImageHeight = 480; | |
3825 | |
3826 HAL_LTDC_ConfigCLUT(&LtdcHandle, ColorLUT, CLUT_END, LayerIndex); | |
3827 HAL_LTDC_ConfigLayer(&LtdcHandle, &Layercfg, LayerIndex); | |
3828 HAL_LTDC_EnableCLUT(&LtdcHandle, LayerIndex); | |
3829 } | |
3830 | |
3831 void GFX_LTDC_LayerTESTInit(uint16_t LayerIndex, uint32_t FB_Address) | |
3832 { | |
3833 LTDC_LayerCfgTypeDef Layercfg; | |
3834 | |
3835 /* Layer Init */ | |
3836 Layercfg.WindowX0 = 0; | |
3837 Layercfg.WindowX1 = 390; | |
3838 Layercfg.WindowY0 = 0; | |
3839 Layercfg.WindowY1 = 800; | |
3840 Layercfg.PixelFormat = LTDC_PIXEL_FORMAT_AL88;//LTDC_PIXEL_FORMAT_ARGB8888; | |
3841 Layercfg.FBStartAdress = FB_Address; | |
3842 Layercfg.Alpha = 255; | |
3843 Layercfg.Alpha0 = 255; | |
3844 Layercfg.Backcolor.Blue = 0; | |
3845 Layercfg.Backcolor.Green = 0; | |
3846 Layercfg.Backcolor.Red = 200; | |
3847 Layercfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA; | |
3848 Layercfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA; | |
3849 Layercfg.ImageWidth = 480; | |
3850 Layercfg.ImageHeight = 800; | |
3851 | |
3852 HAL_LTDC_ConfigCLUT(&LtdcHandle, ColorLUT, CLUT_END, LayerIndex); | |
3853 HAL_LTDC_ConfigLayer(&LtdcHandle, &Layercfg, LayerIndex); | |
3854 HAL_LTDC_EnableCLUT(&LtdcHandle, LayerIndex); | |
3855 } | |
3856 | |
3857 | |
3858 uint32_t GFX_doubleBufferOne(void) | |
3859 { | 3341 { |
3860 return SDRAM_DOUBLE_BUFFER_ONE; | 3342 return SDRAM_DOUBLE_BUFFER_ONE; |
3861 } | 3343 } |
3862 | 3344 |
3863 | 3345 |
3864 uint32_t GFX_doubleBufferTwo(void) | 3346 static uint32_t GFX_doubleBufferTwo(void) |
3865 { | 3347 { |
3866 return SDRAM_DOUBLE_BUFFER_TWO; | 3348 return SDRAM_DOUBLE_BUFFER_TWO; |
3867 } | |
3868 | |
3869 /* | |
3870 void doubleBufferClear(uint32_t pDestination) | |
3871 { | |
3872 for(uint32_t i = 2*200*480; i > 0; i--) | |
3873 { | |
3874 *(__IO uint16_t*)pDestination = 0; | |
3875 pDestination += 2; | |
3876 *(__IO uint16_t*)pDestination = 0; | |
3877 pDestination += 2; | |
3878 *(__IO uint16_t*)pDestination = 0; | |
3879 pDestination += 2; | |
3880 *(__IO uint16_t*)pDestination = 0; | |
3881 pDestination += 2; | |
3882 } | |
3883 } | |
3884 | |
3885 | |
3886 void GFX_doubleBufferClearOne(void) | |
3887 { | |
3888 doubleBufferClear(SDRAM_DOUBLE_BUFFER_ONE); | |
3889 } | |
3890 | |
3891 | |
3892 void GFX_doubleBufferClearTwo(void) | |
3893 { | |
3894 doubleBufferClear(SDRAM_DOUBLE_BUFFER_TWO); | |
3895 } | |
3896 */ | |
3897 | |
3898 uint32_t getFrameByNumber(uint8_t ZeroToMaxFrames) | |
3899 { | |
3900 if(ZeroToMaxFrames >= MAXFRAMES) | |
3901 return 0; | |
3902 else | |
3903 return frame[ZeroToMaxFrames].StartAddress; | |
3904 } | 3349 } |
3905 | 3350 |
3906 uint32_t getFrame(uint8_t callerId) | 3351 uint32_t getFrame(uint8_t callerId) |
3907 { | 3352 { |
3908 uint8_t i; | 3353 uint8_t i; |
3983 for(int i = 0;i<MAXFRAMES;i++) | 3428 for(int i = 0;i<MAXFRAMES;i++) |
3984 if(frame[i].status == BLOCKED) | 3429 if(frame[i].status == BLOCKED) |
3985 count--; | 3430 count--; |
3986 | 3431 |
3987 return count; | 3432 return count; |
3988 } | |
3989 | |
3990 | |
3991 uint8_t getFrameCount(uint8_t frameId) | |
3992 { | |
3993 if(frameId < (MAXFRAMECOUNTER - 3)) | |
3994 return frameCounter[frameId]; | |
3995 else | |
3996 return frameCounter[MAXFRAMECOUNTER - 2]; | |
3997 } | 3433 } |
3998 | 3434 |
3999 | 3435 |
4000 void housekeepingFrame(void) | 3436 void housekeepingFrame(void) |
4001 { | 3437 { |