color cleanup and brightness
This commit is contained in:
parent
7894359f30
commit
d9fd18d799
@ -5,6 +5,8 @@
|
||||
|
||||
#include "canvas.h"
|
||||
#include "spi.h"
|
||||
#include "eeprom.h"
|
||||
#include "../rgb-driver/colors.h"
|
||||
|
||||
|
||||
static uint8_t canvasStorage[CANVAS_WIDTH * CANVAS_HEIGHT];
|
||||
@ -22,6 +24,8 @@ const canvas_t miniCanvas = {
|
||||
};
|
||||
|
||||
void canvasShow() {
|
||||
uint8_t brightness_offset = _brightness_offset * eepromReadBrightness();
|
||||
|
||||
// wait for signal waiting for data
|
||||
while (!(P1IN & BIT3));
|
||||
|
||||
@ -31,14 +35,14 @@ void canvasShow() {
|
||||
if ((*((canvas.canvas)+i) & 0x80) != 0) {
|
||||
*((canvas.canvas)+i) &= ~0x80;
|
||||
spiSendOctet(i);
|
||||
spiSendOctet(*((canvas.canvas)+i));
|
||||
spiSendOctet((*((canvas.canvas)+i) == 0) ? 0 : (*((canvas.canvas)+i) + brightness_offset));
|
||||
}
|
||||
}
|
||||
for (uint8_t i = 0; i < (MINI_CANVAS_WIDTH*MINI_CANVAS_HEIGHT); i++) {
|
||||
if ((*((miniCanvas.canvas)+i) & 0x80) != 0) {
|
||||
*((miniCanvas.canvas)+i) &= ~0x80;
|
||||
spiSendOctet(i + (CANVAS_HEIGHT*CANVAS_WIDTH));
|
||||
spiSendOctet(*((miniCanvas.canvas)+i));
|
||||
spiSendOctet((*((miniCanvas.canvas)+i) == 0) ? 0 : (*((miniCanvas.canvas)+i) + brightness_offset));
|
||||
}
|
||||
}
|
||||
spiSendOctet(0xfe);
|
||||
|
@ -6,17 +6,16 @@
|
||||
#include "buttons.h"
|
||||
#include "eeprom.h"
|
||||
#include "display.h"
|
||||
#include "shapes.h"
|
||||
|
||||
|
||||
typedef enum { e_Config_Flash, e_Config_ResetHighscore, e_Config_End } t_ConfigState;
|
||||
|
||||
static bool configChanged = false;
|
||||
|
||||
static void configHandleFlash() {
|
||||
if (buttonsConfig2Pressed()) {
|
||||
configChanged = true;
|
||||
uint8_t color = eepromReadFlashColor() + 1;
|
||||
if (color == _color_end) {
|
||||
if (color > _color_end) {
|
||||
color = 0;
|
||||
}
|
||||
canvasFillRow(CANVAS_HEIGHT-1, color);
|
||||
@ -34,33 +33,48 @@ static void configHandleResetHighScore() {
|
||||
}
|
||||
}
|
||||
|
||||
void (*configHandler[])(void) = { configHandleFlash, configHandleResetHighScore };
|
||||
static void configHandleBrightness() {
|
||||
displaySetValue(eepromReadBrightness());
|
||||
|
||||
if (buttonsConfig2Pressed()) {
|
||||
configChanged = true;
|
||||
uint8_t brightness = eepromReadBrightness() + 1;
|
||||
if (brightness > _brightness_shifts) {
|
||||
brightness = 0;
|
||||
}
|
||||
eepromSetBrightness(brightness);
|
||||
|
||||
stoneDrawConfigPattern();
|
||||
}
|
||||
}
|
||||
|
||||
void (*configHandler[])(void) = { configHandleFlash, configHandleResetHighScore, configHandleBrightness };
|
||||
|
||||
|
||||
void configExec(void *handle) {
|
||||
static t_ConfigState configState = e_Config_Flash;
|
||||
static uint8_t configState = 0;
|
||||
|
||||
if (buttonsConfig1Pressed()) {
|
||||
configState += 1;
|
||||
if (configState == e_Config_End) {
|
||||
configState = e_Config_Flash;
|
||||
if (configState >= sizeof(configHandler) / sizeof(configHandler[0])) {
|
||||
configState = 0;
|
||||
}
|
||||
miniCanvasClear();
|
||||
canvasClear();
|
||||
|
||||
miniCanvasSetPixel(configState, 0, _medium_red);
|
||||
miniCanvasSetPixel(configState, 0, _red);
|
||||
}
|
||||
|
||||
configHandler[configState]();
|
||||
|
||||
if (configChanged) {
|
||||
miniCanvasSetPixel(0, 2, _medium_red);
|
||||
miniCanvasSetPixel(0, 2, _red);
|
||||
if (buttonsConfig4Pressed()) {
|
||||
eepromCommit();
|
||||
configChanged = false;
|
||||
}
|
||||
} else {
|
||||
miniCanvasSetPixel(0, 2, _medium_green);
|
||||
miniCanvasSetPixel(0, 2, _green);
|
||||
}
|
||||
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
#include "spi.h"
|
||||
|
||||
|
||||
#define MAGIC 0xafff
|
||||
#define MAGIC 0xb000
|
||||
#define HIGHSCORE_ADDR 0x00
|
||||
#define DUMMY 0x00
|
||||
#define CMD_READ 0b00000011
|
||||
@ -16,6 +16,7 @@ typedef struct {
|
||||
uint16_t magic;
|
||||
uint16_t highScore;
|
||||
uint8_t flashColor;
|
||||
uint8_t brightness;
|
||||
} t_configBlock;
|
||||
|
||||
typedef union {
|
||||
@ -59,6 +60,7 @@ void eepromInit() {
|
||||
buf.v.magic = MAGIC;
|
||||
buf.v.highScore = 0;
|
||||
buf.v.flashColor = 0;
|
||||
buf.v.brightness = 0;
|
||||
writeBuf();
|
||||
}
|
||||
}
|
||||
@ -84,3 +86,11 @@ void eepromSetFlashColor(uint8_t v) {
|
||||
buf.v.flashColor = v;
|
||||
}
|
||||
|
||||
uint8_t eepromReadBrightness() {
|
||||
return buf.v.brightness;
|
||||
}
|
||||
|
||||
void eepromSetBrightness(uint8_t v) {
|
||||
buf.v.brightness = v;
|
||||
}
|
||||
|
||||
|
@ -9,6 +9,8 @@ uint16_t eepromReadHighScore();
|
||||
void eepromSetHighScore(uint16_t v);
|
||||
uint8_t eepromReadFlashColor();
|
||||
void eepromSetFlashColor(uint8_t v);
|
||||
uint8_t eepromReadBrightness();
|
||||
void eepromSetBrightness(uint8_t v);
|
||||
void eepromCommit();
|
||||
|
||||
|
||||
|
@ -483,6 +483,31 @@ uint8_t stoneDraw() {
|
||||
return res;
|
||||
}
|
||||
|
||||
static void stoneJustDraw(uint8_t x, uint8_t y, shape_t shape) {
|
||||
canvasSetPixel(x + motions[shape].draw[0].x,
|
||||
y + motions[shape].draw[0].y,
|
||||
motions[shape].color);
|
||||
canvasSetPixel(x + motions[shape].draw[1].x,
|
||||
y + motions[shape].draw[1].y,
|
||||
motions[shape].color);
|
||||
canvasSetPixel(x + motions[shape].draw[2].x,
|
||||
y + motions[shape].draw[2].y,
|
||||
motions[shape].color);
|
||||
canvasSetPixel(x + motions[shape].draw[3].x,
|
||||
y + motions[shape].draw[3].y,
|
||||
motions[shape].color);
|
||||
}
|
||||
|
||||
void stoneDrawConfigPattern() {
|
||||
stoneJustDraw(1, 0, e_I);
|
||||
stoneJustDraw(3, 4, e_O);
|
||||
stoneJustDraw(4, 7, e_T);
|
||||
stoneJustDraw(5, 10, e_Z);
|
||||
stoneJustDraw(1, 12, e_S);
|
||||
stoneJustDraw(5, 15, e_L);
|
||||
stoneJustDraw(1, 17, e_J);
|
||||
}
|
||||
|
||||
uint8_t stoneMoveDown() {
|
||||
return move(e_MoveDown);
|
||||
}
|
||||
|
@ -14,5 +14,6 @@ uint8_t stoneMoveRight();
|
||||
uint8_t stoneRotateLeft();
|
||||
uint8_t stoneRotateRight();
|
||||
|
||||
void stoneDrawConfigPattern();
|
||||
|
||||
#endif // _SHAPES_H_
|
||||
|
@ -1,7 +1,5 @@
|
||||
#include "colors.h"
|
||||
|
||||
#define DF 5
|
||||
#define DF_M 3
|
||||
.section ".rodata","a"
|
||||
;; color definitions according to
|
||||
;; https://learn.sparkfun.com/tutorials/lilypad-protosnap-plus-activity-guide/3-custom-color-mixing
|
||||
@ -9,43 +7,49 @@ colors:
|
||||
.global colors
|
||||
;; red, green, blue, padding
|
||||
.byte 0x00, 0x00, 0x00, 0 ;; off
|
||||
.byte 0x00>>DF, 0x00>>DF, 0xff>>DF, 0 ;; blue
|
||||
.byte 0x00>>DF, 0xff>>DF, 0x00>>DF, 0 ;; green
|
||||
.byte 0xff>>DF, 0x80>>DF, 0x00>>DF, 0 ;; orange
|
||||
.byte 0xff>>DF, 0x00>>DF, 0x80>>DF, 0 ;; rose
|
||||
.byte 0xff>>DF, 0x00>>DF, 0xff>>DF, 0 ;; magenta
|
||||
.byte 0x80>>DF, 0x00>>DF, 0xff>>DF, 0 ;; violet
|
||||
.byte 0x00>>DF, 0x80>>DF, 0xff>>DF, 0 ;; azure
|
||||
.byte 0x00>>DF, 0xff>>DF, 0xff>>DF, 0 ;; cyan
|
||||
.byte 0x00>>DF, 0xff>>DF, 0x80>>DF, 0 ;; springgreen
|
||||
.byte 0x80>>DF, 0xff>>DF, 0x00>>DF, 0 ;; chartreuse
|
||||
.byte 0xff>>DF, 0xff>>DF, 0x00>>DF, 0 ;; yellow
|
||||
.byte 0xff>>DF, 0xff>>DF, 0xff>>DF, 0 ;; white
|
||||
.byte 0xff>>DF, 0x00>>DF, 0x00>>DF, 0 ;; red
|
||||
.byte 0x00>>DF_M, 0x00>>DF_M, 0xff>>DF_M, 0 ;; blue
|
||||
.byte 0x00>>DF_M, 0xff>>DF_M, 0x00>>DF_M, 0 ;; green
|
||||
.byte 0xff>>DF_M, 0x80>>DF_M, 0x00>>DF_M, 0 ;; orange
|
||||
.byte 0xff>>DF_M, 0x00>>DF_M, 0x80>>DF_M, 0 ;; rose
|
||||
.byte 0xff>>DF_M, 0x00>>DF_M, 0xff>>DF_M, 0 ;; magenta
|
||||
.byte 0x80>>DF_M, 0x00>>DF_M, 0xff>>DF_M, 0 ;; violet
|
||||
.byte 0x00>>DF_M, 0x80>>DF_M, 0xff>>DF_M, 0 ;; azure
|
||||
.byte 0x00>>DF_M, 0xff>>DF_M, 0xff>>DF_M, 0 ;; cyan
|
||||
.byte 0x00>>DF_M, 0xff>>DF_M, 0x80>>DF_M, 0 ;; springgreen
|
||||
.byte 0x80>>DF_M, 0xff>>DF_M, 0x00>>DF_M, 0 ;; chartreuse
|
||||
.byte 0xff>>DF_M, 0xff>>DF_M, 0x00>>DF_M, 0 ;; yellow
|
||||
.byte 0xff>>DF_M, 0xff>>DF_M, 0xff>>DF_M, 0 ;; white
|
||||
.byte 0xff>>DF_M, 0x00>>DF_M, 0x00>>DF_M, 0 ;; red
|
||||
.byte 0x00, 0x00, 0xff, 0 ;; blue
|
||||
.byte 0x00, 0xff, 0x00, 0 ;; green
|
||||
.byte 0xff, 0x80, 0x00, 0 ;; orange
|
||||
.byte 0xff, 0x00, 0x80, 0 ;; rose
|
||||
.byte 0xff, 0x00, 0xff, 0 ;; magenta
|
||||
.byte 0x80, 0x00, 0xff, 0 ;; violet
|
||||
.byte 0x00, 0x80, 0xff, 0 ;; azure
|
||||
.byte 0x00, 0xff, 0xff, 0 ;; cyan
|
||||
.byte 0x00, 0xff, 0x80, 0 ;; springgreen
|
||||
.byte 0x80, 0xff, 0x00, 0 ;; chartreuse
|
||||
.byte 0xff, 0xff, 0x00, 0 ;; yellow
|
||||
.byte 0xff, 0xff, 0xff, 0 ;; white
|
||||
.byte 0xff, 0x00, 0x00, 0 ;; red
|
||||
|
||||
.byte 0x00>>5, 0x00>>5, 0xff>>5, 0 ;; blue
|
||||
.byte 0x00>>5, 0xff>>5, 0x00>>5, 0 ;; green
|
||||
.byte 0xff>>5, 0x80>>5, 0x00>>5, 0 ;; orange
|
||||
.byte 0x80>>5, 0x00>>5, 0xff>>5, 0 ;; violet
|
||||
.byte 0x00>>5, 0xff>>5, 0xff>>5, 0 ;; cyan
|
||||
.byte 0xff>>5, 0xff>>5, 0x00>>5, 0 ;; yellow
|
||||
.byte 0xff>>5, 0x00>>5, 0x00>>5, 0 ;; red
|
||||
.byte 0xff>>5, 0xff>>5, 0xff>>5, 0 ;; white
|
||||
|
||||
.byte 0x00>>4, 0x00>>4, 0xff>>4, 0 ;; blue
|
||||
.byte 0x00>>4, 0xff>>4, 0x00>>4, 0 ;; green
|
||||
.byte 0xff>>4, 0x80>>4, 0x00>>4, 0 ;; orange
|
||||
.byte 0x80>>4, 0x00>>4, 0xff>>4, 0 ;; violet
|
||||
.byte 0x00>>4, 0xff>>4, 0xff>>4, 0 ;; cyan
|
||||
.byte 0xff>>4, 0xff>>4, 0x00>>4, 0 ;; yellow
|
||||
.byte 0xff>>4, 0x00>>4, 0x00>>4, 0 ;; red
|
||||
.byte 0xff>>4, 0xff>>4, 0xff>>4, 0 ;; white
|
||||
|
||||
.byte 0x00>>3, 0x00>>3, 0xff>>3, 0 ;; blue
|
||||
.byte 0x00>>3, 0xff>>3, 0x00>>3, 0 ;; green
|
||||
.byte 0xff>>3, 0x80>>3, 0x00>>3, 0 ;; orange
|
||||
.byte 0x80>>3, 0x00>>3, 0xff>>3, 0 ;; violet
|
||||
.byte 0x00>>3, 0xff>>3, 0xff>>3, 0 ;; cyan
|
||||
.byte 0xff>>3, 0xff>>3, 0x00>>3, 0 ;; yellow
|
||||
.byte 0xff>>3, 0x00>>3, 0x00>>3, 0 ;; red
|
||||
.byte 0xff>>3, 0xff>>3, 0xff>>3, 0 ;; white
|
||||
|
||||
.byte 0x00>>2, 0x00>>2, 0xff>>2, 0 ;; blue
|
||||
.byte 0x00>>2, 0xff>>2, 0x00>>2, 0 ;; green
|
||||
.byte 0xff>>2, 0x80>>2, 0x00>>2, 0 ;; orange
|
||||
.byte 0x80>>2, 0x00>>2, 0xff>>2, 0 ;; violet
|
||||
.byte 0x00>>2, 0xff>>2, 0xff>>2, 0 ;; cyan
|
||||
.byte 0xff>>2, 0xff>>2, 0x00>>2, 0 ;; yellow
|
||||
.byte 0xff>>2, 0x00>>2, 0x00>>2, 0 ;; red
|
||||
.byte 0xff>>2, 0xff>>2, 0xff>>2, 0 ;; white
|
||||
|
||||
.byte 0x00>>1, 0x00>>1, 0xff>>1, 0 ;; blue
|
||||
.byte 0x00>>1, 0xff>>1, 0x00>>1, 0 ;; green
|
||||
.byte 0xff>>1, 0x80>>1, 0x00>>1, 0 ;; orange
|
||||
.byte 0x80>>1, 0x00>>1, 0xff>>1, 0 ;; violet
|
||||
.byte 0x00>>1, 0xff>>1, 0xff>>1, 0 ;; cyan
|
||||
.byte 0xff>>1, 0xff>>1, 0x00>>1, 0 ;; yellow
|
||||
.byte 0xff>>1, 0x00>>1, 0x00>>1, 0 ;; red
|
||||
.byte 0xff>>1, 0xff>>1, 0xff>>1, 0 ;; white
|
||||
|
||||
|
@ -2,51 +2,20 @@
|
||||
#define _COLORS_H_
|
||||
|
||||
|
||||
#define _off 0x00
|
||||
#define _off 0
|
||||
|
||||
#define _blue 0x01
|
||||
#define _green 0x02
|
||||
#define _orange 0x03
|
||||
#define _rose 0x04
|
||||
#define _magenta 0x05
|
||||
#define _violet 0x06
|
||||
#define _azure 0x07
|
||||
#define _cyan 0x08
|
||||
#define _springgreen 0x09
|
||||
#define _chartreuse 0x0a
|
||||
#define _yellow 0x0b
|
||||
#define _white 0x0c
|
||||
#define _red 0x0d
|
||||
#define _blue 1
|
||||
#define _green 2
|
||||
#define _orange 3
|
||||
#define _violet 4
|
||||
#define _cyan 5
|
||||
#define _yellow 6
|
||||
#define _red 7
|
||||
#define _white 8
|
||||
|
||||
#define _medium_blue 0x0e
|
||||
#define _medium_green 0x0f
|
||||
#define _medium_orange 0x10
|
||||
#define _medium_rose 0x11
|
||||
#define _medium_magenta 0x12
|
||||
#define _medium_violet 0x13
|
||||
#define _medium_azure 0x14
|
||||
#define _medium_cyan 0x15
|
||||
#define _medium_springgreen 0x16
|
||||
#define _medium_chartreuse 0x17
|
||||
#define _medium_yellow 0x18
|
||||
#define _medium_white 0x19
|
||||
#define _medium_red 0x1a
|
||||
|
||||
#define _dazzling_blue 0x1b
|
||||
#define _dazzling_green 0x1c
|
||||
#define _dazzling_orange 0x1d
|
||||
#define _dazzling_rose 0x1e
|
||||
#define _dazzling_magenta 0x1f
|
||||
#define _dazzling_violet 0x20
|
||||
#define _dazzling_azure 0x21
|
||||
#define _dazzling_cyan 0x22
|
||||
#define _dazzling_springgreen 0x23
|
||||
#define _dazzling_chartreuse 0x24
|
||||
#define _dazzling_yellow 0x25
|
||||
#define _dazzling_white 0x26
|
||||
#define _dazzling_red 0x27
|
||||
|
||||
#define _color_end 0x28
|
||||
#define _brightness_offset 8
|
||||
#define _brightness_shifts 5
|
||||
#define _color_end (_brightness_offset * _brightness_shifts)
|
||||
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user