From fbb34c1b5a595daa5390fe3d3ff291bdf3c78ecf Mon Sep 17 00:00:00 2001 From: Pedro de Oliveira Date: Sat, 25 Mar 2017 00:51:44 +0000 Subject: [PATCH] Adds draw mode --- Src/main.c | 1 + Src/ssd1306.c | 25 ++++++++++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/Src/main.c b/Src/main.c index 6c9a511..869d582 100644 --- a/Src/main.c +++ b/Src/main.c @@ -108,6 +108,7 @@ int main(void) /* USER CODE BEGIN 3 */ ssd1306_Fill(Black); + //ssd1306_Fill(White); /* int x, msg; diff --git a/Src/ssd1306.c b/Src/ssd1306.c index 6c7bf83..3098a96 100644 --- a/Src/ssd1306.c +++ b/Src/ssd1306.c @@ -65,20 +65,31 @@ void ssd1306_LoadImage(void) { fastlz_decompress(image, 1024, SSD1306_Buffer, 1024); } -void ssd1306_DrawSprite(SpriteDef *sprite, int8_t x, int8_t y) { +void ssd1306_DrawSprite(SpriteDef *sprite, int x, int y, int mode) { int spriteAddr = 0; - int currX, currY = 0; + int currX, currY = y; for(int bank = y / 8; bank < sprite->height / 8; bank++) { int start = (bank * sprite->width) + (bank * sprite->height) + (x); currX = x; int end = start + sprite->width; for(int addr = start; addr < end; addr++) { - - if (currX > 0 && currY > 0 && currX < SSD1306_WIDTH && currY < SSD1306_HEIGHT) { - SSD1306_Buffer[addr] = sprite->buffer[spriteAddr]; + if (currX >= 0 && currY >= 0 && currX < SSD1306_WIDTH && currY < SSD1306_HEIGHT) { + switch(mode) { + case 0: + SSD1306_Buffer[addr] = sprite->buffer[spriteAddr]; + break; + case 1: + SSD1306_Buffer[addr] |= sprite->buffer[spriteAddr]; + break; + case 2: + SSD1306_Buffer[addr] &= sprite->buffer[spriteAddr]; + break; + case 3: + SSD1306_Buffer[addr] ^= sprite->buffer[spriteAddr]; + break; + } } - spriteAddr++; currX++; } @@ -107,7 +118,7 @@ void ssd1306_Anim(void) { break; } - ssd1306_DrawSprite(sprite, x, 0); + ssd1306_DrawSprite(sprite, x, 0, 1); anim++; x += 15;