diff --git a/avr/devices/c03/main/dlg_netstats.asm b/avr/devices/c03/main/dlg_netstats.asm index b38f801..3947b28 100644 --- a/avr/devices/c03/main/dlg_netstats.asm +++ b/avr/devices/c03/main/dlg_netstats.asm @@ -61,7 +61,7 @@ DlgNetStats_Handler_Fns: rjmp dlgNetStatsOnFini rjmp dlgNetStatsOnShow rjmp dlgNetStatsOnHide - ret ; rjmp dlgNetStatsOnTouch + rjmp dlgNetStatsOnTouch rjmp dlgNetStatsOnTimer diff --git a/avr/modules/lcd2/gui/button.asm b/avr/modules/lcd2/gui/button.asm index 84d9253..6e97bd6 100644 --- a/avr/modules/lcd2/gui/button.asm +++ b/avr/modules/lcd2/gui/button.asm @@ -68,8 +68,8 @@ buttonDraw: lpm r13, Z+ rcall buttonClearBackground - rcall buttonDrawText rcall buttonDrawBorder + rcall buttonDrawText ret ; @end @@ -120,11 +120,11 @@ buttonClearBackground_bgFill: ; @clobbers any, !Y, !Z buttonDrawBorder: - ldi r16, LOW(STYLE_BUTTON_COL_BORDER) - mov r2, r16 - ldi r16, HIGH(STYLE_BUTTON_COL_BORDER) - mov r3, r16 - bigcall Display_DrawRect + ldi r16, LOW(STYLE_BUTTON_COL_BORDER) + mov r2, r16 + ldi r16, HIGH(STYLE_BUTTON_COL_BORDER) + mov r3, r16 + bigcall Display_DrawRect ret ; @end @@ -143,51 +143,43 @@ buttonDrawBorder: ; @clobbers any, !Y, !Z buttonDrawText: - push r4 - push r5 - push r6 - push r7 - ldi r16, 2 - clr r17 - add r4, r16 ; x+=2 - adc r5, r17 - add r6, r16 ; y+=2 - adc r7, r17 - - ; set text colors - tst r14 - brne buttonDrawText_down - ; set background color - ldi r16, LOW(STYLE_BUTTON_COL_BG_NORM) - mov r0, r16 - ldi r16, HIGH(STYLE_BUTTON_COL_BG_NORM) - mov r1, r16 - ; set foreground color - ldi r16, LOW(STYLE_BUTTON_COL_FG_NORM) - mov r2, r16 - ldi r16, HIGH(STYLE_BUTTON_COL_FG_NORM) - mov r3, r16 - rjmp buttonDrawText_draw - buttonDrawText_down: - ; set background color - ldi r16, LOW(STYLE_BUTTON_COL_BG_PRESSED) - mov r0, r16 - ldi r16, HIGH(STYLE_BUTTON_COL_BG_PRESSED) - mov r1, r16 - - ; set foreground color - ldi r16, LOW(STYLE_BUTTON_COL_FG_PRESSED) - mov r2, r16 - ldi r16, HIGH(STYLE_BUTTON_COL_FG_PRESSED) - mov r3, r16 - buttonDrawText_draw: - mov zl, r12 - mov zh, r13 - bigcall Window_DrawColorTextFlash - pop r7 - pop r6 - pop r5 - pop r4 + ldi r16, 2 + clr r17 + add r4, r16 ; x+=2 + adc r5, r17 + add r6, r16 ; y+=2 + adc r7, r17 + + ; set text colors + tst r14 + brne buttonDrawText_down + ; set background color + ldi r16, LOW(STYLE_BUTTON_COL_BG_NORM) + mov r0, r16 + ldi r16, HIGH(STYLE_BUTTON_COL_BG_NORM) + mov r1, r16 + ; set foreground color + ldi r16, LOW(STYLE_BUTTON_COL_FG_NORM) + mov r2, r16 + ldi r16, HIGH(STYLE_BUTTON_COL_FG_NORM) + mov r3, r16 + rjmp buttonDrawText_draw +buttonDrawText_down: + ; set background color + ldi r16, LOW(STYLE_BUTTON_COL_BG_PRESSED) + mov r0, r16 + ldi r16, HIGH(STYLE_BUTTON_COL_BG_PRESSED) + mov r1, r16 + + ; set foreground color + ldi r16, LOW(STYLE_BUTTON_COL_FG_PRESSED) + mov r2, r16 + ldi r16, HIGH(STYLE_BUTTON_COL_FG_PRESSED) + mov r3, r16 +buttonDrawText_draw: + mov zl, r12 + mov zh, r13 + bigcall Window_DrawColorTextFlash ret ; @end diff --git a/avr/modules/lcd2/gui/window.asm b/avr/modules/lcd2/gui/window.asm index 8ecf980..e0af9a5 100644 --- a/avr/modules/lcd2/gui/window.asm +++ b/avr/modules/lcd2/gui/window.asm @@ -247,7 +247,7 @@ winCalcAbsPosAndBorders: ; @param R7:R6 absolute Y on screen ; @param R9:R8 first X pos right of windows ; @return R5:R4 X pos behind char -; @clobbers any, !Y, !R6, !R7 +; @clobbers any, !Y, !R6, !R7, !R8, !R9, !R10, !R11 winDrawChar: push zl diff --git a/avr/modules/lcd2/ili9341/graphops.asm b/avr/modules/lcd2/ili9341/graphops.asm index 51dfc85..b36fb00 100644 --- a/avr/modules/lcd2/ili9341/graphops.asm +++ b/avr/modules/lcd2/ili9341/graphops.asm @@ -20,17 +20,16 @@ ; @param r7:r6 Y0 ; @param r9:r8 X1/W ; @param r11:r10 Y1/H +; @clobbers R16, R17, R20, R21, R22, R23, R24, R25 Display_FillRect: push r15 in r15, SREG cli - rcall ili9341BeginSpi ; (R16, R17) - rcall ili9341SetAddressWindow ; (R16, r20, r21) + rcall ili9341BeginSpi ; (R16, R17) + rcall ili9341SetAddressWindow ; (R16, r20, r21) - mov r18, r2 ; color - mov r19, r3 mov r22, r10 ; H low mov r23, r11 ; H high ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM @@ -42,14 +41,14 @@ Display_FillRect_loopH: mov r24, r8 ; W low mov r25, r9 ; W high Display_FillRect_loopW: - mov r16, r19 + mov r16, r3 rcall SPIHW_MasterTransfer ; (R16) - mov r16, r18 + mov r16, r2 rcall SPIHW_MasterTransfer ; (R16) sbiw r25:r24, 1 brne Display_FillRect_loopW - mov r24, r22 ; H low - mov r25, r23 ; H high + mov r24, r22 ; remaining H low + mov r25, r23 ; remaining H high sbiw r25:r24, 1 ; dec mov r22, r24 ; save in r23:r22 mov r23, r25 @@ -67,10 +66,10 @@ Display_FillRect_loopW: ; @routine Display_DrawRect @global ; ; @param r3:r2 color -; @param r5:r4 X0 -; @param r7:r6 Y0 -; @param r9:r8 X1/W -; @param r11:r10 Y1/H +; @param r5:r4 X +; @param r7:r6 Y +; @param r9:r8 W +; @param r11:r10 H Display_DrawRect: push r15 @@ -78,31 +77,33 @@ Display_DrawRect: cli ; upper H line - rcall Display_DrawHLine + rcall Display_DrawHLine ; (R16, R17, R20, R21, R24, R25) + push r6 ; save Y0 push r7 - add r6, r10 + add r6, r10 ; Y+=(H-1) adc r7, r11 ldi r16, 1 + clr r17 sub r6, r16 - sbc r7, r16 - add r7, r16 + sbc r7, r17 ; lower H line rcall Display_DrawHLine pop r7 pop r6 - - ; left H line + + ; left V line rcall Display_DrawVLine + push r4 ; save X0 push r5 - add r4, r8 + add r4, r8 ; X+=W-1 adc r5, r9 ldi r16, 1 + clr r17 sub r4, r16 - sbc r5, r16 - add r5, r16 - ; right H line + sbc r5, r17 + ; right V line rcall Display_DrawVLine pop r5 pop r4 @@ -118,36 +119,29 @@ Display_DrawRect: ; @routine Display_DrawHLine @global ; ; @param r3:r2 color -; @param r5:r4 X0 -; @param r7:r6 Y0 +; @param r5:r4 X +; @param r7:r6 Y ; @param r9:r8 W +; @clobbers R16, R17, R20, R21, R24, R25 Display_DrawHLine: push r15 in r15, SREG cli - ldi r16, 1 ; height is 1 - mov r10, r16 - clr r11 - rcall ili9341BeginSpi ; (R16, R17) - rcall ili9341SetAddressWindow ; (R16, r20, r21) - - ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM - rcall ili9341SendCommand ; (R16) - - cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low - sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA) - mov r24, r8 ; W low - mov r25, r9 ; W high -Display_DrawHLine_loop: - mov r16, r3 - rcall SPIHW_MasterTransfer ; (R16) - mov r16, r2 - rcall SPIHW_MasterTransfer ; (R16) - sbiw r25:r24, 1 - brne Display_DrawHLine_loop - sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high + push r10 + push r11 + clr r10 + inc r10 ; height is 1 + clr r11 + rcall ili9341BeginSpi ; (R16, R17) + rcall ili9341SetAddressWindow ; (R16, r20, r21) + pop r11 + pop r10 + mov r24, r8 ; W low + mov r25, r9 ; W high + rcall displaySendColor ; (R16) + rcall ili9341EndSpi out SREG, r15 pop r15 @@ -163,33 +157,26 @@ Display_DrawHLine_loop: ; @param r5:r4 X0 ; @param r7:r6 Y0 ; @param r11:r10 H +; @clobbers R16, R17, R20, R21, R24, R25 Display_DrawVLine: push r15 in r15, SREG cli - ldi r16, 1 ; width is 1 - mov r8, r16 - clr r9 - rcall ili9341BeginSpi ; (R16, R17) - rcall ili9341SetAddressWindow ; (R16, r20, r21) - - ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM - rcall ili9341SendCommand ; (R16) - - cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low - sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA) - mov r24, r10 ; H low - mov r25, r11 ; H high -Display_DrawVLine_loop: - mov r16, r3 - rcall SPIHW_MasterTransfer ; (R16) - mov r16, r2 - rcall SPIHW_MasterTransfer ; (R16) - sbiw r25:r24, 1 - brne Display_DrawVLine_loop - sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high + push r8 + push r9 + clr r8 + inc r8 ; width is 1 + clr r9 + rcall ili9341BeginSpi ; (R16, R17) + rcall ili9341SetAddressWindow ; (R16, r20, r21) + pop r9 + pop r8 + mov r24, r10 ; H low + mov r25, r11 ; H high + rcall displaySendColor ; (R16) + rcall ili9341EndSpi out SREG, r15 pop r15 @@ -198,6 +185,32 @@ Display_DrawVLine_loop: +; --------------------------------------------------------------------------- +; @routine displaySendColor + +; @param r25:r24 number of pixel to write +; @param r3:r2 color to write +; @clobbers r16 + +displaySendColor: + ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM + rcall ili9341SendCommand ; (R16) + + cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low + sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA) +displaySendColor_loop: + mov r16, r3 + rcall SPIHW_MasterTransfer ; (R16) + mov r16, r2 + rcall SPIHW_MasterTransfer ; (R16) + sbiw r25:r24, 1 + brne displaySendColor_loop + sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high + ret +; @end + + + ; --------------------------------------------------------------------------- ; @routine Display_DrawChar @global @@ -480,6 +493,21 @@ ili9341BitBlitStretchNWriteLine_loop2: ; @clobbers R16, r20, r21 ili9341SetAddressWindow: + rcall ili9341SetColumnAddress ; (R16, r20, r21) + rcall ili9341SetRowAddress ; (R16, r20, r21) + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine ili9341SetColumnAddress +; +; @param r5:r4 X0 +; @param r9:r8 W +; @clobbers R16, r20, r21 + +ili9341SetColumnAddress: ; calc XEnd (=X+W-1) mov r20, r8 mov r21, r9 @@ -491,17 +519,35 @@ ili9341SetAddressWindow: ; send column address ldi r16, ILI9341_CMD_CASET rcall ili9341SendCommand ; (R16) - ; X0 - mov r16, r5 - rcall ili9341SendData ; (R16) - mov r16, r4 - rcall ili9341SendData ; (R16) - ; X1 - mov r16, r21 - rcall ili9341SendData ; (R16) - mov r16, r20 - rcall ili9341SendData ; (R16) + cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low + sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA) + + ; Xstart + mov r16, r5 + rcall SPIHW_MasterTransfer ; (R16) + mov r16, r4 + rcall SPIHW_MasterTransfer ; (R16) + ; Xend + mov r16, r21 + rcall SPIHW_MasterTransfer ; (R16) + mov r16, r20 + rcall SPIHW_MasterTransfer ; (R16) + + sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine ili9341SetRowAddress +; +; @param r7:r6 Y0 +; @param r11:r10 H +; @clobbers R16, r20, r21 + +ili9341SetRowAddress: ; calc YEnd (=Y+H-1) mov r20, r10 mov r21, r11 @@ -512,18 +558,23 @@ ili9341SetAddressWindow: ; send row address ldi r16, ILI9341_CMD_PASET - rcall ili9341SendCommand ; (R16) - ; Y0 - mov r16, r7 - rcall ili9341SendData ; (R16) - mov r16, r6 - rcall ili9341SendData - ; Y1 - mov r16, r21 - rcall ili9341SendData ; (R16) - mov r16, r20 - rcall ili9341SendData ; (R16) + rcall ili9341SendCommand ; (R16) + cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low + sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA) + + ; Ystart + mov r16, r7 + rcall SPIHW_MasterTransfer ; (R16) + mov r16, r6 + rcall SPIHW_MasterTransfer ; (R16) + ; Yend + mov r16, r21 + rcall SPIHW_MasterTransfer ; (R16) + mov r16, r20 + rcall SPIHW_MasterTransfer ; (R16) + + sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high ret ; @end