Add peak indicators to the bar graph

master
Markus Koch 2018-03-24 18:00:38 +01:00
parent 7828be22aa
commit ed32a6d2fd
2 changed files with 39 additions and 2 deletions

View File

@ -168,7 +168,24 @@ const char hcs12ss59t_bar_styles[2][5][2] = {
{0x40, 0x20}, // 2
{0x40, 0x30}, // 3
{0x40, 0x38} // 4
}
};
const char hcs12ss59t_tick_styles[2][5][2] = {
{
{0x80, 0x00}, // 1
{0x00, 0x80}, // 2
{0x00, 0x01}, // 3
{0x00, 0x02}, // 4
{0x04, 0x00} // 5
},
{
{0x40, 0x00}, // 1
{0x00, 0x20}, // 2
{0x00, 0x10}, // 3
{0x00, 0x08}, // 4
{0x08, 0x00} // 5
}
};
/**
@ -176,7 +193,8 @@ const char hcs12ss59t_bar_styles[2][5][2] = {
* @param top Top progress bar value. 0 - HCS12SS59T_NUMDIGITS * 5
* @param bottom Bottom progress bar value. 0 - HCS12SS59T_NUMDIGITS * 5
*/
void hcs12ss59t_set_progress(int top, int bottom)
void hcs12ss59t_set_progress_peak(uint8_t top, uint8_t bottom,
uint8_t peak_top, uint8_t peak_bottom)
{
char charconf[HCS12SS59T_NUMDIGITS * 2];
int full;
@ -189,12 +207,30 @@ void hcs12ss59t_set_progress(int top, int bottom)
top = HCS12SS59T_NUMDIGITS * 5;
if (bottom > HCS12SS59T_NUMDIGITS * 5)
bottom = HCS12SS59T_NUMDIGITS * 5;
if (peak_top > HCS12SS59T_NUMDIGITS * 5)
peak_top = HCS12SS59T_NUMDIGITS * 5;
if (peak_bottom > HCS12SS59T_NUMDIGITS * 5)
peak_bottom = HCS12SS59T_NUMDIGITS * 5;
// Clear memory
for (ptr = charconf; ptr < charconf + HCS12SS59T_NUMDIGITS * 2; ++ptr) {
*ptr = 0;
}
// Calculate ticks
if (peak_top != 0) {
peak_top--;
ptr = charconf + ((peak_top / 5) * 2);
*(ptr++) |= hcs12ss59t_tick_styles[0][peak_top % 5][0];
*ptr |= hcs12ss59t_tick_styles[0][peak_top % 5][1];
}
if (peak_bottom != 0) {
peak_bottom--;
ptr = charconf + ((peak_bottom / 5) * 2);
*(ptr++) |= hcs12ss59t_tick_styles[1][peak_bottom % 5][0];
*ptr |= hcs12ss59t_tick_styles[1][peak_bottom % 5][1];
}
// Calculate top memory
for (row = 0; row < 2; ++row) {
if (row == 0) {

View File

@ -53,7 +53,8 @@ void hcs12ss59t_set_buffer(char *data);
void hcs12ss59t_set_brightness(char brightness);
void hcs12ss59t_set_lights(char lights);
void hcs12ss59t_set_character(int addr, char *data, int nchar);
void hcs12ss59t_set_progress(int top, int bottom);
void hcs12ss59t_set_progress_peak(uint8_t top, uint8_t bottom, uint8_t peak_top, uint8_t peak_bottom);
#define hcs12ss59t_set_progress(top,bottom) hcs12ss59t_set_progress_peak(top, bottom, 0, 0)
void hcs12ss59t_en_progress();
/* Low level functions */