diff -r a6c7292742a0 -r 07e8ca2bdf6d src/display.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/display.cpp Mon Oct 26 00:16:13 2020 +0100 @@ -0,0 +1,236 @@ +#include "stdio.h" +#include +#include +#include "display.h" + + +Display::Display(int Hz, PinName mosi, PinName miso, PinName sclk, PinName CS, PinName reset, PinName DC, + const char* name) + : SSD1322(Hz, mosi, miso, sclk, CS, reset, DC, name) +{ + must_refresh = 0; +} + +Display::~Display() +{ +} + +void Display::show_splashscreen() +{ + locate(30, 10); + set_font((unsigned char*)Mono19x27); + this->printf("HP34970A"); + set_font((unsigned char*)Terminal6x8); + locate(90, 40); + this->printf("David Douard"); + locate(0, 52); + this->printf("Clock = %ld ", SystemCoreClock); + + RCC_OscInitTypeDef cfg; + HAL_RCC_GetOscConfig(&cfg); + if (cfg.HSEState == RCC_HSE_BYPASS) + this->printf("HSE:EXT "); + else if (cfg.HSEState == RCC_HSE_ON) + this->printf("HSE:XTAL "); + else + this->printf("HSE:OFF "); + + if (cfg.HSIState == RCC_HSI_ON) + this->printf("HSI:ON "); + else + this->printf("HSI:OFF "); + + copy_to_lcd(); +} + + +void Display::show(uint8_t cmd, const char *intxt, uint8_t nchar=0) +{ + uint8_t i; + // uint8_t len; + uint16_t bgcolor, fgcolor; + char *oldv; + // char *txt; + char *txtp; + static char txt[256]; + + + if (cmd == 0xFF) // cls + { + clrbuff(); + } + else + { + //txt = (char *)malloc(strlen(intxt)+1); + strcpy(txt, intxt); + txtp = txt; + + for (i=0; i 0) + fillrect(table[i].x0, + table[i].y0, + table[i].x0 + table[i].width, + table[i].y0 + table[i].font[2], + bgcolor); + for (uint8_t k=0; ;k++) + { + if (txtp[k] == 0x00) + { + this->printf(txtp); + break; + } + if (txtp[k] == 0x09) + { // \t is a special char for 'unselected' display value + txtp[k] = 0x00; + this->printf(txtp); + + if (fgcolor == table[i].color) + fgcolor /= 2; + else + fgcolor = table[i].color; + foreground(fgcolor); + txtp = &(txtp[k+1]); + k = 0; + } + } + if (cmd == 0x00) // main area + must_refresh |= 0x01; + if (cmd == 0x0C) // channels area + must_refresh |= 0x04; + } + } + /* + if (table[i].fmt & 0x02 ) { + // hex + for (uint8_t j=0;; j++) { + if (txt[j] == 0x00) + break; + this->printf("%02X ", txt[j]); + } + for (uint8_t j=3*strlen(txt); jprintf(" "); + } + */ + if (table[i].fmt & 0x08 ) // flag indicators + { + // flags + for (uint8_t j=0; jprintf(flags[l].msg);} + else + { // an icon + Bitmap_s pic = {9, 10, 2, (char*) flags[l].icon}; + Bitmap_BW(pic, flags[l].x, flags[l].y); + } + must_refresh = 1; //|= zones[m].flag; + break; + } + } + } + } + } + + // draw frames (Alarm and Channel) + for (uint8_t l=0; + l<(sizeof(frames)/sizeof(frames[0])); ++l) + { + uint16_t color; + if (frames[l].flag & txt[0]) // frame flags are on the 1st byte only + color = fgcolor/6; + else + color = bgcolor; + hline(frames[l].x0+1, frames[l].x0+3, frames[l].y0, color); + hline(frames[l].x1-3, frames[l].x1-1, frames[l].y0, color); + hline(frames[l].x0+1, frames[l].x1-1, frames[l].y1, color); + + vline(frames[l].x0, frames[l].y0+1, frames[l].y1-1, color); + vline(frames[l].x1, frames[l].y0+1, frames[l].y1-1, color); + } + } + + for(uint8_t j=0; jcopy_to_lcd(); + } +} + + +void Display::test_dsp() +{ + const FRAME *z; + printf("TEST DSP\r\n"); + cls(); + printf("TEST DSP #2\r\n"); + show(0x00, "8g8g8g8g8g8g8", 13); // main dsp + show(0x0C, "888", 3); // channel dsp + show(0x0A, "\xFF\xFF\xFF\xFF", 4); // all flags + copy_to_lcd(); + ThisThread::sleep_for(3ms); + cls(); + printf("TEST DSP #3\r\n"); + + for (uint8_t i=0; i<(sizeof(zones)/sizeof(zones[0])); i++) + { + z = &zones[i]; + fillrect(z->x0, z->y0, z->x1, z->y1, 4+i); + locate(z->x0+1, z->y0+1); + this->printf("%d", i); + } + + /* + for (uint8_t i=0; i<(sizeof(zones)/sizeof(zones[0])); i++) + { + z = &zones[i]; + printf("Zone %d [%x]: %d, %d, %d, %d\n", i, z->flag, + z->x0, z->y0, z->x1, z->y1); + must_refresh = z->flag; + wait(1); + } + printf("Done\n"); + wait(2); + printf("Copy ALL\n"); + copy_to_lcd(); + */ + ThisThread::sleep_for(2ms); + cls(); + printf("TEST DSP DONE\r\n"); +}