mirror of
https://github.com/eddyem/stm32samples.git
synced 2025-12-06 18:55:13 +03:00
114 lines
3.4 KiB
C
114 lines
3.4 KiB
C
/*
|
|
* This file is part of the nitrogen project.
|
|
* Copyright 2023 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <stdint.h>
|
|
#include <stm32f3.h>
|
|
|
|
typedef enum{ // screen states
|
|
SCREEN_INIT // init stage
|
|
,SCREEN_W4INIT // wait after last unsuccessfull update
|
|
,SCREEN_RELAX // nothing to do (screen is off)
|
|
,SCREEN_CONVBUF // convert next buffer portion
|
|
,SCREEN_UPDATENXT // update next block
|
|
,SCREEN_ACTIVE // transmission active - wait for SPI transfer ends
|
|
|
|
} screen_state;
|
|
|
|
// timeout (ms) in case of SPI error - 100ms
|
|
#define SCRN_SPI_TIMEOUT (100)
|
|
// wait if failed on init
|
|
#define SCRN_W4INI_TIMEOUT (1000)
|
|
|
|
// sprite width and height in pixels
|
|
#define SPRITEWD (8)
|
|
#define SPRITEHT (8)
|
|
|
|
// maximal font scale
|
|
#define FONTSCALEMAX (10)
|
|
|
|
// some base colors
|
|
#define COLOR_BLACK 0x0000
|
|
#define COLOR_BLUE 0x001F
|
|
#define COLOR_BROWN 0xA145
|
|
#define COLOR_CHOCOLATE 0xD343
|
|
#define COLOR_CYAN 0x07FF
|
|
#define COLOR_DARKBLUE 0x0011
|
|
#define COLOR_DARKCYAN 0x03EF
|
|
#define COLOR_DARKGRAY 0x8410
|
|
#define COLOR_DARKGREEN 0x03E0
|
|
#define COLOR_DARKMAGENTA 0x8811
|
|
#define COLOR_DARKORANGE 0xFC60
|
|
#define COLOR_DARKRED 0x8800
|
|
#define COLOR_DARKVIOLET 0x901A
|
|
#define COLOR_DEEPPINK 0xF8B2
|
|
#define COLOR_GOLD 0xFEA0
|
|
#define COLOR_GRAY 0xAD55
|
|
#define COLOR_GREEN 0x07E0
|
|
#define COLOR_GREENYELLOW 0xAFE5
|
|
#define COLOR_INDIGO 0x4810
|
|
#define COLOR_KHAKI 0xF731
|
|
#define COLOR_LIGHTBLUE 0xAEDC
|
|
#define COLOR_LIGHTCYAN 0xE7FF
|
|
#define COLOR_LIGHTGREEN 0x9772
|
|
#define COLOR_LIGHTGRAY 0xC618
|
|
#define COLOR_LIGHTYELLOW 0xFFFC
|
|
#define COLOR_MAGENTA 0xF81F
|
|
#define COLOR_MEDIUMBLUE 0x0019
|
|
#define COLOR_NAVY 0x000F
|
|
#define COLOR_OLIVE 0x7BE0
|
|
#define COLOR_ORANGE 0xFD20
|
|
#define COLOR_ORANGERED 0xFA20
|
|
#define COLOR_PALEGREEN 0x9FD3
|
|
#define COLOR_PINK 0xF81F
|
|
#define COLOR_PURPLE 0x780F
|
|
#define COLOR_RED 0xf800
|
|
#define COLOR_SEAGREEN 0x2C4A
|
|
#define COLOR_SKYBLUE 0x867D
|
|
#define COLOR_SPRINGGREEN 0x07EF
|
|
#define COLOR_STEELBLUE 0x4416
|
|
#define COLOR_TOMATO 0xFB08
|
|
#define COLOR_WHITE 0xFFFF
|
|
#define COLOR_YELLOW 0xFFE0
|
|
#define COLOR_YELLOWGREEN 0x9E66
|
|
|
|
|
|
extern screen_state ScrnState;
|
|
extern int fontheight, fontbase;
|
|
|
|
void ClearScreen();
|
|
void UpdateScreen(int y0, int y1);
|
|
void setBGcolor(uint16_t c);
|
|
void setFGcolor(uint16_t c);
|
|
void invertSpriteColor(int xmin, int xmax, int ymin, int ymax);
|
|
void DrawPix(int X, int Y, uint8_t pix);
|
|
uint8_t SetFontScale(uint8_t scale);
|
|
uint8_t DrawCharAt(int X, int Y, uint8_t Char);
|
|
int PutStringAt(int X, int Y, const char *str);
|
|
int CenterStringAt(int Y, const char *str);
|
|
int strpixlen(const char *str);
|
|
uint8_t *getScreenBuf();
|
|
void process_screen();
|
|
|
|
TRUE_INLINE void cls(){ // set default colors (bg=0, fg=0xffff) and clear screen
|
|
setBGcolor(0);
|
|
setFGcolor(0xffff);
|
|
ClearScreen();
|
|
}
|