Add sleep mode for OBP40 and cleanup code
This commit is contained in:
parent
569273519c
commit
27d23c9d16
|
@ -157,5 +157,9 @@
|
|||
#define OBP_POWER_50 41 // Power LED
|
||||
#define OBP_POWER_EPD 7 // ePaper power
|
||||
#define OBP_POWER_SD 42 // SD card power
|
||||
// Deep sleep wakeup
|
||||
#define OBP_WAKEUP_LEVEL 0 // //1 = High, 0 = Low, depends on switch
|
||||
#define OBP_WAKEWUP_PIN GPIO_NUM_5// Wakeup pin, same as CONF (wheel press)
|
||||
// Must define as GPIO_NUM_X
|
||||
#endif
|
||||
|
||||
|
|
|
@ -14,7 +14,8 @@
|
|||
#include "OBP60Keypad.h" // Functions for keypad
|
||||
|
||||
#ifdef BOARD_OBP40S3
|
||||
#include <FS.h> // SD-Card access
|
||||
#include "driver/rtc_io.h" // Needs for weakup from deep sleep
|
||||
#include <FS.h> // SD-Card access
|
||||
#include <SD.h>
|
||||
#include <SPI.h>
|
||||
#endif
|
||||
|
@ -80,6 +81,11 @@ void OBP60Init(GwApi *api){
|
|||
LOG_DEBUG(GwLog::LOG,"SD card type %s of size %d MB detected", sdtype, cardSize);
|
||||
}
|
||||
}
|
||||
|
||||
// Deep sleep wakeup configuration
|
||||
esp_sleep_enable_ext0_wakeup(OBP_WAKEWUP_PIN, 0); // 1 = High, 0 = Low
|
||||
rtc_gpio_pullup_en(OBP_WAKEWUP_PIN); // Activate pullup resistor
|
||||
rtc_gpio_pulldown_dis(OBP_WAKEWUP_PIN); // Disable pulldown resistor
|
||||
#endif
|
||||
|
||||
// Init power rail 5.0V
|
||||
|
@ -320,6 +326,34 @@ void underVoltageDetection(GwApi *api, CommonData &common){
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef BOARD_OBP40S3
|
||||
// Deep sleep funktion
|
||||
void deepSleep(CommonData &common){
|
||||
// Switch off all power lines
|
||||
setPortPin(OBP_BACKLIGHT_LED, false); // Backlight Off
|
||||
setFlashLED(false); // Flash LED Off
|
||||
buzzer(TONE4, 20); // Buzzer tone 4kHz 20ms
|
||||
// Shutdown EInk display
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
getdisplay().fillScreen(common.bgcolor); // Clear screen
|
||||
getdisplay().setTextColor(common.fgcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(85, 150);
|
||||
getdisplay().print("Sleep Mode");
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(65, 175);
|
||||
getdisplay().print(" For wakeup press wheel and wait 5s");
|
||||
getdisplay().nextPage(); // Partial update
|
||||
getdisplay().powerOff(); // Display power off
|
||||
setPortPin(OBP_POWER_EPD, false); // Power off ePaper display
|
||||
// Stop system
|
||||
while(true){
|
||||
esp_deep_sleep_start(); // Deep Sleep with weakup via GPIO pin
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
// OBP60 Task
|
||||
//####################################################################################
|
||||
void OBP60Task(GwApi *api){
|
||||
|
@ -520,7 +554,7 @@ void OBP60Task(GwApi *api){
|
|||
// Undervoltage detection
|
||||
if(uvoltage == true){
|
||||
underVoltageDetection(api, commonData);
|
||||
}
|
||||
}
|
||||
|
||||
// Set CPU speed after boot after 1min
|
||||
if(millis() > firststart + (1 * 60 * 1000) && cpuspeedsetted == false){
|
||||
|
@ -588,6 +622,12 @@ void OBP60Task(GwApi *api){
|
|||
toggleBacklightLED(commonData.backlight.brightness, commonData.backlight.color);
|
||||
}
|
||||
}
|
||||
#ifdef BOARD_OBP40S3
|
||||
// #3 Deep sleep mode for OBP40
|
||||
if (keyboardMessage == 3){
|
||||
deepSleep(commonData);
|
||||
}
|
||||
#endif
|
||||
// #9 Swipe right or #4 key right
|
||||
if ((keyboardMessage == 9) or (keyboardMessage == 4))
|
||||
{
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
FROM gitpod/workspace-full
|
||||
|
||||
USER gitpod
|
|
@ -1,11 +0,0 @@
|
|||
tasks:
|
||||
- command: pip3 install -U platformio && platformio run
|
||||
|
||||
image:
|
||||
file: .gitpod.Dockerfile
|
||||
|
||||
vscode:
|
||||
extensions:
|
||||
- Atishay-Jain.All-Autocomplete
|
||||
- esbenp.prettier-vscode
|
||||
- shardulm94.trailing-spaces
|
|
@ -1,476 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
/****************************************************
|
||||
AMS 5600 class for Arduino platform
|
||||
Author: Tom Denton
|
||||
Date: 15 Dec 2014
|
||||
File: AMS_5600.cpp
|
||||
Version 1.00
|
||||
www.ams.com
|
||||
|
||||
Description: This class has been designed to
|
||||
access the AMS 5600 “potuino” shield.
|
||||
*****************************************************/
|
||||
|
||||
// updated jan 2022 by isc - read two bytes together
|
||||
|
||||
// datasheet: https://ams.com/documents/20143/36005/AS5600_DS000365_5-00.pdf
|
||||
|
||||
#include "Arduino.h"
|
||||
#include "AS5600.h"
|
||||
#include "Wire.h"
|
||||
|
||||
/****************************************************
|
||||
Method: AMS_5600
|
||||
In: none
|
||||
Out: none
|
||||
Description: constructor class for AMS 5600
|
||||
*****************************************************/
|
||||
AMS_5600::AMS_5600()
|
||||
{
|
||||
}
|
||||
|
||||
/* mode = 0, output PWM, mode = 1 output analog (full range from 0% to 100% between GND and VDD */
|
||||
void AMS_5600::setOutPut(uint8_t mode)
|
||||
{
|
||||
int _conf_lo = _addr_conf+1; // lower byte address
|
||||
uint8_t config_status;
|
||||
config_status = readOneByte(_conf_lo);
|
||||
if (mode == 1) {
|
||||
config_status = config_status & 0xcf;
|
||||
} else {
|
||||
uint8_t config_status;
|
||||
config_status = readOneByte(_conf_lo);
|
||||
if (mode == 1)
|
||||
config_status = config_status & 0xcf;
|
||||
else
|
||||
config_status = config_status & 0xef;
|
||||
writeOneByte(_conf_lo, lowByte(config_status));
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************
|
||||
Method: AMS_5600
|
||||
In: none
|
||||
Out: i2c address of AMS 5600
|
||||
Description: returns i2c address of AMS 5600
|
||||
****************************************************/
|
||||
int AMS_5600::getAddress()
|
||||
{
|
||||
return _ams5600_Address;
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: setMaxAngle
|
||||
In: new maximum angle to set OR none
|
||||
Out: value of max angle register
|
||||
Description: sets a value in maximum angle register.
|
||||
If no value is provided, method will read position of
|
||||
magnet. Setting this register zeros out max position
|
||||
register.
|
||||
*******************************************************/
|
||||
word AMS_5600::setMaxAngle(word newMaxAngle)
|
||||
{
|
||||
word _maxAngle;
|
||||
if (newMaxAngle == -1)
|
||||
_maxAngle = getRawAngle();
|
||||
else
|
||||
_maxAngle = newMaxAngle;
|
||||
|
||||
writeOneByte(_addr_mang, highByte(_maxAngle));
|
||||
delay(2);
|
||||
writeOneByte(_addr_mang+1, lowByte(_maxAngle));
|
||||
delay(2);
|
||||
|
||||
word retVal = readTwoBytesSeparately(_addr_mang);
|
||||
return retVal;
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: getMaxAngle
|
||||
In: none
|
||||
Out: value of max angle register
|
||||
Description: gets value of maximum angle register.
|
||||
*******************************************************/
|
||||
word AMS_5600::getMaxAngle()
|
||||
{
|
||||
return readTwoBytesSeparately(_addr_mang);
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: setStartPosition
|
||||
In: new start angle position
|
||||
Out: value of start position register
|
||||
Description: sets a value in start position register.
|
||||
If no value is provided, method will read position of
|
||||
magnet.
|
||||
*******************************************************/
|
||||
word AMS_5600::setStartPosition(word startAngle)
|
||||
{
|
||||
word _rawStartAngle;
|
||||
if (startAngle == -1)
|
||||
_rawStartAngle = getRawAngle();
|
||||
else
|
||||
_rawStartAngle = startAngle;
|
||||
|
||||
writeOneByte(_addr_zpos, highByte(_rawStartAngle));
|
||||
delay(2);
|
||||
writeOneByte(_addr_zpos+1, lowByte(_rawStartAngle));
|
||||
delay(2);
|
||||
word _zPosition = readTwoBytesSeparately(_addr_zpos);
|
||||
|
||||
return (_zPosition);
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: getStartPosition
|
||||
In: none
|
||||
Out: value of start position register
|
||||
Description: gets value of start position register.
|
||||
*******************************************************/
|
||||
word AMS_5600::getStartPosition()
|
||||
{
|
||||
return readTwoBytesSeparately(_addr_zpos);
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: setEndtPosition
|
||||
In: new end angle position
|
||||
Out: value of end position register
|
||||
Description: sets a value in end position register.
|
||||
If no value is provided, method will read position of
|
||||
magnet.
|
||||
*******************************************************/
|
||||
word AMS_5600::setEndPosition(word endAngle)
|
||||
{
|
||||
word _rawEndAngle;
|
||||
if (endAngle == -1)
|
||||
_rawEndAngle = getRawAngle();
|
||||
else
|
||||
_rawEndAngle = endAngle;
|
||||
|
||||
writeOneByte(_addr_mpos, highByte(_rawEndAngle));
|
||||
delay(2);
|
||||
writeOneByte(_addr_mpos+1, lowByte(_rawEndAngle));
|
||||
delay(2);
|
||||
word _mPosition = readTwoBytesSeparately(_addr_mpos);
|
||||
|
||||
return (_mPosition);
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: getEndPosition
|
||||
In: none
|
||||
Out: value of end position register
|
||||
Description: gets value of end position register.
|
||||
*******************************************************/
|
||||
word AMS_5600::getEndPosition()
|
||||
{
|
||||
word retVal = readTwoBytesSeparately(_addr_mpos);
|
||||
return retVal;
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: getRawAngle
|
||||
In: none
|
||||
Out: value of raw angle register
|
||||
Description: gets raw value of magnet position.
|
||||
start, end, and max angle settings do not apply
|
||||
*******************************************************/
|
||||
word AMS_5600::getRawAngle()
|
||||
{
|
||||
return readTwoBytesTogether(_addr_raw_angle);
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: getScaledAngle
|
||||
In: none
|
||||
Out: value of scaled angle register
|
||||
Description: gets scaled value of magnet position.
|
||||
start, end, or max angle settings are used to
|
||||
determine value
|
||||
*******************************************************/
|
||||
word AMS_5600::getScaledAngle()
|
||||
{
|
||||
return readTwoBytesTogether(_addr_angle);
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: detectMagnet
|
||||
In: none
|
||||
Out: 1 if magnet is detected, 0 if not
|
||||
Description: reads status register and examines the
|
||||
MH bit
|
||||
*******************************************************/
|
||||
int AMS_5600::detectMagnet()
|
||||
{
|
||||
int magStatus;
|
||||
int retVal = 0;
|
||||
/*0 0 MD ML MH 0 0 0*/
|
||||
/* MD high = magnet detected*/
|
||||
/* ML high = AGC Maximum overflow, magnet to weak*/
|
||||
/* MH high = AGC minimum overflow, Magnet to strong*/
|
||||
magStatus = readOneByte(_addr_status);
|
||||
|
||||
if (magStatus & 0x20)
|
||||
retVal = 1;
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: getMagnetStrength
|
||||
In: none
|
||||
Out: 0 if no magnet is detected
|
||||
1 if magnet is to weak
|
||||
2 if magnet is just right
|
||||
3 if magnet is to strong
|
||||
Description: reads status register andexamins the MH,ML,MD bits
|
||||
*******************************************************/
|
||||
int AMS_5600::getMagnetStrength()
|
||||
{
|
||||
int magStatus;
|
||||
int retVal = 0;
|
||||
/*0 0 MD ML MH 0 0 0*/
|
||||
/* MD high = magnet detected */
|
||||
/* ML high = AGC Maximum overflow, magnet to weak*/
|
||||
/* MH high = AGC minimum overflow, Magnet to strong*/
|
||||
magStatus = readOneByte(_addr_status);
|
||||
if (detectMagnet() == 1) {
|
||||
retVal = 2; /* just right */
|
||||
if (magStatus & 0x10)
|
||||
retVal = 1; /* too weak */
|
||||
else if (magStatus & 0x08)
|
||||
retVal = 3; /* too strong */
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: get Agc
|
||||
In: none
|
||||
Out: value of AGC register
|
||||
Description: gets value of AGC register.
|
||||
*******************************************************/
|
||||
int AMS_5600::getAgc()
|
||||
{
|
||||
return readOneByte(_addr_agc);
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: getMagnitude
|
||||
In: none
|
||||
Out: value of magnitude register
|
||||
Description: gets value of magnitude register.
|
||||
*******************************************************/
|
||||
word AMS_5600::getMagnitude()
|
||||
{
|
||||
return readTwoBytesTogether(_addr_magnitude);
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: getConf
|
||||
In: none
|
||||
Out: value of CONF register
|
||||
Description: gets value of CONF register.
|
||||
*******************************************************/
|
||||
word AMS_5600::getConf()
|
||||
{
|
||||
return readTwoBytesSeparately(_addr_conf);
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: setConf
|
||||
In: value of CONF register
|
||||
Out: none
|
||||
Description: sets value of CONF register.
|
||||
*******************************************************/
|
||||
void AMS_5600::setConf(word _conf)
|
||||
{
|
||||
writeOneByte(_addr_conf, highByte(_conf));
|
||||
delay(2);
|
||||
writeOneByte(_addr_conf+1, lowByte(_conf));
|
||||
delay(2);
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: getBurnCount
|
||||
In: none
|
||||
Out: value of zmco register
|
||||
Description: determines how many times chip has been
|
||||
permanently written to.
|
||||
*******************************************************/
|
||||
int AMS_5600::getBurnCount()
|
||||
{
|
||||
return readOneByte(_addr_zmco);
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: burnAngle
|
||||
In: none
|
||||
Out: 1 success
|
||||
-1 no magnet
|
||||
-2 burn limit exceeded
|
||||
-3 start and end positions not set (useless burn)
|
||||
Description: burns start and end positions to chip.
|
||||
THIS CAN ONLY BE DONE 3 TIMES
|
||||
*******************************************************/
|
||||
int AMS_5600::burnAngle()
|
||||
{
|
||||
word _zPosition = getStartPosition();
|
||||
word _mPosition = getEndPosition();
|
||||
word _maxAngle = getMaxAngle();
|
||||
|
||||
int retVal = 1;
|
||||
if (detectMagnet() == 1) {
|
||||
if (getBurnCount() < 3) {
|
||||
if ((_zPosition == 0) && (_mPosition == 0))
|
||||
retVal = -3;
|
||||
else
|
||||
writeOneByte(_addr_burn, 0x80);
|
||||
}
|
||||
else
|
||||
retVal = -2;
|
||||
} else
|
||||
retVal = -1;
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: burnMaxAngleAndConfig
|
||||
In: none
|
||||
Out: 1 success
|
||||
-1 burn limit exceeded
|
||||
-2 max angle is to small, must be at or above 18 degrees
|
||||
Description: burns max angle and config data to chip.
|
||||
THIS CAN ONLY BE DONE 1 TIME
|
||||
*******************************************************/
|
||||
int AMS_5600::burnMaxAngleAndConfig()
|
||||
{
|
||||
word _maxAngle = getMaxAngle();
|
||||
|
||||
int retVal = 1;
|
||||
if (getBurnCount() == 0) {
|
||||
if (_maxAngle * 0.087 < 18)
|
||||
retVal = -2;
|
||||
else
|
||||
writeOneByte(_addr_burn, 0x40);
|
||||
}
|
||||
else
|
||||
retVal = -1;
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: readOneByte
|
||||
In: register to read
|
||||
Out: data read from i2c
|
||||
Description: reads one byte register from i2c
|
||||
*******************************************************/
|
||||
int AMS_5600::readOneByte(int in_adr)
|
||||
{
|
||||
int retVal = -1;
|
||||
Wire.beginTransmission(_ams5600_Address);
|
||||
Wire.write(in_adr);
|
||||
Wire.endTransmission();
|
||||
Wire.requestFrom(_ams5600_Address, (uint8_t) 1);
|
||||
/*
|
||||
while (Wire.available() == 0)
|
||||
;
|
||||
retVal = Wire.read();
|
||||
*/
|
||||
if(Wire.available() >= 1){
|
||||
retVal = Wire.read();
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: readTwoBytes
|
||||
In: two registers to read
|
||||
Out: data read from i2c as a word
|
||||
Description: reads two bytes register from i2c
|
||||
*******************************************************/
|
||||
word AMS_5600::readTwoBytesTogether(int addr_in)
|
||||
{
|
||||
|
||||
// use only for Angle, Raw Angle and Magnitude
|
||||
|
||||
// read 2 bytes together to prevent getting inconsistent
|
||||
// data while the encoder is moving
|
||||
// according to the datasheet the address is automatically incremented
|
||||
// but only for Angle, Raw Angle and Magnitude
|
||||
// the title says it's auto, but the paragraph after it
|
||||
// says it does NOT
|
||||
// tested and it does auto increment
|
||||
|
||||
// PAGE 13: https://ams.com/documents/20143/36005/AS5600_DS000365_5-00.pdf
|
||||
// Automatic Increment of the Address Pointer for ANGLE, RAW ANGLE and MAGNITUDE Registers
|
||||
// These are special registers which suppress the automatic
|
||||
// increment of the address pointer on reads, so a re-read of these
|
||||
// registers requires no I²C write command to reload the address
|
||||
// pointer. This special treatment of the pointer is effective only if
|
||||
// the address pointer is set to the high byte of the register.
|
||||
|
||||
/* Read 2 Bytes */
|
||||
Wire.beginTransmission(_ams5600_Address);
|
||||
Wire.write(addr_in);
|
||||
Wire.endTransmission();
|
||||
Wire.requestFrom(_ams5600_Address, (uint8_t) 2);
|
||||
/*
|
||||
while (Wire.available() < 2)
|
||||
;
|
||||
|
||||
int highByte = Wire.read();
|
||||
int lowByte = Wire.read();
|
||||
*/
|
||||
int highByte = 0;
|
||||
int lowByte = 0;
|
||||
|
||||
if (Wire.available() >= 2){
|
||||
highByte = Wire.read();
|
||||
lowByte = Wire.read();
|
||||
}
|
||||
|
||||
// in case newer version of IC used the same address to
|
||||
// store something else, get only the 3 bits
|
||||
//return ( ( highByte & 0b111 ) << 8 ) | lowByte;
|
||||
|
||||
// but in case newer version has higher resolution
|
||||
// we're good to go
|
||||
return ( highByte << 8 ) | lowByte;
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: readTwoBytes
|
||||
In: two registers to read
|
||||
Out: data read from i2c as a word
|
||||
Description: reads two bytes register from i2c
|
||||
*******************************************************/
|
||||
word AMS_5600::readTwoBytesSeparately(int addr_in)
|
||||
{
|
||||
int highByte = readOneByte(addr_in );
|
||||
int lowByte = readOneByte(addr_in+1);
|
||||
return ( highByte << 8 ) | lowByte;
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
Method: writeOneByte
|
||||
In: address and data to write
|
||||
Out: none
|
||||
Description: writes one byte to a i2c register
|
||||
*******************************************************/
|
||||
void AMS_5600::writeOneByte(int adr_in, int dat_in)
|
||||
{
|
||||
Wire.beginTransmission(_ams5600_Address);
|
||||
Wire.write(adr_in);
|
||||
Wire.write(dat_in);
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
/********** END OF AMS 5600 CALSS *****************/
|
||||
|
||||
#endif
|
|
@ -1,91 +0,0 @@
|
|||
|
||||
/****************************************************
|
||||
AMS 5600 class for Arduino platform
|
||||
Author: Tom Denton
|
||||
Date: 15 Dec 2014
|
||||
File: AMS_5600.h
|
||||
Version 1.00
|
||||
www.ams.com
|
||||
|
||||
Description: This class has been designed to
|
||||
access the AMS 5600 “potuino” shield.
|
||||
***************************************************/
|
||||
|
||||
// updated jan 2022 by isc - read two bytes together
|
||||
|
||||
// datasheet: https://ams.com/documents/20143/36005/AS5600_DS000365_5-00.pdf
|
||||
|
||||
#ifndef AMS_5600_h
|
||||
#define AMS_5600_h
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
class AMS_5600
|
||||
{
|
||||
public:
|
||||
|
||||
AMS_5600(void);
|
||||
int getAddress();
|
||||
|
||||
word setMaxAngle(word newMaxAngle = -1);
|
||||
word getMaxAngle();
|
||||
|
||||
word setStartPosition(word startAngle = -1);
|
||||
word getStartPosition();
|
||||
|
||||
word setEndPosition(word endAngle = -1);
|
||||
word getEndPosition();
|
||||
|
||||
word getRawAngle();
|
||||
word getScaledAngle();
|
||||
|
||||
int detectMagnet();
|
||||
int getMagnetStrength();
|
||||
int getAgc();
|
||||
word getMagnitude();
|
||||
word getConf();
|
||||
void setConf(word _conf);
|
||||
|
||||
int getBurnCount();
|
||||
int burnAngle();
|
||||
int burnMaxAngleAndConfig();
|
||||
void setOutPut(uint8_t mode);
|
||||
|
||||
private:
|
||||
|
||||
// i2c address
|
||||
static const uint8_t _ams5600_Address = 0x36;
|
||||
|
||||
// single byte registers
|
||||
static const uint8_t _addr_status = 0x0b; // magnet status
|
||||
static const uint8_t _addr_agc = 0x1a; // automatic gain control
|
||||
static const uint8_t _addr_burn = 0xff; // permanent burning of configs (zpos, mpos, mang, conf)
|
||||
static const uint8_t _addr_zmco = 0x00; // number of times zpos/mpos has been permanently burned
|
||||
// zpos/mpos can be permanently burned 3x
|
||||
// mang/conf can be burned only once
|
||||
|
||||
// double byte registers, specify starting address (lower addr, but higher byte data)
|
||||
// addr = upper byte of data (MSB), only bits 0:3 are used
|
||||
// addr+1 = lower byte of data (LSB)
|
||||
static const uint8_t _addr_zpos = 0x01; // zero position (start)
|
||||
// 0x02 - lower byte
|
||||
static const uint8_t _addr_mpos = 0x03; // maximum position (stop)
|
||||
// 0x04 - lower byte
|
||||
static const uint8_t _addr_mang = 0x05; // maximum angle
|
||||
// 0x06 - lower byte
|
||||
static const uint8_t _addr_conf = 0x07; // configuration
|
||||
// 0x08 - lower byte
|
||||
static const uint8_t _addr_raw_angle = 0x0c; // raw angle
|
||||
// 0x0d - lower byte
|
||||
static const uint8_t _addr_angle = 0x0e; // mapped angle
|
||||
// 0x0f - lower byte
|
||||
static const uint8_t _addr_magnitude = 0x1b; // magnitude of internal CORDIC
|
||||
// 0x1c - lower byte
|
||||
|
||||
int readOneByte(int in_adr);
|
||||
word readTwoBytesSeparately(int addr_in);
|
||||
word readTwoBytesTogether(int addr_in);
|
||||
void writeOneByte(int adr_in, int dat_in);
|
||||
|
||||
};
|
||||
#endif
|
|
@ -1,259 +0,0 @@
|
|||
uint8_t colorTo3Byte[256][3]=
|
||||
{
|
||||
{/*00*/0b10010010,0b01001001,0b00100100,},
|
||||
{/*01*/0b10010010,0b01001001,0b00100110,},
|
||||
{/*02*/0b10010010,0b01001001,0b00110100,},
|
||||
{/*03*/0b10010010,0b01001001,0b00110110,},
|
||||
{/*04*/0b10010010,0b01001001,0b10100100,},
|
||||
{/*05*/0b10010010,0b01001001,0b10100110,},
|
||||
{/*06*/0b10010010,0b01001001,0b10110100,},
|
||||
{/*07*/0b10010010,0b01001001,0b10110110,},
|
||||
{/*08*/0b10010010,0b01001101,0b00100100,},
|
||||
{/*09*/0b10010010,0b01001101,0b00100110,},
|
||||
{/*10*/0b10010010,0b01001101,0b00110100,},
|
||||
{/*11*/0b10010010,0b01001101,0b00110110,},
|
||||
{/*12*/0b10010010,0b01001101,0b10100100,},
|
||||
{/*13*/0b10010010,0b01001101,0b10100110,},
|
||||
{/*14*/0b10010010,0b01001101,0b10110100,},
|
||||
{/*15*/0b10010010,0b01001101,0b10110110,},
|
||||
{/*16*/0b10010010,0b01101001,0b00100100,},
|
||||
{/*17*/0b10010010,0b01101001,0b00100110,},
|
||||
{/*18*/0b10010010,0b01101001,0b00110100,},
|
||||
{/*19*/0b10010010,0b01101001,0b00110110,},
|
||||
{/*20*/0b10010010,0b01101001,0b10100100,},
|
||||
{/*21*/0b10010010,0b01101001,0b10100110,},
|
||||
{/*22*/0b10010010,0b01101001,0b10110100,},
|
||||
{/*23*/0b10010010,0b01101001,0b10110110,},
|
||||
{/*24*/0b10010010,0b01101101,0b00100100,},
|
||||
{/*25*/0b10010010,0b01101101,0b00100110,},
|
||||
{/*26*/0b10010010,0b01101101,0b00110100,},
|
||||
{/*27*/0b10010010,0b01101101,0b00110110,},
|
||||
{/*28*/0b10010010,0b01101101,0b10100100,},
|
||||
{/*29*/0b10010010,0b01101101,0b10100110,},
|
||||
{/*30*/0b10010010,0b01101101,0b10110100,},
|
||||
{/*31*/0b10010010,0b01101101,0b10110110,},
|
||||
{/*32*/0b10010011,0b01001001,0b00100100,},
|
||||
{/*33*/0b10010011,0b01001001,0b00100110,},
|
||||
{/*34*/0b10010011,0b01001001,0b00110100,},
|
||||
{/*35*/0b10010011,0b01001001,0b00110110,},
|
||||
{/*36*/0b10010011,0b01001001,0b10100100,},
|
||||
{/*37*/0b10010011,0b01001001,0b10100110,},
|
||||
{/*38*/0b10010011,0b01001001,0b10110100,},
|
||||
{/*39*/0b10010011,0b01001001,0b10110110,},
|
||||
{/*40*/0b10010011,0b01001101,0b00100100,},
|
||||
{/*41*/0b10010011,0b01001101,0b00100110,},
|
||||
{/*42*/0b10010011,0b01001101,0b00110100,},
|
||||
{/*43*/0b10010011,0b01001101,0b00110110,},
|
||||
{/*44*/0b10010011,0b01001101,0b10100100,},
|
||||
{/*45*/0b10010011,0b01001101,0b10100110,},
|
||||
{/*46*/0b10010011,0b01001101,0b10110100,},
|
||||
{/*47*/0b10010011,0b01001101,0b10110110,},
|
||||
{/*48*/0b10010011,0b01101001,0b00100100,},
|
||||
{/*49*/0b10010011,0b01101001,0b00100110,},
|
||||
{/*50*/0b10010011,0b01101001,0b00110100,},
|
||||
{/*51*/0b10010011,0b01101001,0b00110110,},
|
||||
{/*52*/0b10010011,0b01101001,0b10100100,},
|
||||
{/*53*/0b10010011,0b01101001,0b10100110,},
|
||||
{/*54*/0b10010011,0b01101001,0b10110100,},
|
||||
{/*55*/0b10010011,0b01101001,0b10110110,},
|
||||
{/*56*/0b10010011,0b01101101,0b00100100,},
|
||||
{/*57*/0b10010011,0b01101101,0b00100110,},
|
||||
{/*58*/0b10010011,0b01101101,0b00110100,},
|
||||
{/*59*/0b10010011,0b01101101,0b00110110,},
|
||||
{/*60*/0b10010011,0b01101101,0b10100100,},
|
||||
{/*61*/0b10010011,0b01101101,0b10100110,},
|
||||
{/*62*/0b10010011,0b01101101,0b10110100,},
|
||||
{/*63*/0b10010011,0b01101101,0b10110110,},
|
||||
{/*64*/0b10011010,0b01001001,0b00100100,},
|
||||
{/*65*/0b10011010,0b01001001,0b00100110,},
|
||||
{/*66*/0b10011010,0b01001001,0b00110100,},
|
||||
{/*67*/0b10011010,0b01001001,0b00110110,},
|
||||
{/*68*/0b10011010,0b01001001,0b10100100,},
|
||||
{/*69*/0b10011010,0b01001001,0b10100110,},
|
||||
{/*70*/0b10011010,0b01001001,0b10110100,},
|
||||
{/*71*/0b10011010,0b01001001,0b10110110,},
|
||||
{/*72*/0b10011010,0b01001101,0b00100100,},
|
||||
{/*73*/0b10011010,0b01001101,0b00100110,},
|
||||
{/*74*/0b10011010,0b01001101,0b00110100,},
|
||||
{/*75*/0b10011010,0b01001101,0b00110110,},
|
||||
{/*76*/0b10011010,0b01001101,0b10100100,},
|
||||
{/*77*/0b10011010,0b01001101,0b10100110,},
|
||||
{/*78*/0b10011010,0b01001101,0b10110100,},
|
||||
{/*79*/0b10011010,0b01001101,0b10110110,},
|
||||
{/*80*/0b10011010,0b01101001,0b00100100,},
|
||||
{/*81*/0b10011010,0b01101001,0b00100110,},
|
||||
{/*82*/0b10011010,0b01101001,0b00110100,},
|
||||
{/*83*/0b10011010,0b01101001,0b00110110,},
|
||||
{/*84*/0b10011010,0b01101001,0b10100100,},
|
||||
{/*85*/0b10011010,0b01101001,0b10100110,},
|
||||
{/*86*/0b10011010,0b01101001,0b10110100,},
|
||||
{/*87*/0b10011010,0b01101001,0b10110110,},
|
||||
{/*88*/0b10011010,0b01101101,0b00100100,},
|
||||
{/*89*/0b10011010,0b01101101,0b00100110,},
|
||||
{/*90*/0b10011010,0b01101101,0b00110100,},
|
||||
{/*91*/0b10011010,0b01101101,0b00110110,},
|
||||
{/*92*/0b10011010,0b01101101,0b10100100,},
|
||||
{/*93*/0b10011010,0b01101101,0b10100110,},
|
||||
{/*94*/0b10011010,0b01101101,0b10110100,},
|
||||
{/*95*/0b10011010,0b01101101,0b10110110,},
|
||||
{/*96*/0b10011011,0b01001001,0b00100100,},
|
||||
{/*97*/0b10011011,0b01001001,0b00100110,},
|
||||
{/*98*/0b10011011,0b01001001,0b00110100,},
|
||||
{/*99*/0b10011011,0b01001001,0b00110110,},
|
||||
{/*100*/0b10011011,0b01001001,0b10100100,},
|
||||
{/*101*/0b10011011,0b01001001,0b10100110,},
|
||||
{/*102*/0b10011011,0b01001001,0b10110100,},
|
||||
{/*103*/0b10011011,0b01001001,0b10110110,},
|
||||
{/*104*/0b10011011,0b01001101,0b00100100,},
|
||||
{/*105*/0b10011011,0b01001101,0b00100110,},
|
||||
{/*106*/0b10011011,0b01001101,0b00110100,},
|
||||
{/*107*/0b10011011,0b01001101,0b00110110,},
|
||||
{/*108*/0b10011011,0b01001101,0b10100100,},
|
||||
{/*109*/0b10011011,0b01001101,0b10100110,},
|
||||
{/*110*/0b10011011,0b01001101,0b10110100,},
|
||||
{/*111*/0b10011011,0b01001101,0b10110110,},
|
||||
{/*112*/0b10011011,0b01101001,0b00100100,},
|
||||
{/*113*/0b10011011,0b01101001,0b00100110,},
|
||||
{/*114*/0b10011011,0b01101001,0b00110100,},
|
||||
{/*115*/0b10011011,0b01101001,0b00110110,},
|
||||
{/*116*/0b10011011,0b01101001,0b10100100,},
|
||||
{/*117*/0b10011011,0b01101001,0b10100110,},
|
||||
{/*118*/0b10011011,0b01101001,0b10110100,},
|
||||
{/*119*/0b10011011,0b01101001,0b10110110,},
|
||||
{/*120*/0b10011011,0b01101101,0b00100100,},
|
||||
{/*121*/0b10011011,0b01101101,0b00100110,},
|
||||
{/*122*/0b10011011,0b01101101,0b00110100,},
|
||||
{/*123*/0b10011011,0b01101101,0b00110110,},
|
||||
{/*124*/0b10011011,0b01101101,0b10100100,},
|
||||
{/*125*/0b10011011,0b01101101,0b10100110,},
|
||||
{/*126*/0b10011011,0b01101101,0b10110100,},
|
||||
{/*127*/0b10011011,0b01101101,0b10110110,},
|
||||
{/*128*/0b11010010,0b01001001,0b00100100,},
|
||||
{/*129*/0b11010010,0b01001001,0b00100110,},
|
||||
{/*130*/0b11010010,0b01001001,0b00110100,},
|
||||
{/*131*/0b11010010,0b01001001,0b00110110,},
|
||||
{/*132*/0b11010010,0b01001001,0b10100100,},
|
||||
{/*133*/0b11010010,0b01001001,0b10100110,},
|
||||
{/*134*/0b11010010,0b01001001,0b10110100,},
|
||||
{/*135*/0b11010010,0b01001001,0b10110110,},
|
||||
{/*136*/0b11010010,0b01001101,0b00100100,},
|
||||
{/*137*/0b11010010,0b01001101,0b00100110,},
|
||||
{/*138*/0b11010010,0b01001101,0b00110100,},
|
||||
{/*139*/0b11010010,0b01001101,0b00110110,},
|
||||
{/*140*/0b11010010,0b01001101,0b10100100,},
|
||||
{/*141*/0b11010010,0b01001101,0b10100110,},
|
||||
{/*142*/0b11010010,0b01001101,0b10110100,},
|
||||
{/*143*/0b11010010,0b01001101,0b10110110,},
|
||||
{/*144*/0b11010010,0b01101001,0b00100100,},
|
||||
{/*145*/0b11010010,0b01101001,0b00100110,},
|
||||
{/*146*/0b11010010,0b01101001,0b00110100,},
|
||||
{/*147*/0b11010010,0b01101001,0b00110110,},
|
||||
{/*148*/0b11010010,0b01101001,0b10100100,},
|
||||
{/*149*/0b11010010,0b01101001,0b10100110,},
|
||||
{/*150*/0b11010010,0b01101001,0b10110100,},
|
||||
{/*151*/0b11010010,0b01101001,0b10110110,},
|
||||
{/*152*/0b11010010,0b01101101,0b00100100,},
|
||||
{/*153*/0b11010010,0b01101101,0b00100110,},
|
||||
{/*154*/0b11010010,0b01101101,0b00110100,},
|
||||
{/*155*/0b11010010,0b01101101,0b00110110,},
|
||||
{/*156*/0b11010010,0b01101101,0b10100100,},
|
||||
{/*157*/0b11010010,0b01101101,0b10100110,},
|
||||
{/*158*/0b11010010,0b01101101,0b10110100,},
|
||||
{/*159*/0b11010010,0b01101101,0b10110110,},
|
||||
{/*160*/0b11010011,0b01001001,0b00100100,},
|
||||
{/*161*/0b11010011,0b01001001,0b00100110,},
|
||||
{/*162*/0b11010011,0b01001001,0b00110100,},
|
||||
{/*163*/0b11010011,0b01001001,0b00110110,},
|
||||
{/*164*/0b11010011,0b01001001,0b10100100,},
|
||||
{/*165*/0b11010011,0b01001001,0b10100110,},
|
||||
{/*166*/0b11010011,0b01001001,0b10110100,},
|
||||
{/*167*/0b11010011,0b01001001,0b10110110,},
|
||||
{/*168*/0b11010011,0b01001101,0b00100100,},
|
||||
{/*169*/0b11010011,0b01001101,0b00100110,},
|
||||
{/*170*/0b11010011,0b01001101,0b00110100,},
|
||||
{/*171*/0b11010011,0b01001101,0b00110110,},
|
||||
{/*172*/0b11010011,0b01001101,0b10100100,},
|
||||
{/*173*/0b11010011,0b01001101,0b10100110,},
|
||||
{/*174*/0b11010011,0b01001101,0b10110100,},
|
||||
{/*175*/0b11010011,0b01001101,0b10110110,},
|
||||
{/*176*/0b11010011,0b01101001,0b00100100,},
|
||||
{/*177*/0b11010011,0b01101001,0b00100110,},
|
||||
{/*178*/0b11010011,0b01101001,0b00110100,},
|
||||
{/*179*/0b11010011,0b01101001,0b00110110,},
|
||||
{/*180*/0b11010011,0b01101001,0b10100100,},
|
||||
{/*181*/0b11010011,0b01101001,0b10100110,},
|
||||
{/*182*/0b11010011,0b01101001,0b10110100,},
|
||||
{/*183*/0b11010011,0b01101001,0b10110110,},
|
||||
{/*184*/0b11010011,0b01101101,0b00100100,},
|
||||
{/*185*/0b11010011,0b01101101,0b00100110,},
|
||||
{/*186*/0b11010011,0b01101101,0b00110100,},
|
||||
{/*187*/0b11010011,0b01101101,0b00110110,},
|
||||
{/*188*/0b11010011,0b01101101,0b10100100,},
|
||||
{/*189*/0b11010011,0b01101101,0b10100110,},
|
||||
{/*190*/0b11010011,0b01101101,0b10110100,},
|
||||
{/*191*/0b11010011,0b01101101,0b10110110,},
|
||||
{/*192*/0b11011010,0b01001001,0b00100100,},
|
||||
{/*193*/0b11011010,0b01001001,0b00100110,},
|
||||
{/*194*/0b11011010,0b01001001,0b00110100,},
|
||||
{/*195*/0b11011010,0b01001001,0b00110110,},
|
||||
{/*196*/0b11011010,0b01001001,0b10100100,},
|
||||
{/*197*/0b11011010,0b01001001,0b10100110,},
|
||||
{/*198*/0b11011010,0b01001001,0b10110100,},
|
||||
{/*199*/0b11011010,0b01001001,0b10110110,},
|
||||
{/*200*/0b11011010,0b01001101,0b00100100,},
|
||||
{/*201*/0b11011010,0b01001101,0b00100110,},
|
||||
{/*202*/0b11011010,0b01001101,0b00110100,},
|
||||
{/*203*/0b11011010,0b01001101,0b00110110,},
|
||||
{/*204*/0b11011010,0b01001101,0b10100100,},
|
||||
{/*205*/0b11011010,0b01001101,0b10100110,},
|
||||
{/*206*/0b11011010,0b01001101,0b10110100,},
|
||||
{/*207*/0b11011010,0b01001101,0b10110110,},
|
||||
{/*208*/0b11011010,0b01101001,0b00100100,},
|
||||
{/*209*/0b11011010,0b01101001,0b00100110,},
|
||||
{/*210*/0b11011010,0b01101001,0b00110100,},
|
||||
{/*211*/0b11011010,0b01101001,0b00110110,},
|
||||
{/*212*/0b11011010,0b01101001,0b10100100,},
|
||||
{/*213*/0b11011010,0b01101001,0b10100110,},
|
||||
{/*214*/0b11011010,0b01101001,0b10110100,},
|
||||
{/*215*/0b11011010,0b01101001,0b10110110,},
|
||||
{/*216*/0b11011010,0b01101101,0b00100100,},
|
||||
{/*217*/0b11011010,0b01101101,0b00100110,},
|
||||
{/*218*/0b11011010,0b01101101,0b00110100,},
|
||||
{/*219*/0b11011010,0b01101101,0b00110110,},
|
||||
{/*220*/0b11011010,0b01101101,0b10100100,},
|
||||
{/*221*/0b11011010,0b01101101,0b10100110,},
|
||||
{/*222*/0b11011010,0b01101101,0b10110100,},
|
||||
{/*223*/0b11011010,0b01101101,0b10110110,},
|
||||
{/*224*/0b11011011,0b01001001,0b00100100,},
|
||||
{/*225*/0b11011011,0b01001001,0b00100110,},
|
||||
{/*226*/0b11011011,0b01001001,0b00110100,},
|
||||
{/*227*/0b11011011,0b01001001,0b00110110,},
|
||||
{/*228*/0b11011011,0b01001001,0b10100100,},
|
||||
{/*229*/0b11011011,0b01001001,0b10100110,},
|
||||
{/*230*/0b11011011,0b01001001,0b10110100,},
|
||||
{/*231*/0b11011011,0b01001001,0b10110110,},
|
||||
{/*232*/0b11011011,0b01001101,0b00100100,},
|
||||
{/*233*/0b11011011,0b01001101,0b00100110,},
|
||||
{/*234*/0b11011011,0b01001101,0b00110100,},
|
||||
{/*235*/0b11011011,0b01001101,0b00110110,},
|
||||
{/*236*/0b11011011,0b01001101,0b10100100,},
|
||||
{/*237*/0b11011011,0b01001101,0b10100110,},
|
||||
{/*238*/0b11011011,0b01001101,0b10110100,},
|
||||
{/*239*/0b11011011,0b01001101,0b10110110,},
|
||||
{/*240*/0b11011011,0b01101001,0b00100100,},
|
||||
{/*241*/0b11011011,0b01101001,0b00100110,},
|
||||
{/*242*/0b11011011,0b01101001,0b00110100,},
|
||||
{/*243*/0b11011011,0b01101001,0b00110110,},
|
||||
{/*244*/0b11011011,0b01101001,0b10100100,},
|
||||
{/*245*/0b11011011,0b01101001,0b10100110,},
|
||||
{/*246*/0b11011011,0b01101001,0b10110100,},
|
||||
{/*247*/0b11011011,0b01101001,0b10110110,},
|
||||
{/*248*/0b11011011,0b01101101,0b00100100,},
|
||||
{/*249*/0b11011011,0b01101101,0b00100110,},
|
||||
{/*250*/0b11011011,0b01101101,0b00110100,},
|
||||
{/*251*/0b11011011,0b01101101,0b00110110,},
|
||||
{/*252*/0b11011011,0b01101101,0b10100100,},
|
||||
{/*253*/0b11011011,0b01101101,0b10100110,},
|
||||
{/*254*/0b11011011,0b01101101,0b10110100,},
|
||||
{/*255*/0b11011011,0b01101101,0b10110110,}
|
||||
};
|
Binary file not shown.
|
@ -1,503 +0,0 @@
|
|||
const uint8_t DSEG7Classic_BoldItalic16pt7bBitmaps[] PROGMEM = {
|
||||
0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0xFF, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0xFF, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF,
|
||||
0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0xFF, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0xFF, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF,
|
||||
0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0xFF, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0xFF, 0x3F, 0xFD, 0xFF, 0xFD, 0xFF, 0xF0, 0x6E, 0xFE, 0xFF,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0x0F, 0xFF, 0xF0, 0x7F,
|
||||
0xFF, 0xCD, 0xFF, 0xF6, 0x77, 0xFF, 0x73, 0xC0, 0x07, 0x9E, 0x00, 0x3C,
|
||||
0xF0, 0x01, 0xE7, 0x80, 0x0F, 0x3C, 0x00, 0x79, 0xC0, 0x03, 0xDE, 0x00,
|
||||
0x1E, 0xF0, 0x00, 0xF7, 0x80, 0x07, 0xBC, 0x00, 0x39, 0xC0, 0x00, 0xC0,
|
||||
0x00, 0x00, 0x60, 0x00, 0x33, 0x80, 0x03, 0x9E, 0x00, 0x3C, 0xF0, 0x01,
|
||||
0xE7, 0x00, 0x0F, 0x38, 0x00, 0x7B, 0xC0, 0x03, 0xDE, 0x00, 0x1E, 0xF0,
|
||||
0x00, 0xE7, 0x80, 0x07, 0x3C, 0x00, 0x79, 0xDF, 0xFD, 0xCD, 0xFF, 0xF6,
|
||||
0x1F, 0xFF, 0xC0, 0xFF, 0xFE, 0x00, 0x04, 0x31, 0xCF, 0x3C, 0xF3, 0xCF,
|
||||
0x3C, 0xF3, 0xCF, 0x38, 0x60, 0x06, 0x39, 0xE7, 0x9E, 0x79, 0xE7, 0x9C,
|
||||
0x73, 0xC7, 0x0C, 0x00, 0x0F, 0xFF, 0xF0, 0x7F, 0xFF, 0xC1, 0xFF, 0xF6,
|
||||
0x07, 0xFF, 0x70, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00,
|
||||
0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0,
|
||||
0x00, 0x07, 0x80, 0x00, 0x38, 0x1F, 0xFE, 0xC3, 0xFF, 0xF8, 0x6F, 0xFF,
|
||||
0x83, 0x80, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x00, 0x00, 0x38,
|
||||
0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00,
|
||||
0x3C, 0x00, 0x01, 0xDF, 0xFC, 0x0D, 0xFF, 0xF0, 0x1F, 0xFF, 0xC0, 0xFF,
|
||||
0xFE, 0x00, 0x1F, 0xFF, 0xE1, 0xFF, 0xFF, 0x0F, 0xFF, 0xB0, 0x7F, 0xF7,
|
||||
0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00,
|
||||
0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00,
|
||||
0x0E, 0x0F, 0xFF, 0x63, 0xFF, 0xF8, 0x1F, 0xFF, 0x60, 0x00, 0x0E, 0x00,
|
||||
0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0,
|
||||
0x00, 0x1E, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00, 0x03, 0xC1, 0xFF, 0xDC,
|
||||
0x3F, 0xFE, 0xC7, 0xFF, 0xF0, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x16, 0x00,
|
||||
0x03, 0x70, 0x00, 0x77, 0x80, 0x0F, 0x78, 0x00, 0xF7, 0x80, 0x0F, 0x78,
|
||||
0x00, 0xF7, 0x80, 0x0F, 0x70, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF,
|
||||
0x00, 0x0F, 0xF0, 0x00, 0xEE, 0xFF, 0xF6, 0x3F, 0xFF, 0x81, 0xFF, 0xF6,
|
||||
0x00, 0x00, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01,
|
||||
0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1C, 0x00, 0x01, 0xC0, 0x00,
|
||||
0x3C, 0x00, 0x01, 0xC0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE3,
|
||||
0xFF, 0xFD, 0xBF, 0xFE, 0x3B, 0xFF, 0x87, 0x80, 0x00, 0xF0, 0x00, 0x1E,
|
||||
0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0E, 0x00, 0x03, 0xC0, 0x00, 0x78,
|
||||
0x00, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3B, 0xFF, 0xC1, 0xFF, 0xFC, 0x1F,
|
||||
0xFF, 0x60, 0x00, 0x1C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00,
|
||||
0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00,
|
||||
0x0F, 0x0F, 0xFE, 0xE3, 0xFF, 0xEC, 0xFF, 0xFE, 0x1F, 0xFF, 0xC0, 0x0F,
|
||||
0xFF, 0xF0, 0xFF, 0xFF, 0x37, 0xFF, 0xC3, 0xBF, 0xF8, 0x3C, 0x00, 0x03,
|
||||
0xC0, 0x00, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0x80, 0x00,
|
||||
0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x77, 0xFF,
|
||||
0x81, 0xFF, 0xFC, 0x6F, 0xFF, 0xB7, 0x00, 0x07, 0x78, 0x00, 0xF7, 0x80,
|
||||
0x0F, 0x70, 0x00, 0xF7, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0,
|
||||
0x00, 0xEF, 0x00, 0x0E, 0xF0, 0x01, 0xEE, 0xFF, 0xEE, 0xDF, 0xFF, 0x63,
|
||||
0xFF, 0xF8, 0x3F, 0xFF, 0x80, 0x1F, 0xFF, 0xE1, 0xFF, 0xFF, 0x6F, 0xFF,
|
||||
0xB7, 0x7F, 0xF7, 0x78, 0x00, 0xF7, 0x80, 0x0F, 0x78, 0x00, 0xF7, 0x80,
|
||||
0x0F, 0x78, 0x00, 0xF7, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0,
|
||||
0x00, 0xFF, 0x00, 0x0E, 0xE0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60,
|
||||
0x00, 0x0E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1E,
|
||||
0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00, 0x03,
|
||||
0xC0, 0x00, 0x1C, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x7F,
|
||||
0xFF, 0xCD, 0xFF, 0xF6, 0x77, 0xFF, 0x73, 0xC0, 0x07, 0x9E, 0x00, 0x3C,
|
||||
0xF0, 0x01, 0xE7, 0x80, 0x0F, 0x3C, 0x00, 0x79, 0xC0, 0x03, 0xDE, 0x00,
|
||||
0x1E, 0xF0, 0x00, 0xF7, 0x80, 0x07, 0xBC, 0x00, 0x39, 0xDF, 0xFE, 0xC3,
|
||||
0xFF, 0xF8, 0x6F, 0xFF, 0xB3, 0x80, 0x03, 0x9E, 0x00, 0x3C, 0xF0, 0x01,
|
||||
0xE7, 0x00, 0x0F, 0x38, 0x00, 0x7B, 0xC0, 0x03, 0xDE, 0x00, 0x1E, 0xF0,
|
||||
0x00, 0xE7, 0x80, 0x07, 0x3C, 0x00, 0x79, 0xDF, 0xFD, 0xCD, 0xFF, 0xF6,
|
||||
0x1F, 0xFF, 0xC0, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xE1, 0xFF, 0xFF, 0x6F,
|
||||
0xFF, 0xB7, 0x7F, 0xF7, 0x78, 0x00, 0xF7, 0x80, 0x0F, 0x78, 0x00, 0xF7,
|
||||
0x80, 0x0F, 0x78, 0x00, 0xF7, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0xFF, 0x00, 0x0E, 0xEF, 0xFF, 0x63, 0xFF, 0xF8, 0x1F, 0xFF,
|
||||
0x60, 0x00, 0x0E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00,
|
||||
0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00,
|
||||
0x03, 0xC1, 0xFF, 0xDC, 0x3F, 0xFE, 0xC7, 0xFF, 0xF0, 0x7F, 0xFF, 0x00,
|
||||
0x73, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x73, 0x9C, 0xFF, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0xFF, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0xFF, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0xFF, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0xFF, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0xFF, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0xFF, 0x0F, 0xFF, 0xF0, 0x7F, 0xFF, 0xCD, 0xFF, 0xF6,
|
||||
0x77, 0xFF, 0x73, 0xC0, 0x07, 0x9E, 0x00, 0x3C, 0xF0, 0x01, 0xE7, 0x80,
|
||||
0x0F, 0x3C, 0x00, 0x79, 0xC0, 0x03, 0xDE, 0x00, 0x1E, 0xF0, 0x00, 0xF7,
|
||||
0x80, 0x07, 0xBC, 0x00, 0x39, 0xDF, 0xFE, 0xC3, 0xFF, 0xF8, 0x6F, 0xFF,
|
||||
0xB3, 0x80, 0x03, 0x9E, 0x00, 0x3C, 0xF0, 0x01, 0xE7, 0x00, 0x0F, 0x38,
|
||||
0x00, 0x7B, 0xC0, 0x03, 0xDE, 0x00, 0x1E, 0xF0, 0x00, 0xE7, 0x80, 0x07,
|
||||
0x3C, 0x00, 0x79, 0xC0, 0x01, 0xCC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x03, 0x00, 0x00, 0x38, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03,
|
||||
0xC0, 0x00, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x80, 0x00,
|
||||
0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x7F, 0xF8, 0x1F, 0xFF,
|
||||
0xC6, 0xFF, 0xFB, 0x70, 0x00, 0x77, 0x80, 0x0F, 0x78, 0x00, 0xF7, 0x00,
|
||||
0x0F, 0x70, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0E, 0xF0,
|
||||
0x00, 0xEF, 0x00, 0x1E, 0xEF, 0xFE, 0xED, 0xFF, 0xF6, 0x3F, 0xFF, 0x83,
|
||||
0xFF, 0xF8, 0x07, 0xFF, 0x87, 0xFF, 0xF6, 0xFF, 0xF9, 0xC0, 0x00, 0x78,
|
||||
0x00, 0x1E, 0x00, 0x07, 0x00, 0x01, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00,
|
||||
0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3B, 0xFF, 0x8D, 0xFF, 0xF0,
|
||||
0xFF, 0xFE, 0x3F, 0xFF, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0xC0, 0x00,
|
||||
0x0E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xE0,
|
||||
0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00,
|
||||
0xF0, 0x00, 0x07, 0x03, 0xFF, 0xD8, 0x7F, 0xFF, 0x0D, 0xFF, 0xF6, 0x70,
|
||||
0x00, 0x73, 0xC0, 0x07, 0x9E, 0x00, 0x3C, 0xE0, 0x01, 0xE7, 0x00, 0x0F,
|
||||
0x78, 0x00, 0x7B, 0xC0, 0x03, 0xDE, 0x00, 0x1C, 0xF0, 0x00, 0xE7, 0x80,
|
||||
0x0F, 0x3B, 0xFF, 0xB9, 0xBF, 0xFE, 0xC3, 0xFF, 0xF8, 0x1F, 0xFF, 0xC0,
|
||||
0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0x37, 0xFF, 0xC3, 0xBF, 0xF8, 0x3C, 0x00,
|
||||
0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0x80,
|
||||
0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x77,
|
||||
0xFF, 0x81, 0xFF, 0xFC, 0x6F, 0xFF, 0x87, 0x00, 0x00, 0x78, 0x00, 0x07,
|
||||
0x80, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00,
|
||||
0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0E, 0xFF, 0xE0, 0xDF, 0xFF,
|
||||
0x03, 0xFF, 0xF8, 0x3F, 0xFF, 0x80, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0x37,
|
||||
0xFF, 0xC3, 0xBF, 0xF8, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03,
|
||||
0xC0, 0x00, 0x3C, 0x00, 0x03, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00,
|
||||
0x78, 0x00, 0x07, 0x80, 0x00, 0x77, 0xFF, 0x81, 0xFF, 0xFC, 0x6F, 0xFF,
|
||||
0x87, 0x00, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x70, 0x00, 0x07, 0x00,
|
||||
0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0,
|
||||
0x00, 0x0E, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF0,
|
||||
0xFF, 0xFF, 0x37, 0xFF, 0xC3, 0xBF, 0xF8, 0x3C, 0x00, 0x03, 0xC0, 0x00,
|
||||
0x3C, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0x80, 0x00, 0x78, 0x00,
|
||||
0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x70, 0x00, 0x00, 0x00,
|
||||
0x00, 0x60, 0x00, 0x37, 0x00, 0x07, 0x78, 0x00, 0xF7, 0x80, 0x0F, 0x70,
|
||||
0x00, 0xF7, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xEF,
|
||||
0x00, 0x0E, 0xF0, 0x01, 0xEE, 0xFF, 0xEE, 0xDF, 0xFF, 0x63, 0xFF, 0xF8,
|
||||
0x3F, 0xFF, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x38, 0x00, 0x03, 0xC0,
|
||||
0x00, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x38,
|
||||
0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07,
|
||||
0x7F, 0xF8, 0x1F, 0xFF, 0xC6, 0xFF, 0xFB, 0x70, 0x00, 0x77, 0x80, 0x0F,
|
||||
0x78, 0x00, 0xF7, 0x00, 0x0F, 0x70, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0xFF, 0x00, 0x0E, 0xF0, 0x00, 0xEF, 0x00, 0x1E, 0xE0, 0x00, 0xEC, 0x00,
|
||||
0x06, 0x00, 0x00, 0x00, 0x19, 0xDE, 0xF7, 0xBD, 0xEF, 0x73, 0xBC, 0xE3,
|
||||
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xC0, 0x00, 0x0E, 0x00, 0x00, 0xF0,
|
||||
0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00,
|
||||
0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x00,
|
||||
0x00, 0x18, 0x00, 0x00, 0x0C, 0x00, 0x06, 0x70, 0x00, 0x73, 0xC0, 0x07,
|
||||
0x9E, 0x00, 0x3C, 0xE0, 0x01, 0xE7, 0x00, 0x0F, 0x78, 0x00, 0x7B, 0xC0,
|
||||
0x03, 0xDE, 0x00, 0x1C, 0xF0, 0x00, 0xE7, 0x80, 0x0F, 0x3B, 0xFF, 0xB9,
|
||||
0xBF, 0xFE, 0xC3, 0xFF, 0xF8, 0x1F, 0xFF, 0xC0, 0x0F, 0xFF, 0xF0, 0xFF,
|
||||
0xFF, 0x37, 0xFF, 0xC3, 0xBF, 0xF8, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x3C,
|
||||
0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0x80, 0x00, 0x78, 0x00, 0x07,
|
||||
0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x77, 0xFF, 0x81, 0xFF, 0xFC,
|
||||
0x6F, 0xFF, 0xB7, 0x00, 0x07, 0x78, 0x00, 0xF7, 0x80, 0x0F, 0x70, 0x00,
|
||||
0xF7, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xEF, 0x00,
|
||||
0x0E, 0xF0, 0x01, 0xEE, 0x00, 0x0E, 0xC0, 0x00, 0x60, 0x00, 0x00, 0x00,
|
||||
0x00, 0x0C, 0x00, 0x03, 0x80, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00,
|
||||
0x03, 0xC0, 0x00, 0xF0, 0x00, 0x38, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01,
|
||||
0xE0, 0x00, 0x78, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x70,
|
||||
0x00, 0x1E, 0x00, 0x07, 0x80, 0x01, 0xC0, 0x00, 0x70, 0x00, 0x3C, 0x00,
|
||||
0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0E, 0xFF, 0xE3,
|
||||
0x7F, 0xFC, 0x3F, 0xFF, 0x8F, 0xFF, 0xE0, 0x0F, 0xFF, 0xF0, 0x7F, 0xFF,
|
||||
0xCD, 0xFF, 0xF6, 0x77, 0xFF, 0x73, 0xC0, 0x07, 0x9E, 0x00, 0x3C, 0xF0,
|
||||
0x01, 0xE7, 0x80, 0x0F, 0x3C, 0x00, 0x79, 0xC0, 0x03, 0xDE, 0x00, 0x1E,
|
||||
0xF0, 0x00, 0xF7, 0x80, 0x07, 0xBC, 0x00, 0x39, 0xC0, 0x00, 0xC0, 0x00,
|
||||
0x00, 0x60, 0x00, 0x33, 0x80, 0x03, 0x9E, 0x00, 0x3C, 0xF0, 0x01, 0xE7,
|
||||
0x00, 0x0F, 0x38, 0x00, 0x7B, 0xC0, 0x03, 0xDE, 0x00, 0x1E, 0xF0, 0x00,
|
||||
0xE7, 0x80, 0x07, 0x3C, 0x00, 0x79, 0xC0, 0x01, 0xCC, 0x00, 0x06, 0x00,
|
||||
0x00, 0x00, 0x07, 0xFF, 0x81, 0xFF, 0xFC, 0x6F, 0xFF, 0xB7, 0x00, 0x07,
|
||||
0x78, 0x00, 0xF7, 0x80, 0x0F, 0x70, 0x00, 0xF7, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xEF, 0x00, 0x0E, 0xF0, 0x01, 0xEE, 0x00,
|
||||
0x0E, 0xC0, 0x00, 0x60, 0x00, 0x00, 0x07, 0xFF, 0x81, 0xFF, 0xFC, 0x6F,
|
||||
0xFF, 0xB7, 0x00, 0x07, 0x78, 0x00, 0xF7, 0x80, 0x0F, 0x70, 0x00, 0xF7,
|
||||
0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xEF, 0x00, 0x0E,
|
||||
0xF0, 0x01, 0xEE, 0xFF, 0xEE, 0xDF, 0xFF, 0x63, 0xFF, 0xF8, 0x3F, 0xFF,
|
||||
0x80, 0x0F, 0xFF, 0xF0, 0x7F, 0xFF, 0xCD, 0xFF, 0xF6, 0x77, 0xFF, 0x73,
|
||||
0xC0, 0x07, 0x9E, 0x00, 0x3C, 0xF0, 0x01, 0xE7, 0x80, 0x0F, 0x3C, 0x00,
|
||||
0x79, 0xC0, 0x03, 0xDE, 0x00, 0x1E, 0xF0, 0x00, 0xF7, 0x80, 0x07, 0xBC,
|
||||
0x00, 0x39, 0xDF, 0xFE, 0xC3, 0xFF, 0xF8, 0x6F, 0xFF, 0x83, 0x80, 0x00,
|
||||
0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x00, 0x00, 0x38, 0x00, 0x03, 0xC0,
|
||||
0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01,
|
||||
0xC0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE1, 0xFF,
|
||||
0xFF, 0x6F, 0xFF, 0xB7, 0x7F, 0xF7, 0x78, 0x00, 0xF7, 0x80, 0x0F, 0x78,
|
||||
0x00, 0xF7, 0x80, 0x0F, 0x78, 0x00, 0xF7, 0x00, 0x0F, 0xF0, 0x00, 0xFF,
|
||||
0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0E, 0xEF, 0xFF, 0x63, 0xFF, 0xF8,
|
||||
0x1F, 0xFF, 0x60, 0x00, 0x0E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01,
|
||||
0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xC0, 0x00,
|
||||
0x1C, 0x00, 0x03, 0xC0, 0x00, 0x1C, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x07,
|
||||
0xFF, 0x87, 0xFF, 0xF6, 0xFF, 0xF9, 0xC0, 0x00, 0x78, 0x00, 0x1E, 0x00,
|
||||
0x07, 0x00, 0x01, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03,
|
||||
0xC0, 0x00, 0xF0, 0x00, 0x38, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x0C, 0x00, 0x01, 0xC0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0,
|
||||
0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x70, 0x00, 0x1E, 0x00, 0x03, 0xC0,
|
||||
0x00, 0x78, 0x00, 0x0F, 0x00, 0x01, 0xDF, 0xFE, 0x0F, 0xFF, 0xE0, 0xFF,
|
||||
0xFB, 0x00, 0x00, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00,
|
||||
0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00,
|
||||
0x78, 0x7F, 0xF7, 0x1F, 0xFF, 0x67, 0xFF, 0xF0, 0xFF, 0xFE, 0x00, 0x00,
|
||||
0x00, 0x0C, 0x00, 0x03, 0x80, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00,
|
||||
0x03, 0xC0, 0x00, 0xF0, 0x00, 0x38, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01,
|
||||
0xE0, 0x00, 0x78, 0x00, 0x1D, 0xFF, 0xE1, 0xFF, 0xFD, 0xBF, 0xFE, 0x70,
|
||||
0x00, 0x1E, 0x00, 0x07, 0x80, 0x01, 0xC0, 0x00, 0x70, 0x00, 0x3C, 0x00,
|
||||
0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0E, 0xFF, 0xE3,
|
||||
0x7F, 0xFC, 0x3F, 0xFF, 0x8F, 0xFF, 0xE0, 0x60, 0x00, 0x37, 0x00, 0x07,
|
||||
0x78, 0x00, 0xF7, 0x80, 0x0F, 0x70, 0x00, 0xF7, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xEF, 0x00, 0x0E, 0xF0, 0x01, 0xEE, 0xFF,
|
||||
0xEE, 0xDF, 0xFF, 0x63, 0xFF, 0xF8, 0x3F, 0xFF, 0x80, 0x00, 0x00, 0x09,
|
||||
0x80, 0x00, 0xCE, 0x00, 0x0E, 0x78, 0x00, 0xF3, 0xC0, 0x07, 0x9E, 0x00,
|
||||
0x3C, 0xF0, 0x01, 0xE7, 0x80, 0x0F, 0x38, 0x00, 0x7B, 0xC0, 0x03, 0xDE,
|
||||
0x00, 0x1E, 0xF0, 0x00, 0xF7, 0x80, 0x07, 0x38, 0x00, 0x18, 0x00, 0x00,
|
||||
0x0C, 0x00, 0x06, 0x70, 0x00, 0x73, 0xC0, 0x07, 0x9E, 0x00, 0x3C, 0xE0,
|
||||
0x01, 0xE7, 0x00, 0x0F, 0x78, 0x00, 0x7B, 0xC0, 0x03, 0xDE, 0x00, 0x1C,
|
||||
0xF0, 0x00, 0xE7, 0x80, 0x0F, 0x3B, 0xFF, 0xB9, 0xBF, 0xFE, 0xC3, 0xFF,
|
||||
0xF8, 0x1F, 0xFF, 0xC0, 0x00, 0x00, 0x09, 0x80, 0x00, 0xCE, 0x00, 0x0E,
|
||||
0x78, 0x00, 0xF3, 0xC0, 0x07, 0x9E, 0x00, 0x3C, 0xF0, 0x01, 0xE7, 0x80,
|
||||
0x0F, 0x38, 0x00, 0x7B, 0xC0, 0x03, 0xDE, 0x00, 0x1E, 0xF0, 0x00, 0xF7,
|
||||
0x80, 0x07, 0x3B, 0xFF, 0xD8, 0x7F, 0xFF, 0x0D, 0xFF, 0xF6, 0x70, 0x00,
|
||||
0x73, 0xC0, 0x07, 0x9E, 0x00, 0x3C, 0xE0, 0x01, 0xE7, 0x00, 0x0F, 0x78,
|
||||
0x00, 0x7B, 0xC0, 0x03, 0xDE, 0x00, 0x1C, 0xF0, 0x00, 0xE7, 0x80, 0x0F,
|
||||
0x3B, 0xFF, 0xB9, 0xBF, 0xFE, 0xC3, 0xFF, 0xF8, 0x1F, 0xFF, 0xC0, 0x00,
|
||||
0x00, 0x09, 0x80, 0x00, 0xCE, 0x00, 0x0E, 0x78, 0x00, 0xF3, 0xC0, 0x07,
|
||||
0x9E, 0x00, 0x3C, 0xF0, 0x01, 0xE7, 0x80, 0x0F, 0x38, 0x00, 0x7B, 0xC0,
|
||||
0x03, 0xDE, 0x00, 0x1E, 0xF0, 0x00, 0xF7, 0x80, 0x07, 0x3B, 0xFF, 0xD8,
|
||||
0x7F, 0xFF, 0x0D, 0xFF, 0xF6, 0x70, 0x00, 0x73, 0xC0, 0x07, 0x9E, 0x00,
|
||||
0x3C, 0xE0, 0x01, 0xE7, 0x00, 0x0F, 0x78, 0x00, 0x7B, 0xC0, 0x03, 0xDE,
|
||||
0x00, 0x1C, 0xF0, 0x00, 0xE7, 0x80, 0x0F, 0x38, 0x00, 0x39, 0x80, 0x00,
|
||||
0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x70, 0x00, 0x77,
|
||||
0x80, 0x0F, 0x78, 0x00, 0xF7, 0x80, 0x0F, 0x78, 0x00, 0xF7, 0x80, 0x0F,
|
||||
0x70, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0xEE, 0xFF, 0xF6, 0x3F, 0xFF, 0x81, 0xFF, 0xF6, 0x00, 0x00, 0xE0, 0x00,
|
||||
0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00,
|
||||
0x01, 0xE0, 0x00, 0x1C, 0x00, 0x01, 0xC0, 0x00, 0x3C, 0x1F, 0xFD, 0xC3,
|
||||
0xFF, 0xEC, 0x7F, 0xFF, 0x07, 0xFF, 0xF0, 0x0F, 0xFF, 0xF0, 0x7F, 0xFF,
|
||||
0xC1, 0xFF, 0xF6, 0x07, 0xFF, 0x70, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00,
|
||||
0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E,
|
||||
0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x38, 0x00, 0x00, 0xC0, 0x00,
|
||||
0x00, 0x60, 0x00, 0x03, 0x80, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07,
|
||||
0x00, 0x00, 0x38, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00,
|
||||
0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xDF, 0xFC, 0x0D, 0xFF, 0xF0, 0x1F,
|
||||
0xFF, 0xC0, 0xFF, 0xFE, 0x00, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0xFF, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0xFF,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0xFF, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0xFF, 0x1F, 0xFC, 0x1F, 0xFF, 0x1F, 0xFF, 0xCF,
|
||||
0xFF, 0xE0, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0x0F,
|
||||
0xFF, 0xF0, 0x7F, 0xFF, 0xCD, 0xFF, 0xF6, 0x77, 0xFF, 0x73, 0xC0, 0x07,
|
||||
0x9E, 0x00, 0x3C, 0xF0, 0x01, 0xE7, 0x80, 0x0F, 0x3C, 0x00, 0x79, 0xC0,
|
||||
0x03, 0xDE, 0x00, 0x1E, 0xF0, 0x00, 0xF7, 0x80, 0x07, 0xBC, 0x00, 0x39,
|
||||
0xDF, 0xFE, 0xC3, 0xFF, 0xF8, 0x6F, 0xFF, 0xB3, 0x80, 0x03, 0x9E, 0x00,
|
||||
0x3C, 0xF0, 0x01, 0xE7, 0x00, 0x0F, 0x38, 0x00, 0x7B, 0xC0, 0x03, 0xDE,
|
||||
0x00, 0x1E, 0xF0, 0x00, 0xE7, 0x80, 0x07, 0x3C, 0x00, 0x79, 0xC0, 0x01,
|
||||
0xCC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x38,
|
||||
0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03,
|
||||
0xC0, 0x00, 0x38, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00,
|
||||
0x78, 0x00, 0x07, 0x7F, 0xF8, 0x1F, 0xFF, 0xC6, 0xFF, 0xFB, 0x70, 0x00,
|
||||
0x77, 0x80, 0x0F, 0x78, 0x00, 0xF7, 0x00, 0x0F, 0x70, 0x00, 0xFF, 0x00,
|
||||
0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0E, 0xF0, 0x00, 0xEF, 0x00, 0x1E, 0xEF,
|
||||
0xFE, 0xED, 0xFF, 0xF6, 0x3F, 0xFF, 0x83, 0xFF, 0xF8, 0x07, 0xFF, 0x87,
|
||||
0xFF, 0xF6, 0xFF, 0xF9, 0xC0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x07, 0x00,
|
||||
0x01, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00,
|
||||
0xF0, 0x00, 0x3B, 0xFF, 0x8D, 0xFF, 0xF0, 0xFF, 0xFE, 0x3F, 0xFF, 0x80,
|
||||
0x00, 0x00, 0x08, 0x00, 0x00, 0xC0, 0x00, 0x0E, 0x00, 0x00, 0xF0, 0x00,
|
||||
0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78,
|
||||
0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x03, 0xFF,
|
||||
0xD8, 0x7F, 0xFF, 0x0D, 0xFF, 0xF6, 0x70, 0x00, 0x73, 0xC0, 0x07, 0x9E,
|
||||
0x00, 0x3C, 0xE0, 0x01, 0xE7, 0x00, 0x0F, 0x78, 0x00, 0x7B, 0xC0, 0x03,
|
||||
0xDE, 0x00, 0x1C, 0xF0, 0x00, 0xE7, 0x80, 0x0F, 0x3B, 0xFF, 0xB9, 0xBF,
|
||||
0xFE, 0xC3, 0xFF, 0xF8, 0x1F, 0xFF, 0xC0, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF,
|
||||
0x37, 0xFF, 0xC3, 0xBF, 0xF8, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00,
|
||||
0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80,
|
||||
0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x77, 0xFF, 0x81, 0xFF, 0xFC, 0x6F,
|
||||
0xFF, 0x87, 0x00, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x70, 0x00, 0x07,
|
||||
0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00,
|
||||
0xF0, 0x00, 0x0E, 0xFF, 0xE0, 0xDF, 0xFF, 0x03, 0xFF, 0xF8, 0x3F, 0xFF,
|
||||
0x80, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0x37, 0xFF, 0xC3, 0xBF, 0xF8, 0x3C,
|
||||
0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03,
|
||||
0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00,
|
||||
0x77, 0xFF, 0x81, 0xFF, 0xFC, 0x6F, 0xFF, 0x87, 0x00, 0x00, 0x78, 0x00,
|
||||
0x07, 0x80, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00,
|
||||
0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0E, 0x00, 0x00, 0xC0,
|
||||
0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0x37, 0xFF, 0xC3,
|
||||
0xBF, 0xF8, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0xC0, 0x00,
|
||||
0x3C, 0x00, 0x03, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00,
|
||||
0x07, 0x80, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x37, 0x00,
|
||||
0x07, 0x78, 0x00, 0xF7, 0x80, 0x0F, 0x70, 0x00, 0xF7, 0x00, 0x0F, 0xF0,
|
||||
0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xEF, 0x00, 0x0E, 0xF0, 0x01, 0xEE,
|
||||
0xFF, 0xEE, 0xDF, 0xFF, 0x63, 0xFF, 0xF8, 0x3F, 0xFF, 0x80, 0x00, 0x00,
|
||||
0x03, 0x00, 0x00, 0x38, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0xC0,
|
||||
0x00, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x80, 0x00, 0x78,
|
||||
0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x7F, 0xF8, 0x1F, 0xFF, 0xC6,
|
||||
0xFF, 0xFB, 0x70, 0x00, 0x77, 0x80, 0x0F, 0x78, 0x00, 0xF7, 0x00, 0x0F,
|
||||
0x70, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0E, 0xF0, 0x00,
|
||||
0xEF, 0x00, 0x1E, 0xE0, 0x00, 0xEC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x19,
|
||||
0xDE, 0xF7, 0xBD, 0xEF, 0x73, 0xBC, 0xE3, 0x00, 0x00, 0x00, 0x08, 0x00,
|
||||
0x00, 0xC0, 0x00, 0x0E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C,
|
||||
0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00,
|
||||
0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x00, 0x00, 0x18, 0x00, 0x00, 0x0C,
|
||||
0x00, 0x06, 0x70, 0x00, 0x73, 0xC0, 0x07, 0x9E, 0x00, 0x3C, 0xE0, 0x01,
|
||||
0xE7, 0x00, 0x0F, 0x78, 0x00, 0x7B, 0xC0, 0x03, 0xDE, 0x00, 0x1C, 0xF0,
|
||||
0x00, 0xE7, 0x80, 0x0F, 0x3B, 0xFF, 0xB9, 0xBF, 0xFE, 0xC3, 0xFF, 0xF8,
|
||||
0x1F, 0xFF, 0xC0, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0x37, 0xFF, 0xC3, 0xBF,
|
||||
0xF8, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x3C,
|
||||
0x00, 0x03, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07,
|
||||
0x80, 0x00, 0x77, 0xFF, 0x81, 0xFF, 0xFC, 0x6F, 0xFF, 0xB7, 0x00, 0x07,
|
||||
0x78, 0x00, 0xF7, 0x80, 0x0F, 0x70, 0x00, 0xF7, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xEF, 0x00, 0x0E, 0xF0, 0x01, 0xEE, 0x00,
|
||||
0x0E, 0xC0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x03, 0x80,
|
||||
0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00,
|
||||
0x38, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x1C,
|
||||
0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x70, 0x00, 0x1E, 0x00, 0x07, 0x80,
|
||||
0x01, 0xC0, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00,
|
||||
0xF0, 0x00, 0x3C, 0x00, 0x0E, 0xFF, 0xE3, 0x7F, 0xFC, 0x3F, 0xFF, 0x8F,
|
||||
0xFF, 0xE0, 0x0F, 0xFF, 0xF0, 0x7F, 0xFF, 0xCD, 0xFF, 0xF6, 0x77, 0xFF,
|
||||
0x73, 0xC0, 0x07, 0x9E, 0x00, 0x3C, 0xF0, 0x01, 0xE7, 0x80, 0x0F, 0x3C,
|
||||
0x00, 0x79, 0xC0, 0x03, 0xDE, 0x00, 0x1E, 0xF0, 0x00, 0xF7, 0x80, 0x07,
|
||||
0xBC, 0x00, 0x39, 0xC0, 0x00, 0xC0, 0x00, 0x00, 0x60, 0x00, 0x33, 0x80,
|
||||
0x03, 0x9E, 0x00, 0x3C, 0xF0, 0x01, 0xE7, 0x00, 0x0F, 0x38, 0x00, 0x7B,
|
||||
0xC0, 0x03, 0xDE, 0x00, 0x1E, 0xF0, 0x00, 0xE7, 0x80, 0x07, 0x3C, 0x00,
|
||||
0x79, 0xC0, 0x01, 0xCC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x81,
|
||||
0xFF, 0xFC, 0x6F, 0xFF, 0xB7, 0x00, 0x07, 0x78, 0x00, 0xF7, 0x80, 0x0F,
|
||||
0x70, 0x00, 0xF7, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0xEF, 0x00, 0x0E, 0xF0, 0x01, 0xEE, 0x00, 0x0E, 0xC0, 0x00, 0x60, 0x00,
|
||||
0x00, 0x07, 0xFF, 0x81, 0xFF, 0xFC, 0x6F, 0xFF, 0xB7, 0x00, 0x07, 0x78,
|
||||
0x00, 0xF7, 0x80, 0x0F, 0x70, 0x00, 0xF7, 0x00, 0x0F, 0xF0, 0x00, 0xFF,
|
||||
0x00, 0x0F, 0xF0, 0x00, 0xEF, 0x00, 0x0E, 0xF0, 0x01, 0xEE, 0xFF, 0xEE,
|
||||
0xDF, 0xFF, 0x63, 0xFF, 0xF8, 0x3F, 0xFF, 0x80, 0x0F, 0xFF, 0xF0, 0x7F,
|
||||
0xFF, 0xCD, 0xFF, 0xF6, 0x77, 0xFF, 0x73, 0xC0, 0x07, 0x9E, 0x00, 0x3C,
|
||||
0xF0, 0x01, 0xE7, 0x80, 0x0F, 0x3C, 0x00, 0x79, 0xC0, 0x03, 0xDE, 0x00,
|
||||
0x1E, 0xF0, 0x00, 0xF7, 0x80, 0x07, 0xBC, 0x00, 0x39, 0xDF, 0xFE, 0xC3,
|
||||
0xFF, 0xF8, 0x6F, 0xFF, 0x83, 0x80, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00,
|
||||
0x07, 0x00, 0x00, 0x38, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0,
|
||||
0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xC0, 0x00, 0x0C, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE1, 0xFF, 0xFF, 0x6F, 0xFF, 0xB7, 0x7F,
|
||||
0xF7, 0x78, 0x00, 0xF7, 0x80, 0x0F, 0x78, 0x00, 0xF7, 0x80, 0x0F, 0x78,
|
||||
0x00, 0xF7, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF,
|
||||
0x00, 0x0E, 0xEF, 0xFF, 0x63, 0xFF, 0xF8, 0x1F, 0xFF, 0x60, 0x00, 0x0E,
|
||||
0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01,
|
||||
0xE0, 0x00, 0x1E, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00, 0x03, 0xC0, 0x00,
|
||||
0x1C, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x07, 0xFF, 0x87, 0xFF, 0xF6, 0xFF,
|
||||
0xF9, 0xC0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x01, 0xC0, 0x00,
|
||||
0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x38,
|
||||
0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x01, 0xC0,
|
||||
0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0,
|
||||
0x00, 0x70, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00,
|
||||
0x01, 0xDF, 0xFE, 0x0F, 0xFF, 0xE0, 0xFF, 0xFB, 0x00, 0x00, 0xE0, 0x00,
|
||||
0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00,
|
||||
0x78, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x78, 0x7F, 0xF7, 0x1F, 0xFF,
|
||||
0x67, 0xFF, 0xF0, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x03, 0x80,
|
||||
0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00,
|
||||
0x38, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x1D,
|
||||
0xFF, 0xE1, 0xFF, 0xFD, 0xBF, 0xFE, 0x70, 0x00, 0x1E, 0x00, 0x07, 0x80,
|
||||
0x01, 0xC0, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00,
|
||||
0xF0, 0x00, 0x3C, 0x00, 0x0E, 0xFF, 0xE3, 0x7F, 0xFC, 0x3F, 0xFF, 0x8F,
|
||||
0xFF, 0xE0, 0x60, 0x00, 0x37, 0x00, 0x07, 0x78, 0x00, 0xF7, 0x80, 0x0F,
|
||||
0x70, 0x00, 0xF7, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0xEF, 0x00, 0x0E, 0xF0, 0x01, 0xEE, 0xFF, 0xEE, 0xDF, 0xFF, 0x63, 0xFF,
|
||||
0xF8, 0x3F, 0xFF, 0x80, 0x00, 0x00, 0x09, 0x80, 0x00, 0xCE, 0x00, 0x0E,
|
||||
0x78, 0x00, 0xF3, 0xC0, 0x07, 0x9E, 0x00, 0x3C, 0xF0, 0x01, 0xE7, 0x80,
|
||||
0x0F, 0x38, 0x00, 0x7B, 0xC0, 0x03, 0xDE, 0x00, 0x1E, 0xF0, 0x00, 0xF7,
|
||||
0x80, 0x07, 0x38, 0x00, 0x18, 0x00, 0x00, 0x0C, 0x00, 0x06, 0x70, 0x00,
|
||||
0x73, 0xC0, 0x07, 0x9E, 0x00, 0x3C, 0xE0, 0x01, 0xE7, 0x00, 0x0F, 0x78,
|
||||
0x00, 0x7B, 0xC0, 0x03, 0xDE, 0x00, 0x1C, 0xF0, 0x00, 0xE7, 0x80, 0x0F,
|
||||
0x3B, 0xFF, 0xB9, 0xBF, 0xFE, 0xC3, 0xFF, 0xF8, 0x1F, 0xFF, 0xC0, 0x00,
|
||||
0x00, 0x09, 0x80, 0x00, 0xCE, 0x00, 0x0E, 0x78, 0x00, 0xF3, 0xC0, 0x07,
|
||||
0x9E, 0x00, 0x3C, 0xF0, 0x01, 0xE7, 0x80, 0x0F, 0x38, 0x00, 0x7B, 0xC0,
|
||||
0x03, 0xDE, 0x00, 0x1E, 0xF0, 0x00, 0xF7, 0x80, 0x07, 0x3B, 0xFF, 0xD8,
|
||||
0x7F, 0xFF, 0x0D, 0xFF, 0xF6, 0x70, 0x00, 0x73, 0xC0, 0x07, 0x9E, 0x00,
|
||||
0x3C, 0xE0, 0x01, 0xE7, 0x00, 0x0F, 0x78, 0x00, 0x7B, 0xC0, 0x03, 0xDE,
|
||||
0x00, 0x1C, 0xF0, 0x00, 0xE7, 0x80, 0x0F, 0x3B, 0xFF, 0xB9, 0xBF, 0xFE,
|
||||
0xC3, 0xFF, 0xF8, 0x1F, 0xFF, 0xC0, 0x00, 0x00, 0x09, 0x80, 0x00, 0xCE,
|
||||
0x00, 0x0E, 0x78, 0x00, 0xF3, 0xC0, 0x07, 0x9E, 0x00, 0x3C, 0xF0, 0x01,
|
||||
0xE7, 0x80, 0x0F, 0x38, 0x00, 0x7B, 0xC0, 0x03, 0xDE, 0x00, 0x1E, 0xF0,
|
||||
0x00, 0xF7, 0x80, 0x07, 0x3B, 0xFF, 0xD8, 0x7F, 0xFF, 0x0D, 0xFF, 0xF6,
|
||||
0x70, 0x00, 0x73, 0xC0, 0x07, 0x9E, 0x00, 0x3C, 0xE0, 0x01, 0xE7, 0x00,
|
||||
0x0F, 0x78, 0x00, 0x7B, 0xC0, 0x03, 0xDE, 0x00, 0x1C, 0xF0, 0x00, 0xE7,
|
||||
0x80, 0x0F, 0x38, 0x00, 0x39, 0x80, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x16, 0x00, 0x03, 0x70, 0x00, 0x77, 0x80, 0x0F, 0x78, 0x00, 0xF7,
|
||||
0x80, 0x0F, 0x78, 0x00, 0xF7, 0x80, 0x0F, 0x70, 0x00, 0xFF, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xEE, 0xFF, 0xF6, 0x3F, 0xFF,
|
||||
0x81, 0xFF, 0xF6, 0x00, 0x00, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00,
|
||||
0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1C, 0x00,
|
||||
0x01, 0xC0, 0x00, 0x3C, 0x1F, 0xFD, 0xC3, 0xFF, 0xEC, 0x7F, 0xFF, 0x07,
|
||||
0xFF, 0xF0, 0x0F, 0xFF, 0xF0, 0x7F, 0xFF, 0xC1, 0xFF, 0xF6, 0x07, 0xFF,
|
||||
0x70, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00,
|
||||
0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07,
|
||||
0x80, 0x00, 0x38, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x60, 0x00, 0x03, 0x80,
|
||||
0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x00, 0x00, 0x38, 0x00, 0x03,
|
||||
0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00,
|
||||
0x01, 0xDF, 0xFC, 0x0D, 0xFF, 0xF0, 0x1F, 0xFF, 0xC0, 0xFF, 0xFE, 0x00,
|
||||
0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0xFF, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0xFF, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF };
|
||||
|
||||
const GFXglyph DSEG7Classic_BoldItalic16pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 0, 0, 6, 0, 1 }, // 0x20 ' '
|
||||
{ 0, 0, 0, 25, 0, 1 }, // 0x21 '!'
|
||||
{ 0, 8, 21, 11, 1, -20 }, // 0x22 '"'
|
||||
{ 21, 8, 21, 11, 1, -20 }, // 0x23 '#'
|
||||
{ 42, 8, 21, 11, 1, -20 }, // 0x24 '$'
|
||||
{ 63, 8, 21, 11, 1, -20 }, // 0x25 '%'
|
||||
{ 84, 8, 21, 11, 1, -20 }, // 0x26 '&'
|
||||
{ 105, 8, 21, 11, 1, -20 }, // 0x27 '''
|
||||
{ 126, 8, 21, 11, 1, -20 }, // 0x28 '('
|
||||
{ 147, 8, 21, 11, 1, -20 }, // 0x29 ')'
|
||||
{ 168, 8, 21, 11, 1, -20 }, // 0x2A '*'
|
||||
{ 189, 8, 21, 11, 1, -20 }, // 0x2B '+'
|
||||
{ 210, 8, 21, 11, 1, -20 }, // 0x2C ','
|
||||
{ 231, 15, 3, 25, 5, -16 }, // 0x2D '-'
|
||||
{ 237, 4, 4, 0, -3, -3 }, // 0x2E '.'
|
||||
{ 239, 8, 21, 11, 1, -20 }, // 0x2F '/'
|
||||
{ 260, 21, 31, 25, 2, -30 }, // 0x30 '0'
|
||||
{ 342, 6, 29, 25, 17, -29 }, // 0x31 '1'
|
||||
{ 364, 21, 31, 25, 2, -30 }, // 0x32 '2'
|
||||
{ 446, 20, 31, 25, 3, -30 }, // 0x33 '3'
|
||||
{ 524, 20, 29, 25, 3, -29 }, // 0x34 '4'
|
||||
{ 597, 19, 31, 25, 3, -30 }, // 0x35 '5'
|
||||
{ 671, 20, 31, 25, 2, -30 }, // 0x36 '6'
|
||||
{ 749, 20, 30, 25, 3, -30 }, // 0x37 '7'
|
||||
{ 824, 21, 31, 25, 2, -30 }, // 0x38 '8'
|
||||
{ 906, 20, 31, 25, 3, -30 }, // 0x39 '9'
|
||||
{ 984, 5, 16, 6, 1, -22 }, // 0x3A ':'
|
||||
{ 994, 8, 21, 11, 1, -20 }, // 0x3B ';'
|
||||
{ 1015, 8, 21, 11, 1, -20 }, // 0x3C '<'
|
||||
{ 1036, 8, 21, 11, 1, -20 }, // 0x3D '='
|
||||
{ 1057, 8, 21, 11, 1, -20 }, // 0x3E '>'
|
||||
{ 1078, 8, 21, 11, 1, -20 }, // 0x3F '?'
|
||||
{ 1099, 8, 21, 11, 1, -20 }, // 0x40 '@'
|
||||
{ 1120, 21, 30, 25, 2, -30 }, // 0x41 'A'
|
||||
{ 1199, 20, 30, 25, 2, -29 }, // 0x42 'B'
|
||||
{ 1274, 18, 17, 25, 2, -16 }, // 0x43 'C'
|
||||
{ 1313, 21, 30, 25, 2, -29 }, // 0x44 'D'
|
||||
{ 1392, 20, 31, 25, 2, -30 }, // 0x45 'E'
|
||||
{ 1470, 20, 30, 25, 2, -30 }, // 0x46 'F'
|
||||
{ 1545, 20, 31, 25, 2, -30 }, // 0x47 'G'
|
||||
{ 1623, 20, 29, 25, 2, -29 }, // 0x48 'H'
|
||||
{ 1696, 5, 14, 25, 17, -14 }, // 0x49 'I'
|
||||
{ 1705, 21, 30, 25, 2, -29 }, // 0x4A 'J'
|
||||
{ 1784, 20, 30, 25, 2, -30 }, // 0x4B 'K'
|
||||
{ 1859, 18, 30, 25, 2, -29 }, // 0x4C 'L'
|
||||
{ 1927, 21, 30, 25, 2, -30 }, // 0x4D 'M'
|
||||
{ 2006, 20, 16, 25, 2, -16 }, // 0x4E 'N'
|
||||
{ 2046, 20, 17, 25, 2, -16 }, // 0x4F 'O'
|
||||
{ 2089, 21, 30, 25, 2, -30 }, // 0x50 'P'
|
||||
{ 2168, 20, 30, 25, 3, -30 }, // 0x51 'Q'
|
||||
{ 2243, 18, 16, 25, 2, -16 }, // 0x52 'R'
|
||||
{ 2279, 19, 30, 25, 3, -29 }, // 0x53 'S'
|
||||
{ 2351, 18, 30, 25, 2, -29 }, // 0x54 'T'
|
||||
{ 2419, 20, 15, 25, 2, -14 }, // 0x55 'U'
|
||||
{ 2457, 21, 30, 25, 2, -29 }, // 0x56 'V'
|
||||
{ 2536, 21, 30, 25, 2, -29 }, // 0x57 'W'
|
||||
{ 2615, 21, 29, 25, 2, -29 }, // 0x58 'X'
|
||||
{ 2692, 20, 30, 25, 3, -29 }, // 0x59 'Y'
|
||||
{ 2767, 21, 31, 25, 2, -30 }, // 0x5A 'Z'
|
||||
{ 2849, 8, 21, 11, 1, -20 }, // 0x5B '['
|
||||
{ 2870, 8, 21, 11, 1, -20 }, // 0x5C '\'
|
||||
{ 2891, 8, 21, 11, 1, -20 }, // 0x5D ']'
|
||||
{ 2912, 8, 21, 11, 1, -20 }, // 0x5E '^'
|
||||
{ 2933, 17, 4, 25, 3, -3 }, // 0x5F '_'
|
||||
{ 2942, 8, 21, 11, 1, -20 }, // 0x60 '`'
|
||||
{ 2963, 21, 30, 25, 2, -30 }, // 0x61 'a'
|
||||
{ 3042, 20, 30, 25, 2, -29 }, // 0x62 'b'
|
||||
{ 3117, 18, 17, 25, 2, -16 }, // 0x63 'c'
|
||||
{ 3156, 21, 30, 25, 2, -29 }, // 0x64 'd'
|
||||
{ 3235, 20, 31, 25, 2, -30 }, // 0x65 'e'
|
||||
{ 3313, 20, 30, 25, 2, -30 }, // 0x66 'f'
|
||||
{ 3388, 20, 31, 25, 2, -30 }, // 0x67 'g'
|
||||
{ 3466, 20, 29, 25, 2, -29 }, // 0x68 'h'
|
||||
{ 3539, 5, 14, 25, 17, -14 }, // 0x69 'i'
|
||||
{ 3548, 21, 30, 25, 2, -29 }, // 0x6A 'j'
|
||||
{ 3627, 20, 30, 25, 2, -30 }, // 0x6B 'k'
|
||||
{ 3702, 18, 30, 25, 2, -29 }, // 0x6C 'l'
|
||||
{ 3770, 21, 30, 25, 2, -30 }, // 0x6D 'm'
|
||||
{ 3849, 20, 16, 25, 2, -16 }, // 0x6E 'n'
|
||||
{ 3889, 20, 17, 25, 2, -16 }, // 0x6F 'o'
|
||||
{ 3932, 21, 30, 25, 2, -30 }, // 0x70 'p'
|
||||
{ 4011, 20, 30, 25, 3, -30 }, // 0x71 'q'
|
||||
{ 4086, 18, 16, 25, 2, -16 }, // 0x72 'r'
|
||||
{ 4122, 19, 30, 25, 3, -29 }, // 0x73 's'
|
||||
{ 4194, 18, 30, 25, 2, -29 }, // 0x74 't'
|
||||
{ 4262, 20, 15, 25, 2, -14 }, // 0x75 'u'
|
||||
{ 4300, 21, 30, 25, 2, -29 }, // 0x76 'v'
|
||||
{ 4379, 21, 30, 25, 2, -29 }, // 0x77 'w'
|
||||
{ 4458, 21, 29, 25, 2, -29 }, // 0x78 'x'
|
||||
{ 4535, 20, 30, 25, 3, -29 }, // 0x79 'y'
|
||||
{ 4610, 21, 31, 25, 2, -30 }, // 0x7A 'z'
|
||||
{ 4692, 8, 21, 11, 1, -20 }, // 0x7B '{'
|
||||
{ 4713, 8, 21, 11, 1, -20 }, // 0x7C '|'
|
||||
{ 4734, 8, 21, 11, 1, -20 }, // 0x7D '}'
|
||||
{ 4755, 8, 21, 11, 1, -20 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont DSEG7Classic_BoldItalic16pt7b PROGMEM = {
|
||||
(uint8_t *)DSEG7Classic_BoldItalic16pt7bBitmaps,
|
||||
(GFXglyph *)DSEG7Classic_BoldItalic16pt7bGlyphs,
|
||||
0x20, 0x7E, 34 };
|
||||
|
||||
// Approx. 5448 bytes
|
|
@ -1,737 +0,0 @@
|
|||
const uint8_t DSEG7Classic_BoldItalic20pt7bBitmaps[] PROGMEM = {
|
||||
0xFF, 0xE0, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60,
|
||||
0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06,
|
||||
0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x7F, 0xF0, 0xFF, 0xE0, 0x18,
|
||||
0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01,
|
||||
0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60,
|
||||
0x18, 0x06, 0x01, 0x80, 0x7F, 0xF0, 0xFF, 0xE0, 0x18, 0x06, 0x01, 0x80,
|
||||
0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18,
|
||||
0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01,
|
||||
0x80, 0x7F, 0xF0, 0xFF, 0xE0, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06,
|
||||
0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80,
|
||||
0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x7F, 0xF0,
|
||||
0xFF, 0xE0, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60,
|
||||
0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06,
|
||||
0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x7F, 0xF0, 0xFF, 0xE0, 0x18,
|
||||
0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01,
|
||||
0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60,
|
||||
0x18, 0x06, 0x01, 0x80, 0x7F, 0xF0, 0xFF, 0xE0, 0x18, 0x06, 0x01, 0x80,
|
||||
0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18,
|
||||
0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01,
|
||||
0x80, 0x7F, 0xF0, 0xFF, 0xE0, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06,
|
||||
0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80,
|
||||
0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x7F, 0xF0,
|
||||
0xFF, 0xE0, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60,
|
||||
0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06,
|
||||
0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x7F, 0xF0, 0xFF, 0xE0, 0x18,
|
||||
0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01,
|
||||
0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60,
|
||||
0x18, 0x06, 0x01, 0x80, 0x7F, 0xF0, 0xFF, 0xE0, 0x18, 0x06, 0x01, 0x80,
|
||||
0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18,
|
||||
0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01,
|
||||
0x80, 0x7F, 0xF0, 0x3F, 0xFF, 0x1F, 0xFF, 0xEF, 0xFF, 0xFD, 0xFF, 0xFE,
|
||||
0x3F, 0xFF, 0x00, 0x67, 0xBF, 0xF7, 0x00, 0xFF, 0xE0, 0x18, 0x06, 0x01,
|
||||
0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60,
|
||||
0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06,
|
||||
0x01, 0x80, 0x7F, 0xF0, 0x03, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x2F,
|
||||
0xFF, 0xFD, 0x8E, 0xFF, 0xFF, 0x71, 0xEF, 0xFF, 0xDE, 0x3E, 0x00, 0x07,
|
||||
0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1F, 0x00, 0x03, 0xE3, 0xE0,
|
||||
0x00, 0x7C, 0x78, 0x00, 0x0F, 0x8F, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x3E,
|
||||
0x7C, 0x00, 0x07, 0xCF, 0x80, 0x00, 0xF1, 0xF0, 0x00, 0x3E, 0x3E, 0x00,
|
||||
0x07, 0xC7, 0x80, 0x00, 0x78, 0xE0, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03,
|
||||
0x80, 0x00, 0x1C, 0x78, 0x00, 0x07, 0x8F, 0x00, 0x01, 0xF3, 0xE0, 0x00,
|
||||
0x3E, 0x7C, 0x00, 0x07, 0xCF, 0x80, 0x00, 0xF1, 0xF0, 0x00, 0x1E, 0x3E,
|
||||
0x00, 0x07, 0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1F, 0x00, 0x03,
|
||||
0xE3, 0xE0, 0x00, 0x7C, 0x7C, 0x00, 0x0F, 0x8F, 0x00, 0x01, 0xF1, 0xEF,
|
||||
0xFF, 0xDE, 0x77, 0xFF, 0xFD, 0xC5, 0xFF, 0xFF, 0x90, 0x7F, 0xFF, 0xF8,
|
||||
0x07, 0xFF, 0xFF, 0x00, 0x06, 0x1C, 0x79, 0xF3, 0xE7, 0xCF, 0x9F, 0x3E,
|
||||
0x7C, 0xF9, 0xF3, 0xCF, 0x9F, 0x1E, 0x1C, 0x00, 0x71, 0xE7, 0xCF, 0x9F,
|
||||
0x3C, 0x79, 0xF3, 0xE7, 0xCF, 0x9F, 0x3E, 0x7C, 0x78, 0x70, 0x40, 0x03,
|
||||
0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFD, 0x80, 0xFF, 0xFF,
|
||||
0x70, 0x0F, 0xFF, 0xDE, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00,
|
||||
0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F,
|
||||
0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0, 0x00,
|
||||
0x00, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0, 0x3F, 0xFF, 0x78,
|
||||
0x0F, 0xFF, 0xF7, 0x03, 0xFF, 0xFF, 0x03, 0xBF, 0xFF, 0xC0, 0x7B, 0xFF,
|
||||
0xF0, 0x0F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F,
|
||||
0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0, 0x00,
|
||||
0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C,
|
||||
0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xEF, 0xFF, 0xC0, 0x77, 0xFF, 0xFC,
|
||||
0x05, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x00, 0x0F,
|
||||
0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0x60, 0xFF, 0xFF, 0x70,
|
||||
0x3F, 0xFF, 0x78, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F,
|
||||
0x00, 0x00, 0x0F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x01,
|
||||
0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3C, 0x00, 0x00,
|
||||
0x3E, 0x00, 0x00, 0x1F, 0x03, 0xFF, 0xF7, 0x83, 0xFF, 0xFD, 0xC3, 0xFF,
|
||||
0xFF, 0x00, 0xFF, 0xFF, 0x70, 0x3F, 0xFF, 0x78, 0x00, 0x00, 0x7C, 0x00,
|
||||
0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x80,
|
||||
0x00, 0x07, 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0xF8,
|
||||
0x00, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x03, 0xFF, 0xF7,
|
||||
0x87, 0xFF, 0xFD, 0xC7, 0xFF, 0xFE, 0x47, 0xFF, 0xFF, 0x81, 0xFF, 0xFF,
|
||||
0xC0, 0x20, 0x00, 0x01, 0xB8, 0x00, 0x01, 0xDE, 0x00, 0x01, 0xEF, 0x80,
|
||||
0x01, 0xF7, 0xC0, 0x00, 0xFB, 0xE0, 0x00, 0x7D, 0xF0, 0x00, 0x3E, 0xF8,
|
||||
0x00, 0x1F, 0x78, 0x00, 0x0F, 0xBC, 0x00, 0x07, 0xFE, 0x00, 0x03, 0xFF,
|
||||
0x00, 0x01, 0xFF, 0x80, 0x00, 0xF7, 0xC0, 0x00, 0xFB, 0xE0, 0x00, 0x7D,
|
||||
0xEF, 0xFF, 0xDE, 0xEF, 0xFF, 0xF7, 0x0F, 0xFF, 0xFC, 0x03, 0xFF, 0xFD,
|
||||
0xC0, 0xFF, 0xFD, 0xE0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00,
|
||||
0x7C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x1F, 0x00, 0x00,
|
||||
0x0F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x01, 0xF0, 0x00,
|
||||
0x00, 0xF8, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x00,
|
||||
0x00, 0x01, 0x00, 0x0F, 0xFF, 0xFE, 0x1F, 0xFF, 0xFE, 0x2F, 0xFF, 0xFC,
|
||||
0x77, 0xFF, 0xF8, 0x7B, 0xFF, 0xF0, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00,
|
||||
0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x78, 0x00, 0x00,
|
||||
0x78, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00,
|
||||
0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF7, 0xFF, 0xE0, 0xEF, 0xFF, 0xF0,
|
||||
0x1F, 0xFF, 0xF8, 0x0F, 0xFF, 0xF7, 0x07, 0xFF, 0xEF, 0x00, 0x00, 0x1F,
|
||||
0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x1E,
|
||||
0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E,
|
||||
0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x0F, 0xFF, 0xDE,
|
||||
0x3F, 0xFF, 0xEE, 0x7F, 0xFF, 0xE4, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xF0,
|
||||
0x03, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xE0, 0xBF, 0xFF, 0xF0, 0x77, 0xFF,
|
||||
0xF8, 0x1E, 0xFF, 0xFC, 0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C,
|
||||
0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xE0, 0x00, 0x00,
|
||||
0x78, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x03, 0xE0, 0x00,
|
||||
0x00, 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F, 0x7F, 0xFE, 0x03, 0xBF,
|
||||
0xFF, 0xC0, 0x1F, 0xFF, 0xF8, 0x3B, 0xFF, 0xFD, 0xCF, 0x7F, 0xFE, 0xF3,
|
||||
0xC0, 0x00, 0x7D, 0xF0, 0x00, 0x1F, 0x7C, 0x00, 0x07, 0xDF, 0x00, 0x01,
|
||||
0xE7, 0xC0, 0x00, 0x79, 0xF0, 0x00, 0x3E, 0x7C, 0x00, 0x0F, 0x9F, 0x00,
|
||||
0x03, 0xE7, 0xC0, 0x00, 0xF9, 0xF0, 0x00, 0x3E, 0x7C, 0x00, 0x0F, 0x9E,
|
||||
0x00, 0x03, 0xE7, 0xBF, 0xFF, 0x7B, 0xBF, 0xFF, 0xEE, 0x5F, 0xFF, 0xF9,
|
||||
0x0F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFE, 0x0F, 0xFF,
|
||||
0xFF, 0x0B, 0xFF, 0xFF, 0x6E, 0xFF, 0xFF, 0x77, 0xBF, 0xFF, 0x7B, 0xE0,
|
||||
0x00, 0x7D, 0xF0, 0x00, 0x3E, 0xF8, 0x00, 0x1F, 0x7C, 0x00, 0x0F, 0xBE,
|
||||
0x00, 0x07, 0xDE, 0x00, 0x03, 0xEF, 0x00, 0x01, 0xFF, 0x80, 0x00, 0xFF,
|
||||
0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x3D, 0xF0, 0x00, 0x3E, 0xF8, 0x00, 0x1F,
|
||||
0x78, 0x00, 0x07, 0xB8, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x70, 0x00, 0x00, 0x78, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00,
|
||||
0x1F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x80, 0x00, 0x07, 0xC0, 0x00,
|
||||
0x03, 0xE0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x7C, 0x00,
|
||||
0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0x80, 0x00, 0x01, 0xC0,
|
||||
0x00, 0x00, 0x40, 0x03, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x2F, 0xFF,
|
||||
0xFD, 0x8E, 0xFF, 0xFF, 0x71, 0xEF, 0xFF, 0xDE, 0x3E, 0x00, 0x07, 0xC7,
|
||||
0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1F, 0x00, 0x03, 0xE3, 0xE0, 0x00,
|
||||
0x7C, 0x78, 0x00, 0x0F, 0x8F, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x3E, 0x7C,
|
||||
0x00, 0x07, 0xCF, 0x80, 0x00, 0xF1, 0xF0, 0x00, 0x3E, 0x3E, 0x00, 0x07,
|
||||
0xC7, 0xBF, 0xFF, 0x78, 0xEF, 0xFF, 0xF7, 0x03, 0xFF, 0xFF, 0x03, 0xBF,
|
||||
0xFF, 0xDC, 0x7B, 0xFF, 0xF7, 0x8F, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x3E,
|
||||
0x7C, 0x00, 0x07, 0xCF, 0x80, 0x00, 0xF1, 0xF0, 0x00, 0x1E, 0x3E, 0x00,
|
||||
0x07, 0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1F, 0x00, 0x03, 0xE3,
|
||||
0xE0, 0x00, 0x7C, 0x7C, 0x00, 0x0F, 0x8F, 0x00, 0x01, 0xF1, 0xEF, 0xFF,
|
||||
0xDE, 0x77, 0xFF, 0xFD, 0xC5, 0xFF, 0xFF, 0x90, 0x7F, 0xFF, 0xF8, 0x07,
|
||||
0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0x0B, 0xFF, 0xFF,
|
||||
0x6E, 0xFF, 0xFF, 0x77, 0xBF, 0xFF, 0x7B, 0xE0, 0x00, 0x7D, 0xF0, 0x00,
|
||||
0x3E, 0xF8, 0x00, 0x1F, 0x7C, 0x00, 0x0F, 0xBE, 0x00, 0x07, 0xDE, 0x00,
|
||||
0x03, 0xEF, 0x00, 0x01, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x7F, 0xE0,
|
||||
0x00, 0x3D, 0xF0, 0x00, 0x3E, 0xF8, 0x00, 0x1F, 0x7B, 0xFF, 0xF7, 0xBB,
|
||||
0xFF, 0xFD, 0xC3, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x70, 0x3F, 0xFF, 0x78,
|
||||
0x00, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F,
|
||||
0x00, 0x00, 0x07, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x01,
|
||||
0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00,
|
||||
0x1F, 0x03, 0xFF, 0xF7, 0x87, 0xFF, 0xFD, 0xC7, 0xFF, 0xFE, 0x47, 0xFF,
|
||||
0xFF, 0x81, 0xFF, 0xFF, 0xC0, 0x39, 0xF7, 0xCE, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xEF, 0xBC, 0xFF, 0xE0, 0x18, 0x06,
|
||||
0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80,
|
||||
0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18,
|
||||
0x06, 0x01, 0x80, 0x7F, 0xF0, 0xFF, 0xE0, 0x18, 0x06, 0x01, 0x80, 0x60,
|
||||
0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06,
|
||||
0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80,
|
||||
0x7F, 0xF0, 0xFF, 0xE0, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01,
|
||||
0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60,
|
||||
0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x7F, 0xF0, 0xFF,
|
||||
0xE0, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18,
|
||||
0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01,
|
||||
0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x7F, 0xF0, 0xFF, 0xE0, 0x18, 0x06,
|
||||
0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80,
|
||||
0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18,
|
||||
0x06, 0x01, 0x80, 0x7F, 0xF0, 0xFF, 0xE0, 0x18, 0x06, 0x01, 0x80, 0x60,
|
||||
0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06,
|
||||
0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80,
|
||||
0x7F, 0xF0, 0x03, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x2F, 0xFF, 0xFD,
|
||||
0x8E, 0xFF, 0xFF, 0x71, 0xEF, 0xFF, 0xDE, 0x3E, 0x00, 0x07, 0xC7, 0xC0,
|
||||
0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1F, 0x00, 0x03, 0xE3, 0xE0, 0x00, 0x7C,
|
||||
0x78, 0x00, 0x0F, 0x8F, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x3E, 0x7C, 0x00,
|
||||
0x07, 0xCF, 0x80, 0x00, 0xF1, 0xF0, 0x00, 0x3E, 0x3E, 0x00, 0x07, 0xC7,
|
||||
0xBF, 0xFF, 0x78, 0xEF, 0xFF, 0xF7, 0x03, 0xFF, 0xFF, 0x03, 0xBF, 0xFF,
|
||||
0xDC, 0x7B, 0xFF, 0xF7, 0x8F, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x3E, 0x7C,
|
||||
0x00, 0x07, 0xCF, 0x80, 0x00, 0xF1, 0xF0, 0x00, 0x1E, 0x3E, 0x00, 0x07,
|
||||
0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1F, 0x00, 0x03, 0xE3, 0xE0,
|
||||
0x00, 0x7C, 0x7C, 0x00, 0x0F, 0x8F, 0x00, 0x01, 0xF1, 0xE0, 0x00, 0x1E,
|
||||
0x70, 0x00, 0x01, 0xC4, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x07, 0x00,
|
||||
0x00, 0x01, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07,
|
||||
0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1E, 0x00, 0x00,
|
||||
0x07, 0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x3E, 0x00,
|
||||
0x00, 0x0F, 0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF7, 0xFF, 0xE0, 0x3B,
|
||||
0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0x83, 0xBF, 0xFF, 0xDC, 0xF7, 0xFF, 0xEF,
|
||||
0x3C, 0x00, 0x07, 0xDF, 0x00, 0x01, 0xF7, 0xC0, 0x00, 0x7D, 0xF0, 0x00,
|
||||
0x1E, 0x7C, 0x00, 0x07, 0x9F, 0x00, 0x03, 0xE7, 0xC0, 0x00, 0xF9, 0xF0,
|
||||
0x00, 0x3E, 0x7C, 0x00, 0x0F, 0x9F, 0x00, 0x03, 0xE7, 0xC0, 0x00, 0xF9,
|
||||
0xE0, 0x00, 0x3E, 0x7B, 0xFF, 0xF7, 0xBB, 0xFF, 0xFE, 0xE5, 0xFF, 0xFF,
|
||||
0x90, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xF8, 0x07,
|
||||
0xFF, 0xF8, 0x1F, 0xFF, 0xF9, 0xDF, 0xFF, 0xE3, 0xDF, 0xFF, 0x87, 0x80,
|
||||
0x00, 0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00,
|
||||
0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00,
|
||||
0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF7, 0xFF, 0xE3,
|
||||
0xBF, 0xFF, 0xE2, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0x80,
|
||||
0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x07, 0x80, 0x00,
|
||||
0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8,
|
||||
0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00,
|
||||
0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x0F, 0x80,
|
||||
0x00, 0x01, 0xF0, 0x0F, 0xFF, 0xDE, 0x03, 0xFF, 0xFD, 0xC0, 0xFF, 0xFF,
|
||||
0xC0, 0xEF, 0xFF, 0xF7, 0x1E, 0xFF, 0xFD, 0xE3, 0xC0, 0x00, 0x7C, 0xF8,
|
||||
0x00, 0x0F, 0x9F, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x3C, 0x7C, 0x00, 0x07,
|
||||
0x8F, 0x80, 0x01, 0xF1, 0xF0, 0x00, 0x3E, 0x3E, 0x00, 0x07, 0xC7, 0xC0,
|
||||
0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1F, 0x00, 0x03, 0xE3, 0xC0, 0x00, 0x7C,
|
||||
0x7B, 0xFF, 0xF7, 0x9D, 0xFF, 0xFF, 0x71, 0x7F, 0xFF, 0xE4, 0x1F, 0xFF,
|
||||
0xFE, 0x01, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xE0,
|
||||
0xBF, 0xFF, 0xF0, 0x77, 0xFF, 0xF8, 0x1E, 0xFF, 0xFC, 0x07, 0xC0, 0x00,
|
||||
0x01, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0,
|
||||
0x00, 0x01, 0xE0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F,
|
||||
0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x00,
|
||||
0x0F, 0x7F, 0xFE, 0x03, 0xBF, 0xFF, 0xC0, 0x1F, 0xFF, 0xF8, 0x3B, 0xFF,
|
||||
0xFC, 0x0F, 0x7F, 0xFE, 0x03, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C,
|
||||
0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00,
|
||||
0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00,
|
||||
0x00, 0x7C, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xBF, 0xFF, 0x03, 0xBF,
|
||||
0xFF, 0xE0, 0x5F, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xC0,
|
||||
0x03, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xE0, 0xBF, 0xFF, 0xF0, 0x77, 0xFF,
|
||||
0xF8, 0x1E, 0xFF, 0xFC, 0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C,
|
||||
0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xE0, 0x00, 0x00,
|
||||
0x78, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x03, 0xE0, 0x00,
|
||||
0x00, 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F, 0x7F, 0xFE, 0x03, 0xBF,
|
||||
0xFF, 0xC0, 0x1F, 0xFF, 0xF8, 0x3B, 0xFF, 0xFC, 0x0F, 0x7F, 0xFE, 0x03,
|
||||
0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00,
|
||||
0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00,
|
||||
0x00, 0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1E,
|
||||
0x00, 0x00, 0x07, 0x80, 0x00, 0x03, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00,
|
||||
0x00, 0x03, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xE0, 0xBF, 0xFF, 0xF0, 0x77,
|
||||
0xFF, 0xF8, 0x1E, 0xFF, 0xFC, 0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00,
|
||||
0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xE0, 0x00,
|
||||
0x00, 0x78, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x03, 0xE0,
|
||||
0x00, 0x00, 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x03,
|
||||
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x01, 0xCF, 0x00, 0x00,
|
||||
0xF3, 0xC0, 0x00, 0x7D, 0xF0, 0x00, 0x1F, 0x7C, 0x00, 0x07, 0xDF, 0x00,
|
||||
0x01, 0xE7, 0xC0, 0x00, 0x79, 0xF0, 0x00, 0x3E, 0x7C, 0x00, 0x0F, 0x9F,
|
||||
0x00, 0x03, 0xE7, 0xC0, 0x00, 0xF9, 0xF0, 0x00, 0x3E, 0x7C, 0x00, 0x0F,
|
||||
0x9E, 0x00, 0x03, 0xE7, 0xBF, 0xFF, 0x7B, 0xBF, 0xFF, 0xEE, 0x5F, 0xFF,
|
||||
0xF9, 0x0F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xC0, 0x08, 0x00, 0x00, 0x07,
|
||||
0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00,
|
||||
0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1E, 0x00,
|
||||
0x00, 0x07, 0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x3E,
|
||||
0x00, 0x00, 0x0F, 0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF7, 0xFF, 0xE0,
|
||||
0x3B, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0x83, 0xBF, 0xFF, 0xDC, 0xF7, 0xFF,
|
||||
0xEF, 0x3C, 0x00, 0x07, 0xDF, 0x00, 0x01, 0xF7, 0xC0, 0x00, 0x7D, 0xF0,
|
||||
0x00, 0x1E, 0x7C, 0x00, 0x07, 0x9F, 0x00, 0x03, 0xE7, 0xC0, 0x00, 0xF9,
|
||||
0xF0, 0x00, 0x3E, 0x7C, 0x00, 0x0F, 0x9F, 0x00, 0x03, 0xE7, 0xC0, 0x00,
|
||||
0xF9, 0xE0, 0x00, 0x3E, 0x78, 0x00, 0x07, 0xB8, 0x00, 0x00, 0xE4, 0x00,
|
||||
0x00, 0x10, 0x1C, 0xF7, 0xDF, 0x7D, 0xE7, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB,
|
||||
0xE7, 0x8E, 0x10, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x1C, 0x00, 0x00,
|
||||
0x07, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0,
|
||||
0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00,
|
||||
0x7C, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3C, 0x00,
|
||||
0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x01,
|
||||
0xC0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x07, 0x1E, 0x00, 0x01, 0xE3, 0xC0,
|
||||
0x00, 0x7C, 0xF8, 0x00, 0x0F, 0x9F, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x3C,
|
||||
0x7C, 0x00, 0x07, 0x8F, 0x80, 0x01, 0xF1, 0xF0, 0x00, 0x3E, 0x3E, 0x00,
|
||||
0x07, 0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1F, 0x00, 0x03, 0xE3,
|
||||
0xC0, 0x00, 0x7C, 0x7B, 0xFF, 0xF7, 0x9D, 0xFF, 0xFF, 0x71, 0x7F, 0xFF,
|
||||
0xE4, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x81,
|
||||
0xFF, 0xFF, 0xE0, 0xBF, 0xFF, 0xF0, 0x77, 0xFF, 0xF8, 0x1E, 0xFF, 0xFC,
|
||||
0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00,
|
||||
0x00, 0x07, 0xC0, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3E,
|
||||
0x00, 0x00, 0x0F, 0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x00,
|
||||
0x3E, 0x00, 0x00, 0x0F, 0x7F, 0xFE, 0x03, 0xBF, 0xFF, 0xC0, 0x1F, 0xFF,
|
||||
0xF8, 0x3B, 0xFF, 0xFD, 0xCF, 0x7F, 0xFE, 0xF3, 0xC0, 0x00, 0x7D, 0xF0,
|
||||
0x00, 0x1F, 0x7C, 0x00, 0x07, 0xDF, 0x00, 0x01, 0xE7, 0xC0, 0x00, 0x79,
|
||||
0xF0, 0x00, 0x3E, 0x7C, 0x00, 0x0F, 0x9F, 0x00, 0x03, 0xE7, 0xC0, 0x00,
|
||||
0xF9, 0xF0, 0x00, 0x3E, 0x7C, 0x00, 0x0F, 0x9E, 0x00, 0x03, 0xE7, 0x80,
|
||||
0x00, 0x7B, 0x80, 0x00, 0x0E, 0x40, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00,
|
||||
0x38, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03,
|
||||
0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1E, 0x00, 0x00, 0x3C,
|
||||
0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0,
|
||||
0x00, 0x0F, 0x80, 0x00, 0x1E, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xE0, 0x00, 0x01, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x80, 0x00,
|
||||
0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01,
|
||||
0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F,
|
||||
0x00, 0x00, 0x3C, 0x00, 0x00, 0x7B, 0xFF, 0xF1, 0xDF, 0xFF, 0xF1, 0x7F,
|
||||
0xFF, 0xE1, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x80,
|
||||
0xFF, 0xFF, 0xF0, 0x2F, 0xFF, 0xFD, 0x8E, 0xFF, 0xFF, 0x71, 0xEF, 0xFF,
|
||||
0xDE, 0x3E, 0x00, 0x07, 0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1F,
|
||||
0x00, 0x03, 0xE3, 0xE0, 0x00, 0x7C, 0x78, 0x00, 0x0F, 0x8F, 0x00, 0x01,
|
||||
0xF3, 0xE0, 0x00, 0x3E, 0x7C, 0x00, 0x07, 0xCF, 0x80, 0x00, 0xF1, 0xF0,
|
||||
0x00, 0x3E, 0x3E, 0x00, 0x07, 0xC7, 0x80, 0x00, 0x78, 0xE0, 0x00, 0x07,
|
||||
0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x1C, 0x78, 0x00, 0x07, 0x8F, 0x00,
|
||||
0x01, 0xF3, 0xE0, 0x00, 0x3E, 0x7C, 0x00, 0x07, 0xCF, 0x80, 0x00, 0xF1,
|
||||
0xF0, 0x00, 0x1E, 0x3E, 0x00, 0x07, 0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00,
|
||||
0x1F, 0x1F, 0x00, 0x03, 0xE3, 0xE0, 0x00, 0x7C, 0x7C, 0x00, 0x0F, 0x8F,
|
||||
0x00, 0x01, 0xF1, 0xE0, 0x00, 0x1E, 0x70, 0x00, 0x01, 0xC4, 0x00, 0x00,
|
||||
0x10, 0x01, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xE0, 0xEF,
|
||||
0xFF, 0xF7, 0x3D, 0xFF, 0xFB, 0xCF, 0x00, 0x01, 0xF7, 0xC0, 0x00, 0x7D,
|
||||
0xF0, 0x00, 0x1F, 0x7C, 0x00, 0x07, 0x9F, 0x00, 0x01, 0xE7, 0xC0, 0x00,
|
||||
0xF9, 0xF0, 0x00, 0x3E, 0x7C, 0x00, 0x0F, 0x9F, 0x00, 0x03, 0xE7, 0xC0,
|
||||
0x00, 0xF9, 0xF0, 0x00, 0x3E, 0x78, 0x00, 0x0F, 0x9E, 0x00, 0x01, 0xEE,
|
||||
0x00, 0x00, 0x39, 0x00, 0x00, 0x04, 0x01, 0xFF, 0xF8, 0x00, 0xFF, 0xFF,
|
||||
0x00, 0x7F, 0xFF, 0xE0, 0xEF, 0xFF, 0xF7, 0x3D, 0xFF, 0xFB, 0xCF, 0x00,
|
||||
0x01, 0xF7, 0xC0, 0x00, 0x7D, 0xF0, 0x00, 0x1F, 0x7C, 0x00, 0x07, 0x9F,
|
||||
0x00, 0x01, 0xE7, 0xC0, 0x00, 0xF9, 0xF0, 0x00, 0x3E, 0x7C, 0x00, 0x0F,
|
||||
0x9F, 0x00, 0x03, 0xE7, 0xC0, 0x00, 0xF9, 0xF0, 0x00, 0x3E, 0x78, 0x00,
|
||||
0x0F, 0x9E, 0xFF, 0xFD, 0xEE, 0xFF, 0xFF, 0xB9, 0x7F, 0xFF, 0xE4, 0x3F,
|
||||
0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0xFF, 0xFF,
|
||||
0xF0, 0x2F, 0xFF, 0xFD, 0x8E, 0xFF, 0xFF, 0x71, 0xEF, 0xFF, 0xDE, 0x3E,
|
||||
0x00, 0x07, 0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1F, 0x00, 0x03,
|
||||
0xE3, 0xE0, 0x00, 0x7C, 0x78, 0x00, 0x0F, 0x8F, 0x00, 0x01, 0xF3, 0xE0,
|
||||
0x00, 0x3E, 0x7C, 0x00, 0x07, 0xCF, 0x80, 0x00, 0xF1, 0xF0, 0x00, 0x3E,
|
||||
0x3E, 0x00, 0x07, 0xC7, 0xBF, 0xFF, 0x78, 0xEF, 0xFF, 0xF7, 0x03, 0xFF,
|
||||
0xFF, 0x03, 0xBF, 0xFF, 0xC0, 0x7B, 0xFF, 0xF0, 0x0F, 0x00, 0x00, 0x03,
|
||||
0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00,
|
||||
0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F,
|
||||
0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x00, 0x00,
|
||||
0x01, 0xE0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0F,
|
||||
0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0x0B, 0xFF, 0xFF, 0x6E, 0xFF, 0xFF, 0x77,
|
||||
0xBF, 0xFF, 0x7B, 0xE0, 0x00, 0x7D, 0xF0, 0x00, 0x3E, 0xF8, 0x00, 0x1F,
|
||||
0x7C, 0x00, 0x0F, 0xBE, 0x00, 0x07, 0xDE, 0x00, 0x03, 0xEF, 0x00, 0x01,
|
||||
0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x3D, 0xF0, 0x00,
|
||||
0x3E, 0xF8, 0x00, 0x1F, 0x7B, 0xFF, 0xF7, 0xBB, 0xFF, 0xFD, 0xC3, 0xFF,
|
||||
0xFF, 0x00, 0xFF, 0xFF, 0x70, 0x3F, 0xFF, 0x78, 0x00, 0x00, 0x7C, 0x00,
|
||||
0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x80,
|
||||
0x00, 0x07, 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0xF8,
|
||||
0x00, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07,
|
||||
0x80, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x40, 0x01, 0xFF, 0xF8, 0x07, 0xFF,
|
||||
0xF8, 0x1F, 0xFF, 0xF9, 0xDF, 0xFF, 0xE3, 0xDF, 0xFF, 0x87, 0x80, 0x00,
|
||||
0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01,
|
||||
0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F,
|
||||
0x00, 0x00, 0x3E, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x03, 0x80,
|
||||
0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x70, 0x00, 0x00, 0x78,
|
||||
0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C,
|
||||
0x00, 0x00, 0x7C, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF8,
|
||||
0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8,
|
||||
0x00, 0x00, 0xF7, 0xFF, 0xE0, 0xEF, 0xFF, 0xF0, 0x1F, 0xFF, 0xF8, 0x0F,
|
||||
0xFF, 0xF7, 0x07, 0xFF, 0xEF, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0x00,
|
||||
0x00, 0x1F, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x3E, 0x00,
|
||||
0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00,
|
||||
0x00, 0x3E, 0x00, 0x00, 0x3E, 0x0F, 0xFF, 0xDE, 0x3F, 0xFF, 0xEE, 0x7F,
|
||||
0xFF, 0xE4, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xF0, 0x08, 0x00, 0x00, 0x38,
|
||||
0x00, 0x00, 0x78, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0,
|
||||
0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1E, 0x00, 0x00, 0x3C, 0x00,
|
||||
0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00,
|
||||
0x0F, 0x80, 0x00, 0x1E, 0xFF, 0xFC, 0x3B, 0xFF, 0xFC, 0x0F, 0xFF, 0xFC,
|
||||
0xEF, 0xFF, 0xF1, 0xEF, 0xFF, 0xC3, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F,
|
||||
0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0,
|
||||
0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00,
|
||||
0x00, 0x3C, 0x00, 0x00, 0x7B, 0xFF, 0xF1, 0xDF, 0xFF, 0xF1, 0x7F, 0xFF,
|
||||
0xE1, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xC0, 0x38, 0x00, 0x01, 0xCF, 0x00,
|
||||
0x00, 0xF3, 0xC0, 0x00, 0x7D, 0xF0, 0x00, 0x1F, 0x7C, 0x00, 0x07, 0xDF,
|
||||
0x00, 0x01, 0xE7, 0xC0, 0x00, 0x79, 0xF0, 0x00, 0x3E, 0x7C, 0x00, 0x0F,
|
||||
0x9F, 0x00, 0x03, 0xE7, 0xC0, 0x00, 0xF9, 0xF0, 0x00, 0x3E, 0x7C, 0x00,
|
||||
0x0F, 0x9E, 0x00, 0x03, 0xE7, 0xBF, 0xFF, 0x7B, 0xBF, 0xFF, 0xEE, 0x5F,
|
||||
0xFF, 0xF9, 0x0F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xC0, 0x08, 0x00, 0x00,
|
||||
0x63, 0x80, 0x00, 0x1C, 0x78, 0x00, 0x07, 0x8F, 0x80, 0x01, 0xF1, 0xF0,
|
||||
0x00, 0x3E, 0x3E, 0x00, 0x07, 0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F,
|
||||
0x1E, 0x00, 0x03, 0xE3, 0xC0, 0x00, 0x7C, 0xF8, 0x00, 0x0F, 0x9F, 0x00,
|
||||
0x01, 0xF3, 0xE0, 0x00, 0x3C, 0x7C, 0x00, 0x0F, 0x8F, 0x80, 0x01, 0xF1,
|
||||
0xE0, 0x00, 0x1E, 0x38, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0xE0, 0x00,
|
||||
0x07, 0x1E, 0x00, 0x01, 0xE3, 0xC0, 0x00, 0x7C, 0xF8, 0x00, 0x0F, 0x9F,
|
||||
0x00, 0x01, 0xF3, 0xE0, 0x00, 0x3C, 0x7C, 0x00, 0x07, 0x8F, 0x80, 0x01,
|
||||
0xF1, 0xF0, 0x00, 0x3E, 0x3E, 0x00, 0x07, 0xC7, 0xC0, 0x00, 0xF8, 0xF8,
|
||||
0x00, 0x1F, 0x1F, 0x00, 0x03, 0xE3, 0xC0, 0x00, 0x7C, 0x7B, 0xFF, 0xF7,
|
||||
0x9D, 0xFF, 0xFF, 0x71, 0x7F, 0xFF, 0xE4, 0x1F, 0xFF, 0xFE, 0x01, 0xFF,
|
||||
0xFF, 0xC0, 0x08, 0x00, 0x00, 0x63, 0x80, 0x00, 0x1C, 0x78, 0x00, 0x07,
|
||||
0x8F, 0x80, 0x01, 0xF1, 0xF0, 0x00, 0x3E, 0x3E, 0x00, 0x07, 0xC7, 0xC0,
|
||||
0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1E, 0x00, 0x03, 0xE3, 0xC0, 0x00, 0x7C,
|
||||
0xF8, 0x00, 0x0F, 0x9F, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x3C, 0x7C, 0x00,
|
||||
0x0F, 0x8F, 0x80, 0x01, 0xF1, 0xEF, 0xFF, 0xDE, 0x3B, 0xFF, 0xFD, 0xC0,
|
||||
0xFF, 0xFF, 0xC0, 0xEF, 0xFF, 0xF7, 0x1E, 0xFF, 0xFD, 0xE3, 0xC0, 0x00,
|
||||
0x7C, 0xF8, 0x00, 0x0F, 0x9F, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x3C, 0x7C,
|
||||
0x00, 0x07, 0x8F, 0x80, 0x01, 0xF1, 0xF0, 0x00, 0x3E, 0x3E, 0x00, 0x07,
|
||||
0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1F, 0x00, 0x03, 0xE3, 0xC0,
|
||||
0x00, 0x7C, 0x7B, 0xFF, 0xF7, 0x9D, 0xFF, 0xFF, 0x71, 0x7F, 0xFF, 0xE4,
|
||||
0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xC0, 0x08, 0x00, 0x00, 0x63, 0x80,
|
||||
0x00, 0x1C, 0x78, 0x00, 0x07, 0x8F, 0x80, 0x01, 0xF1, 0xF0, 0x00, 0x3E,
|
||||
0x3E, 0x00, 0x07, 0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1E, 0x00,
|
||||
0x03, 0xE3, 0xC0, 0x00, 0x7C, 0xF8, 0x00, 0x0F, 0x9F, 0x00, 0x01, 0xF3,
|
||||
0xE0, 0x00, 0x3C, 0x7C, 0x00, 0x0F, 0x8F, 0x80, 0x01, 0xF1, 0xEF, 0xFF,
|
||||
0xDE, 0x3B, 0xFF, 0xFD, 0xC0, 0xFF, 0xFF, 0xC0, 0xEF, 0xFF, 0xF7, 0x1E,
|
||||
0xFF, 0xFD, 0xE3, 0xC0, 0x00, 0x7C, 0xF8, 0x00, 0x0F, 0x9F, 0x00, 0x01,
|
||||
0xF3, 0xE0, 0x00, 0x3C, 0x7C, 0x00, 0x07, 0x8F, 0x80, 0x01, 0xF1, 0xF0,
|
||||
0x00, 0x3E, 0x3E, 0x00, 0x07, 0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F,
|
||||
0x1F, 0x00, 0x03, 0xE3, 0xC0, 0x00, 0x7C, 0x78, 0x00, 0x07, 0x9C, 0x00,
|
||||
0x00, 0x71, 0x00, 0x00, 0x04, 0x00, 0x20, 0x00, 0x01, 0xB8, 0x00, 0x01,
|
||||
0xDE, 0x00, 0x01, 0xEF, 0x80, 0x01, 0xF7, 0xC0, 0x00, 0xFB, 0xE0, 0x00,
|
||||
0x7D, 0xF0, 0x00, 0x3E, 0xF8, 0x00, 0x1F, 0x78, 0x00, 0x0F, 0xBC, 0x00,
|
||||
0x07, 0xFE, 0x00, 0x03, 0xFF, 0x00, 0x01, 0xFF, 0x80, 0x00, 0xF7, 0xC0,
|
||||
0x00, 0xFB, 0xE0, 0x00, 0x7D, 0xEF, 0xFF, 0xDE, 0xEF, 0xFF, 0xF7, 0x0F,
|
||||
0xFF, 0xFC, 0x03, 0xFF, 0xFD, 0xC0, 0xFF, 0xFD, 0xE0, 0x00, 0x01, 0xF0,
|
||||
0x00, 0x00, 0xF8, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x1E,
|
||||
0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x03,
|
||||
0xE0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x7C, 0x0F, 0xFF,
|
||||
0xDE, 0x1F, 0xFF, 0xF7, 0x1F, 0xFF, 0xF9, 0x1F, 0xFF, 0xFE, 0x07, 0xFF,
|
||||
0xFF, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFD,
|
||||
0x80, 0xFF, 0xFF, 0x70, 0x0F, 0xFF, 0xDE, 0x00, 0x00, 0x07, 0xC0, 0x00,
|
||||
0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C,
|
||||
0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00,
|
||||
0x07, 0xC0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0,
|
||||
0x00, 0x00, 0x78, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00,
|
||||
0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C,
|
||||
0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00,
|
||||
0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0,
|
||||
0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xEF, 0xFF, 0xC0,
|
||||
0x77, 0xFF, 0xFC, 0x05, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xF8, 0x07, 0xFF,
|
||||
0xFF, 0x00, 0xFF, 0xE0, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01,
|
||||
0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60,
|
||||
0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x7F, 0xF0, 0xFF,
|
||||
0xE0, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18,
|
||||
0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01,
|
||||
0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x7F, 0xF0, 0xFF, 0xE0, 0x18, 0x06,
|
||||
0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80,
|
||||
0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18,
|
||||
0x06, 0x01, 0x80, 0x7F, 0xF0, 0xFF, 0xE0, 0x18, 0x06, 0x01, 0x80, 0x60,
|
||||
0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06,
|
||||
0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80,
|
||||
0x7F, 0xF0, 0x0F, 0xFF, 0xC1, 0xFF, 0xFF, 0x1F, 0xFF, 0xF9, 0xFF, 0xFF,
|
||||
0xE7, 0xFF, 0xFF, 0x00, 0xFF, 0xE0, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18,
|
||||
0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01,
|
||||
0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x7F,
|
||||
0xF0, 0x03, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x2F, 0xFF, 0xFD, 0x8E,
|
||||
0xFF, 0xFF, 0x71, 0xEF, 0xFF, 0xDE, 0x3E, 0x00, 0x07, 0xC7, 0xC0, 0x00,
|
||||
0xF8, 0xF8, 0x00, 0x1F, 0x1F, 0x00, 0x03, 0xE3, 0xE0, 0x00, 0x7C, 0x78,
|
||||
0x00, 0x0F, 0x8F, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x3E, 0x7C, 0x00, 0x07,
|
||||
0xCF, 0x80, 0x00, 0xF1, 0xF0, 0x00, 0x3E, 0x3E, 0x00, 0x07, 0xC7, 0xBF,
|
||||
0xFF, 0x78, 0xEF, 0xFF, 0xF7, 0x03, 0xFF, 0xFF, 0x03, 0xBF, 0xFF, 0xDC,
|
||||
0x7B, 0xFF, 0xF7, 0x8F, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x3E, 0x7C, 0x00,
|
||||
0x07, 0xCF, 0x80, 0x00, 0xF1, 0xF0, 0x00, 0x1E, 0x3E, 0x00, 0x07, 0xC7,
|
||||
0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1F, 0x00, 0x03, 0xE3, 0xE0, 0x00,
|
||||
0x7C, 0x7C, 0x00, 0x0F, 0x8F, 0x00, 0x01, 0xF1, 0xE0, 0x00, 0x1E, 0x70,
|
||||
0x00, 0x01, 0xC4, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00,
|
||||
0x01, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0,
|
||||
0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07,
|
||||
0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x00,
|
||||
0x0F, 0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF7, 0xFF, 0xE0, 0x3B, 0xFF,
|
||||
0xFC, 0x01, 0xFF, 0xFF, 0x83, 0xBF, 0xFF, 0xDC, 0xF7, 0xFF, 0xEF, 0x3C,
|
||||
0x00, 0x07, 0xDF, 0x00, 0x01, 0xF7, 0xC0, 0x00, 0x7D, 0xF0, 0x00, 0x1E,
|
||||
0x7C, 0x00, 0x07, 0x9F, 0x00, 0x03, 0xE7, 0xC0, 0x00, 0xF9, 0xF0, 0x00,
|
||||
0x3E, 0x7C, 0x00, 0x0F, 0x9F, 0x00, 0x03, 0xE7, 0xC0, 0x00, 0xF9, 0xE0,
|
||||
0x00, 0x3E, 0x7B, 0xFF, 0xF7, 0xBB, 0xFF, 0xFE, 0xE5, 0xFF, 0xFF, 0x90,
|
||||
0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xF8, 0x07, 0xFF,
|
||||
0xF8, 0x1F, 0xFF, 0xF9, 0xDF, 0xFF, 0xE3, 0xDF, 0xFF, 0x87, 0x80, 0x00,
|
||||
0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01,
|
||||
0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F,
|
||||
0x00, 0x00, 0x3E, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF7, 0xFF, 0xE3, 0xBF,
|
||||
0xFF, 0xE2, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0x80, 0x00,
|
||||
0x00, 0x00, 0x60, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x01,
|
||||
0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00,
|
||||
0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F,
|
||||
0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x0F, 0x80, 0x00,
|
||||
0x01, 0xF0, 0x0F, 0xFF, 0xDE, 0x03, 0xFF, 0xFD, 0xC0, 0xFF, 0xFF, 0xC0,
|
||||
0xEF, 0xFF, 0xF7, 0x1E, 0xFF, 0xFD, 0xE3, 0xC0, 0x00, 0x7C, 0xF8, 0x00,
|
||||
0x0F, 0x9F, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x3C, 0x7C, 0x00, 0x07, 0x8F,
|
||||
0x80, 0x01, 0xF1, 0xF0, 0x00, 0x3E, 0x3E, 0x00, 0x07, 0xC7, 0xC0, 0x00,
|
||||
0xF8, 0xF8, 0x00, 0x1F, 0x1F, 0x00, 0x03, 0xE3, 0xC0, 0x00, 0x7C, 0x7B,
|
||||
0xFF, 0xF7, 0x9D, 0xFF, 0xFF, 0x71, 0x7F, 0xFF, 0xE4, 0x1F, 0xFF, 0xFE,
|
||||
0x01, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xE0, 0xBF,
|
||||
0xFF, 0xF0, 0x77, 0xFF, 0xF8, 0x1E, 0xFF, 0xFC, 0x07, 0xC0, 0x00, 0x01,
|
||||
0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00,
|
||||
0x01, 0xE0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F, 0x80,
|
||||
0x00, 0x03, 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F,
|
||||
0x7F, 0xFE, 0x03, 0xBF, 0xFF, 0xC0, 0x1F, 0xFF, 0xF8, 0x3B, 0xFF, 0xFC,
|
||||
0x0F, 0x7F, 0xFE, 0x03, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C, 0x00,
|
||||
0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C,
|
||||
0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00,
|
||||
0x7C, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xBF, 0xFF, 0x03, 0xBF, 0xFF,
|
||||
0xE0, 0x5F, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xC0, 0x03,
|
||||
0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xE0, 0xBF, 0xFF, 0xF0, 0x77, 0xFF, 0xF8,
|
||||
0x1E, 0xFF, 0xFC, 0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C, 0x00,
|
||||
0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x78,
|
||||
0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x03, 0xE0, 0x00, 0x00,
|
||||
0xF8, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F, 0x7F, 0xFE, 0x03, 0xBF, 0xFF,
|
||||
0xC0, 0x1F, 0xFF, 0xF8, 0x3B, 0xFF, 0xFC, 0x0F, 0x7F, 0xFE, 0x03, 0xC0,
|
||||
0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07,
|
||||
0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00,
|
||||
0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1E, 0x00,
|
||||
0x00, 0x07, 0x80, 0x00, 0x03, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
|
||||
0x03, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xE0, 0xBF, 0xFF, 0xF0, 0x77, 0xFF,
|
||||
0xF8, 0x1E, 0xFF, 0xFC, 0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C,
|
||||
0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xE0, 0x00, 0x00,
|
||||
0x78, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x03, 0xE0, 0x00,
|
||||
0x00, 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x03, 0x80,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x01, 0xCF, 0x00, 0x00, 0xF3,
|
||||
0xC0, 0x00, 0x7D, 0xF0, 0x00, 0x1F, 0x7C, 0x00, 0x07, 0xDF, 0x00, 0x01,
|
||||
0xE7, 0xC0, 0x00, 0x79, 0xF0, 0x00, 0x3E, 0x7C, 0x00, 0x0F, 0x9F, 0x00,
|
||||
0x03, 0xE7, 0xC0, 0x00, 0xF9, 0xF0, 0x00, 0x3E, 0x7C, 0x00, 0x0F, 0x9E,
|
||||
0x00, 0x03, 0xE7, 0xBF, 0xFF, 0x7B, 0xBF, 0xFF, 0xEE, 0x5F, 0xFF, 0xF9,
|
||||
0x0F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xC0, 0x08, 0x00, 0x00, 0x07, 0x00,
|
||||
0x00, 0x01, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07,
|
||||
0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1E, 0x00, 0x00,
|
||||
0x07, 0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x3E, 0x00,
|
||||
0x00, 0x0F, 0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF7, 0xFF, 0xE0, 0x3B,
|
||||
0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0x83, 0xBF, 0xFF, 0xDC, 0xF7, 0xFF, 0xEF,
|
||||
0x3C, 0x00, 0x07, 0xDF, 0x00, 0x01, 0xF7, 0xC0, 0x00, 0x7D, 0xF0, 0x00,
|
||||
0x1E, 0x7C, 0x00, 0x07, 0x9F, 0x00, 0x03, 0xE7, 0xC0, 0x00, 0xF9, 0xF0,
|
||||
0x00, 0x3E, 0x7C, 0x00, 0x0F, 0x9F, 0x00, 0x03, 0xE7, 0xC0, 0x00, 0xF9,
|
||||
0xE0, 0x00, 0x3E, 0x78, 0x00, 0x07, 0xB8, 0x00, 0x00, 0xE4, 0x00, 0x00,
|
||||
0x10, 0x1C, 0xF7, 0xDF, 0x7D, 0xE7, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xE7,
|
||||
0x8E, 0x10, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x07,
|
||||
0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0, 0x00,
|
||||
0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C,
|
||||
0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3C, 0x00, 0x00,
|
||||
0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x01, 0xC0,
|
||||
0x00, 0x00, 0x00, 0xE0, 0x00, 0x07, 0x1E, 0x00, 0x01, 0xE3, 0xC0, 0x00,
|
||||
0x7C, 0xF8, 0x00, 0x0F, 0x9F, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x3C, 0x7C,
|
||||
0x00, 0x07, 0x8F, 0x80, 0x01, 0xF1, 0xF0, 0x00, 0x3E, 0x3E, 0x00, 0x07,
|
||||
0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1F, 0x00, 0x03, 0xE3, 0xC0,
|
||||
0x00, 0x7C, 0x7B, 0xFF, 0xF7, 0x9D, 0xFF, 0xFF, 0x71, 0x7F, 0xFF, 0xE4,
|
||||
0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x81, 0xFF,
|
||||
0xFF, 0xE0, 0xBF, 0xFF, 0xF0, 0x77, 0xFF, 0xF8, 0x1E, 0xFF, 0xFC, 0x07,
|
||||
0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00,
|
||||
0x07, 0xC0, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3E, 0x00,
|
||||
0x00, 0x0F, 0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x3E,
|
||||
0x00, 0x00, 0x0F, 0x7F, 0xFE, 0x03, 0xBF, 0xFF, 0xC0, 0x1F, 0xFF, 0xF8,
|
||||
0x3B, 0xFF, 0xFD, 0xCF, 0x7F, 0xFE, 0xF3, 0xC0, 0x00, 0x7D, 0xF0, 0x00,
|
||||
0x1F, 0x7C, 0x00, 0x07, 0xDF, 0x00, 0x01, 0xE7, 0xC0, 0x00, 0x79, 0xF0,
|
||||
0x00, 0x3E, 0x7C, 0x00, 0x0F, 0x9F, 0x00, 0x03, 0xE7, 0xC0, 0x00, 0xF9,
|
||||
0xF0, 0x00, 0x3E, 0x7C, 0x00, 0x0F, 0x9E, 0x00, 0x03, 0xE7, 0x80, 0x00,
|
||||
0x7B, 0x80, 0x00, 0x0E, 0x40, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x38,
|
||||
0x00, 0x00, 0x78, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0,
|
||||
0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1E, 0x00, 0x00, 0x3C, 0x00,
|
||||
0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00,
|
||||
0x0F, 0x80, 0x00, 0x1E, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xE0, 0x00, 0x01, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F,
|
||||
0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0,
|
||||
0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00,
|
||||
0x00, 0x3C, 0x00, 0x00, 0x7B, 0xFF, 0xF1, 0xDF, 0xFF, 0xF1, 0x7F, 0xFF,
|
||||
0xE1, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x80, 0xFF,
|
||||
0xFF, 0xF0, 0x2F, 0xFF, 0xFD, 0x8E, 0xFF, 0xFF, 0x71, 0xEF, 0xFF, 0xDE,
|
||||
0x3E, 0x00, 0x07, 0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1F, 0x00,
|
||||
0x03, 0xE3, 0xE0, 0x00, 0x7C, 0x78, 0x00, 0x0F, 0x8F, 0x00, 0x01, 0xF3,
|
||||
0xE0, 0x00, 0x3E, 0x7C, 0x00, 0x07, 0xCF, 0x80, 0x00, 0xF1, 0xF0, 0x00,
|
||||
0x3E, 0x3E, 0x00, 0x07, 0xC7, 0x80, 0x00, 0x78, 0xE0, 0x00, 0x07, 0x00,
|
||||
0x00, 0x00, 0x03, 0x80, 0x00, 0x1C, 0x78, 0x00, 0x07, 0x8F, 0x00, 0x01,
|
||||
0xF3, 0xE0, 0x00, 0x3E, 0x7C, 0x00, 0x07, 0xCF, 0x80, 0x00, 0xF1, 0xF0,
|
||||
0x00, 0x1E, 0x3E, 0x00, 0x07, 0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F,
|
||||
0x1F, 0x00, 0x03, 0xE3, 0xE0, 0x00, 0x7C, 0x7C, 0x00, 0x0F, 0x8F, 0x00,
|
||||
0x01, 0xF1, 0xE0, 0x00, 0x1E, 0x70, 0x00, 0x01, 0xC4, 0x00, 0x00, 0x10,
|
||||
0x01, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xE0, 0xEF, 0xFF,
|
||||
0xF7, 0x3D, 0xFF, 0xFB, 0xCF, 0x00, 0x01, 0xF7, 0xC0, 0x00, 0x7D, 0xF0,
|
||||
0x00, 0x1F, 0x7C, 0x00, 0x07, 0x9F, 0x00, 0x01, 0xE7, 0xC0, 0x00, 0xF9,
|
||||
0xF0, 0x00, 0x3E, 0x7C, 0x00, 0x0F, 0x9F, 0x00, 0x03, 0xE7, 0xC0, 0x00,
|
||||
0xF9, 0xF0, 0x00, 0x3E, 0x78, 0x00, 0x0F, 0x9E, 0x00, 0x01, 0xEE, 0x00,
|
||||
0x00, 0x39, 0x00, 0x00, 0x04, 0x01, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0x00,
|
||||
0x7F, 0xFF, 0xE0, 0xEF, 0xFF, 0xF7, 0x3D, 0xFF, 0xFB, 0xCF, 0x00, 0x01,
|
||||
0xF7, 0xC0, 0x00, 0x7D, 0xF0, 0x00, 0x1F, 0x7C, 0x00, 0x07, 0x9F, 0x00,
|
||||
0x01, 0xE7, 0xC0, 0x00, 0xF9, 0xF0, 0x00, 0x3E, 0x7C, 0x00, 0x0F, 0x9F,
|
||||
0x00, 0x03, 0xE7, 0xC0, 0x00, 0xF9, 0xF0, 0x00, 0x3E, 0x78, 0x00, 0x0F,
|
||||
0x9E, 0xFF, 0xFD, 0xEE, 0xFF, 0xFF, 0xB9, 0x7F, 0xFF, 0xE4, 0x3F, 0xFF,
|
||||
0xFC, 0x07, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0,
|
||||
0x2F, 0xFF, 0xFD, 0x8E, 0xFF, 0xFF, 0x71, 0xEF, 0xFF, 0xDE, 0x3E, 0x00,
|
||||
0x07, 0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1F, 0x00, 0x03, 0xE3,
|
||||
0xE0, 0x00, 0x7C, 0x78, 0x00, 0x0F, 0x8F, 0x00, 0x01, 0xF3, 0xE0, 0x00,
|
||||
0x3E, 0x7C, 0x00, 0x07, 0xCF, 0x80, 0x00, 0xF1, 0xF0, 0x00, 0x3E, 0x3E,
|
||||
0x00, 0x07, 0xC7, 0xBF, 0xFF, 0x78, 0xEF, 0xFF, 0xF7, 0x03, 0xFF, 0xFF,
|
||||
0x03, 0xBF, 0xFF, 0xC0, 0x7B, 0xFF, 0xF0, 0x0F, 0x00, 0x00, 0x03, 0xE0,
|
||||
0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00,
|
||||
0x3E, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00,
|
||||
0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01,
|
||||
0xE0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0F, 0xFF,
|
||||
0xFE, 0x0F, 0xFF, 0xFF, 0x0B, 0xFF, 0xFF, 0x6E, 0xFF, 0xFF, 0x77, 0xBF,
|
||||
0xFF, 0x7B, 0xE0, 0x00, 0x7D, 0xF0, 0x00, 0x3E, 0xF8, 0x00, 0x1F, 0x7C,
|
||||
0x00, 0x0F, 0xBE, 0x00, 0x07, 0xDE, 0x00, 0x03, 0xEF, 0x00, 0x01, 0xFF,
|
||||
0x80, 0x00, 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x3D, 0xF0, 0x00, 0x3E,
|
||||
0xF8, 0x00, 0x1F, 0x7B, 0xFF, 0xF7, 0xBB, 0xFF, 0xFD, 0xC3, 0xFF, 0xFF,
|
||||
0x00, 0xFF, 0xFF, 0x70, 0x3F, 0xFF, 0x78, 0x00, 0x00, 0x7C, 0x00, 0x00,
|
||||
0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x80, 0x00,
|
||||
0x07, 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0xF8, 0x00,
|
||||
0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0x80,
|
||||
0x00, 0x01, 0xC0, 0x00, 0x00, 0x40, 0x01, 0xFF, 0xF8, 0x07, 0xFF, 0xF8,
|
||||
0x1F, 0xFF, 0xF9, 0xDF, 0xFF, 0xE3, 0xDF, 0xFF, 0x87, 0x80, 0x00, 0x1F,
|
||||
0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0,
|
||||
0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00,
|
||||
0x00, 0x3E, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x03, 0x80, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x70, 0x00, 0x00, 0x78, 0x00,
|
||||
0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00,
|
||||
0x00, 0x7C, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF8, 0x00,
|
||||
0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00,
|
||||
0x00, 0xF7, 0xFF, 0xE0, 0xEF, 0xFF, 0xF0, 0x1F, 0xFF, 0xF8, 0x0F, 0xFF,
|
||||
0xF7, 0x07, 0xFF, 0xEF, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00,
|
||||
0x1F, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x3E, 0x00, 0x00,
|
||||
0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00,
|
||||
0x3E, 0x00, 0x00, 0x3E, 0x0F, 0xFF, 0xDE, 0x3F, 0xFF, 0xEE, 0x7F, 0xFF,
|
||||
0xE4, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xF0, 0x08, 0x00, 0x00, 0x38, 0x00,
|
||||
0x00, 0x78, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00,
|
||||
0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1E, 0x00, 0x00, 0x3C, 0x00, 0x00,
|
||||
0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F,
|
||||
0x80, 0x00, 0x1E, 0xFF, 0xFC, 0x3B, 0xFF, 0xFC, 0x0F, 0xFF, 0xFC, 0xEF,
|
||||
0xFF, 0xF1, 0xEF, 0xFF, 0xC3, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00,
|
||||
0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00,
|
||||
0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00,
|
||||
0x3C, 0x00, 0x00, 0x7B, 0xFF, 0xF1, 0xDF, 0xFF, 0xF1, 0x7F, 0xFF, 0xE1,
|
||||
0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xC0, 0x38, 0x00, 0x01, 0xCF, 0x00, 0x00,
|
||||
0xF3, 0xC0, 0x00, 0x7D, 0xF0, 0x00, 0x1F, 0x7C, 0x00, 0x07, 0xDF, 0x00,
|
||||
0x01, 0xE7, 0xC0, 0x00, 0x79, 0xF0, 0x00, 0x3E, 0x7C, 0x00, 0x0F, 0x9F,
|
||||
0x00, 0x03, 0xE7, 0xC0, 0x00, 0xF9, 0xF0, 0x00, 0x3E, 0x7C, 0x00, 0x0F,
|
||||
0x9E, 0x00, 0x03, 0xE7, 0xBF, 0xFF, 0x7B, 0xBF, 0xFF, 0xEE, 0x5F, 0xFF,
|
||||
0xF9, 0x0F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xC0, 0x08, 0x00, 0x00, 0x63,
|
||||
0x80, 0x00, 0x1C, 0x78, 0x00, 0x07, 0x8F, 0x80, 0x01, 0xF1, 0xF0, 0x00,
|
||||
0x3E, 0x3E, 0x00, 0x07, 0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1E,
|
||||
0x00, 0x03, 0xE3, 0xC0, 0x00, 0x7C, 0xF8, 0x00, 0x0F, 0x9F, 0x00, 0x01,
|
||||
0xF3, 0xE0, 0x00, 0x3C, 0x7C, 0x00, 0x0F, 0x8F, 0x80, 0x01, 0xF1, 0xE0,
|
||||
0x00, 0x1E, 0x38, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x07,
|
||||
0x1E, 0x00, 0x01, 0xE3, 0xC0, 0x00, 0x7C, 0xF8, 0x00, 0x0F, 0x9F, 0x00,
|
||||
0x01, 0xF3, 0xE0, 0x00, 0x3C, 0x7C, 0x00, 0x07, 0x8F, 0x80, 0x01, 0xF1,
|
||||
0xF0, 0x00, 0x3E, 0x3E, 0x00, 0x07, 0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00,
|
||||
0x1F, 0x1F, 0x00, 0x03, 0xE3, 0xC0, 0x00, 0x7C, 0x7B, 0xFF, 0xF7, 0x9D,
|
||||
0xFF, 0xFF, 0x71, 0x7F, 0xFF, 0xE4, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF,
|
||||
0xC0, 0x08, 0x00, 0x00, 0x63, 0x80, 0x00, 0x1C, 0x78, 0x00, 0x07, 0x8F,
|
||||
0x80, 0x01, 0xF1, 0xF0, 0x00, 0x3E, 0x3E, 0x00, 0x07, 0xC7, 0xC0, 0x00,
|
||||
0xF8, 0xF8, 0x00, 0x1F, 0x1E, 0x00, 0x03, 0xE3, 0xC0, 0x00, 0x7C, 0xF8,
|
||||
0x00, 0x0F, 0x9F, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x3C, 0x7C, 0x00, 0x0F,
|
||||
0x8F, 0x80, 0x01, 0xF1, 0xEF, 0xFF, 0xDE, 0x3B, 0xFF, 0xFD, 0xC0, 0xFF,
|
||||
0xFF, 0xC0, 0xEF, 0xFF, 0xF7, 0x1E, 0xFF, 0xFD, 0xE3, 0xC0, 0x00, 0x7C,
|
||||
0xF8, 0x00, 0x0F, 0x9F, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x3C, 0x7C, 0x00,
|
||||
0x07, 0x8F, 0x80, 0x01, 0xF1, 0xF0, 0x00, 0x3E, 0x3E, 0x00, 0x07, 0xC7,
|
||||
0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1F, 0x00, 0x03, 0xE3, 0xC0, 0x00,
|
||||
0x7C, 0x7B, 0xFF, 0xF7, 0x9D, 0xFF, 0xFF, 0x71, 0x7F, 0xFF, 0xE4, 0x1F,
|
||||
0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xC0, 0x08, 0x00, 0x00, 0x63, 0x80, 0x00,
|
||||
0x1C, 0x78, 0x00, 0x07, 0x8F, 0x80, 0x01, 0xF1, 0xF0, 0x00, 0x3E, 0x3E,
|
||||
0x00, 0x07, 0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1E, 0x00, 0x03,
|
||||
0xE3, 0xC0, 0x00, 0x7C, 0xF8, 0x00, 0x0F, 0x9F, 0x00, 0x01, 0xF3, 0xE0,
|
||||
0x00, 0x3C, 0x7C, 0x00, 0x0F, 0x8F, 0x80, 0x01, 0xF1, 0xEF, 0xFF, 0xDE,
|
||||
0x3B, 0xFF, 0xFD, 0xC0, 0xFF, 0xFF, 0xC0, 0xEF, 0xFF, 0xF7, 0x1E, 0xFF,
|
||||
0xFD, 0xE3, 0xC0, 0x00, 0x7C, 0xF8, 0x00, 0x0F, 0x9F, 0x00, 0x01, 0xF3,
|
||||
0xE0, 0x00, 0x3C, 0x7C, 0x00, 0x07, 0x8F, 0x80, 0x01, 0xF1, 0xF0, 0x00,
|
||||
0x3E, 0x3E, 0x00, 0x07, 0xC7, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x1F, 0x1F,
|
||||
0x00, 0x03, 0xE3, 0xC0, 0x00, 0x7C, 0x78, 0x00, 0x07, 0x9C, 0x00, 0x00,
|
||||
0x71, 0x00, 0x00, 0x04, 0x00, 0x20, 0x00, 0x01, 0xB8, 0x00, 0x01, 0xDE,
|
||||
0x00, 0x01, 0xEF, 0x80, 0x01, 0xF7, 0xC0, 0x00, 0xFB, 0xE0, 0x00, 0x7D,
|
||||
0xF0, 0x00, 0x3E, 0xF8, 0x00, 0x1F, 0x78, 0x00, 0x0F, 0xBC, 0x00, 0x07,
|
||||
0xFE, 0x00, 0x03, 0xFF, 0x00, 0x01, 0xFF, 0x80, 0x00, 0xF7, 0xC0, 0x00,
|
||||
0xFB, 0xE0, 0x00, 0x7D, 0xEF, 0xFF, 0xDE, 0xEF, 0xFF, 0xF7, 0x0F, 0xFF,
|
||||
0xFC, 0x03, 0xFF, 0xFD, 0xC0, 0xFF, 0xFD, 0xE0, 0x00, 0x01, 0xF0, 0x00,
|
||||
0x00, 0xF8, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x1E, 0x00,
|
||||
0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x03, 0xE0,
|
||||
0x00, 0x01, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x7C, 0x0F, 0xFF, 0xDE,
|
||||
0x1F, 0xFF, 0xF7, 0x1F, 0xFF, 0xF9, 0x1F, 0xFF, 0xFE, 0x07, 0xFF, 0xFF,
|
||||
0x00, 0x03, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFD, 0x80,
|
||||
0xFF, 0xFF, 0x70, 0x0F, 0xFF, 0xDE, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00,
|
||||
0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00,
|
||||
0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07,
|
||||
0xC0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0, 0x00,
|
||||
0x00, 0x78, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00,
|
||||
0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00,
|
||||
0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07,
|
||||
0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00,
|
||||
0x00, 0x7C, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xEF, 0xFF, 0xC0, 0x77,
|
||||
0xFF, 0xFC, 0x05, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xF8, 0x07, 0xFF, 0xFF,
|
||||
0x00, 0xFF, 0xE0, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80,
|
||||
0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18,
|
||||
0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x7F, 0xF0, 0xFF, 0xE0,
|
||||
0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06,
|
||||
0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80,
|
||||
0x60, 0x18, 0x06, 0x01, 0x80, 0x7F, 0xF0, 0xFF, 0xE0, 0x18, 0x06, 0x01,
|
||||
0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60,
|
||||
0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06,
|
||||
0x01, 0x80, 0x7F, 0xF0, 0xFF, 0xE0, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18,
|
||||
0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01,
|
||||
0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x7F,
|
||||
0xF0 };
|
||||
|
||||
const GFXglyph DSEG7Classic_BoldItalic20pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 0, 0, 8, 0, 1 }, // 0x20 ' '
|
||||
{ 0, 0, 0, 32, 0, 1 }, // 0x21 '!'
|
||||
{ 0, 10, 26, 14, 1, -25 }, // 0x22 '"'
|
||||
{ 33, 10, 26, 14, 1, -25 }, // 0x23 '#'
|
||||
{ 66, 10, 26, 14, 1, -25 }, // 0x24 '$'
|
||||
{ 99, 10, 26, 14, 1, -25 }, // 0x25 '%'
|
||||
{ 132, 10, 26, 14, 1, -25 }, // 0x26 '&'
|
||||
{ 165, 10, 26, 14, 1, -25 }, // 0x27 '''
|
||||
{ 198, 10, 26, 14, 1, -25 }, // 0x28 '('
|
||||
{ 231, 10, 26, 14, 1, -25 }, // 0x29 ')'
|
||||
{ 264, 10, 26, 14, 1, -25 }, // 0x2A '*'
|
||||
{ 297, 10, 26, 14, 1, -25 }, // 0x2B '+'
|
||||
{ 330, 10, 26, 14, 1, -25 }, // 0x2C ','
|
||||
{ 363, 18, 5, 32, 7, -21 }, // 0x2D '-'
|
||||
{ 375, 5, 5, 0, -4, -4 }, // 0x2E '.'
|
||||
{ 379, 10, 26, 14, 1, -25 }, // 0x2F '/'
|
||||
{ 412, 27, 39, 32, 2, -38 }, // 0x30 '0'
|
||||
{ 544, 7, 35, 32, 22, -36 }, // 0x31 '1'
|
||||
{ 575, 27, 39, 32, 2, -38 }, // 0x32 '2'
|
||||
{ 707, 25, 39, 32, 4, -38 }, // 0x33 '3'
|
||||
{ 829, 25, 35, 32, 4, -36 }, // 0x34 '4'
|
||||
{ 939, 24, 39, 32, 4, -38 }, // 0x35 '5'
|
||||
{ 1056, 26, 39, 32, 2, -38 }, // 0x36 '6'
|
||||
{ 1183, 25, 37, 32, 4, -38 }, // 0x37 '7'
|
||||
{ 1299, 27, 39, 32, 2, -38 }, // 0x38 '8'
|
||||
{ 1431, 25, 39, 32, 4, -38 }, // 0x39 '9'
|
||||
{ 1553, 6, 20, 8, 1, -28 }, // 0x3A ':'
|
||||
{ 1568, 10, 26, 14, 1, -25 }, // 0x3B ';'
|
||||
{ 1601, 10, 26, 14, 1, -25 }, // 0x3C '<'
|
||||
{ 1634, 10, 26, 14, 1, -25 }, // 0x3D '='
|
||||
{ 1667, 10, 26, 14, 1, -25 }, // 0x3E '>'
|
||||
{ 1700, 10, 26, 14, 1, -25 }, // 0x3F '?'
|
||||
{ 1733, 10, 26, 14, 1, -25 }, // 0x40 '@'
|
||||
{ 1766, 27, 37, 32, 2, -38 }, // 0x41 'A'
|
||||
{ 1891, 26, 37, 32, 2, -36 }, // 0x42 'B'
|
||||
{ 2012, 23, 22, 32, 2, -21 }, // 0x43 'C'
|
||||
{ 2076, 27, 37, 32, 2, -36 }, // 0x44 'D'
|
||||
{ 2201, 26, 39, 32, 2, -38 }, // 0x45 'E'
|
||||
{ 2328, 26, 37, 32, 2, -38 }, // 0x46 'F'
|
||||
{ 2449, 26, 39, 32, 2, -38 }, // 0x47 'G'
|
||||
{ 2576, 26, 35, 32, 2, -36 }, // 0x48 'H'
|
||||
{ 2690, 6, 17, 32, 22, -18 }, // 0x49 'I'
|
||||
{ 2703, 27, 37, 32, 2, -36 }, // 0x4A 'J'
|
||||
{ 2828, 26, 37, 32, 2, -38 }, // 0x4B 'K'
|
||||
{ 2949, 23, 37, 32, 2, -36 }, // 0x4C 'L'
|
||||
{ 3056, 27, 37, 32, 2, -38 }, // 0x4D 'M'
|
||||
{ 3181, 26, 20, 32, 2, -21 }, // 0x4E 'N'
|
||||
{ 3246, 26, 22, 32, 2, -21 }, // 0x4F 'O'
|
||||
{ 3318, 27, 37, 32, 2, -38 }, // 0x50 'P'
|
||||
{ 3443, 25, 37, 32, 4, -38 }, // 0x51 'Q'
|
||||
{ 3559, 23, 20, 32, 2, -21 }, // 0x52 'R'
|
||||
{ 3617, 24, 37, 32, 4, -36 }, // 0x53 'S'
|
||||
{ 3728, 23, 37, 32, 2, -36 }, // 0x54 'T'
|
||||
{ 3835, 26, 19, 32, 2, -18 }, // 0x55 'U'
|
||||
{ 3897, 27, 37, 32, 2, -36 }, // 0x56 'V'
|
||||
{ 4022, 27, 37, 32, 2, -36 }, // 0x57 'W'
|
||||
{ 4147, 27, 35, 32, 2, -36 }, // 0x58 'X'
|
||||
{ 4266, 25, 37, 32, 4, -36 }, // 0x59 'Y'
|
||||
{ 4382, 27, 39, 32, 2, -38 }, // 0x5A 'Z'
|
||||
{ 4514, 10, 26, 14, 1, -25 }, // 0x5B '['
|
||||
{ 4547, 10, 26, 14, 1, -25 }, // 0x5C '\'
|
||||
{ 4580, 10, 26, 14, 1, -25 }, // 0x5D ']'
|
||||
{ 4613, 10, 26, 14, 1, -25 }, // 0x5E '^'
|
||||
{ 4646, 21, 5, 32, 4, -4 }, // 0x5F '_'
|
||||
{ 4660, 10, 26, 14, 1, -25 }, // 0x60 '`'
|
||||
{ 4693, 27, 37, 32, 2, -38 }, // 0x61 'a'
|
||||
{ 4818, 26, 37, 32, 2, -36 }, // 0x62 'b'
|
||||
{ 4939, 23, 22, 32, 2, -21 }, // 0x63 'c'
|
||||
{ 5003, 27, 37, 32, 2, -36 }, // 0x64 'd'
|
||||
{ 5128, 26, 39, 32, 2, -38 }, // 0x65 'e'
|
||||
{ 5255, 26, 37, 32, 2, -38 }, // 0x66 'f'
|
||||
{ 5376, 26, 39, 32, 2, -38 }, // 0x67 'g'
|
||||
{ 5503, 26, 35, 32, 2, -36 }, // 0x68 'h'
|
||||
{ 5617, 6, 17, 32, 22, -18 }, // 0x69 'i'
|
||||
{ 5630, 27, 37, 32, 2, -36 }, // 0x6A 'j'
|
||||
{ 5755, 26, 37, 32, 2, -38 }, // 0x6B 'k'
|
||||
{ 5876, 23, 37, 32, 2, -36 }, // 0x6C 'l'
|
||||
{ 5983, 27, 37, 32, 2, -38 }, // 0x6D 'm'
|
||||
{ 6108, 26, 20, 32, 2, -21 }, // 0x6E 'n'
|
||||
{ 6173, 26, 22, 32, 2, -21 }, // 0x6F 'o'
|
||||
{ 6245, 27, 37, 32, 2, -38 }, // 0x70 'p'
|
||||
{ 6370, 25, 37, 32, 4, -38 }, // 0x71 'q'
|
||||
{ 6486, 23, 20, 32, 2, -21 }, // 0x72 'r'
|
||||
{ 6544, 24, 37, 32, 4, -36 }, // 0x73 's'
|
||||
{ 6655, 23, 37, 32, 2, -36 }, // 0x74 't'
|
||||
{ 6762, 26, 19, 32, 2, -18 }, // 0x75 'u'
|
||||
{ 6824, 27, 37, 32, 2, -36 }, // 0x76 'v'
|
||||
{ 6949, 27, 37, 32, 2, -36 }, // 0x77 'w'
|
||||
{ 7074, 27, 35, 32, 2, -36 }, // 0x78 'x'
|
||||
{ 7193, 25, 37, 32, 4, -36 }, // 0x79 'y'
|
||||
{ 7309, 27, 39, 32, 2, -38 }, // 0x7A 'z'
|
||||
{ 7441, 10, 26, 14, 1, -25 }, // 0x7B '{'
|
||||
{ 7474, 10, 26, 14, 1, -25 }, // 0x7C '|'
|
||||
{ 7507, 10, 26, 14, 1, -25 }, // 0x7D '}'
|
||||
{ 7540, 10, 26, 14, 1, -25 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont DSEG7Classic_BoldItalic20pt7b PROGMEM = {
|
||||
(uint8_t *)DSEG7Classic_BoldItalic20pt7bBitmaps,
|
||||
(GFXglyph *)DSEG7Classic_BoldItalic20pt7bGlyphs,
|
||||
0x20, 0x7E, 43 };
|
||||
|
||||
// Approx. 8245 bytes
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,232 +0,0 @@
|
|||
#include <FreeRTOS.h>
|
||||
#include "LedSpiTask.h"
|
||||
#include "GwHardware.h"
|
||||
#include "GwApi.h"
|
||||
#include <driver/spi_master.h>
|
||||
#include <driver/gpio.h>
|
||||
#include <esp_rom_gpio.h>
|
||||
#include <soc/spi_periph.h>
|
||||
#include "ColorTo3Byte.h"
|
||||
|
||||
/*
|
||||
controlling some WS2812 using SPI
|
||||
https://controllerstech.com/ws2812-leds-using-spi/
|
||||
|
||||
*/
|
||||
|
||||
|
||||
static uint8_t mulcolor(uint8_t f1, uint8_t f2){
|
||||
uint16_t rt=f1;
|
||||
rt*=(uint16_t)f2;
|
||||
return rt >> 8;
|
||||
}
|
||||
|
||||
Color setBrightness(const Color &color,uint8_t brightness){
|
||||
uint16_t br255=brightness*255;
|
||||
br255=br255/100;
|
||||
//very simple for now
|
||||
Color rt=color;
|
||||
rt.g=mulcolor(rt.g,br255);
|
||||
rt.b=mulcolor(rt.b,br255);
|
||||
rt.r=mulcolor(rt.r,br255);
|
||||
return rt;
|
||||
}
|
||||
|
||||
|
||||
static void colorCompTo3Byte(uint8_t comp,uint8_t *buffer){
|
||||
for (int i=0;i<3;i++){
|
||||
*(buffer+i)=colorTo3Byte[comp][i];
|
||||
}
|
||||
}
|
||||
|
||||
//depending on LED strip - handle color order
|
||||
static size_t ledsToBuffer(int numLeds,const Color *leds,uint8_t *buffer){
|
||||
uint8_t *p=buffer;
|
||||
for (int i=0;i<numLeds;i++){
|
||||
colorCompTo3Byte(leds[i].g,p);
|
||||
p+=3;
|
||||
colorCompTo3Byte(leds[i].r,p);
|
||||
p+=3;
|
||||
colorCompTo3Byte(leds[i].b,p);
|
||||
p+=3;
|
||||
}
|
||||
return p-buffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* prepare a GPIO pin to be used as the data line for an led stripe
|
||||
*/
|
||||
bool prepareGpio(GwLog *logger, uint8_t pin){
|
||||
esp_err_t err=gpio_set_direction((gpio_num_t)pin,GPIO_MODE_OUTPUT);
|
||||
if (err != ESP_OK){
|
||||
LOG_DEBUG(GwLog::ERROR,"unable to set gpio mode for %d: %d",pin,(int)err);
|
||||
return false;
|
||||
}
|
||||
err=gpio_set_level((gpio_num_t)pin,0);
|
||||
if (err != ESP_OK){
|
||||
LOG_DEBUG(GwLog::ERROR,"unable to set gpio level for %d: %d",pin,(int)err);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
* initialize the SPI bus and add a device for the LED output
|
||||
* it still does not attach any PINs to the bus
|
||||
* this will be done later when sending out
|
||||
* this way we can use one hardware SPI for multiple led stripes
|
||||
* @param bus : the SPI bus
|
||||
* @param device: <out> the device handle being filled
|
||||
* @return false on error
|
||||
*/
|
||||
bool prepareSpi(GwLog *logger,spi_host_device_t bus,spi_device_handle_t *device){
|
||||
spi_bus_config_t buscfg = {
|
||||
.mosi_io_num = -1,
|
||||
.miso_io_num = -1,
|
||||
.sclk_io_num = -1,
|
||||
.quadwp_io_num = -1,
|
||||
.quadhd_io_num = -1,
|
||||
.max_transfer_sz = 0,
|
||||
.flags=SPICOMMON_BUSFLAG_GPIO_PINS
|
||||
};
|
||||
esp_err_t err=spi_bus_initialize(bus,&buscfg,SPI_DMA_CH_AUTO);
|
||||
if (err != ESP_OK){
|
||||
LOG_DEBUG(GwLog::ERROR,"unable to initialize SPI bus %d,mosi=%d, error=%d",
|
||||
(int)bus,-1,(int)err);
|
||||
return false;
|
||||
}
|
||||
spi_device_interface_config_t devcfg = {
|
||||
.command_bits = 0,
|
||||
.address_bits = 0,
|
||||
.dummy_bits = 0,
|
||||
.mode = 0,
|
||||
.duty_cycle_pos = 128,
|
||||
.cs_ena_pretrans = 0,
|
||||
.cs_ena_posttrans =0,
|
||||
.clock_speed_hz = 2500000, //2.5 Mhz
|
||||
.input_delay_ns =0,
|
||||
.spics_io_num = -1, //CS pin
|
||||
.queue_size = 1 //see https://github.com/espressif/esp-idf/issues/9450
|
||||
};
|
||||
err=spi_bus_add_device(bus,&devcfg,device);
|
||||
if (err != ESP_OK){
|
||||
LOG_DEBUG(GwLog::ERROR,"unable to add device to SPI bus %d,mosi=%d, error=%d",
|
||||
(int)bus,-1,(int)err);
|
||||
return false;
|
||||
}
|
||||
//slightly speed up the transactions
|
||||
//as we are the only ones using the bus we can safely acquire it forever
|
||||
err=spi_device_acquire_bus(*device,portMAX_DELAY);
|
||||
if (err != ESP_OK){
|
||||
LOG_DEBUG(GwLog::ERROR,"unable to acquire SPI bus %d,mosi=%d, error=%d",
|
||||
(int)bus,-1,(int)err);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* send out a set of Color values to a connected led stripe
|
||||
* this method will block until sen dis complete
|
||||
* But as the transfer is using DMA the CPU is not busy during the wait time
|
||||
* @param pin: the IO pin to be used. Will be attached to the SPI device before and deattached after
|
||||
* @param numLeds: the number of Color values
|
||||
* @param leds: pointer to the first Color value
|
||||
* @param bus: the SPI bus
|
||||
* @param device: the SPI device handle
|
||||
**/
|
||||
bool sendToLeds(GwLog *logger, uint8_t pin, int numLeds, Color *leds, spi_host_device_t bus, spi_device_handle_t &device, uint8_t *buffer = NULL)
|
||||
{
|
||||
//need to send a long reset before
|
||||
//as on S3 MOSI is high on idle on older frameworks
|
||||
//see https://github.com/espressif/esp-idf/issues/13974
|
||||
const int zeroprefix=80; //3.2us per byte
|
||||
bool ownsBuffer = false;
|
||||
size_t bufferSize = numLeds * 3 * 3+zeroprefix;
|
||||
if (buffer == NULL)
|
||||
{
|
||||
ownsBuffer = true;
|
||||
buffer = (uint8_t *)heap_caps_malloc(bufferSize, MALLOC_CAP_DMA|MALLOC_CAP_32BIT);
|
||||
if (!buffer)
|
||||
{
|
||||
LOG_DEBUG(GwLog::ERROR, "unable to allocate %d bytes of DMA buffer", (int)bufferSize);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
bool rv = true;
|
||||
for (int i=0;i<zeroprefix;i++)buffer[i]=0;
|
||||
ledsToBuffer(numLeds, leds, buffer+zeroprefix);
|
||||
struct spi_transaction_t ta = {
|
||||
.flags = 0,
|
||||
.cmd = 0,
|
||||
.addr = 0,
|
||||
.length = bufferSize * 8,
|
||||
.rxlength = 0,
|
||||
.tx_buffer = buffer};
|
||||
int64_t now = esp_timer_get_time();
|
||||
esp_rom_gpio_connect_out_signal(pin, spi_periph_signal[bus].spid_out, false, false);
|
||||
esp_err_t ret = spi_device_transmit(device, &ta);
|
||||
esp_rom_gpio_connect_out_signal(pin, SIG_GPIO_OUT_IDX, false, false);
|
||||
int64_t end = esp_timer_get_time();
|
||||
if (ret != ESP_OK)
|
||||
{
|
||||
LOG_DEBUG(GwLog::ERROR, "unable to send led data: %d", (int)ret);
|
||||
rv = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_DEBUG(GwLog::DEBUG, "successfully send led data for %d leds, %lld us", numLeds, end - now);
|
||||
}
|
||||
if (ownsBuffer)
|
||||
{
|
||||
heap_caps_free(buffer);
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
#define EXIT_TASK delay(50);vTaskDelete(NULL);return;
|
||||
void handleSpiLeds(void *param){
|
||||
LedTaskData *taskData=(LedTaskData*)param;
|
||||
GwLog *logger=taskData->api->getLogger();
|
||||
LOG_DEBUG(GwLog::ERROR,"spi led task initialized");
|
||||
spi_host_device_t bus=SPI3_HOST;
|
||||
bool spiValid=false;
|
||||
LOG_DEBUG(GwLog::ERROR,"SpiLed task started");
|
||||
|
||||
if (! prepareGpio(logger,OBP_FLASH_LED)){
|
||||
EXIT_TASK;
|
||||
}
|
||||
if (! prepareGpio(logger,OBP_BACKLIGHT_LED)){
|
||||
EXIT_TASK;
|
||||
}
|
||||
spi_device_handle_t device;
|
||||
if (! prepareSpi(logger,bus,&device)){
|
||||
EXIT_TASK;
|
||||
}
|
||||
bool first=true;
|
||||
LedInterface current;
|
||||
while (true)
|
||||
{
|
||||
LedInterface newLeds=taskData->getLedData();
|
||||
if (first || current.backlightChanged(newLeds) || current.flasChanged(newLeds)){
|
||||
first=false;
|
||||
LOG_DEBUG(GwLog::ERROR,"handle SPI leds");
|
||||
if (current.backlightChanged(newLeds) || first){
|
||||
LOG_DEBUG(GwLog::ERROR,"setting backlight r=%02d,g=%02d,b=%02d",
|
||||
newLeds.backlight[0].r,newLeds.backlight[0].g,newLeds.backlight[0].b);
|
||||
sendToLeds(logger,OBP_BACKLIGHT_LED,newLeds.backlightLen(),newLeds.backlight,bus,device);
|
||||
}
|
||||
if (current.flasChanged(newLeds) || first){
|
||||
LOG_DEBUG(GwLog::ERROR,"setting flashr=%02d,g=%02d,b=%02d",
|
||||
newLeds.flash[0].r,newLeds.flash[0].g,newLeds.flash[0].b);
|
||||
sendToLeds(logger,OBP_FLASH_LED,newLeds.flashLen(),newLeds.flash,bus,device);
|
||||
}
|
||||
current=newLeds;
|
||||
}
|
||||
delay(50);
|
||||
}
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
|
||||
void createSpiLedTask(LedTaskData *param){
|
||||
xTaskCreate(handleSpiLeds,"handleLeds",4000,param,3,NULL);
|
||||
}
|
|
@ -1,96 +0,0 @@
|
|||
#ifndef _GWSPILEDS_H
|
||||
#define _GWSPILEDS_H
|
||||
#include "GwSynchronized.h"
|
||||
#include "GwApi.h"
|
||||
#include "OBP60Hardware.h"
|
||||
|
||||
|
||||
class Color{
|
||||
public:
|
||||
uint8_t r;
|
||||
uint8_t g;
|
||||
uint8_t b;
|
||||
Color():r(0),g(0),b(0){}
|
||||
Color(uint8_t cr, uint8_t cg,uint8_t cb):
|
||||
b(cb),g(cg),r(cr){}
|
||||
Color(const Color &o):b(o.b),g(o.g),r(o.r){}
|
||||
bool equal(const Color &o) const{
|
||||
return o.r == r && o.g == g && o.b == b;
|
||||
}
|
||||
bool operator == (const Color &other) const{
|
||||
return equal(other);
|
||||
}
|
||||
bool operator != (const Color &other) const{
|
||||
return ! equal(other);
|
||||
}
|
||||
};
|
||||
|
||||
static Color COLOR_GREEN=Color(0,255,0);
|
||||
static Color COLOR_RED=Color(255,0,0);
|
||||
static Color COLOR_BLUE=Color(0,0,255);
|
||||
static Color COLOR_WHITE=Color(255,255,255);
|
||||
static Color COLOR_BLACK=Color(0,0,0);
|
||||
|
||||
Color setBrightness(const Color &color,uint8_t brightness);
|
||||
|
||||
|
||||
class LedInterface {
|
||||
private:
|
||||
bool equals(const Color *v1, const Color *v2, int num) const{
|
||||
for (int i=0;i<num;i++){
|
||||
if (!v1->equal(*v2)) return false;
|
||||
v1++;
|
||||
v2++;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
void set(Color *v,int len, const Color &c){
|
||||
for (int i=0;i<len;i++){
|
||||
*v=c;
|
||||
v++;
|
||||
}
|
||||
}
|
||||
public:
|
||||
Color flash[NUM_FLASH_LED];
|
||||
Color backlight[NUM_BACKLIGHT_LED];
|
||||
int flashLen() const {return NUM_FLASH_LED;}
|
||||
int backlightLen() const {return NUM_BACKLIGHT_LED;}
|
||||
bool flasChanged(const LedInterface &other){
|
||||
return ! equals(flash,other.flash,flashLen());
|
||||
}
|
||||
bool backlightChanged(const LedInterface &other){
|
||||
return ! equals(backlight,other.backlight,backlightLen());
|
||||
}
|
||||
void setFlash(const Color &c){
|
||||
set(flash,flashLen(),c);
|
||||
}
|
||||
void setBacklight(const Color &c){
|
||||
set(backlight,backlightLen(),c);
|
||||
}
|
||||
};
|
||||
class LedTaskData{
|
||||
private:
|
||||
SemaphoreHandle_t locker;
|
||||
LedInterface leds;
|
||||
long updateCount=0;
|
||||
public:
|
||||
GwApi *api=NULL;
|
||||
LedTaskData(GwApi *api){
|
||||
locker=xSemaphoreCreateMutex();
|
||||
this->api=api;
|
||||
}
|
||||
void setLedData(const LedInterface &values){
|
||||
GWSYNCHRONIZED(&locker);
|
||||
leds=values;
|
||||
}
|
||||
LedInterface getLedData(){
|
||||
GWSYNCHRONIZED(&locker);
|
||||
return leds;
|
||||
}
|
||||
};
|
||||
|
||||
//task function
|
||||
void createSpiLedTask(LedTaskData *param);
|
||||
|
||||
|
||||
#endif
|
|
@ -1,939 +0,0 @@
|
|||
const unsigned char gImage_Logo_OBP_400x300_sw[15000] = { /* 0X00,0X01,0X90,0X01,0X2C,0X01, */
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X40,
|
||||
0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X01,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X01,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0X80,0X00,0X03,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0X80,0X00,0X03,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X80,
|
||||
0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X3F,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X3F,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X7F,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0X80,0X00,0X03,0XFF,0XFF,
|
||||
0XFF,0XFF,0X00,0X03,0XFF,0XFF,0XF8,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0X80,0X00,0X03,
|
||||
0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0X80,
|
||||
0X00,0X03,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X1F,0XFF,0XF8,0X00,0X00,0X00,0X07,0XFF,
|
||||
0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,
|
||||
0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X07,0XFF,0XF8,0X00,0X00,0X00,
|
||||
0X03,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X0F,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X03,0XFF,0XF8,0X00,
|
||||
0X00,0X00,0X01,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X1F,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0XFF,
|
||||
0XF8,0X00,0X00,0X00,0X00,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFC,0X00,0X00,0X00,
|
||||
0X00,0X7F,0XF8,0X00,0X00,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XF8,0X00,
|
||||
0X00,0X00,0X00,0X7F,0XF8,0X00,0X00,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X80,0X00,0X03,0XFF,0XFF,
|
||||
0XF0,0X00,0X00,0X00,0X00,0X3F,0XF8,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X80,0X00,0X03,
|
||||
0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X1F,0XF8,0X00,0X1E,0X00,0X00,0X3F,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X80,
|
||||
0X00,0X03,0XFF,0XFF,0XE0,0X00,0X0F,0XC0,0X00,0X1F,0XF8,0X00,0X1F,0XE0,0X00,0X3F,
|
||||
0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,
|
||||
0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X3F,0XF0,0X00,0X0F,0XF8,0X00,0X1F,0XF0,
|
||||
0X00,0X3F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X01,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X7F,0XF8,0X00,0X0F,0XF8,0X00,
|
||||
0X1F,0XF8,0X00,0X3F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X03,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0XFF,0XFC,0X00,0X07,
|
||||
0XF8,0X00,0X1F,0XF8,0X00,0X3F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0X80,0X01,0XFF,0XFE,
|
||||
0X00,0X07,0XF8,0X00,0X1F,0XF8,0X00,0X3F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0X80,0X01,
|
||||
0XFF,0XFE,0X00,0X07,0XF8,0X00,0X1F,0XF8,0X00,0X3F,0XFF,0XF8,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,
|
||||
0X80,0X01,0XFF,0XFF,0X00,0X07,0XF8,0X00,0X1F,0XF8,0X00,0X3F,0XFF,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0X80,0X00,0X03,
|
||||
0XFF,0XFF,0X80,0X03,0XFF,0XFF,0X00,0X03,0XF8,0X00,0X1F,0XF0,0X00,0X3F,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0X80,
|
||||
0X00,0X03,0XFF,0XFF,0X80,0X03,0XFF,0XFF,0X00,0X03,0XF8,0X00,0X1F,0XE0,0X00,0X3F,
|
||||
0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,
|
||||
0XFF,0X80,0X00,0X03,0XFF,0XFF,0X00,0X03,0XFF,0XFF,0X00,0X03,0XF8,0X00,0X00,0X00,
|
||||
0X00,0X3F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X7F,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0X00,0X03,0XFF,0XFF,0X00,0X03,0XF8,0X00,
|
||||
0X00,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0X00,0X03,0XFF,0XFF,0X00,0X03,
|
||||
0XF8,0X00,0X00,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0X00,0X03,0XFF,0XFF,
|
||||
0X00,0X03,0XF8,0X00,0X00,0X00,0X00,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0X00,0X03,
|
||||
0XFF,0XFF,0X00,0X03,0XF8,0X00,0X00,0X00,0X01,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,
|
||||
0X00,0X03,0XFF,0XFF,0X00,0X03,0XF8,0X00,0X00,0X00,0X03,0XFF,0XFF,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X03,
|
||||
0XFF,0XFF,0X00,0X03,0XFF,0XFF,0X00,0X03,0XF8,0X00,0X00,0X00,0X07,0XFF,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0X80,
|
||||
0X00,0X03,0XFF,0XFF,0X00,0X03,0XFF,0XFF,0X00,0X03,0XF8,0X00,0X00,0X00,0X0F,0XFF,
|
||||
0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,
|
||||
0XFF,0X80,0X00,0X03,0XFF,0XFF,0X80,0X03,0XFF,0XFF,0X00,0X03,0XF8,0X00,0X00,0X00,
|
||||
0X7F,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,
|
||||
0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0X80,0X03,0XFF,0XFF,0X00,0X07,0XF8,0X00,
|
||||
0X1F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X1F,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0X80,0X01,0XFF,0XFE,0X00,0X07,
|
||||
0XF8,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0X80,0X01,0XFF,0XFE,
|
||||
0X00,0X07,0XF8,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0X80,0X00,
|
||||
0XFF,0XFC,0X00,0X07,0XF8,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,
|
||||
0XC0,0X00,0XFF,0XFC,0X00,0X0F,0XF8,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,
|
||||
0XFF,0XFF,0XC0,0X00,0X3F,0XF8,0X00,0X0F,0XF8,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0X80,
|
||||
0X00,0X03,0XFF,0XFF,0XE0,0X00,0X1F,0XE0,0X00,0X1F,0XF8,0X00,0X1F,0XFF,0XFF,0XFF,
|
||||
0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,
|
||||
0XFF,0X80,0X00,0X03,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X1F,0XF8,0X00,0X1F,0XFF,
|
||||
0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,
|
||||
0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X3F,0XF8,0X00,
|
||||
0X1F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X07,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X3F,
|
||||
0XF8,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XF8,0X00,0X00,0X00,
|
||||
0X00,0X7F,0XF8,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFC,0X00,
|
||||
0X00,0X00,0X00,0XFF,0XF8,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,
|
||||
0XFE,0X00,0X00,0X00,0X01,0XFF,0XF8,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,
|
||||
0XFF,0XFF,0XFF,0X80,0X00,0X00,0X03,0XFF,0XF8,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,
|
||||
0X00,0X03,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X0F,0XFF,0XF8,0X00,0X1F,0XFF,0XFF,0XFF,
|
||||
0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,
|
||||
0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X3F,0XFF,0XF8,0X00,0X1F,0XFF,
|
||||
0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFE,0X00,0X01,0XFF,0XFF,0XF8,0X00,
|
||||
0X3F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,
|
||||
0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,
|
||||
0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X03,0XFE,0X00,0X1F,0XFF,0XF8,
|
||||
0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X03,0XFE,0X00,0X0F,
|
||||
0XFF,0XF0,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X03,0XFE,
|
||||
0X00,0X07,0XFF,0XF0,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,
|
||||
0X03,0XFE,0X00,0X03,0XFF,0XF0,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,
|
||||
0X00,0X00,0X03,0XFE,0X00,0X03,0XFF,0XF0,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,
|
||||
0XC0,0X00,0X00,0X00,0X03,0XFE,0X00,0X01,0XFF,0XF0,0X00,0X7F,0XFF,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,
|
||||
0XFF,0XFF,0XC0,0X00,0X00,0X00,0X03,0XFE,0X00,0X00,0XFF,0XF0,0X00,0X7F,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,
|
||||
0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X03,0XFE,0X00,0X00,0XFF,0XF0,0X00,0X7F,
|
||||
0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X03,0XFE,0X00,0X00,0X7F,0XF0,
|
||||
0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X03,0XFE,0X00,0X00,
|
||||
0X3F,0XF0,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X01,0XFF,0XFF,0XFF,0XFE,
|
||||
0X00,0X00,0X3F,0XF0,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X01,0XFF,0XFF,
|
||||
0XFF,0XFE,0X00,0X00,0X1F,0XF0,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X01,
|
||||
0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X0F,0XF0,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,
|
||||
0XC0,0X01,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X0F,0XF0,0X00,0X7F,0XFF,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,
|
||||
0XFF,0XFF,0XC0,0X01,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X07,0XF0,0X00,0X7F,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,
|
||||
0X00,0X03,0XFF,0XFF,0XC0,0X01,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X03,0XF0,0X00,0X7F,
|
||||
0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X01,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X03,0XF0,
|
||||
0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X07,0XFE,0X00,0X00,
|
||||
0X01,0XF0,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X07,0XFE,
|
||||
0X00,0X00,0X00,0XF0,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,
|
||||
0X07,0XFE,0X00,0X00,0X00,0XF0,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,
|
||||
0X00,0X00,0X07,0XFE,0X00,0X00,0X00,0X70,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,
|
||||
0XC0,0X00,0X00,0X00,0X07,0XFE,0X00,0X00,0X00,0X30,0X00,0X7F,0XFF,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,
|
||||
0XFF,0XFF,0XC0,0X00,0X00,0X00,0X07,0XFE,0X00,0X08,0X00,0X30,0X00,0X7F,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,
|
||||
0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X07,0XFE,0X00,0X0C,0X00,0X10,0X00,0X7F,
|
||||
0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X07,0XFE,0X00,0X0C,0X00,0X00,
|
||||
0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X07,0XFE,0X00,0X0E,
|
||||
0X00,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X01,0XFF,0XFF,0XFF,0XFE,
|
||||
0X00,0X0F,0X00,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X01,0XFF,0XFF,
|
||||
0XFF,0XFE,0X00,0X0F,0X00,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X01,
|
||||
0XFF,0XFF,0XFF,0XFE,0X00,0X0F,0X80,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,
|
||||
0XC0,0X01,0XFF,0XFF,0XFF,0XFE,0X00,0X0F,0XC0,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,
|
||||
0XFF,0XFF,0XC0,0X01,0XFF,0XFF,0XFF,0XFE,0X00,0X0F,0XC0,0X00,0X00,0X7F,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,
|
||||
0X00,0X03,0XFF,0XFF,0XC0,0X01,0XFF,0XFF,0XFF,0XFE,0X00,0X0F,0XE0,0X00,0X00,0X7F,
|
||||
0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X01,0XFF,0XFF,0XFF,0XFE,0X00,0X0F,0XF0,0X00,
|
||||
0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X01,0XFF,0XFF,0XFF,0XFE,0X00,0X0F,
|
||||
0XF8,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0XFF,0XFF,0XFF,0XFE,
|
||||
0X00,0X0F,0XF8,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,
|
||||
0X01,0XFE,0X00,0X0F,0XFC,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,
|
||||
0X00,0X00,0X01,0XFE,0X00,0X0F,0XFE,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,
|
||||
0XC0,0X00,0X00,0X00,0X01,0XFE,0X00,0X0F,0XFE,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,
|
||||
0XFF,0XFF,0XC0,0X00,0X00,0X00,0X01,0XFE,0X00,0X0F,0XFF,0X00,0X00,0X7F,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,
|
||||
0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X01,0XFE,0X00,0X0F,0XFF,0X80,0X00,0X7F,
|
||||
0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X01,0XFE,0X00,0X0F,0XFF,0X80,
|
||||
0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X01,0XFE,0X00,0X0F,
|
||||
0XFF,0XC0,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X01,0XFE,
|
||||
0X00,0X0F,0XFF,0XE0,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,
|
||||
0X01,0XFE,0X00,0X0F,0XFF,0XE0,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC0,0X00,
|
||||
0X00,0X00,0X01,0XFE,0X00,0X1F,0XFF,0XF0,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,
|
||||
0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,
|
||||
0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0X80,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XC0,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,
|
||||
0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X40,0X00,0X0F,0XFF,0XE0,0X00,0X00,
|
||||
0X00,0X00,0X00,0X7E,0X00,0X00,0X00,0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X03,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X0F,0XFF,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X00,0X7E,0X00,0X00,0X00,0X00,0X00,0X00,0X0E,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X07,0XC0,0X00,0X0F,
|
||||
0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X7E,0X00,0X00,0X00,0X00,0X00,0X00,0X3E,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X0F,0XC0,
|
||||
0X00,0X0F,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X7E,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X7E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,
|
||||
0X0F,0XC0,0X00,0X0F,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X7E,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XF8,0X1F,0XE0,0X00,0X00,0X00,
|
||||
0X00,0X00,0X0F,0XC0,0X00,0X0F,0XE0,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XF8,0X0F,0XE0,0X03,
|
||||
0XE0,0X00,0X3F,0XE0,0X1F,0XC0,0X00,0X0F,0XE0,0X7F,0X00,0X0E,0X00,0X7E,0X00,0X00,
|
||||
0X00,0X3F,0X00,0X01,0XFC,0X00,0XFE,0X00,0X3F,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XF8,0X0F,
|
||||
0XC0,0X1F,0XFC,0X00,0XFF,0XF8,0X7F,0XFC,0X00,0X0F,0XE0,0X7F,0X1F,0X9F,0X83,0XFF,
|
||||
0X80,0X7E,0X01,0XFF,0XE0,0X07,0XFF,0X03,0XFF,0XE0,0XFF,0XF0,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,
|
||||
0XF8,0X1F,0XC0,0X3F,0XFE,0X03,0XFF,0XFC,0X7F,0XFC,0X00,0X0F,0XE0,0X7F,0X1F,0XFF,
|
||||
0X07,0XFF,0XE0,0X7E,0X03,0XFF,0XF0,0X1F,0XFF,0XC3,0XFF,0XE1,0XFF,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X03,0XFF,0XFF,0X80,0X7F,0XFF,0X83,0XFF,0XFE,0X7F,0XFC,0X00,0X0F,0XE0,0XFF,
|
||||
0X1F,0XFF,0X0F,0XFF,0XF0,0X7E,0X07,0XFF,0XF8,0X3F,0XFF,0XE3,0XFF,0XE3,0XFF,0XFC,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X03,0XFF,0XFF,0X00,0XFF,0XFF,0X87,0XF8,0XFE,0X7F,0XFC,0X00,0X0F,
|
||||
0XFF,0XFE,0X1F,0XFE,0X1F,0XFF,0XF0,0X7E,0X0F,0XE3,0XF8,0X3F,0XFF,0XE3,0XFF,0XE3,
|
||||
0XE1,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0X01,0XFE,0X3F,0XC7,0XF0,0X7E,0X1F,0XC0,
|
||||
0X00,0X0F,0XFF,0XFE,0X1F,0XF2,0X1F,0XC3,0XF8,0X7E,0X0F,0XC1,0XFC,0X7F,0X87,0XF0,
|
||||
0XFE,0X07,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XC1,0XFC,0X1F,0XC0,0X00,0XFE,
|
||||
0X0F,0XC0,0X00,0X0F,0XFF,0XFC,0X1F,0XE0,0X3F,0X83,0XF8,0X7E,0X1F,0XC0,0XFC,0X7F,
|
||||
0X03,0X80,0XFE,0X03,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XE1,0XFC,0X0F,0XC0,
|
||||
0X07,0XFE,0X0F,0XC0,0X00,0X0F,0XFF,0XF8,0X1F,0XC0,0X3F,0X81,0XF8,0X7E,0X1F,0XC0,
|
||||
0XFC,0X7E,0X00,0X00,0XFE,0X03,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XF8,0X0F,0XE1,0XF8,
|
||||
0X0F,0XC0,0XFF,0XFE,0X0F,0XC0,0X00,0X0F,0XFF,0XE0,0X1F,0XC0,0X3F,0X81,0XF8,0X7E,
|
||||
0X1F,0XFF,0XFE,0X7E,0X00,0X00,0XFE,0X01,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XF8,0X0F,
|
||||
0XF1,0XF8,0X0F,0XC3,0XFF,0XFE,0X0F,0XC0,0X00,0X0F,0XE0,0X00,0X1F,0XC0,0X3F,0X01,
|
||||
0XFC,0X7E,0X1F,0XFF,0XFE,0X7E,0X00,0X00,0XFE,0X00,0XFF,0XFC,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,
|
||||
0XF8,0X0F,0XF1,0XF8,0X0F,0XC7,0XFC,0X7E,0X0F,0XC0,0X00,0X0F,0XE0,0X00,0X1F,0XC0,
|
||||
0X3F,0X81,0XF8,0X7E,0X1F,0XFF,0XFE,0X7E,0X00,0X00,0XFE,0X00,0X3F,0XFC,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X03,0XF8,0X0F,0XF1,0XFC,0X1F,0XC7,0XF0,0X7E,0X0F,0XC0,0X00,0X0F,0XE0,0X00,
|
||||
0X1F,0XC0,0X3F,0X81,0XF8,0X7E,0X1F,0XC0,0X00,0X7F,0X03,0XC0,0XFE,0X00,0X01,0XFE,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X03,0XFC,0X3F,0XF1,0XFC,0X1F,0XC7,0XE0,0X7E,0X0F,0XC0,0X00,0X0F,
|
||||
0XE0,0X00,0X1F,0XC0,0X1F,0X83,0XF8,0X7E,0X1F,0XC0,0X00,0X7F,0X07,0XF0,0XFE,0X00,
|
||||
0X60,0X7E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XE0,0XFF,0X3F,0X87,0XE0,0XFE,0X0F,0XFC,
|
||||
0X00,0X0F,0XE0,0X00,0X1F,0XC0,0X1F,0XE7,0XF0,0X7E,0X0F,0XE1,0XFC,0X7F,0XCF,0XF0,
|
||||
0X7F,0XC7,0XF0,0X7E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XE0,0XFF,0XFF,0X87,0XFF,0XFE,
|
||||
0X0F,0XFC,0X00,0X0F,0XE0,0X00,0X1F,0XC0,0X0F,0XFF,0XF0,0X7E,0X0F,0XFF,0XF8,0X3F,
|
||||
0XFF,0XE0,0X7F,0XC7,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XC0,0X7F,0XFF,0X07,
|
||||
0XFF,0XFE,0X0F,0XFC,0X00,0X0F,0XE0,0X00,0X1F,0XC0,0X07,0XFF,0XE0,0X7E,0X07,0XFF,
|
||||
0XF0,0X1F,0XFF,0XC0,0X7F,0XE3,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0X80,0X1F,
|
||||
0XFE,0X03,0XFF,0X3F,0X07,0XFC,0X00,0X0F,0XE0,0X00,0X1F,0XC0,0X03,0XFF,0XC0,0X7E,
|
||||
0X03,0XFF,0XE0,0X0F,0XFF,0X80,0X3F,0XE1,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XF8,
|
||||
0X00,0X07,0XF8,0X00,0XFC,0X3F,0X03,0XFC,0X00,0X0F,0XE0,0X00,0X1F,0XC0,0X00,0XFF,
|
||||
0X00,0X7E,0X00,0XFF,0X80,0X03,0XFE,0X00,0X1F,0XE0,0X7F,0XC0,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X03,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFC,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFC,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XE0,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,};
|
|
@ -1,939 +0,0 @@
|
|||
const unsigned char gImage_MFD_OBP60_400x300_sw[15000] = { /* 0X00,0X01,0X90,0X01,0X2C,0X01, */
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XE0,0X3F,
|
||||
0XC0,0X00,0X00,0X7E,0X00,0X40,0XFC,0X07,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X08,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XE0,0X0F,0XC0,0X00,0X00,0X00,
|
||||
0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,
|
||||
0XF0,0X3F,0XC0,0X00,0X00,0X7E,0X01,0XC0,0XFC,0X1F,0XF0,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X38,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XF8,0X0F,0XC0,0X00,
|
||||
0X00,0X00,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X1F,0XF0,0X7F,0XC0,0X00,0X00,0X7E,0X07,0XC0,0XFC,0X1F,0XF0,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0XF8,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFC,0X0F,
|
||||
0XC0,0X00,0X00,0X00,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X1F,0XF0,0X7F,0XC0,0X00,0X00,0X7E,0X0F,0XC0,0XFC,0X3F,0XE0,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X01,0XF8,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,
|
||||
0XFE,0X0F,0XC0,0X00,0X00,0X00,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X1F,0XF0,0X7F,0XC0,0X00,0X00,0X7E,0X0F,0XC0,0X00,0X3F,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X07,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XF8,0X7F,0XC0,0X00,0X00,0X7E,0X0F,0XC0,
|
||||
0X00,0X3F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XF8,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X07,0XF0,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X80,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XF8,0XFF,0XC3,0XE0,0XF8,0X7E,
|
||||
0X3F,0XF8,0XFC,0XFF,0XE7,0XC1,0XF0,0XF8,0XF8,0X01,0XFC,0X07,0XFF,0X1F,0X80,0X7F,
|
||||
0X00,0XF8,0XF8,0X00,0X07,0XF0,0X7F,0X0F,0XC0,0X7F,0X80,0XF9,0XF0,0X1F,0X80,0XFF,
|
||||
0X83,0XF0,0X3F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X78,0XF7,0XC3,0XE0,
|
||||
0XF8,0X7E,0X3F,0XF8,0XFC,0XFF,0XE7,0XC1,0XF0,0XFB,0XFC,0X07,0XFF,0X07,0XFF,0X1F,
|
||||
0X81,0XFF,0XC0,0XFB,0XFC,0X00,0X07,0XF0,0X3F,0X0F,0XC1,0XFF,0XE0,0XFB,0XFC,0X1F,
|
||||
0X83,0XFF,0XE1,0XF8,0X3E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X78,0XF7,
|
||||
0XC3,0XE0,0XF8,0X7E,0X3F,0XF8,0XFC,0XFF,0XE7,0XC1,0XF0,0XFF,0XFE,0X0F,0XFF,0XC7,
|
||||
0XFF,0X1F,0X83,0XFF,0XE0,0XFF,0XFE,0X00,0X07,0XF0,0X3F,0X0F,0XC3,0XFF,0XF0,0XFF,
|
||||
0XFE,0X1F,0X87,0XFF,0XF1,0XF8,0X3E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,
|
||||
0X7C,0XF7,0XC3,0XE0,0XF8,0X7E,0X3F,0XF8,0XFC,0XFF,0XE7,0XC1,0XF0,0XFF,0XFE,0X1F,
|
||||
0XFF,0XC7,0XFF,0X1F,0X87,0XFF,0XF0,0XFF,0XFE,0X00,0X07,0XF0,0X3F,0X8F,0XC3,0XE3,
|
||||
0XF0,0XFF,0XFE,0X1F,0X87,0XFF,0XF0,0XF8,0X7E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X1F,0X3D,0XE7,0XC3,0XE0,0XF8,0X7E,0X0F,0XC0,0XFC,0X3F,0X07,0XC1,0XF0,0XFF,
|
||||
0XFE,0X1F,0X87,0XE1,0XF8,0X1F,0X87,0XE3,0XF0,0XFF,0XFE,0X00,0X07,0XF0,0X3F,0X8F,
|
||||
0XC3,0XE1,0X80,0XFC,0X7F,0X1F,0X87,0XC1,0XF0,0XFC,0X7C,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X1F,0X3D,0XE7,0XC3,0XE0,0XF8,0X7E,0X0F,0XC0,0XFC,0X3F,0X07,0XC1,
|
||||
0XF0,0XFC,0X7E,0X3F,0X07,0X01,0XF8,0X1F,0X8F,0XC1,0XF8,0XFC,0X7E,0X00,0X07,0XF0,
|
||||
0X3F,0X8F,0XC3,0XFC,0X00,0XFC,0X3F,0X1F,0X80,0X07,0XF0,0X7C,0X7C,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X1F,0X3F,0XE7,0XC3,0XE0,0XF8,0X7E,0X0F,0XC0,0XFC,0X3F,
|
||||
0X07,0XC1,0XF0,0XFC,0X3E,0X3F,0X00,0X01,0XF8,0X1F,0X8F,0XC1,0XF8,0XFC,0X3E,0X00,
|
||||
0X07,0XF0,0X3F,0X0F,0XC3,0XFF,0XE0,0XF8,0X3F,0X1F,0X80,0X7F,0XF0,0X7C,0XF8,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X3F,0XE7,0XC3,0XE0,0XF8,0X7E,0X0F,0XC0,
|
||||
0XFC,0X3F,0X07,0XC1,0XF0,0XF8,0X3E,0X3F,0X00,0X01,0XF8,0X1F,0X8F,0XC1,0XF8,0XF8,
|
||||
0X3E,0X00,0X07,0XF0,0X3F,0X0F,0XC1,0XFF,0XF0,0XF8,0X3F,0X1F,0X83,0XFF,0XF0,0X7C,
|
||||
0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X1F,0XC7,0XC3,0XE1,0XF8,0X7E,
|
||||
0X0F,0XC0,0XFC,0X3F,0X07,0XC3,0XF0,0XF8,0X3E,0X3F,0X00,0X01,0XF8,0X1F,0X8F,0XC1,
|
||||
0XF8,0XF8,0X3E,0X00,0X07,0XF0,0X3F,0X0F,0XC0,0X7F,0XF8,0XF8,0X3F,0X1F,0X87,0XF1,
|
||||
0XF0,0X3E,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X1F,0XC7,0XC3,0XF1,
|
||||
0XF8,0X7E,0X0F,0XC0,0XFC,0X3F,0X07,0XE3,0XF0,0XF8,0X3E,0X3F,0X03,0X01,0XF8,0X1F,
|
||||
0X8F,0XC1,0XF8,0XF8,0X3E,0X00,0X07,0XF0,0X7F,0X0F,0XC0,0X03,0XF8,0XFC,0X3F,0X1F,
|
||||
0X8F,0XC1,0XF0,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X1F,0XC7,
|
||||
0XC3,0XFF,0XF8,0X7E,0X0F,0XC0,0XFC,0X3F,0X07,0XFF,0XF0,0XF8,0X3E,0X1F,0X87,0XE1,
|
||||
0XF8,0X1F,0X87,0XE3,0XF0,0XF8,0X3E,0X00,0X07,0XFF,0XFE,0X0F,0XC0,0XE0,0XF8,0XFC,
|
||||
0X7F,0X1F,0X8F,0XC3,0XF0,0X1F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,
|
||||
0X1F,0XC7,0XC3,0XFF,0XF8,0X7E,0X0F,0XF8,0XFC,0X3F,0X07,0XFF,0XF0,0XF8,0X3E,0X1F,
|
||||
0XFF,0XC1,0XFF,0X1F,0X87,0XFF,0XF0,0XF8,0X3E,0X00,0X07,0XFF,0XFE,0X0F,0XC7,0XE1,
|
||||
0XF8,0XFF,0XFE,0X1F,0X8F,0XFF,0XF0,0X1F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X1F,0X0F,0X87,0XC3,0XFF,0XF8,0X7E,0X0F,0XF8,0XFC,0X3F,0X07,0XFF,0XF0,0XF8,
|
||||
0X3E,0X0F,0XFF,0XC1,0XFF,0X1F,0X83,0XFF,0XE0,0XF8,0X3E,0X00,0X07,0XFF,0XFC,0X0F,
|
||||
0XC3,0XFF,0XF0,0XFF,0XFE,0X1F,0X8F,0XFF,0XF0,0X1F,0XE0,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X1F,0X0F,0X87,0XC1,0XFE,0XF8,0X7E,0X07,0XF8,0XFC,0X3F,0X03,0XFD,
|
||||
0XF0,0XF8,0X3E,0X07,0XFF,0X80,0XFF,0X1F,0X81,0XFF,0XC0,0XF8,0X3E,0X00,0X07,0XFF,
|
||||
0XF8,0X0F,0XC3,0XFF,0XE0,0XFF,0XFC,0X1F,0X87,0XFD,0XF0,0X0F,0XE0,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X1F,0X0F,0X87,0XC0,0XF8,0XF8,0X7E,0X03,0XF8,0XFC,0X3F,
|
||||
0X01,0XF1,0XF0,0XF8,0X3E,0X01,0XFE,0X00,0X7F,0X1F,0X80,0X7F,0X00,0XF8,0X3E,0X00,
|
||||
0X07,0XFF,0XC0,0X0F,0XC0,0X7F,0X80,0XF9,0XF0,0X1F,0X81,0XF0,0XF8,0X0F,0XC0,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF8,0X00,0X00,0X00,0X00,0X00,0X0F,
|
||||
0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF8,0X00,0X00,0X00,0X00,
|
||||
0X00,0X0F,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF8,0X00,0X00,
|
||||
0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF8,
|
||||
0X00,0X00,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0XF8,0X00,0X00,0X00,0X00,0X01,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0XF8,0X00,0X00,0X00,0X00,0X00,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XF8,0X01,0XFF,0XFC,0X03,0XFF,0XF0,0X00,0XFC,
|
||||
0X00,0X3F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFE,0X01,0XFF,0XFF,0X03,0XFF,0XFC,
|
||||
0X03,0XFF,0X00,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X81,0XFF,0XFF,0X83,
|
||||
0XFF,0XFE,0X07,0XFF,0X81,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XC1,0XFF,
|
||||
0XFF,0X83,0XFF,0XFE,0X0F,0XFF,0XC3,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,
|
||||
0XC1,0XFF,0XFF,0XC3,0XFF,0XFE,0X1F,0X8F,0XC3,0XF1,0XF8,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
|
||||
0XFE,0X1F,0XE1,0XFC,0X1F,0XC3,0XF0,0X7F,0X1F,0X87,0X83,0XE0,0XF8,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X01,0XFC,0X0F,0XE1,0XFC,0X1F,0X83,0XF0,0X3F,0X1F,0X00,0X07,0XE0,0XF8,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X01,0XF8,0X07,0XE1,0XFC,0X1F,0X83,0XF0,0X3F,0X3F,0X3E,0X07,0XE0,
|
||||
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X03,0XF8,0X07,0XF1,0XFF,0XFF,0X03,0XF0,0X7F,0X3F,0X7F,
|
||||
0X87,0XE0,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XF8,0X07,0XF1,0XFF,0XFE,0X03,0XFF,0XFE,
|
||||
0X3F,0XFF,0XC7,0XE0,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XF8,0X07,0XF1,0XFF,0XFF,0X03,
|
||||
0XFF,0XFE,0X3F,0XFF,0XC7,0XE0,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XF8,0X07,0XF1,0XFF,
|
||||
0XFF,0X83,0XFF,0XFC,0X3F,0X87,0XE7,0XE0,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XF8,0X07,
|
||||
0XF1,0XFF,0XFF,0XC3,0XFF,0XF8,0X3F,0X07,0XE7,0XE0,0XFC,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
|
||||
0XF8,0X07,0XE1,0XFC,0X0F,0XC3,0XFF,0XE0,0X3F,0X03,0XE7,0XE0,0XFC,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X01,0XFC,0X0F,0XE1,0XFC,0X0F,0XE3,0XF0,0X00,0X1F,0X03,0XE3,0XE0,0XFC,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X01,0XFE,0X1F,0XE1,0XFC,0X0F,0XE3,0XF0,0X00,0X1F,0X07,0XE3,0XE0,
|
||||
0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XC1,0XFF,0XFF,0XC3,0XF0,0X00,0X1F,0X87,
|
||||
0XE3,0XF1,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XC1,0XFF,0XFF,0XC3,0XF0,0X00,
|
||||
0X0F,0XFF,0XC1,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X81,0XFF,0XFF,0X83,
|
||||
0XF0,0X00,0X07,0XFF,0X81,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFE,0X01,0XFF,
|
||||
0XFF,0X83,0XF0,0X00,0X03,0XFF,0X00,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XF8,
|
||||
0X01,0XFF,0XFC,0X03,0XF0,0X00,0X00,0XFC,0X00,0X3F,0X80,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X40,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X07,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC0,0X07,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XC0,0X07,
|
||||
0XFF,0XFC,0X07,0XFF,0X00,0X07,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,
|
||||
0XC0,0X07,0XFF,0XE0,0X00,0XFF,0X00,0X00,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X0F,0XC0,0X07,0XFF,0XC0,0X00,0X7F,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X1F,0XC0,0X07,0XFF,0X80,0X00,0X3F,0X00,0X00,0X3F,0XF0,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X1F,0XC0,0X07,0XFF,0X00,0X00,0X1F,0X00,0X00,0X1F,0XF0,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XC0,0X07,0XFE,0X00,0XC0,0X0F,0X01,0XE0,
|
||||
0X1F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XC0,0X07,0XFE,0X03,0XF0,0X0F,
|
||||
0X01,0XF0,0X1F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XC0,0X07,0XFC,0X03,
|
||||
0XF8,0X0F,0X01,0XF0,0X1F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XC0,0X07,
|
||||
0XFC,0X07,0XF8,0X07,0X01,0XF0,0X1F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,
|
||||
0XC0,0X07,0XFC,0X07,0XFC,0X07,0X01,0XE0,0X1F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X03,0XFF,0XC0,0X07,0XFC,0X07,0XFC,0X07,0X00,0X00,0X3F,0XF0,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X03,0XFF,0XC0,0X07,0XFC,0X07,0XFC,0X07,0X00,0X00,0X3F,0XF0,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X07,0XFF,0XC0,0X07,0XFC,0X07,0XFC,0X07,0X00,0X00,0X7F,0XF0,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XC0,0X07,0XFC,0X07,0XFC,0X07,0X00,0X00,
|
||||
0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XC0,0X07,0XFC,0X07,0XF8,0X07,
|
||||
0X01,0XDF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XC0,0X07,0XFC,0X07,
|
||||
0XF8,0X0F,0X01,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XC0,0X07,
|
||||
0XFE,0X03,0XF8,0X0F,0X01,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,
|
||||
0XC0,0X07,0XFE,0X00,0XE0,0X0F,0X01,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X7F,0XFF,0XC0,0X07,0XFF,0X00,0X00,0X1F,0X01,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0XFF,0XFF,0XC0,0X07,0XFF,0X00,0X00,0X3F,0X01,0XFF,0XFF,0XF0,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X01,0XFF,0XFF,0XC0,0X07,0XFF,0X80,0X00,0X7F,0X01,0XFF,0XFF,0XF0,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XC0,0X07,0XFF,0XE0,0X00,0XFF,0X01,0XFF,
|
||||
0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XC0,0X07,0XFF,0XF8,0X03,0XFF,
|
||||
0X01,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XC0,0X07,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XC0,0X07,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,
|
||||
0XC0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,
|
||||
0XFF,0XFF,0XC0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X3F,0XFF,0XFF,0XC0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XC0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XC0,0X07,0XFE,0X00,0X00,0X78,
|
||||
0X0F,0XF0,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XC0,0X07,0XFE,0X00,
|
||||
0X00,0X78,0X07,0XF0,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XC0,0X07,
|
||||
0XFE,0X00,0X00,0X78,0X07,0XF0,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,
|
||||
0XC0,0X07,0XFE,0X00,0X00,0X78,0X03,0XF0,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,
|
||||
0XFF,0XFF,0XC0,0X07,0XFE,0X00,0X00,0X78,0X01,0XF0,0X3F,0XF0,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X07,0XFF,0XFF,0XFF,0XC0,0X07,0XFE,0X03,0XFF,0XF8,0X01,0XF0,0X3F,0XF0,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XC0,0X07,0XFE,0X03,0XFF,0XF8,0X00,0XF0,0X3F,0XF0,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XC0,0X07,0XFE,0X03,0XFF,0XF8,0X00,0X70,
|
||||
0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XC0,0X07,0XFE,0X00,0X00,0XF8,
|
||||
0X00,0X70,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XC0,0X07,0XFE,0X00,
|
||||
0X00,0XF8,0X00,0X30,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0X07,
|
||||
0XFE,0X00,0X00,0XF8,0X00,0X10,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,
|
||||
0XC0,0X07,0XFE,0X00,0X00,0XF8,0X00,0X10,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,
|
||||
0XFF,0XFF,0XC0,0X07,0XFE,0X00,0X00,0XF8,0X08,0X00,0X3F,0XF0,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
|
||||
0XFF,0XFF,0XFF,0XFF,0XC0,0X07,0XFE,0X03,0XFF,0XF8,0X0C,0X00,0X3F,0XF0,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XC0,0X07,0XFE,0X03,0XFF,0XF8,0X0E,0X00,0X3F,0XF0,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XC0,0X07,0XFE,0X03,0XFF,0XF8,0X0E,0X00,
|
||||
0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XC0,0X07,0XFE,0X03,0XFF,0XF8,
|
||||
0X0F,0X00,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XC0,0X07,0XFE,0X00,
|
||||
0X00,0X78,0X0F,0X80,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XC0,0X07,
|
||||
0XFE,0X00,0X00,0X78,0X0F,0X80,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,
|
||||
0XC0,0X07,0XFE,0X00,0X00,0X78,0X0F,0XC0,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
|
||||
0XFF,0XFF,0XC0,0X07,0XFE,0X00,0X00,0X78,0X0F,0XE0,0X3F,0XF0,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,
|
||||
0XFF,0XFF,0XFF,0XFF,0XC0,0X07,0XFE,0X00,0X00,0X78,0X0F,0XE0,0X3F,0XF0,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XC0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X07,0XFF,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X07,0XFF,0XFF,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X07,
|
||||
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,
|
||||
0XC0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,
|
||||
0XFF,0XFF,0XC0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XF8,0X00,0X00,0X00,0X20,0X0F,0XE0,
|
||||
0X00,0X00,0X38,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFC,0X00,0X00,0X00,0X60,
|
||||
0X0F,0XF8,0X00,0X00,0X38,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFE,0X00,0X00,
|
||||
0X00,0XE0,0X0F,0XF8,0X00,0X00,0X00,0X00,0X00,0X03,0X80,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0X0E,
|
||||
0X06,0X00,0XC0,0XE0,0X0E,0X3C,0X08,0X38,0X00,0X18,0X03,0X03,0X81,0XC0,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X07,0X1E,0X1F,0X87,0XFB,0XF8,0X0E,0X3C,0XDC,0XFE,0X38,0X7F,0X0F,0XE7,0XE7,0XF0,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X07,0XFC,0X3F,0XCF,0X3B,0XF8,0X0F,0XF8,0XF9,0XFF,0X38,0XE7,0X1F,0XE7,
|
||||
0XE6,0X38,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X07,0XFE,0X78,0XE0,0X38,0XE0,0X0F,0XF8,0XE1,0XC7,0X39,0XE3,
|
||||
0XBC,0X03,0X87,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X07,0X0E,0X70,0XE3,0XF8,0XE0,0X0F,0XE0,0XE1,0XC7,
|
||||
0X39,0XFF,0XB8,0X03,0X87,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0X0F,0X70,0XEF,0X38,0XE0,0X0E,0X00,
|
||||
0XE1,0XC7,0X39,0XFF,0XB8,0X03,0X81,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0X1E,0X39,0XEE,0X38,0XE0,
|
||||
0X0E,0X00,0XE1,0XC7,0X38,0XE0,0X3C,0XF3,0X80,0X38,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFE,0X3F,0XCF,
|
||||
0XF8,0XF0,0X0E,0X00,0XE0,0XFF,0X38,0XFF,0X1F,0XE3,0XEF,0X78,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFC,
|
||||
0X1F,0X87,0XD8,0XF8,0X0E,0X00,0XE0,0X7C,0X38,0X7E,0X0F,0XC1,0XE7,0XF0,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X38,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X78,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF8,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
|
||||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,};
|
|
@ -1,407 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include <Arduino.h>
|
||||
#define FASTLED_ALL_PINS_HARDWARE_SPI
|
||||
#define FASTLED_ESP32_SPI_BUS FSPI
|
||||
#define FASTLED_ESP32_FLASH_LOCK 1
|
||||
#include <PCF8574.h> // Driver for PCF8574 output modul from Horter
|
||||
#include <Wire.h> // I2C
|
||||
#include <RTClib.h> // Driver for DS1388 RTC
|
||||
#include "SunRise.h" // Lib for sunrise and sunset calculation
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Hardware.h"
|
||||
#include "OBP60Extensions.h"
|
||||
|
||||
// Character sets
|
||||
#include "Ubuntu_Bold8pt7b.h"
|
||||
#include "Ubuntu_Bold12pt7b.h"
|
||||
#include "Ubuntu_Bold16pt7b.h"
|
||||
#include "Ubuntu_Bold20pt7b.h"
|
||||
#include "Ubuntu_Bold32pt7b.h"
|
||||
#include "DSEG7Classic-BoldItalic16pt7b.h"
|
||||
#include "DSEG7Classic-BoldItalic20pt7b.h"
|
||||
#include "DSEG7Classic-BoldItalic30pt7b.h"
|
||||
#include "DSEG7Classic-BoldItalic42pt7b.h"
|
||||
#include "DSEG7Classic-BoldItalic60pt7b.h"
|
||||
|
||||
// E-Ink Display
|
||||
#define GxEPD_WIDTH 400 // Display width
|
||||
#define GxEPD_HEIGHT 300 // Display height
|
||||
|
||||
#ifdef DISPLAY_GDEW042T2
|
||||
// Set display type and SPI pins for display
|
||||
GxEPD2_BW<GxEPD2_420, GxEPD2_420::HEIGHT> display(GxEPD2_420(OBP_SPI_CS, OBP_SPI_DC, OBP_SPI_RST, OBP_SPI_BUSY)); // GDEW042T2 400x300, UC8176 (IL0398)
|
||||
// Export display in new funktion
|
||||
GxEPD2_BW<GxEPD2_420, GxEPD2_420::HEIGHT> & getdisplay(){return display;}
|
||||
#endif
|
||||
|
||||
#ifdef DISPLAY_GDEY042T81
|
||||
// Set display type and SPI pins for display
|
||||
GxEPD2_BW<GxEPD2_420_GDEY042T81, GxEPD2_420_GDEY042T81::HEIGHT> display(GxEPD2_420_GDEY042T81(OBP_SPI_CS, OBP_SPI_DC, OBP_SPI_RST, OBP_SPI_BUSY)); // GDEW042T2 400x300, UC8176 (IL0398)
|
||||
// Export display in new funktion
|
||||
GxEPD2_BW<GxEPD2_420_GDEY042T81, GxEPD2_420_GDEY042T81::HEIGHT> & getdisplay(){return display;}
|
||||
#endif
|
||||
|
||||
#ifdef DISPLAY_GYE042A87
|
||||
// Set display type and SPI pins for display
|
||||
GxEPD2_BW<GxEPD2_420_GYE042A87, GxEPD2_420_GYE042A87::HEIGHT> display(GxEPD2_420_GYE042A87(OBP_SPI_CS, OBP_SPI_DC, OBP_SPI_RST, OBP_SPI_BUSY)); // GDEW042T2 400x300, UC8176 (IL0398)
|
||||
// Export display in new funktion
|
||||
GxEPD2_BW<GxEPD2_420_GYE042A87, GxEPD2_420_GYE042A87::HEIGHT> & getdisplay(){return display;}
|
||||
#endif
|
||||
|
||||
#ifdef DISPLAY_SE0420NQ04
|
||||
// Set display type and SPI pins for display
|
||||
GxEPD2_BW<GxEPD2_420_SE0420NQ04, GxEPD2_420_SE0420NQ04::HEIGHT> display(GxEPD2_420_SE0420NQ04(OBP_SPI_CS, OBP_SPI_DC, OBP_SPI_RST, OBP_SPI_BUSY)); // GDEW042T2 400x300, UC8176 (IL0398)
|
||||
// Export display in new funktion
|
||||
GxEPD2_BW<GxEPD2_420_SE0420NQ04, GxEPD2_420_SE0420NQ04::HEIGHT> & getdisplay(){return display;}
|
||||
#endif
|
||||
|
||||
// Horter I2C moduls
|
||||
PCF8574 pcf8574_Out(PCF8574_I2C_ADDR1); // First digital output modul PCF8574 from Horter
|
||||
|
||||
// Global vars
|
||||
bool blinkingLED = false; // Enable / disable blinking flash LED
|
||||
bool statusLED = false; // Actual status of flash LED on/off
|
||||
bool statusBacklightLED = false;// Actual status of flash LED on/off
|
||||
|
||||
int uvDuration = 0; // Under voltage duration in n x 100ms
|
||||
|
||||
LedTaskData *ledTaskData=nullptr;
|
||||
|
||||
void hardwareInit()
|
||||
{
|
||||
// Init power rail 5.0V
|
||||
setPortPin(OBP_POWER_50, true);
|
||||
Wire.begin();
|
||||
// Init PCF8574 digital outputs
|
||||
Wire.setClock(I2C_SPEED); // Set I2C clock on 10 kHz
|
||||
if(pcf8574_Out.begin()){ // Initialize PCF8574
|
||||
pcf8574_Out.write8(255); // Clear all outputs
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void startLedTask(GwApi *api){
|
||||
ledTaskData=new LedTaskData(api);
|
||||
createSpiLedTask(ledTaskData);
|
||||
}
|
||||
|
||||
void setPortPin(uint pin, bool value){
|
||||
pinMode(pin, OUTPUT);
|
||||
digitalWrite(pin, value);
|
||||
}
|
||||
|
||||
void togglePortPin(uint pin){
|
||||
pinMode(pin, OUTPUT);
|
||||
digitalWrite(pin, !digitalRead(pin));
|
||||
}
|
||||
|
||||
// Valid colors see hue
|
||||
Color colorMapping(const String &colorString){
|
||||
Color color=COLOR_RED;
|
||||
if(colorString == "Orange"){color = Color(255,153,0);}
|
||||
if(colorString == "Yellow"){color = Color(255,255,0);}
|
||||
if(colorString == "Green"){color = COLOR_GREEN;}
|
||||
if(colorString == "Blue"){color = COLOR_BLUE;}
|
||||
if(colorString == "Aqua"){color = Color(51,102,255);}
|
||||
if(colorString == "Violet"){color = Color(255,0,102);}
|
||||
if(colorString == "White"){color = COLOR_WHITE;}
|
||||
return color;
|
||||
}
|
||||
|
||||
// All defined colors see pixeltypes.h in FastLED lib
|
||||
void setBacklightLED(uint brightness, const Color &color){
|
||||
if (ledTaskData == nullptr) return;
|
||||
Color nv=setBrightness(color,brightness);
|
||||
LedInterface current=ledTaskData->getLedData();
|
||||
current.setBacklight(nv);
|
||||
ledTaskData->setLedData(current);
|
||||
}
|
||||
|
||||
void toggleBacklightLED(uint brightness, const Color &color){
|
||||
if (ledTaskData == nullptr) return;
|
||||
statusBacklightLED = !statusBacklightLED;
|
||||
Color nv=setBrightness(statusBacklightLED?color:COLOR_BLACK,brightness);
|
||||
LedInterface current=ledTaskData->getLedData();
|
||||
current.setBacklight(nv);
|
||||
ledTaskData->setLedData(current);
|
||||
}
|
||||
|
||||
void setFlashLED(bool status){
|
||||
if (ledTaskData == nullptr) return;
|
||||
Color c=status?COLOR_RED:COLOR_BLACK;
|
||||
LedInterface current=ledTaskData->getLedData();
|
||||
current.setFlash(c);
|
||||
ledTaskData->setLedData(current);
|
||||
}
|
||||
|
||||
void blinkingFlashLED(){
|
||||
if(blinkingLED == true){
|
||||
statusLED = !statusLED; // Toggle LED for each run
|
||||
setFlashLED(statusLED);
|
||||
}
|
||||
}
|
||||
|
||||
void setBlinkingLED(bool status){
|
||||
blinkingLED = status;
|
||||
}
|
||||
|
||||
uint buzzerpower = 50;
|
||||
|
||||
void buzzer(uint frequency, uint duration){
|
||||
if(frequency > 8000){ // Max 8000Hz
|
||||
frequency = 8000;
|
||||
}
|
||||
if(buzzerpower > 100){ // Max 100%
|
||||
buzzerpower = 100;
|
||||
}
|
||||
if(duration > 1000){ // Max 1000ms
|
||||
duration = 1000;
|
||||
}
|
||||
|
||||
// Using LED PWM function for sound generation
|
||||
pinMode(OBP_BUZZER, OUTPUT);
|
||||
ledcSetup(0, frequency, 8); // Ch 0, ferquency in Hz, 8 Bit resolution of PWM
|
||||
ledcAttachPin(OBP_BUZZER, 0);
|
||||
ledcWrite(0, uint(buzzerpower * 1.28)); // 50% duty cycle are 100%
|
||||
delay(duration);
|
||||
ledcWrite(0, 0); // 0% duty cycle are 0%
|
||||
}
|
||||
|
||||
void setBuzzerPower(uint power){
|
||||
buzzerpower = power;
|
||||
}
|
||||
|
||||
// Delete xdr prefix from string
|
||||
String xdrDelete(String input){
|
||||
if(input.substring(0,3) == "xdr"){
|
||||
input = input.substring(3, input.length());
|
||||
}
|
||||
return input;
|
||||
}
|
||||
|
||||
// Show a triangle for trend direction high (x, y is the left edge)
|
||||
void displayTrendHigh(int16_t x, int16_t y, uint16_t size, uint16_t color){
|
||||
getdisplay().fillTriangle(x, y, x+size*2, y, x+size, y-size*2, color);
|
||||
}
|
||||
|
||||
// Show a triangle for trend direction low (x, y is the left edge)
|
||||
void displayTrendLow(int16_t x, int16_t y, uint16_t size, uint16_t color){
|
||||
getdisplay().fillTriangle(x, y, x+size*2, y, x+size, y+size*2, color);
|
||||
}
|
||||
|
||||
// Show header informations
|
||||
void displayHeader(CommonData &commonData, GwApi::BoatValue *date, GwApi::BoatValue *time, GwApi::BoatValue *hdop){
|
||||
|
||||
static bool heartbeat = false;
|
||||
static unsigned long usbRxOld = 0;
|
||||
static unsigned long usbTxOld = 0;
|
||||
static unsigned long serRxOld = 0;
|
||||
static unsigned long serTxOld = 0;
|
||||
static unsigned long tcpSerRxOld = 0;
|
||||
static unsigned long tcpSerTxOld = 0;
|
||||
static unsigned long tcpClRxOld = 0;
|
||||
static unsigned long tcpClTxOld = 0;
|
||||
static unsigned long n2kRxOld = 0;
|
||||
static unsigned long n2kTxOld = 0;
|
||||
int textcolor = GxEPD_BLACK;
|
||||
|
||||
if(commonData.config->getBool(commonData.config->statusLine) == true){
|
||||
|
||||
if(commonData.config->getString(commonData.config->displaycolor) == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
}
|
||||
|
||||
// Show status info
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(0, 15);
|
||||
if(commonData.status.wifiApOn){
|
||||
getdisplay().print(" AP ");
|
||||
}
|
||||
// If receive new telegram data then display bus name
|
||||
if(commonData.status.tcpClRx != tcpClRxOld || commonData.status.tcpClTx != tcpClTxOld || commonData.status.tcpSerRx != tcpSerRxOld || commonData.status.tcpSerTx != tcpSerTxOld){
|
||||
getdisplay().print("TCP ");
|
||||
}
|
||||
if(commonData.status.n2kRx != n2kRxOld || commonData.status.n2kTx != n2kTxOld){
|
||||
getdisplay().print("N2K ");
|
||||
}
|
||||
if(commonData.status.serRx != serRxOld || commonData.status.serTx != serTxOld){
|
||||
getdisplay().print("183 ");
|
||||
}
|
||||
if(commonData.status.usbRx != usbRxOld || commonData.status.usbTx != usbTxOld){
|
||||
getdisplay().print("USB ");
|
||||
}
|
||||
double gpshdop = formatValue(hdop, commonData).value;
|
||||
if(commonData.config->getString(commonData.config->useGPS) != "off" && gpshdop > 0.3){
|
||||
getdisplay().print("GPS");
|
||||
}
|
||||
// Save old telegram counter
|
||||
tcpClRxOld = commonData.status.tcpClRx;
|
||||
tcpClTxOld = commonData.status.tcpClTx;
|
||||
tcpSerRxOld = commonData.status.tcpSerRx;
|
||||
tcpSerTxOld = commonData.status.tcpSerTx;
|
||||
n2kRxOld = commonData.status.n2kRx;
|
||||
n2kTxOld = commonData.status.n2kTx;
|
||||
serRxOld = commonData.status.serRx;
|
||||
serTxOld = commonData.status.serTx;
|
||||
usbRxOld = commonData.status.usbRx;
|
||||
usbTxOld = commonData.status.usbTx;
|
||||
|
||||
// Heartbeat as dot
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold32pt7b);
|
||||
getdisplay().setCursor(205, 14);
|
||||
if(heartbeat == true){
|
||||
getdisplay().print(".");
|
||||
}
|
||||
else{
|
||||
getdisplay().print(" ");
|
||||
}
|
||||
heartbeat = !heartbeat;
|
||||
|
||||
// Date and time
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(230, 15);
|
||||
if(date->valid == true){
|
||||
String acttime = formatValue(time, commonData).svalue;
|
||||
acttime = acttime.substring(0, 5);
|
||||
String actdate = formatValue(date, commonData).svalue;
|
||||
getdisplay().print(acttime);
|
||||
getdisplay().print(" ");
|
||||
getdisplay().print(actdate);
|
||||
getdisplay().print(" ");
|
||||
if(commonData.config->getInt(commonData.config->timeZone) == 0){
|
||||
getdisplay().print("UTC");
|
||||
}
|
||||
else{
|
||||
getdisplay().print("LOT");
|
||||
}
|
||||
}
|
||||
else{
|
||||
if(commonData.config->getBool(commonData.config->useSimuData) == true){
|
||||
getdisplay().print("12:00 01.01.2024 LOT");
|
||||
}
|
||||
else{
|
||||
getdisplay().print("No GPS data");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sunset und sunrise calculation
|
||||
SunData calcSunsetSunrise(GwApi *api, double time, double date, double latitude, double longitude, double timezone){
|
||||
GwLog *logger=api->getLogger();
|
||||
SunData returnset;
|
||||
SunRise sr;
|
||||
int secPerHour = 3600;
|
||||
int secPerYear = 86400;
|
||||
sr.hasRise = false;
|
||||
sr.hasSet = false;
|
||||
time_t t = 0;
|
||||
time_t sunR = 0;
|
||||
time_t sunS = 0;
|
||||
|
||||
if (!isnan(time) && !isnan(date) && !isnan(latitude) && !isnan(longitude) && !isnan(timezone)) {
|
||||
|
||||
// Calculate local epoch
|
||||
t = (date * secPerYear) + time;
|
||||
// api->getLogger()->logDebug(GwLog::DEBUG,"... calcSun: Lat %f, Lon %f, at: %d ", latitude, longitude, t);
|
||||
sr.calculate(latitude, longitude, t); // LAT, LON, EPOCH
|
||||
// Sunrise
|
||||
if (sr.hasRise) {
|
||||
sunR = (sr.riseTime + int(timezone * secPerHour) + 30) % secPerYear; // add 30 seconds: round to minutes
|
||||
returnset.sunriseHour = int (sunR / secPerHour);
|
||||
returnset.sunriseMinute = int((sunR - returnset.sunriseHour * secPerHour)/60);
|
||||
}
|
||||
// Sunset
|
||||
if (sr.hasSet) {
|
||||
sunS = (sr.setTime + int(timezone * secPerHour) + 30) % secPerYear; // add 30 seconds: round to minutes
|
||||
returnset.sunsetHour = int (sunS / secPerHour);
|
||||
returnset.sunsetMinute = int((sunS - returnset.sunsetHour * secPerHour)/60);
|
||||
}
|
||||
// Sun control (return value by sun on sky = false, sun down = true)
|
||||
if ((t >= sr.riseTime) && (t <= sr.setTime))
|
||||
returnset.sunDown = false;
|
||||
else returnset.sunDown = true;
|
||||
}
|
||||
// Return values
|
||||
return returnset;
|
||||
}
|
||||
|
||||
// Battery graphic with fill level
|
||||
void batteryGraphic(uint x, uint y, float percent, int pcolor, int bcolor){
|
||||
// Show battery
|
||||
int xb = x; // X position
|
||||
int yb = y; // Y position
|
||||
int t = 4; // Line thickness
|
||||
// Percent limits
|
||||
if(percent < 0){
|
||||
percent = 0;
|
||||
}
|
||||
if(percent > 99){
|
||||
percent = 99;
|
||||
}
|
||||
// Battery corpus 100x80 with fill level
|
||||
int level = int((100.0 - percent) * (80-(2*t)) / 100.0);
|
||||
getdisplay().fillRect(xb, yb, 100, 80, pcolor);
|
||||
if(percent < 99){
|
||||
getdisplay().fillRect(xb+t, yb+t, 100-(2*t), level, bcolor);
|
||||
}
|
||||
// Plus pol 20x15
|
||||
int xp = xb + 20;
|
||||
int yp = yb - 15 + t;
|
||||
getdisplay().fillRect(xp, yp, 20, 15, pcolor);
|
||||
getdisplay().fillRect(xp+t, yp+t, 20-(2*t), 15-(2*t), bcolor);
|
||||
// Minus pol 20x15
|
||||
int xm = xb + 60;
|
||||
int ym = yb -15 + t;
|
||||
getdisplay().fillRect(xm, ym, 20, 15, pcolor);
|
||||
getdisplay().fillRect(xm+t, ym+t, 20-(2*t), 15-(2*t), bcolor);
|
||||
}
|
||||
|
||||
// Solar graphic with fill level
|
||||
void solarGraphic(uint x, uint y, int pcolor, int bcolor){
|
||||
// Show solar modul
|
||||
int xb = x; // X position
|
||||
int yb = y; // Y position
|
||||
int t = 4; // Line thickness
|
||||
int percent = 0;
|
||||
// Solar corpus 100x80
|
||||
int level = int((100.0 - percent) * (80-(2*t)) / 100.0);
|
||||
getdisplay().fillRect(xb, yb, 100, 80, pcolor);
|
||||
if(percent < 99){
|
||||
getdisplay().fillRect(xb+t, yb+t, 100-(2*t), level, bcolor);
|
||||
}
|
||||
// Draw horizontel lines
|
||||
getdisplay().fillRect(xb, yb+28-t, 100, t, pcolor);
|
||||
getdisplay().fillRect(xb, yb+54-t, 100, t, pcolor);
|
||||
// Draw vertical lines
|
||||
getdisplay().fillRect(xb+19+t, yb, t, 80, pcolor);
|
||||
getdisplay().fillRect(xb+39+2*t, yb, t, 80, pcolor);
|
||||
getdisplay().fillRect(xb+59+3*t, yb, t, 80, pcolor);
|
||||
|
||||
}
|
||||
|
||||
// Generator graphic with fill level
|
||||
void generatorGraphic(uint x, uint y, int pcolor, int bcolor){
|
||||
// Show battery
|
||||
int xb = x; // X position
|
||||
int yb = y; // Y position
|
||||
int t = 4; // Line thickness
|
||||
|
||||
// Generator corpus with radius 45
|
||||
getdisplay().fillCircle(xb, yb, 45, pcolor);
|
||||
getdisplay().fillCircle(xb, yb, 41, bcolor);
|
||||
// Insert G
|
||||
getdisplay().setTextColor(pcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold32pt7b);
|
||||
getdisplay().setCursor(xb-22, yb+20);
|
||||
getdisplay().print("G");
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,72 +0,0 @@
|
|||
#ifndef _OBP60EXTENSIONPORT_H
|
||||
#define _OBP60EXTENSIONPORT_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "OBP60Hardware.h"
|
||||
#define FASTLED_ALL_PINS_HARDWARE_SPI
|
||||
#define FASTLED_ESP32_SPI_BUS FSPI
|
||||
#define FASTLED_ESP32_FLASH_LOCK 1
|
||||
#include "LedSpiTask.h"
|
||||
#include <GxEPD2_BW.h> // E-paper lib V2
|
||||
|
||||
// Fonts declarations for display (#inclues see OBP60Extensions.cpp)
|
||||
extern const GFXfont Ubuntu_Bold8pt7b;
|
||||
extern const GFXfont Ubuntu_Bold12pt7b;
|
||||
extern const GFXfont Ubuntu_Bold16pt7b;
|
||||
extern const GFXfont Ubuntu_Bold20pt7b;
|
||||
extern const GFXfont Ubuntu_Bold32pt7b;
|
||||
extern const GFXfont DSEG7Classic_BoldItalic16pt7b;
|
||||
extern const GFXfont DSEG7Classic_BoldItalic20pt7b;
|
||||
extern const GFXfont DSEG7Classic_BoldItalic30pt7b;
|
||||
extern const GFXfont DSEG7Classic_BoldItalic42pt7b;
|
||||
extern const GFXfont DSEG7Classic_BoldItalic60pt7b;
|
||||
|
||||
// Gloabl functions
|
||||
#ifdef DISPLAY_GDEW042T2
|
||||
GxEPD2_BW<GxEPD2_420, GxEPD2_420::HEIGHT> & getdisplay();
|
||||
#endif
|
||||
|
||||
#ifdef DISPLAY_GDEY042T81
|
||||
GxEPD2_BW<GxEPD2_420_GDEY042T81, GxEPD2_420_GDEY042T81::HEIGHT> & getdisplay();
|
||||
#endif
|
||||
|
||||
#ifdef DISPLAY_GYE042A87
|
||||
GxEPD2_BW<GxEPD2_420_GYE042A87, GxEPD2_420_GYE042A87::HEIGHT> & getdisplay();
|
||||
#endif
|
||||
|
||||
#ifdef DISPLAY_SE0420NQ04
|
||||
GxEPD2_BW<GxEPD2_420_SE0420NQ04, GxEPD2_420_SE0420NQ04::HEIGHT> & getdisplay();
|
||||
#endif
|
||||
|
||||
void hardwareInit();
|
||||
|
||||
void setPortPin(uint pin, bool value); // Set port pin for extension port
|
||||
|
||||
void togglePortPin(uint pin); // Toggle extension port pin
|
||||
|
||||
Color colorMapping(const String &colorString); // Color mapping string to CHSV colors
|
||||
void setBacklightLED(uint brightness, const Color &color);// Set backlight LEDs
|
||||
void toggleBacklightLED(uint brightness,const Color &color);// Toggle backlight LEDs
|
||||
|
||||
void setFlashLED(bool status); // Set flash LED
|
||||
void blinkingFlashLED(); // Blinking function for flash LED
|
||||
void setBlinkingLED(bool on); // Set blinking flash LED active
|
||||
|
||||
void buzzer(uint frequency, uint duration); // Buzzer function
|
||||
void setBuzzerPower(uint power); // Set buzzer power
|
||||
|
||||
String xdrDelete(String input); // Delete xdr prefix from string
|
||||
|
||||
void displayTrendHigh(int16_t x, int16_t y, uint16_t size, uint16_t color);
|
||||
void displayTrendLow(int16_t x, int16_t y, uint16_t size, uint16_t color);
|
||||
|
||||
void displayHeader(CommonData &commonData, GwApi::BoatValue *date, GwApi::BoatValue *time, GwApi::BoatValue *hdop); // Draw display header
|
||||
|
||||
SunData calcSunsetSunrise(GwApi *api, double time, double date, double latitude, double longitude, double timezone); // Calulate sunset and sunrise
|
||||
|
||||
void batteryGraphic(uint x, uint y, float percent, int pcolor, int bcolor); // Battery graphic with fill level
|
||||
void solarGraphic(uint x, uint y, int pcolor, int bcolor); // Solar graphic with fill level
|
||||
void generatorGraphic(uint x, uint y, int pcolor, int bcolor); // Generator graphic with fill level
|
||||
void startLedTask(GwApi *api);
|
||||
|
||||
#endif
|
|
@ -1,755 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "GwApi.h"
|
||||
#include "Pagedata.h"
|
||||
|
||||
// ToDo
|
||||
// simulation data
|
||||
// hold values by missing data
|
||||
|
||||
FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){
|
||||
GwLog *logger = commondata.logger;
|
||||
FormatedData result;
|
||||
static int dayoffset = 0;
|
||||
double rawvalue = 0;
|
||||
|
||||
// Load configuration values
|
||||
String stimeZone = commondata.config->getString(commondata.config->timeZone); // [UTC -14.00...+12.00]
|
||||
double timeZone = stimeZone.toDouble();
|
||||
String lengthFormat = commondata.config->getString(commondata.config->lengthFormat); // [m|ft]
|
||||
String distanceFormat = commondata.config->getString(commondata.config->distanceFormat); // [m|km|nm]
|
||||
String speedFormat = commondata.config->getString(commondata.config->speedFormat); // [m/s|km/h|kn]
|
||||
String windspeedFormat = commondata.config->getString(commondata.config->windspeedFormat); // [m/s|km/h|kn|bft]
|
||||
String tempFormat = commondata.config->getString(commondata.config->tempFormat); // [K|°C|°F]
|
||||
String dateFormat = commondata.config->getString(commondata.config->dateFormat); // [DE|GB|US]
|
||||
bool usesimudata = commondata.config->getBool(commondata.config->useSimuData); // [on|off]
|
||||
|
||||
// If boat value not valid
|
||||
if (! value->valid && !usesimudata){
|
||||
result.svalue = "---";
|
||||
return result;
|
||||
}
|
||||
|
||||
// LOG_DEBUG(GwLog::DEBUG,"formatValue init: getFormat: %s date->value: %f time->value: %f", value->getFormat(), commondata.date->value, commondata.time->value);
|
||||
static const int bsize = 30;
|
||||
char buffer[bsize+1];
|
||||
buffer[0]=0;
|
||||
|
||||
//########################################################
|
||||
// Formats for several boat data
|
||||
//########################################################
|
||||
if (value->getFormat() == "formatDate"){
|
||||
|
||||
int dayoffset = 0;
|
||||
if (commondata.time->value + int(timeZone*3600) > 86400) {dayoffset = 1;}
|
||||
if (commondata.time->value + int(timeZone*3600) < 0) {dayoffset = -1;}
|
||||
|
||||
// LOG_DEBUG(GwLog::DEBUG,"... formatDate value->value: %f tz: %f dayoffset: %d", value->value, timeZone, dayoffset);
|
||||
|
||||
tmElements_t parts;
|
||||
time_t tv=tNMEA0183Msg::daysToTime_t(value->value + dayoffset);
|
||||
tNMEA0183Msg::breakTime(tv,parts);
|
||||
if(usesimudata == false) {
|
||||
if(String(dateFormat) == "DE"){
|
||||
snprintf(buffer,bsize,"%02d.%02d.%04d",parts.tm_mday,parts.tm_mon+1,parts.tm_year+1900);
|
||||
}
|
||||
else if(String(dateFormat) == "GB"){
|
||||
snprintf(buffer,bsize,"%02d/%02d/%04d",parts.tm_mday,parts.tm_mon+1,parts.tm_year+1900);
|
||||
}
|
||||
else if(String(dateFormat) == "US"){
|
||||
snprintf(buffer,bsize,"%02d/%02d/%04d",parts.tm_mon+1,parts.tm_mday,parts.tm_year+1900);
|
||||
}
|
||||
else{
|
||||
snprintf(buffer,bsize,"%02d.%02d.%04d",parts.tm_mday,parts.tm_mon+1,parts.tm_year+1900);
|
||||
}
|
||||
}
|
||||
else{
|
||||
snprintf(buffer,bsize,"01.01.2022");
|
||||
}
|
||||
if(timeZone == 0){
|
||||
result.unit = "UTC";
|
||||
}
|
||||
else{
|
||||
result.unit = "LOT";
|
||||
}
|
||||
}
|
||||
//########################################################
|
||||
else if(value->getFormat() == "formatTime"){
|
||||
double timeInSeconds = 0;
|
||||
double inthr = 0;
|
||||
double intmin = 0;
|
||||
double intsec = 0;
|
||||
double val = 0;
|
||||
|
||||
timeInSeconds = value->value + int(timeZone * 3600);
|
||||
if (timeInSeconds > 86400) {timeInSeconds = timeInSeconds - 86400;}
|
||||
if (timeInSeconds < 0) {timeInSeconds = timeInSeconds + 86400;}
|
||||
// LOG_DEBUG(GwLog::DEBUG,"... formatTime value: %f tz: %f corrected timeInSeconds: %f ", value->value, timeZone, timeInSeconds);
|
||||
if(usesimudata == false) {
|
||||
val=modf(timeInSeconds/3600.0,&inthr);
|
||||
val=modf(val*3600.0/60.0,&intmin);
|
||||
modf(val*60.0,&intsec);
|
||||
snprintf(buffer,bsize,"%02.0f:%02.0f:%02.0f",inthr,intmin,intsec);
|
||||
}
|
||||
else{
|
||||
static long sec;
|
||||
static long lasttime;
|
||||
if(millis() > lasttime + 990){
|
||||
sec ++;
|
||||
}
|
||||
sec = sec % 60;
|
||||
snprintf(buffer,bsize,"11:36:%02i", int(sec));
|
||||
lasttime = millis();
|
||||
}
|
||||
if(timeZone == 0){
|
||||
result.unit = "UTC";
|
||||
}
|
||||
else{
|
||||
result.unit = "LOT";
|
||||
}
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatFixed0"){
|
||||
if(usesimudata == false) {
|
||||
snprintf(buffer,bsize,"%3.0f",value->value);
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 8.0 + float(random(0, 10)) / 10.0;
|
||||
snprintf(buffer,bsize,"%3.0f", rawvalue);
|
||||
}
|
||||
result.unit = "";
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatCourse" || value->getFormat() == "formatWind"){
|
||||
double course = 0;
|
||||
if(usesimudata == false) {
|
||||
course = value->value;
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
course = 2.53 + float(random(0, 10) / 100.0);
|
||||
rawvalue = course;
|
||||
}
|
||||
course = course * 57.2958; // Unit conversion form rad to deg
|
||||
|
||||
// Format 3 numbers with prefix zero
|
||||
snprintf(buffer,bsize,"%03.0f",course);
|
||||
result.unit = "Deg";
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatKnots" && (value->getName() == "SOG" || value->getName() == "STW")){
|
||||
double speed = 0;
|
||||
if(usesimudata == false) {
|
||||
speed = value->value;
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 4.0 + float(random(0, 40));
|
||||
speed = rawvalue;
|
||||
}
|
||||
if(String(speedFormat) == "km/h"){
|
||||
speed = speed * 3.6; // Unit conversion form m/s to km/h
|
||||
result.unit = "km/h";
|
||||
}
|
||||
else if(String(speedFormat) == "kn"){
|
||||
speed = speed * 1.94384; // Unit conversion form m/s to kn
|
||||
result.unit = "kn";
|
||||
}
|
||||
else{
|
||||
speed = speed; // Unit conversion form m/s to m/s
|
||||
result.unit = "m/s";
|
||||
}
|
||||
if(speed < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",speed);
|
||||
}
|
||||
if(speed >= 10 && speed < 100){
|
||||
snprintf(buffer,bsize,"%3.1f",speed);
|
||||
}
|
||||
if(speed >= 100){
|
||||
snprintf(buffer,bsize,"%3.0f",speed);
|
||||
}
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatKnots" && (value->getName() == "AWS" || value->getName() == "TWS" || value->getName() == "MaxAws" || value->getName() == "MaxTws")){
|
||||
double speed = 0;
|
||||
if(usesimudata == false) {
|
||||
speed = value->value;
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 4.0 + float(random(0, 40));
|
||||
speed = rawvalue;
|
||||
}
|
||||
if(String(windspeedFormat) == "km/h"){
|
||||
speed = speed * 3.6; // Unit conversion form m/s to km/h
|
||||
result.unit = "km/h";
|
||||
}
|
||||
else if(String(windspeedFormat) == "kn"){
|
||||
speed = speed * 1.94384; // Unit conversion form m/s to kn
|
||||
result.unit = "kn";
|
||||
}
|
||||
else if(String(windspeedFormat) == "bft"){
|
||||
if(speed < 0.3){
|
||||
speed = 0;
|
||||
}
|
||||
if(speed >=0.3 && speed < 1.5){
|
||||
speed = 1;
|
||||
}
|
||||
if(speed >=1.5 && speed < 3.3){
|
||||
speed = 2;
|
||||
}
|
||||
if(speed >=3.3 && speed < 5.4){
|
||||
speed = 3;
|
||||
}
|
||||
if(speed >=5.4 && speed < 7.9){
|
||||
speed = 4;
|
||||
}
|
||||
if(speed >=7.9 && speed < 10.7){
|
||||
speed = 5;
|
||||
}
|
||||
if(speed >=10.7 && speed < 13.8){
|
||||
speed = 6;
|
||||
}
|
||||
if(speed >=13.8 && speed < 17.1){
|
||||
speed = 7;
|
||||
}
|
||||
if(speed >=17.1 && speed < 20.7){
|
||||
speed = 8;
|
||||
}
|
||||
if(speed >=20.7 && speed < 24.4){
|
||||
speed = 9;
|
||||
}
|
||||
if(speed >=24.4 && speed < 28.4){
|
||||
speed = 10;
|
||||
}
|
||||
if(speed >=28.4 && speed < 32.6){
|
||||
speed = 11;
|
||||
}
|
||||
if(speed >=32.6){
|
||||
speed = 12;
|
||||
}
|
||||
result.unit = "bft";
|
||||
}
|
||||
else{
|
||||
speed = speed; // Unit conversion form m/s to m/s
|
||||
result.unit = "m/s";
|
||||
}
|
||||
if(String(windspeedFormat) == "bft"){
|
||||
snprintf(buffer,bsize,"%2.0f",speed);
|
||||
}
|
||||
else{
|
||||
if(speed < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",speed);
|
||||
}
|
||||
if(speed >= 10 && speed < 100){
|
||||
snprintf(buffer,bsize,"%3.1f",speed);
|
||||
}
|
||||
if(speed >= 100){
|
||||
snprintf(buffer,bsize,"%3.0f",speed);
|
||||
}
|
||||
}
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatRot"){
|
||||
double rotation = 0;
|
||||
if(usesimudata == false) {
|
||||
rotation = value->value;
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 0.04 + float(random(0, 10)) / 100.0;
|
||||
rotation = rawvalue;
|
||||
}
|
||||
rotation = rotation * 57.2958; // Unit conversion form rad/s to deg/s
|
||||
result.unit = "Deg/s";
|
||||
if(rotation < -100){
|
||||
rotation = -99;
|
||||
}
|
||||
if(rotation > 100){
|
||||
rotation = 99;
|
||||
}
|
||||
if(rotation > -10 && rotation < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",rotation);
|
||||
}
|
||||
if(rotation <= -10 || rotation >= 10){
|
||||
snprintf(buffer,bsize,"%3.0f",rotation);
|
||||
}
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatDop"){
|
||||
double dop = 0;
|
||||
if(usesimudata == false) {
|
||||
dop = value->value;
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 2.0 + float(random(0, 40)) / 10.0;
|
||||
dop = rawvalue;
|
||||
}
|
||||
result.unit = "m";
|
||||
if(dop > 99.9){
|
||||
dop = 99.9;
|
||||
}
|
||||
if(dop < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",dop);
|
||||
}
|
||||
if(dop >= 10 && dop < 100){
|
||||
snprintf(buffer,bsize,"%3.1f",dop);
|
||||
}
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatLatitude"){
|
||||
if(usesimudata == false) {
|
||||
double lat = value->value;
|
||||
rawvalue = value->value;
|
||||
String latitude = "";
|
||||
String latdir = "";
|
||||
float degree = abs(int(lat));
|
||||
float minute = abs((lat - int(lat)) * 60);
|
||||
if(lat > 0){
|
||||
latdir = "N";
|
||||
}
|
||||
else{
|
||||
latdir = "S";
|
||||
}
|
||||
latitude = String(degree,0) + "\" " + String(minute,4) + "' " + latdir;
|
||||
result.unit = "";
|
||||
strcpy(buffer, latitude.c_str());
|
||||
}
|
||||
else{
|
||||
rawvalue = 35.0 + float(random(0, 10)) / 10000.0;
|
||||
snprintf(buffer,bsize," 51\" %2.4f' N", rawvalue);
|
||||
}
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatLongitude"){
|
||||
if(usesimudata == false) {
|
||||
double lon = value->value;
|
||||
rawvalue = value->value;
|
||||
String longitude = "";
|
||||
String londir = "";
|
||||
float degree = abs(int(lon));
|
||||
float minute = abs((lon - int(lon)) * 60);
|
||||
if(lon > 0){
|
||||
londir = "E";
|
||||
}
|
||||
else{
|
||||
londir = "W";
|
||||
}
|
||||
longitude = String(degree,0) + "\" " + String(minute,4) + "' " + londir;
|
||||
result.unit = "";
|
||||
strcpy(buffer, longitude.c_str());
|
||||
}
|
||||
else{
|
||||
rawvalue = 6.0 + float(random(0, 10)) / 100000.0;
|
||||
snprintf(buffer,bsize," 15\" %2.4f'", rawvalue);
|
||||
}
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatDepth"){
|
||||
double depth = 0;
|
||||
if(usesimudata == false) {
|
||||
depth = value->value;
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 18.0 + float(random(0, 100)) / 10.0;
|
||||
depth = rawvalue;
|
||||
}
|
||||
if(String(lengthFormat) == "ft"){
|
||||
depth = depth * 3.28084;
|
||||
result.unit = "ft";
|
||||
}
|
||||
else{
|
||||
result.unit = "m";
|
||||
}
|
||||
if(depth < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",depth);
|
||||
}
|
||||
if(depth >= 10 && depth < 100){
|
||||
snprintf(buffer,bsize,"%3.1f",depth);
|
||||
}
|
||||
if(depth >= 100){
|
||||
snprintf(buffer,bsize,"%3.0f",depth);
|
||||
}
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "kelvinToC"){
|
||||
double temp = 0;
|
||||
if(usesimudata == false) {
|
||||
temp = value->value;
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 296.0 + float(random(0, 10)) / 10.0;
|
||||
temp = rawvalue;
|
||||
}
|
||||
if(String(tempFormat) == "C"){
|
||||
temp = temp - 273.15;
|
||||
result.unit = "C";
|
||||
}
|
||||
else if(String(tempFormat) == "F"){
|
||||
temp = temp - 459.67;
|
||||
result.unit = "F";
|
||||
}
|
||||
else{
|
||||
result.unit = "K";
|
||||
}
|
||||
if(temp < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",temp);
|
||||
}
|
||||
if(temp >= 10 && temp < 100){
|
||||
snprintf(buffer,bsize,"%3.1f",temp);
|
||||
}
|
||||
if(temp >= 100){
|
||||
snprintf(buffer,bsize,"%3.0f",temp);
|
||||
}
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "mtr2nm"){
|
||||
double distance = 0;
|
||||
if(usesimudata == false) {
|
||||
distance = value->value;
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 2960.0 + float(random(0, 10));
|
||||
distance = rawvalue;
|
||||
}
|
||||
if(String(distanceFormat) == "km"){
|
||||
distance = distance * 0.001;
|
||||
result.unit = "km";
|
||||
}
|
||||
else if(String(distanceFormat) == "nm"){
|
||||
distance = distance * 0.000539957;
|
||||
result.unit = "nm";
|
||||
}
|
||||
else{;
|
||||
result.unit = "m";
|
||||
}
|
||||
if(distance < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",distance);
|
||||
}
|
||||
if(distance >= 10 && distance < 100){
|
||||
snprintf(buffer,bsize,"%3.1f",distance);
|
||||
}
|
||||
if(distance >= 100){
|
||||
snprintf(buffer,bsize,"%3.0f",distance);
|
||||
}
|
||||
}
|
||||
//########################################################
|
||||
// Special XDR formats
|
||||
// Refer XDR formats in GwXDRMappings.cpp line 40
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatXdr:P:P"){
|
||||
double pressure = 0;
|
||||
if(usesimudata == false) {
|
||||
pressure = value->value;
|
||||
rawvalue = value->value;
|
||||
pressure = pressure / 100.0; // Unit conversion form Pa to hPa
|
||||
}
|
||||
else{
|
||||
rawvalue = 968 + float(random(0, 10));
|
||||
pressure = rawvalue;
|
||||
}
|
||||
snprintf(buffer,bsize,"%4.0f",pressure);
|
||||
result.unit = "hPa";
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatXdr:P:B"){
|
||||
double pressure = 0;
|
||||
if(usesimudata == false) {
|
||||
pressure = value->value;
|
||||
rawvalue = value->value;
|
||||
pressure = pressure / 100.0; // Unit conversion form Pa to mBar
|
||||
}
|
||||
else{
|
||||
rawvalue = value->value;
|
||||
pressure = 968 + float(random(0, 10));
|
||||
}
|
||||
snprintf(buffer,bsize,"%4.0f",pressure);
|
||||
result.unit = "mBar";
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatXdr:U:V"){
|
||||
double voltage = 0;
|
||||
if(usesimudata == false) {
|
||||
voltage = value->value;
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 12 + float(random(0, 30)) / 10.0;
|
||||
voltage = rawvalue;
|
||||
}
|
||||
if(voltage < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",voltage);
|
||||
}
|
||||
else{
|
||||
snprintf(buffer,bsize,"%3.1f",voltage);
|
||||
}
|
||||
result.unit = "V";
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatXdr:I:A"){
|
||||
double current = 0;
|
||||
if(usesimudata == false) {
|
||||
current = value->value;
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 8.2 + float(random(0, 50)) / 10.0;
|
||||
current = rawvalue;
|
||||
}
|
||||
if(current < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",current);
|
||||
}
|
||||
if(current >= 10 && current < 100){
|
||||
snprintf(buffer,bsize,"%3.1f",current);
|
||||
}
|
||||
if(current >= 100){
|
||||
snprintf(buffer,bsize,"%3.0f",current);
|
||||
}
|
||||
result.unit = "A";
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatXdr:C:K"){
|
||||
double temperature = 0;
|
||||
if(usesimudata == false) {
|
||||
temperature = value->value - 273.15; // Convert K to C
|
||||
rawvalue = value->value - 273.15;
|
||||
}
|
||||
else{
|
||||
rawvalue = 21.8 + float(random(0, 50)) / 10.0;
|
||||
temperature = rawvalue;
|
||||
}
|
||||
if(temperature < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",temperature);
|
||||
}
|
||||
if(temperature >= 10 && temperature < 100){
|
||||
snprintf(buffer,bsize,"%3.1f",temperature);
|
||||
}
|
||||
if(temperature >= 100){
|
||||
snprintf(buffer,bsize,"%3.0f",temperature);
|
||||
}
|
||||
result.unit = "Deg C";
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatXdr:C:C"){
|
||||
double temperature = 0;
|
||||
if(usesimudata == false) {
|
||||
temperature = value->value; // Value in C
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 21.8 + float(random(0, 50)) / 10.0;
|
||||
temperature = rawvalue;
|
||||
}
|
||||
if(temperature < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",temperature);
|
||||
}
|
||||
if(temperature >= 10 && temperature < 100){
|
||||
snprintf(buffer,bsize,"%3.1f",temperature);
|
||||
}
|
||||
if(temperature >= 100){
|
||||
snprintf(buffer,bsize,"%3.0f",temperature);
|
||||
}
|
||||
result.unit = "Deg C";
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatXdr:H:P"){
|
||||
double humidity = 0;
|
||||
if(usesimudata == false) {
|
||||
humidity = value->value; // Value in %
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 41.3 + float(random(0, 50)) / 10.0;
|
||||
humidity = rawvalue;
|
||||
}
|
||||
if(humidity < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",humidity);
|
||||
}
|
||||
if(humidity >= 10 && humidity < 100){
|
||||
snprintf(buffer,bsize,"%3.1f",humidity);
|
||||
}
|
||||
if(humidity >= 100){
|
||||
snprintf(buffer,bsize,"%3.0f",humidity);
|
||||
}
|
||||
result.unit = "%";
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatXdr:V:P"){
|
||||
double volume = 0;
|
||||
if(usesimudata == false) {
|
||||
volume = value->value; // Value in %
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 85.8 + float(random(0, 50)) / 10.0;
|
||||
volume = rawvalue;
|
||||
}
|
||||
if(volume < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",volume);
|
||||
}
|
||||
if(volume >= 10 && volume < 100){
|
||||
snprintf(buffer,bsize,"%3.1f",volume);
|
||||
}
|
||||
if(volume >= 100){
|
||||
snprintf(buffer,bsize,"%3.0f",volume);
|
||||
}
|
||||
result.unit = "%";
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatXdr:V:M"){
|
||||
double volume = 0;
|
||||
if(usesimudata == false) {
|
||||
volume = value->value; // Value in l
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 75.2 + float(random(0, 50)) / 10.0;
|
||||
volume = rawvalue;
|
||||
}
|
||||
if(volume < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",volume);
|
||||
}
|
||||
if(volume >= 10 && volume < 100){
|
||||
snprintf(buffer,bsize,"%3.1f",volume);
|
||||
}
|
||||
if(volume >= 100){
|
||||
snprintf(buffer,bsize,"%3.0f",volume);
|
||||
}
|
||||
result.unit = "l";
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatXdr:R:I"){
|
||||
double flow = 0;
|
||||
if(usesimudata == false) {
|
||||
flow = value->value; // Value in l/min
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 7.5 + float(random(0, 20)) / 10.0;
|
||||
flow = rawvalue;
|
||||
}
|
||||
if(flow < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",flow);
|
||||
}
|
||||
if(flow >= 10 && flow < 100){
|
||||
snprintf(buffer,bsize,"%3.1f",flow);
|
||||
}
|
||||
if(flow >= 100){
|
||||
snprintf(buffer,bsize,"%3.0f",flow);
|
||||
}
|
||||
result.unit = "l/min";
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatXdr:G:"){
|
||||
double generic = 0;
|
||||
if(usesimudata == false) {
|
||||
generic = value->value; // Value in l/min
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 18.5 + float(random(0, 20)) / 10.0;
|
||||
generic = rawvalue;
|
||||
}
|
||||
if(generic < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",generic);
|
||||
}
|
||||
if(generic >= 10 && generic < 100){
|
||||
snprintf(buffer,bsize,"%3.1f",generic);
|
||||
}
|
||||
if(generic >= 100){
|
||||
snprintf(buffer,bsize,"%3.0f",generic);
|
||||
}
|
||||
result.unit = "";
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatXdr:A:P"){
|
||||
double dplace = 0;
|
||||
if(usesimudata == false) {
|
||||
dplace = value->value; // Value in %
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 55.3 + float(random(0, 20)) / 10.0;
|
||||
dplace = rawvalue;
|
||||
}
|
||||
if(dplace < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",dplace);
|
||||
}
|
||||
if(dplace >= 10 && dplace < 100){
|
||||
snprintf(buffer,bsize,"%3.1f",dplace);
|
||||
}
|
||||
if(dplace >= 100){
|
||||
snprintf(buffer,bsize,"%3.0f",dplace);
|
||||
}
|
||||
result.unit = "%";
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatXdr:A:D"){
|
||||
double angle = 0;
|
||||
if(usesimudata == false) {
|
||||
angle = value->value;
|
||||
angle = angle * 57.2958; // Unit conversion form rad to deg
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = PI / 100 + (random(-5, 5) / 360 * 2* PI);
|
||||
angle = rawvalue * 57.2958;
|
||||
}
|
||||
if(angle > -10 && angle < 10){
|
||||
snprintf(buffer,bsize,"%3.1f",angle);
|
||||
}
|
||||
else{
|
||||
snprintf(buffer,bsize,"%3.0f",angle);
|
||||
}
|
||||
result.unit = "Deg";
|
||||
}
|
||||
//########################################################
|
||||
else if (value->getFormat() == "formatXdr:T:R"){
|
||||
double rpm = 0;
|
||||
if(usesimudata == false) {
|
||||
rpm = value->value; // Value in rpm
|
||||
rawvalue = value->value;
|
||||
}
|
||||
else{
|
||||
rawvalue = 2505 + random(0, 20);
|
||||
rpm = rawvalue;
|
||||
}
|
||||
if(rpm < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",rpm);
|
||||
}
|
||||
if(rpm >= 10 && rpm < 100){
|
||||
snprintf(buffer,bsize,"%3.1f",rpm);
|
||||
}
|
||||
if(rpm >= 100){
|
||||
snprintf(buffer,bsize,"%3.0f",rpm);
|
||||
}
|
||||
result.unit = "rpm";
|
||||
}
|
||||
//########################################################
|
||||
// Default format
|
||||
//########################################################
|
||||
else{
|
||||
if(value->value < 10){
|
||||
snprintf(buffer,bsize,"%3.2f",value->value);
|
||||
}
|
||||
if(value->value >= 10 && value->value < 100){
|
||||
snprintf(buffer,bsize,"%3.1f",value->value);
|
||||
}
|
||||
if(value->value >= 100){
|
||||
snprintf(buffer,bsize,"%3.0f",value->value);
|
||||
}
|
||||
result.unit = "";
|
||||
}
|
||||
buffer[bsize]=0;
|
||||
result.value = rawvalue; // Return value is only necessary in case of simulation of graphic pointer
|
||||
result.svalue = String(buffer);
|
||||
return result;
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,80 +0,0 @@
|
|||
// General hardware definitions
|
||||
// CAN and RS485 bus pin definitions see obp60task.h
|
||||
|
||||
// Direction pin for RS485 NMEA0183
|
||||
#define OBP_DIRECTION_PIN 18
|
||||
// I2C
|
||||
#define I2C_SPEED 10000UL // 10kHz clock speed on I2C bus
|
||||
#define OBP_I2C_SDA 47
|
||||
#define OBP_I2C_SCL 21
|
||||
// DS1388 RTC
|
||||
#define DS1388_I2C_ADDR 0x68 // Addr. 0x68
|
||||
// BME280
|
||||
#define BME280_I2C_ADDR 0x76 // Addr. 0x76 (0x77)
|
||||
// BMP280
|
||||
#define BMP280_I2C_ADDR 0x77 // Addr. 0x77 (0x76) Attention: Pull up resistor
|
||||
// BMP085 / BMP180
|
||||
#define BMP180_I2C_ADDR 0x77 // Addr. 0x77 (fix)
|
||||
// SHT21 / HUT21
|
||||
#define SHT21_I2C_ADDR 0x40 // Addr. 0x40 (fix)
|
||||
// AS5600
|
||||
#define AS5600_I2C_ADDR 0x36 // Addr. 0x36 (fix)
|
||||
// INA219
|
||||
#define SHUNT_VOLTAGE 0.075 // Shunt voltage in V by max. current (75mV)
|
||||
#define INA219_I2C_ADDR1 0x40 // Addr. 0x41 (fix A0 = 5V, A1 = GND) for battery
|
||||
#define INA219_I2C_ADDR2 0x41 // Addr. 0x44 (fix A0 = GND, A1 = 5V) for solar panels
|
||||
#define INA219_I2C_ADDR3 0x45 // Addr. 0x45 (fix A0 = 5V, A1 = 5V) for generator
|
||||
// INA226
|
||||
#define INA226_I2C_ADDR1 0x41 // Addr. 0x41 (fix A0 = 5V, A1 = GND) for battery
|
||||
#define INA226_I2C_ADDR2 0x44 // Addr. 0x44 (fix A0 = GND, A1 = 5V) for solar panels
|
||||
#define INA226_I2C_ADDR3 0x45 // Addr. 0x45 (fix A0 = 5V, A1 = 5V) for generator
|
||||
// Horter modules
|
||||
#define PCF8574_I2C_ADDR1 0x20 // First digital out module
|
||||
// SPI (E-Ink display, Extern Bus)
|
||||
#define OBP_SPI_CS 39
|
||||
#define OBP_SPI_DC 40
|
||||
#define OBP_SPI_RST 41
|
||||
#define OBP_SPI_BUSY 42
|
||||
#define OBP_SPI_CLK 38
|
||||
#define OBP_SPI_DIN 48
|
||||
#define SHOW_TIME 6000 // Show time in [ms] for logo and WiFi QR code
|
||||
#define FULL_REFRESH_TIME 600 // Refresh cycle time in [s][600...3600] for full display update (very important healcy function)
|
||||
#define MAX_PAGE_NUMBER 10 // Max number of pages for show data
|
||||
#define FONT1 "Ubuntu_Bold8pt7b"
|
||||
#define FONT2 "Ubuntu_Bold24pt7b"
|
||||
#define FONT3 "Ubuntu_Bold32pt7b"
|
||||
#define FONT4 "DSEG7Classic_BoldItalic80pt7b"
|
||||
|
||||
// GPS (NEO-6M, NEO-M8N, ATGM336H)
|
||||
#define OBP_GPS_RX 2
|
||||
#define OBP_GPS_TX 1
|
||||
// 1Wire (DS18B20)
|
||||
#define OBP_1WIRE 6 // External 1Wire
|
||||
// Buzzer
|
||||
#define OBP_BUZZER 16
|
||||
#define TONE1 1500 // 1500Hz
|
||||
#define TONE2 2500 // 2500Hz
|
||||
#define TONE3 3500 // 3500Hz
|
||||
#define TONE4 4000 // 4000Hz
|
||||
// Analog Input
|
||||
#define OBP_ANALOG0 4 // Voltage power supplay
|
||||
#define MIN_VOLTAGE 10.0 // Min voltage for under voltage detection (then goto deep sleep)
|
||||
#define POWER_FAIL_TIME 2 // in [ms] Accept min voltage until 2 x 1ms (for under voltage gaps by engine start)
|
||||
// Touch buttons
|
||||
#define TP1 14 // Left outside
|
||||
#define TP2 13
|
||||
#define TP3 12
|
||||
#define TP4 11
|
||||
#define TP5 10
|
||||
#define TP6 9 // Right outside
|
||||
|
||||
// Flash LED (1x WS2812B)
|
||||
#define NUM_FLASH_LED 1 // Number of flash LED
|
||||
#define OBP_FLASH_LED 7 // GPIO port
|
||||
// Backlight LEDs (6x WS2812B)
|
||||
#define NUM_BACKLIGHT_LED 6 // Numebr of Backlight LEDs
|
||||
#define OBP_BACKLIGHT_LED 15 // GPIO port
|
||||
// Power Rail
|
||||
#define OBP_POWER_50 5 // 5.0V power rail
|
||||
|
||||
|
|
@ -1,180 +0,0 @@
|
|||
#ifndef _OBP60FUNCTIONS_H
|
||||
#define _OBP60FUNCTIONS_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "OBP60Hardware.h"
|
||||
|
||||
// Global vars
|
||||
|
||||
// Touch keypad over ESP32 touch sensor inputs
|
||||
|
||||
int keypad[9]; // Raw data array for keys
|
||||
int key; // Value of key [0|1], 0 = touched, 1 = not touched
|
||||
int keycode = 0; // Keycode of pressed key [0...8], 0 = nothing touched
|
||||
int keycode2 = 0; // Keycode of very short pressed key [0...8], 0 = nothing touched
|
||||
int keycodeold = 0; // Old keycode
|
||||
int keycodeold2 = 0; // Old keycode for short pressed key
|
||||
bool keyoff = false; // Disable all keys
|
||||
int keydelay = 250; // Delay after key pressed in [ms]
|
||||
bool keylock = false; // Key lock after pressed key is valid (repeat protection by conginous pressing)
|
||||
long starttime = 0; // Start time point for pressed key
|
||||
|
||||
|
||||
int readKeypad(uint thSensitivity) {
|
||||
|
||||
// Touch sensor values
|
||||
// 35000 - Not touched
|
||||
// 50000 - Light toched with fingertip
|
||||
// 70000 - Touched
|
||||
// 170000 - Strong touched
|
||||
uint32_t touchthreshold = (thSensitivity * -1200) + 170000; // thSensitivity 0...100%
|
||||
|
||||
int keystatus = 0; // Status of key [0...11], 0 = processed, 1...8 = key 1..8, 9 = right swipe , 10 = left swipe, 11 keys disabled
|
||||
keycode = 0;
|
||||
|
||||
// Read key code
|
||||
if(touchRead(14) > touchthreshold){ // Touch pad 1
|
||||
keypad[1] = 1;
|
||||
}
|
||||
else{
|
||||
keypad[1] = 0;
|
||||
}
|
||||
if(touchRead(13) > touchthreshold){ // Touch pad 2
|
||||
keypad[2] = 1;
|
||||
}
|
||||
else{
|
||||
keypad[2] = 0;
|
||||
}
|
||||
if(touchRead(12) > touchthreshold){ // Touch pad 3
|
||||
keypad[3] = 1;
|
||||
}
|
||||
else{
|
||||
keypad[3] = 0;
|
||||
}
|
||||
if(touchRead(11) > touchthreshold){ // Touch pad 4
|
||||
keypad[4] = 1;
|
||||
}
|
||||
else{
|
||||
keypad[4] = 0;
|
||||
}
|
||||
if(touchRead(10) > touchthreshold){ // Touch pad 5
|
||||
keypad[5] = 1;
|
||||
}
|
||||
else{
|
||||
keypad[5] = 0;
|
||||
}
|
||||
if(touchRead(9) > touchthreshold){ // Touch pad 6
|
||||
keypad[6] = 1;
|
||||
}
|
||||
else{
|
||||
keypad[6] = 0;
|
||||
}
|
||||
// Nothing touched
|
||||
if(keypad[1] == 0 && keypad[2] == 0 && keypad[3] == 0 && keypad[4] == 0 && keypad[5] == 0 && keypad[6] == 0){
|
||||
keypad[0] = 1;
|
||||
}
|
||||
else{
|
||||
keypad[0] = 0;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 9; i++) {
|
||||
if(i > 0){
|
||||
// Convert keypad to keycode
|
||||
if(keypad[i] == 1){
|
||||
key = 1;
|
||||
}
|
||||
else{
|
||||
key = 0;
|
||||
}
|
||||
keycode += key * i;
|
||||
}
|
||||
}
|
||||
|
||||
// Detect short keynumber
|
||||
if (keycode > 0 ){
|
||||
if(keylock == false){
|
||||
starttime = millis();
|
||||
keylock = true;
|
||||
}
|
||||
if (keycode != keycodeold){
|
||||
keylock = false;
|
||||
}
|
||||
// Detect a very short keynumber (10ms)
|
||||
if (millis() > starttime + 10 && keycode == keycodeold && keylock == true) {
|
||||
// Process only valid keys
|
||||
if(keycode == 1 || keycode == 6){
|
||||
keycode2 = keycode;
|
||||
}
|
||||
// Clear by unvalid keys
|
||||
else{
|
||||
keycode2 = 0;
|
||||
keycodeold2 = 0;
|
||||
}
|
||||
}
|
||||
// Timeout for very short pressed key
|
||||
if(millis() > starttime + 200){
|
||||
keycode2 = 0;
|
||||
}
|
||||
// Detect a short keynumber (200ms)
|
||||
if (keyoff == false && millis() > starttime + 200 && keycode == keycodeold && keylock == true) {
|
||||
keystatus = keycode;
|
||||
keycode = 0;
|
||||
keycodeold = 0;
|
||||
keycode2 = 0;
|
||||
keycodeold2 = 0;
|
||||
buzzer(TONE4, 100);
|
||||
keylock = false;
|
||||
delay(keydelay);
|
||||
}
|
||||
}
|
||||
|
||||
// Key lock with key 1 and 6 or 6 and 1 in fast series
|
||||
if((keycode2 == 1 && keycodeold2 == 6) || (keycode2 == 6 && keycodeold2 == 1)) {
|
||||
keycode = 0;
|
||||
keycodeold = 0;
|
||||
keycode2 = 0;
|
||||
keycodeold2 = 0;
|
||||
buzzer(TONE4, 1000);
|
||||
keylock = false;
|
||||
delay(keydelay);
|
||||
keyoff = !keyoff;
|
||||
keystatus = 11;
|
||||
}
|
||||
|
||||
// Detect swipe right
|
||||
if (keyoff == false && keycode > 0 && keycodeold > 0 && keycode > keycodeold && !((keycode == 1 && keycodeold == 6) || (keycode == 6 && keycodeold == 1))){
|
||||
//if (keycode > 0 && keycodeold > 0 && keycode > keycodeold){
|
||||
keycode = 0;
|
||||
keycodeold = 0;
|
||||
keycode2 = 0;
|
||||
keycodeold2 = 0;
|
||||
keystatus = 9;
|
||||
buzzer(TONE3, 150);
|
||||
buzzer(TONE4, 150);
|
||||
}
|
||||
|
||||
// Detect swipe left
|
||||
if (keyoff == false && keycode > 0 && keycodeold > 0 && keycode < keycodeold && !((keycode == 1 && keycodeold == 6) || (keycode == 6 && keycodeold == 1))){
|
||||
//if (keycode > 0 && keycodeold > 0 && keycode < keycodeold){
|
||||
keycode = 0;
|
||||
keycodeold = 0;
|
||||
keycode2 = 0;
|
||||
keycodeold2 = 0;
|
||||
keystatus = 10;
|
||||
buzzer(TONE4, 150);
|
||||
buzzer(TONE3, 150);
|
||||
}
|
||||
|
||||
// Reset keylock after release
|
||||
if (keycode == 0){
|
||||
keylock = false;
|
||||
}
|
||||
|
||||
// Copy keycode
|
||||
keycodeold = keycode;
|
||||
keycodeold2 = keycode2;
|
||||
|
||||
return keystatus;
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,59 +0,0 @@
|
|||
#ifndef _OBP60QRWIFI_H
|
||||
#define _OBP60QRWIFI_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "OBP60Extensions.h"
|
||||
#include "qrcode.h"
|
||||
|
||||
void qrWiFi(String ssid, String passwd, String displaycolor){
|
||||
// Set display color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
|
||||
// Set start point and pixel size
|
||||
int16_t box_x = 100; // X offset
|
||||
int16_t box_y = 30; // Y offset
|
||||
int16_t box_s = 6; // Pixel size
|
||||
int16_t init_x = box_x;
|
||||
|
||||
// Create the QR code
|
||||
QRCode qrcode;
|
||||
uint8_t qrcodeData[qrcode_getBufferSize(4)];
|
||||
// Content for QR code: "WIFI:S:mySSID;T:WPA;P:myPASSWORD;;"
|
||||
String text = "WIFI:S:" + String(ssid) + ";T:WPA;P:" + String(passwd) + ";;";
|
||||
const char *qrcodecontent = text.c_str();
|
||||
qrcode_initText(&qrcode, qrcodeData, 4, 0, qrcodecontent);
|
||||
|
||||
// Top quiet zone
|
||||
for (uint8_t y = 0; y < qrcode.size; y++) {
|
||||
// Each horizontal module
|
||||
for (uint8_t x = 0; x < qrcode.size; x++) {
|
||||
if(qrcode_getModule(&qrcode, x, y)){
|
||||
getdisplay().fillRect(box_x, box_y, box_s, box_s, pixelcolor);
|
||||
} else {
|
||||
getdisplay().fillRect(box_x, box_y, box_s, box_s, bgcolor);
|
||||
}
|
||||
box_x = box_x + box_s;
|
||||
}
|
||||
box_y = box_y + box_s;
|
||||
box_x = init_x;
|
||||
}
|
||||
getdisplay().setFont(&Ubuntu_Bold32pt7b);
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setCursor(140, 285);
|
||||
getdisplay().print("WiFi");
|
||||
getdisplay().nextPage(); // Full Refresh
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,699 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
#include <Adafruit_Sensor.h> // Adafruit Lib for sensors
|
||||
#include <Adafruit_BME280.h> // Adafruit Lib for BME280
|
||||
#include <Adafruit_BMP280.h> // Adafruit Lib for BMP280
|
||||
#include <Adafruit_BMP085.h> // Adafruit Lib for BMP085 and BMP180
|
||||
#include <HTU21D.h> // Lib for SHT21/HTU21
|
||||
#include "AS5600.h" // Lib for magnetic rotation sensor AS5600
|
||||
#include <INA226.h> // Lib for power management IC INA226
|
||||
#include <Ticker.h> // Timer Lib for timer
|
||||
#include <RTClib.h> // DS1388 RTC
|
||||
#include <OneWire.h> // 1Wire Lib
|
||||
#include <DallasTemperature.h> // Lib for DS18B20
|
||||
#include "OBPSensorTask.h" // Lib for sensor reading
|
||||
#include "OBP60Hardware.h" // Hardware definitions
|
||||
#include "N2kMessages.h" // Lib for NMEA2000
|
||||
#include "NMEA0183.h" // Lib for NMEA0183
|
||||
#include "ObpNmea0183.h" // Check NMEA0183 sentence for uncorrect content
|
||||
#include "OBP60Extensions.h" // Lib for hardware extensions
|
||||
#include "movingAvg.h" // Lib for moving average building
|
||||
|
||||
// Timer for hardware functions
|
||||
Ticker Timer1(blinkingFlashLED, 500); // Satrt Timer1 for flash LED all 500ms
|
||||
|
||||
// Initialization for all sensors (RS232, I2C, 1Wire, IOs)
|
||||
//####################################################################################
|
||||
|
||||
void sensorTask(void *param){
|
||||
SharedData *shared = (SharedData *)param;
|
||||
GwApi *api = shared->api;
|
||||
GwLog *logger = api->getLogger();
|
||||
LOG_DEBUG(GwLog::LOG, "Sensor task started");
|
||||
SensorData sensors;
|
||||
ObpNmea0183 NMEA0183;
|
||||
|
||||
Adafruit_BME280 bme280; // Evironment sensor BME280
|
||||
Adafruit_BMP280 bmp280; // Evironment sensor BMP280
|
||||
Adafruit_BMP085 bmp085; // Evironment sensor BMP085 and BMP180
|
||||
HTU21D sht21(HTU21D_RES_RH12_TEMP14); // Environment sensor SHT21 and HTU21
|
||||
AMS_5600 as5600; // Rotation sensor AS5600
|
||||
INA226 ina226_1(INA226_I2C_ADDR1);// Power management sensor INA226 Battery
|
||||
INA226 ina226_2(INA226_I2C_ADDR2);// Power management sensor INA226 Solar
|
||||
INA226 ina226_3(INA226_I2C_ADDR3);// Power management sensor INA226 Generator
|
||||
RTC_DS1388 ds1388; // RTC DS1388
|
||||
OneWire oneWire(OBP_1WIRE); // 1Wire bus
|
||||
DallasTemperature ds18b20(&oneWire);// Sensors for DS18B20
|
||||
DeviceAddress tempDeviceAddress;// Table for DS18B20 device addresses
|
||||
|
||||
// Init sensor stuff
|
||||
bool oneWire_ready = false; // 1Wire initialized and ready to use
|
||||
bool RTC_ready = false; // DS1388 initialized and ready to use
|
||||
bool GPS_ready = false; // GPS initialized and ready to use
|
||||
bool BME280_ready = false; // BME280 initialized and ready to use
|
||||
bool BMP280_ready = false; // BMP280 initialized and ready to use
|
||||
bool BMP180_ready = false; // BMP180 initialized and ready to use
|
||||
bool SHT21_ready = false; // SHT21 initialized and ready to use
|
||||
bool AS5600_ready = false; // AS5600 initialized and ready to use
|
||||
bool INA226_1_ready = false; // INA226_1 initialized and ready to use
|
||||
bool INA226_2_ready = false; // INA226_2 initialized and ready to use
|
||||
bool INA226_3_ready = false; // INA226_3 initialized and ready to use
|
||||
|
||||
// Create integer arrays for average building
|
||||
const int avgsize = 300;
|
||||
constexpr int arrayBatV{avgsize};
|
||||
constexpr int arrayBatC{avgsize};
|
||||
movingAvg batV(arrayBatV);
|
||||
movingAvg batC(arrayBatC);
|
||||
batV.begin();
|
||||
batC.begin();
|
||||
|
||||
// Start timer
|
||||
Timer1.start(); // Start Timer1 for blinking LED
|
||||
|
||||
// Direction settings for NMEA0183
|
||||
String nmea0183Mode = api->getConfig()->getConfigItem(api->getConfig()->serialDirection, true)->asString();
|
||||
api->getLogger()->logDebug(GwLog::LOG, "NMEA0183 Mode is: %s", nmea0183Mode.c_str());
|
||||
pinMode(OBP_DIRECTION_PIN, OUTPUT);
|
||||
if (String(nmea0183Mode) == "receive" || String(nmea0183Mode) == "off")
|
||||
{
|
||||
digitalWrite(OBP_DIRECTION_PIN, false);
|
||||
}
|
||||
if (String(nmea0183Mode) == "send")
|
||||
{
|
||||
digitalWrite(OBP_DIRECTION_PIN, true);
|
||||
}
|
||||
|
||||
// Internal voltage sensor initialization
|
||||
String powsensor1 = api->getConfig()->getConfigItem(api->getConfig()->usePowSensor1, true)->asString();
|
||||
double voffset = (api->getConfig()->getConfigItem(api->getConfig()->vOffset,true)->asString()).toFloat();
|
||||
double vslope = (api->getConfig()->getConfigItem(api->getConfig()->vSlope,true)->asString()).toFloat();
|
||||
if(String(powsensor1) == "off"){
|
||||
sensors.batteryVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20
|
||||
sensors.batteryVoltage = sensors.batteryVoltage * vslope + voffset; // Calibration
|
||||
sensors.batteryCurrent = 0;
|
||||
sensors.batteryPower = 0;
|
||||
// Fill average arrays with start values
|
||||
for (int i=1; i<=avgsize+1; ++i) {
|
||||
batV.reading(int(sensors.batteryVoltage * 100));
|
||||
batC.reading(int(sensors.batteryCurrent * 10));
|
||||
}
|
||||
}
|
||||
|
||||
// Settings for 1Wire bus
|
||||
String oneWireOn=api->getConfig()->getConfigItem(api->getConfig()->useTempSensor,true)->asString();
|
||||
int numberOfDevices;
|
||||
if(String(oneWireOn) == "DS18B20"){
|
||||
ds18b20.begin();
|
||||
DeviceAddress tempDeviceAddress;
|
||||
numberOfDevices = ds18b20.getDeviceCount();
|
||||
// Limit for 8 sensors
|
||||
if(numberOfDevices > 8){
|
||||
numberOfDevices = 8;
|
||||
}
|
||||
if (numberOfDevices < 1) {
|
||||
oneWire_ready = false;
|
||||
api->getLogger()->logDebug(GwLog::ERROR,"Modul DS18B20 not found, check wiring");
|
||||
}
|
||||
else{
|
||||
api->getLogger()->logDebug(GwLog::LOG,"1Wire modul found at:");
|
||||
for(int i=0;i<numberOfDevices; i++){
|
||||
// Search the wire for address
|
||||
if(ds18b20.getAddress(tempDeviceAddress, i)){
|
||||
api->getLogger()->logDebug(GwLog::LOG,"DS18B20-%01d: %12d", i, tempDeviceAddress[i]);
|
||||
} else {
|
||||
api->getLogger()->logDebug(GwLog::LOG,"DS18B20-%01d: Sensor with errors, check wiring!", i);
|
||||
}
|
||||
}
|
||||
oneWire_ready = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Settings for RTC
|
||||
String rtcOn=api->getConfig()->getConfigItem(api->getConfig()->useRTC,true)->asString();
|
||||
if(String(rtcOn) == "DS1388"){
|
||||
if (!ds1388.begin()) {
|
||||
RTC_ready = false;
|
||||
api->getLogger()->logDebug(GwLog::ERROR,"Modul DS1388 not found, check wiring");
|
||||
}
|
||||
else{
|
||||
api->getLogger()->logDebug(GwLog::LOG,"Modul DS1388 found");
|
||||
uint year = ds1388.now().year();
|
||||
if(year < 2023){
|
||||
// ds1388.adjust(DateTime(__DATE__, __TIME__)); // Set date and time from PC file time
|
||||
}
|
||||
RTC_ready = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Settings for GPS sensors
|
||||
String gpsOn=api->getConfig()->getConfigItem(api->getConfig()->useGPS,true)->asString();
|
||||
if(String(gpsOn) == "NEO-6M"){
|
||||
Serial2.begin(9600, SERIAL_8N1, OBP_GPS_RX, OBP_GPS_TX, false); // not inverted (false)
|
||||
if (!Serial2) {
|
||||
api->getLogger()->logDebug(GwLog::ERROR,"GPS modul NEO-6M not found, check wiring");
|
||||
GPS_ready = false;
|
||||
}
|
||||
else{
|
||||
api->getLogger()->logDebug(GwLog::LOG,"GPS modul NEO-M6 found");
|
||||
NMEA0183.SetMessageStream(&Serial2);
|
||||
NMEA0183.Open();
|
||||
GPS_ready = true;
|
||||
}
|
||||
}
|
||||
if(String(gpsOn) == "NEO-M8N"){
|
||||
Serial2.begin(9600, SERIAL_8N1, OBP_GPS_RX, OBP_GPS_TX, false); // not inverted (false)
|
||||
if (!Serial2) {
|
||||
api->getLogger()->logDebug(GwLog::ERROR,"GPS modul NEO-M8N not found, check wiring");
|
||||
GPS_ready = false;
|
||||
}
|
||||
else{
|
||||
api->getLogger()->logDebug(GwLog::LOG,"GPS modul NEO-M8N found");
|
||||
NMEA0183.SetMessageStream(&Serial2);
|
||||
NMEA0183.Open();
|
||||
GPS_ready = true;
|
||||
}
|
||||
}
|
||||
if(String(gpsOn) == "ATGM336H"){
|
||||
Serial2.begin(9600, SERIAL_8N1, OBP_GPS_RX, OBP_GPS_TX, false); // not inverted (false)
|
||||
if (!Serial2) {
|
||||
api->getLogger()->logDebug(GwLog::ERROR,"GPS modul ATGM336H not found, check wiring");
|
||||
GPS_ready = false;
|
||||
}
|
||||
else{
|
||||
api->getLogger()->logDebug(GwLog::LOG,"GPS modul ATGM336H found");
|
||||
NMEA0183.SetMessageStream(&Serial2);
|
||||
NMEA0183.Open();
|
||||
GPS_ready = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Settings for environment sensors on I2C bus
|
||||
String envSensors=api->getConfig()->getConfigItem(api->getConfig()->useEnvSensor,true)->asString();
|
||||
|
||||
if(String(envSensors) == "BME280"){
|
||||
if (!bme280.begin(BME280_I2C_ADDR)) {
|
||||
api->getLogger()->logDebug(GwLog::ERROR,"Modul BME280 not found, check wiring");
|
||||
}
|
||||
else{
|
||||
api->getLogger()->logDebug(GwLog::LOG,"Modul BME280 found");
|
||||
sensors.airTemperature = bme280.readTemperature();
|
||||
sensors.airPressure = bme280.readPressure()/100;
|
||||
sensors.airHumidity = bme280.readHumidity();
|
||||
BME280_ready = true;
|
||||
}
|
||||
}
|
||||
else if(String(envSensors) == "BMP280"){
|
||||
if (!bmp280.begin(BMP280_I2C_ADDR)) {
|
||||
api->getLogger()->logDebug(GwLog::ERROR,"Modul BMP280 not found, check wiring");
|
||||
}
|
||||
else{
|
||||
api->getLogger()->logDebug(GwLog::LOG,"Modul BMP280 found");
|
||||
sensors.airTemperature = bmp280.readTemperature();
|
||||
sensors.airPressure =bmp280.readPressure()/100;
|
||||
BMP280_ready = true;
|
||||
}
|
||||
}
|
||||
else if(String(envSensors) == "BMP085" || String(envSensors) == "BMP180"){
|
||||
if (!bmp085.begin()) {
|
||||
api->getLogger()->logDebug(GwLog::ERROR,"Modul BMP085/BMP180 not found, check wiring");
|
||||
}
|
||||
else{
|
||||
api->getLogger()->logDebug(GwLog::LOG,"Modul BMP085/BMP180 found");
|
||||
sensors.airTemperature = bmp085.readTemperature();
|
||||
sensors.airPressure =bmp085.readPressure()/100;
|
||||
BMP180_ready = true;
|
||||
}
|
||||
}
|
||||
else if(String(envSensors) == "HTU21" || String(envSensors) == "SHT21"){
|
||||
if (!sht21.begin()) {
|
||||
api->getLogger()->logDebug(GwLog::ERROR,"Modul HTU21/SHT21 not found, check wiring");
|
||||
}
|
||||
else{
|
||||
api->getLogger()->logDebug(GwLog::LOG,"Modul HTU21/SHT21 found");
|
||||
sensors.airHumidity = sht21.readCompensatedHumidity();
|
||||
sensors.airTemperature = sht21.readTemperature();
|
||||
SHT21_ready = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Settings for rotation sensors AS5600 on I2C bus
|
||||
String envsensor = api->getConfig()->getConfigItem(api->getConfig()->useEnvSensor, true)->asString();
|
||||
String rotsensor = api->getConfig()->getConfigItem(api->getConfig()->useRotSensor, true)->asString();
|
||||
String rotfunction = api->getConfig()->getConfigItem(api->getConfig()->rotFunction, true)->asString();
|
||||
String rotSensor=api->getConfig()->getConfigItem(api->getConfig()->useRotSensor,true)->asString();
|
||||
|
||||
if(String(rotSensor) == "AS5600"){
|
||||
Wire.beginTransmission(AS5600_I2C_ADDR);
|
||||
if (Wire.endTransmission() != 0) {
|
||||
api->getLogger()->logDebug(GwLog::ERROR,"Modul AS5600 not found, check wiring");
|
||||
}
|
||||
else{
|
||||
api->getLogger()->logDebug(GwLog::LOG,"Modul AS5600 found");
|
||||
sensors.rotationAngle = DegToRad(as5600.getRawAngle() * 0.087); // 0...4095 segments = 0.087 degree
|
||||
//sensors.magnitude = as5600.getMagnitude(); // Magnetic magnitude in [mT]
|
||||
AS5600_ready = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Settings for power amangement sensors INA226 #1 for Battery on I2C bus
|
||||
String shunt1 = api->getConfig()->getConfigItem(api->getConfig()->shunt1, true)->asString();
|
||||
// Settings for power amangement sensors INA226 #1 for Solar on I2C bus
|
||||
String powsensor2 = api->getConfig()->getConfigItem(api->getConfig()->usePowSensor2, true)->asString();
|
||||
String shunt2 = api->getConfig()->getConfigItem(api->getConfig()->shunt2, true)->asString();
|
||||
// Settings for power amangement sensors INA226 #1 for Generator on I2C bus
|
||||
String powsensor3 = api->getConfig()->getConfigItem(api->getConfig()->usePowSensor3, true)->asString();
|
||||
String shunt3 = api->getConfig()->getConfigItem(api->getConfig()->shunt3, true)->asString();
|
||||
|
||||
float shuntResistor = 1.0; // Default value for shunt resistor
|
||||
float maxCurrent = 10.0; // Default value for max. current
|
||||
float corrFactor = 1; // Correction factor for fix calibration
|
||||
|
||||
// Battery sensor initialization
|
||||
if(String(powsensor1) == "INA226"){
|
||||
if (!ina226_1.begin()){
|
||||
api->getLogger()->logDebug(GwLog::ERROR,"Modul 1 INA226 not found, check wiring");
|
||||
}
|
||||
else{
|
||||
api->getLogger()->logDebug(GwLog::LOG,"Modul 1 INA226 found");
|
||||
shuntResistor = SHUNT_VOLTAGE / float(shunt1.toInt()); // Calculate shunt resisitor for max. shunt voltage 75mV
|
||||
maxCurrent = shunt1.toFloat();
|
||||
api->getLogger()->logDebug(GwLog::LOG,"Calibation Modul 2 INA226, Imax:%3.0fA Rs:%7.5fOhm Us:%5.3f", maxCurrent, shuntResistor, SHUNT_VOLTAGE);
|
||||
// ina226_1.setMaxCurrentShunt(maxCurrent, shuntResistor);
|
||||
ina226_1.setMaxCurrentShunt(10, 0.01); // Calibration with fix values (because the original values outer range)
|
||||
corrFactor = (maxCurrent / 10) * (0.001 / shuntResistor) / (maxCurrent / 100); // Correction factor for fix calibration
|
||||
sensors.batteryVoltage = ina226_1.getBusVoltage();
|
||||
sensors.batteryCurrent = ina226_1.getCurrent() * corrFactor;
|
||||
sensors.batteryPower = ina226_1.getPower() * corrFactor;
|
||||
// Fill average arrays with start values
|
||||
for (int i=1; i<=avgsize+1; ++i) {
|
||||
batV.reading(int(sensors.batteryVoltage * 100));
|
||||
batC.reading(int(sensors.batteryCurrent * 10));
|
||||
}
|
||||
INA226_1_ready = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Solar sensor initialization
|
||||
if(String(powsensor2) == "INA226"){
|
||||
if (!ina226_2.begin()){
|
||||
api->getLogger()->logDebug(GwLog::ERROR,"Modul 2 INA226 not found, check wiring");
|
||||
}
|
||||
else{
|
||||
api->getLogger()->logDebug(GwLog::LOG,"Modul 2 INA226 found");
|
||||
shuntResistor = SHUNT_VOLTAGE / float(shunt2.toInt()); // Calculate shunt resisitor for max. shunt voltage 75mV
|
||||
maxCurrent = shunt2.toFloat();
|
||||
api->getLogger()->logDebug(GwLog::LOG,"Calibation Modul 2 INA226, Imax:%3.0fA Rs:%7.5fOhm Us:%5.3f", maxCurrent, shuntResistor, SHUNT_VOLTAGE);
|
||||
// ina226_1.setMaxCurrentShunt(maxCurrent, shuntResistor);
|
||||
ina226_2.setMaxCurrentShunt(10, 0.01); // Calibration with fix values (because the original values outer range)
|
||||
corrFactor = (maxCurrent / 10) * (0.001 / shuntResistor) / (maxCurrent / 100); // Correction factor for fix calibration
|
||||
sensors.solarVoltage = ina226_2.getBusVoltage();
|
||||
sensors.solarCurrent = ina226_2.getCurrent() * corrFactor;
|
||||
sensors.solarPower = ina226_2.getPower() * corrFactor;
|
||||
// Fill average arrays with start values
|
||||
INA226_2_ready = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Generator sensor initialization
|
||||
if(String(powsensor3) == "INA226"){
|
||||
if (!ina226_3.begin()){
|
||||
api->getLogger()->logDebug(GwLog::ERROR,"Modul 3 INA226 not found, check wiring");
|
||||
}
|
||||
else{
|
||||
api->getLogger()->logDebug(GwLog::LOG,"Modul 3 INA226 found");
|
||||
shuntResistor = SHUNT_VOLTAGE / float(shunt3.toInt()); // Calculate shunt resisitor for max. shunt voltage 75mV
|
||||
maxCurrent = shunt3.toFloat();
|
||||
api->getLogger()->logDebug(GwLog::LOG,"Calibation Modul 3 INA226, Imax:%3.0fA Rs:%7.5fOhm Us:%5.3f", maxCurrent, shuntResistor, SHUNT_VOLTAGE);
|
||||
// ina226_1.setMaxCurrentShunt(maxCurrent, shuntResistor);
|
||||
ina226_3.setMaxCurrentShunt(10, 0.01); // Calibration with fix values (because the original values outer range)
|
||||
corrFactor = (maxCurrent / 10) * (0.001 / shuntResistor) / (maxCurrent / 100); // Correction factor for fix calibration
|
||||
sensors.generatorVoltage = ina226_3.getBusVoltage();
|
||||
sensors.generatorCurrent = ina226_3.getCurrent() * corrFactor;
|
||||
sensors.generatorPower = ina226_3.getPower() * corrFactor;
|
||||
// Fill average arrays with start values
|
||||
INA226_3_ready = true;
|
||||
}
|
||||
}
|
||||
|
||||
int rotoffset = api->getConfig()->getConfigItem(api->getConfig()->rotOffset,true)->asInt();
|
||||
|
||||
static long loopCounter = 0; // Loop counter for 1Wire data transmission
|
||||
long starttime0 = millis(); // GPS update all 100ms
|
||||
long starttime5 = millis(); // Voltage update all 1s
|
||||
long starttime6 = millis(); // Environment sensor update all 1s
|
||||
long starttime7 = millis(); // Rotation sensor update all 500ms
|
||||
long starttime8 = millis(); // Battery power sensor update all 1s
|
||||
long starttime9 = millis(); // Solar power sensor update all 1s
|
||||
long starttime10 = millis(); // Generator power sensor update all 1s
|
||||
long starttime11 = millis(); // Copy GPS data to RTC all 5min
|
||||
long starttime12 = millis(); // Get RTC data all 500ms
|
||||
long starttime13 = millis(); // Get 1Wire sensor data all 2s
|
||||
|
||||
tN2kMsg N2kMsg;
|
||||
shared->setSensorData(sensors); //set initially read values
|
||||
|
||||
GwApi::BoatValue *gpsdays=new GwApi::BoatValue(GwBoatData::_GPSD);
|
||||
GwApi::BoatValue *gpsseconds=new GwApi::BoatValue(GwBoatData::_GPST);
|
||||
GwApi::BoatValue *valueList[]={gpsdays, gpsseconds};
|
||||
|
||||
// Sensor task loop runs with 100ms
|
||||
//####################################################################################
|
||||
|
||||
while (true){
|
||||
delay(100); // Loop time 100ms
|
||||
Timer1.update(); // Update for Timer2
|
||||
if (millis() > starttime0 + 100)
|
||||
{
|
||||
starttime0 = millis();
|
||||
// Send NMEA0183 GPS data on several bus systems all 100ms
|
||||
if (GPS_ready == true)
|
||||
{
|
||||
SNMEA0183Msg NMEA0183Msg;
|
||||
while (NMEA0183.GetMessageCor(NMEA0183Msg))
|
||||
{
|
||||
api->sendNMEA0183Message(NMEA0183Msg);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// If RTC DS1388 ready, then copy GPS data to RTC all 5min
|
||||
if(millis() > starttime11 + 5*60*1000){
|
||||
starttime11 = millis();
|
||||
if(rtcOn == "DS1388" && RTC_ready == true && GPS_ready == true){
|
||||
api->getBoatDataValues(2,valueList);
|
||||
if(gpsdays->valid && gpsseconds->valid){
|
||||
long ts = tNMEA0183Msg::daysToTime_t(gpsdays->value - (30*365+7))+floor(gpsseconds->value); // Adjusted to reference year 2000 (-30 years and 7 days for switch years)
|
||||
// sample input: date = "Dec 26 2009", time = "12:34:56"
|
||||
// ds1388.adjust(DateTime("Dec 26 2009", "12:34:56"));
|
||||
DateTime adjusttime(ts);
|
||||
api->getLogger()->logDebug(GwLog::LOG,"Adjust RTC time: %04d/%02d/%02d %02d:%02d:%02d",adjusttime.year(), adjusttime.month(), adjusttime.day(), adjusttime.hour(), adjusttime.minute(), adjusttime.second());
|
||||
// Adjust RTC time as unix time value
|
||||
ds1388.adjust(adjusttime);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Send 1Wire data for all temperature sensors all 2s
|
||||
if(millis() > starttime13 + 2000 && String(oneWireOn) == "DS18B20" && oneWire_ready == true){
|
||||
starttime13 = millis();
|
||||
float tempC;
|
||||
ds18b20.requestTemperatures(); // Collect all temperature values (max.8)
|
||||
for(int i=0;i<numberOfDevices; i++){
|
||||
// Send only one 1Wire data per loop step (time reduction)
|
||||
if(i == loopCounter % numberOfDevices){
|
||||
if(ds18b20.getAddress(tempDeviceAddress, i)){
|
||||
// Read temperature value in Celsius
|
||||
tempC = ds18b20.getTempC(tempDeviceAddress);
|
||||
}
|
||||
// Send to NMEA200 bus for each sensor with instance number
|
||||
if(!isnan(tempC)){
|
||||
sensors.onewireTemp[i] = tempC; // Save values in SensorData
|
||||
api->getLogger()->logDebug(GwLog::DEBUG,"DS18B20-%1d Temp: %.1f",i,tempC);
|
||||
SetN2kPGN130316(N2kMsg, 0, i, N2kts_OutsideTemperature, CToKelvin(tempC), N2kDoubleNA);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
}
|
||||
}
|
||||
loopCounter++;
|
||||
}
|
||||
|
||||
// If GPS not ready or installed then send RTC time on bus all 500ms
|
||||
if(millis() > starttime12 + 500){
|
||||
starttime12 = millis();
|
||||
if(rtcOn == "DS1388" && RTC_ready == true && GPS_ready == false){
|
||||
// Convert RTC time to Unix system time
|
||||
// https://de.wikipedia.org/wiki/Unixzeit
|
||||
const short daysOfYear[12] = {0,31,59,90,120,151,181,212,243,273,304,334};
|
||||
long unixtime = ds1388.now().get();
|
||||
uint16_t year = ds1388.now().year();
|
||||
uint8_t month = ds1388.now().month();
|
||||
uint8_t hour = ds1388.now().hour();
|
||||
uint8_t minute = ds1388.now().minute();
|
||||
uint8_t second = ds1388.now().second();
|
||||
uint8_t day = ds1388.now().day();
|
||||
uint16_t switchYear = ((year-1)-1968)/4 - ((year-1)-1900)/100 + ((year-1)-1600)/400;
|
||||
long daysAt1970 = (year-1970)*365 + switchYear + daysOfYear[month-1] + day-1;
|
||||
// If switch year then add one day
|
||||
if ( (month>2) && (year%4==0 && (year%100!=0 || year%400==0)) ){
|
||||
daysAt1970 += 1;
|
||||
}
|
||||
double sysTime = (hour * 3600) + (minute * 60) + second;
|
||||
if(!isnan(daysAt1970) && !isnan(sysTime)){
|
||||
sensors.rtcYear = year; // Save values in SensorData
|
||||
sensors.rtcMonth = month;
|
||||
sensors.rtcDay = day;
|
||||
sensors.rtcHour = hour;
|
||||
sensors.rtcMinute = minute;
|
||||
sensors.rtcSecond = second;
|
||||
// api->getLogger()->logDebug(GwLog::LOG,"RTC time: %04d/%02d/%02d %02d:%02d:%02d",year, month, day, hour, minute, second);
|
||||
// api->getLogger()->logDebug(GwLog::LOG,"Send PGN126992: %10d %10d",daysAt1970, (uint16_t)sysTime);
|
||||
SetN2kPGN126992(N2kMsg,0,daysAt1970,sysTime,N2ktimes_LocalCrystalClock);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Send supplay voltage value all 1s
|
||||
if(millis() > starttime5 + 1000 && String(powsensor1) == "off"){
|
||||
starttime5 = millis();
|
||||
sensors.batteryVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20
|
||||
sensors.batteryVoltage = sensors.batteryVoltage * vslope + voffset; // Calibration
|
||||
// Save new data in average array
|
||||
batV.reading(int(sensors.batteryVoltage * 100));
|
||||
// Calculate the average values for different time lines from integer values
|
||||
sensors.batteryVoltage10 = batV.getAvg(10) / 100.0;
|
||||
sensors.batteryVoltage60 = batV.getAvg(60) / 100.0;
|
||||
sensors.batteryVoltage300 = batV.getAvg(300) / 100.0;
|
||||
// Send to NMEA200 bus
|
||||
if(!isnan(sensors.batteryVoltage)){
|
||||
SetN2kDCBatStatus(N2kMsg, 0, sensors.batteryVoltage, N2kDoubleNA, N2kDoubleNA, 1);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
}
|
||||
|
||||
// Send data from environment sensor all 2s
|
||||
if(millis() > starttime6 + 2000){
|
||||
starttime6 = millis();
|
||||
unsigned char TempSource = 2; // Inside temperature
|
||||
unsigned char PressureSource = 0; // Atmospheric pressure
|
||||
unsigned char HumiditySource=0; // Inside humidity
|
||||
if(envsensor == "BME280" && BME280_ready == true){
|
||||
sensors.airTemperature = bme280.readTemperature();
|
||||
sensors.airPressure = bme280.readPressure()/100;
|
||||
sensors.airHumidity = bme280.readHumidity();
|
||||
// Send to NMEA200 bus
|
||||
if(!isnan(sensors.airTemperature)){
|
||||
SetN2kPGN130312(N2kMsg, 0, 0,(tN2kTempSource) TempSource, CToKelvin(sensors.airTemperature), N2kDoubleNA);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
if(!isnan(sensors.airHumidity)){
|
||||
SetN2kPGN130313(N2kMsg, 0, 0,(tN2kHumiditySource) HumiditySource, sensors.airHumidity, N2kDoubleNA);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
if(!isnan(sensors.airPressure)){
|
||||
SetN2kPGN130314(N2kMsg, 0, 0, (tN2kPressureSource) mBarToPascal(PressureSource), sensors.airPressure);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
}
|
||||
else if(envsensor == "BMP280" && BMP280_ready == true){
|
||||
sensors.airTemperature = bmp280.readTemperature();
|
||||
sensors.airPressure =bmp280.readPressure()/100;
|
||||
// Send to NMEA200 bus
|
||||
if(!isnan(sensors.airTemperature)){
|
||||
SetN2kPGN130312(N2kMsg, 0, 0,(tN2kTempSource) TempSource, CToKelvin(sensors.airTemperature), N2kDoubleNA);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
if(!isnan(sensors.airPressure)){
|
||||
SetN2kPGN130314(N2kMsg, 0, 0, (tN2kPressureSource) mBarToPascal(PressureSource), sensors.airPressure);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
}
|
||||
else if((envsensor == "BMP085" || envsensor == "BMP180") && BMP180_ready == true){
|
||||
sensors.airTemperature = bmp085.readTemperature();
|
||||
sensors.airPressure =bmp085.readPressure()/100;
|
||||
// Send to NMEA200 bus
|
||||
if(!isnan(sensors.airTemperature)){
|
||||
SetN2kPGN130312(N2kMsg, 0, 0,(tN2kTempSource) TempSource, CToKelvin(sensors.airTemperature), N2kDoubleNA);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
if(!isnan(sensors.airPressure)){
|
||||
SetN2kPGN130314(N2kMsg, 0, 0, (tN2kPressureSource) mBarToPascal(PressureSource), sensors.airPressure);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
}
|
||||
else if((envsensor == "SHT21" || envsensor == "HTU21") && SHT21_ready == true){
|
||||
sensors.airHumidity = sht21.readCompensatedHumidity();
|
||||
sensors.airTemperature = sht21.readTemperature();
|
||||
// Send to NMEA200 bus
|
||||
if(!isnan(sensors.airTemperature)){
|
||||
SetN2kPGN130312(N2kMsg, 0, 0,(tN2kTempSource) TempSource, CToKelvin(sensors.airTemperature), N2kDoubleNA);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
if(!isnan(sensors.airHumidity)){
|
||||
SetN2kPGN130313(N2kMsg, 0, 0,(tN2kHumiditySource) HumiditySource, sensors.airHumidity, N2kDoubleNA);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Send rotation angle all 500ms
|
||||
if(millis() > starttime7 + 500){
|
||||
starttime7 = millis();
|
||||
double rotationAngle=0;
|
||||
if(String(rotsensor) == "AS5600" && AS5600_ready == true && as5600.detectMagnet() == 1){
|
||||
rotationAngle = as5600.getRawAngle() * 0.087; // 0...4095 segments = 0.087 degree
|
||||
// Offset correction
|
||||
if(rotoffset >= 0){
|
||||
rotationAngle = rotationAngle + rotoffset;
|
||||
rotationAngle = int(rotationAngle) % 360;
|
||||
}
|
||||
else{
|
||||
rotationAngle = rotationAngle + 360 + rotoffset;
|
||||
rotationAngle = int(rotationAngle) % 360;
|
||||
}
|
||||
// Send to NMEA200 bus as rudder angle values
|
||||
if(!isnan(rotationAngle) && String(rotfunction) == "Rudder"){
|
||||
double rudder = rotationAngle - 180; // Center position is 180°
|
||||
// Rudder limits to +/-45°
|
||||
if(rudder < -45){
|
||||
rudder = -45;
|
||||
}
|
||||
if(rudder > 45){
|
||||
rudder = 45;
|
||||
}
|
||||
SetN2kRudder(N2kMsg, DegToRad(rudder), 0, N2kRDO_NoDirectionOrder, PI);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
// Send to NMEA200 bus as wind angle values
|
||||
if(!isnan(rotationAngle) && String(rotfunction) == "Wind"){
|
||||
SetN2kWindSpeed(N2kMsg, 1, 0, DegToRad(rotationAngle), N2kWind_Apprent);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
// Send to NMEA200 bus as trim angle values in [%]
|
||||
if(!isnan(rotationAngle) && (String(rotfunction) == "Mast" || String(rotfunction) == "Keel" || String(rotfunction) == "Trim" || String(rotfunction) == "Boom")){
|
||||
int trim = rotationAngle * 100 / 360; // 0...360° -> 0...100%
|
||||
SetN2kTrimTab(N2kMsg, trim, trim);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
sensors.rotationAngle = DegToRad(rotationAngle); // Data take over to page
|
||||
sensors.validRotAngle = true; // Valid true, magnet present
|
||||
}
|
||||
else{
|
||||
sensors.rotationAngle = 0; // Center position 0°
|
||||
sensors.validRotAngle = false; // Valid false, magnet missing
|
||||
}
|
||||
}
|
||||
|
||||
// Send battery power value all 1s
|
||||
if(millis() > starttime8 + 1000 && (String(powsensor1) == "INA219" || String(powsensor1) == "INA226")){
|
||||
starttime8 = millis();
|
||||
if(String(powsensor1) == "INA226" && INA226_1_ready == true){
|
||||
double voltage = ina226_1.getBusVoltage();
|
||||
// Limiter for voltage average building
|
||||
if(voltage < 0){
|
||||
voltage = 0;
|
||||
}
|
||||
if(voltage > 30){
|
||||
voltage = 30;
|
||||
}
|
||||
sensors.batteryVoltage = voltage;
|
||||
sensors.batteryCurrent = ina226_1.getCurrent() * corrFactor;
|
||||
// Eliminates bit jitter by zero current values
|
||||
float factor = maxCurrent / 100;
|
||||
if(sensors.batteryCurrent >= (-0.015 * factor) && sensors.batteryCurrent <= (0.015 * factor)){
|
||||
sensors.batteryCurrent = 0;
|
||||
}
|
||||
// Save actual values in average arrays as integer values
|
||||
batV.reading(int(sensors.batteryVoltage * 100));
|
||||
batC.reading(int(sensors.batteryCurrent * 10));
|
||||
// Calculate the average values for different time lines from integer values
|
||||
sensors.batteryVoltage10 = batV.getAvg(10) / 100.0;
|
||||
sensors.batteryVoltage60 = batV.getAvg(60) / 100.0;
|
||||
sensors.batteryVoltage300 = batV.getAvg(300) / 100.0;
|
||||
sensors.batteryCurrent10 = batC.getAvg(10) / 10.0;
|
||||
sensors.batteryCurrent60 = batC.getAvg(60) / 10.0;
|
||||
sensors.batteryCurrent300 = batC.getAvg(300) / 10.0;
|
||||
sensors.batteryPower10 = sensors.batteryVoltage10 * sensors.batteryCurrent10;
|
||||
sensors.batteryPower60 = sensors.batteryVoltage60 * sensors.batteryCurrent60;
|
||||
sensors.batteryPower300 = sensors.batteryVoltage300 * sensors.batteryCurrent300;
|
||||
// sensors.batteryPower = ina226_1.getPower() * corrFactor; // Real value
|
||||
sensors.batteryPower = sensors.batteryVoltage * sensors.batteryCurrent; // Calculated power value (more stable)
|
||||
}
|
||||
// Send battery live data to NMEA200 bus
|
||||
if(!isnan(sensors.batteryVoltage) && !isnan(sensors.batteryCurrent)){
|
||||
SetN2kDCBatStatus(N2kMsg, 0, sensors.batteryVoltage, sensors.batteryCurrent, N2kDoubleNA, 1);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
}
|
||||
|
||||
// Send solar power value all 1s
|
||||
if(millis() > starttime9 + 1000 && (String(powsensor2) == "INA219" || String(powsensor2) == "INA226")){
|
||||
starttime9 = millis();
|
||||
if(String(powsensor2) == "INA226" && INA226_2_ready == true){
|
||||
double voltage = ina226_2.getBusVoltage();
|
||||
// Limiter for voltage average building
|
||||
if(voltage < 0){
|
||||
voltage = 0;
|
||||
}
|
||||
if(voltage > 30){
|
||||
voltage = 30;
|
||||
}
|
||||
sensors.solarVoltage = voltage;
|
||||
sensors.solarCurrent = ina226_2.getCurrent() * corrFactor;
|
||||
// Eliminates bit jitter by zero current values
|
||||
float factor = maxCurrent / 100;
|
||||
if(sensors.solarCurrent >= (-0.015 * factor) && sensors.solarCurrent <= (0.015 * factor)){
|
||||
sensors.solarCurrent = 0;
|
||||
}
|
||||
|
||||
// Calculate power value
|
||||
sensors.solarPower = sensors.solarVoltage * sensors.solarCurrent; // more stable
|
||||
}
|
||||
// Send solar live data to NMEA200 bus
|
||||
if(!isnan(sensors.solarVoltage) && !isnan(sensors.solarCurrent)){
|
||||
SetN2kDCBatStatus(N2kMsg, 1, sensors.solarVoltage, sensors.solarCurrent, N2kDoubleNA, 1);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
}
|
||||
|
||||
// Send generator power value all 1s
|
||||
if(millis() > starttime10 + 1000 && (String(powsensor3) == "INA219" || String(powsensor3) == "INA226")){
|
||||
starttime10 = millis();
|
||||
if(String(powsensor3) == "INA226" && INA226_3_ready == true){
|
||||
double voltage = ina226_3.getBusVoltage();
|
||||
// Limiter for voltage average building
|
||||
if(voltage < 0){
|
||||
voltage = 0;
|
||||
}
|
||||
if(voltage > 30){
|
||||
voltage = 30;
|
||||
}
|
||||
sensors.generatorVoltage = voltage;
|
||||
sensors.generatorCurrent = ina226_3.getCurrent() * corrFactor;
|
||||
// Eliminates bit jitter by zero current values
|
||||
float factor = maxCurrent / 100;
|
||||
if(sensors.generatorCurrent >= (-0.015 * factor) && sensors.generatorCurrent <= (0.015 * factor)){
|
||||
sensors.generatorCurrent = 0;
|
||||
}
|
||||
|
||||
// Calculate power value
|
||||
sensors.generatorPower = sensors.generatorVoltage * sensors.generatorCurrent; // more stable
|
||||
}
|
||||
// Send solar live data to NMEA200 bus
|
||||
if(!isnan(sensors.generatorVoltage) && !isnan(sensors.generatorCurrent)){
|
||||
SetN2kDCBatStatus(N2kMsg, 2, sensors.generatorVoltage, sensors.generatorCurrent, N2kDoubleNA, 1);
|
||||
api->sendN2kMessage(N2kMsg);
|
||||
}
|
||||
}
|
||||
|
||||
shared->setSensorData(sensors);
|
||||
}
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
|
||||
|
||||
void createSensorTask(SharedData *shared){
|
||||
xTaskCreate(sensorTask,"readSensors",10000,shared,3,NULL);
|
||||
}
|
||||
#endif
|
|
@ -1,29 +0,0 @@
|
|||
#pragma once
|
||||
#include "GwSynchronized.h"
|
||||
#include "GwApi.h"
|
||||
#include "freertos/semphr.h"
|
||||
#include "Pagedata.h"
|
||||
|
||||
class SharedData{
|
||||
private:
|
||||
SemaphoreHandle_t locker;
|
||||
SensorData sensors;
|
||||
public:
|
||||
GwApi *api=NULL;
|
||||
SharedData(GwApi *api){
|
||||
locker=xSemaphoreCreateMutex();
|
||||
this->api=api;
|
||||
}
|
||||
void setSensorData(SensorData &values){
|
||||
GWSYNCHRONIZED(&locker);
|
||||
sensors=values;
|
||||
}
|
||||
SensorData getSensorData(){
|
||||
GWSYNCHRONIZED(&locker);
|
||||
return sensors;
|
||||
}
|
||||
};
|
||||
|
||||
void createSensorTask(SharedData *shared);
|
||||
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
#pragma once
|
||||
#include "NMEA0183.h"
|
||||
#include "GwNmea0183Msg.h"
|
||||
|
||||
class ObpNmea0183 : public tNMEA0183
|
||||
{
|
||||
public:
|
||||
bool GetMessageCor(SNMEA0183Msg &NMEA0183Msg)
|
||||
{
|
||||
if (!IsOpen())
|
||||
return false;
|
||||
|
||||
bool result = false;
|
||||
|
||||
while (port->available() > 0 && !result)
|
||||
{
|
||||
int NewByte = port->read();
|
||||
if (NewByte == '$' || NewByte == '!')
|
||||
{ // Message start
|
||||
MsgInStarted = true;
|
||||
MsgInPos = 0;
|
||||
MsgInBuf[MsgInPos] = NewByte;
|
||||
MsgInPos++;
|
||||
}
|
||||
else if (MsgInStarted)
|
||||
{
|
||||
MsgInBuf[MsgInPos] = NewByte;
|
||||
if (NewByte == '*')
|
||||
MsgCheckSumStartPos = MsgInPos;
|
||||
MsgInPos++;
|
||||
if (MsgCheckSumStartPos != SIZE_MAX and MsgCheckSumStartPos + 3 == MsgInPos)
|
||||
{ // We have full checksum and so full message
|
||||
MsgInBuf[MsgInPos] = 0; // add null termination
|
||||
if (NMEA0183Msg.SetMessageCor(MsgInBuf))
|
||||
{
|
||||
NMEA0183Msg.SourceID = SourceID;
|
||||
result = true;
|
||||
}
|
||||
MsgInStarted = false;
|
||||
MsgInPos = 0;
|
||||
MsgCheckSumStartPos = SIZE_MAX;
|
||||
}
|
||||
if (MsgInPos >= MAX_NMEA0183_MSG_BUF_LEN)
|
||||
{ // Too may chars in message. Start from beginning
|
||||
MsgInStarted = false;
|
||||
MsgInPos = 0;
|
||||
MsgCheckSumStartPos = SIZE_MAX;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
};
|
|
@ -1,208 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
|
||||
class PageApparentWind : public Page
|
||||
{
|
||||
bool keylock = false; // Keylock
|
||||
int16_t lp = 80; // Pointer length
|
||||
|
||||
public:
|
||||
PageApparentWind(CommonData &common){
|
||||
common.logger->logDebug(GwLog::LOG,"Show PageApparentWind");
|
||||
}
|
||||
|
||||
// Key functions
|
||||
virtual int handleKey(int key){
|
||||
// Reduce instrument size
|
||||
if(key == 2){ // Code for reduce
|
||||
lp = lp - 10;
|
||||
if(lp < 10){
|
||||
lp = 10;
|
||||
}
|
||||
return 0; // Commit the key
|
||||
}
|
||||
|
||||
// Enlarge instrument size
|
||||
if(key == 5){ // Code for enlarge
|
||||
lp = lp + 10;
|
||||
if(lp > 80){
|
||||
lp = 80;
|
||||
}
|
||||
return 0; // Commit the key
|
||||
}
|
||||
|
||||
// Keylock function
|
||||
if(key == 11){ // Code for keylock
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData)
|
||||
{
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
static String svalue1old = "";
|
||||
static String unit1old = "";
|
||||
static String svalue2old = "";
|
||||
static String unit2old = "";
|
||||
|
||||
// Get config data
|
||||
String lengthformat = config->getString(config->lengthFormat);
|
||||
// bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
bool holdvalues = config->getBool(config->holdvalues);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
|
||||
// Get boat values for AWS
|
||||
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
|
||||
String name1 = bvalue1->getName().c_str(); // Value name
|
||||
name1 = name1.substring(0, 6); // String length limit for value name
|
||||
double value1 = bvalue1->value; // Value as double in SI unit
|
||||
// bool valid1 = bvalue1->valid; // Valid information
|
||||
String svalue1 = formatValue(bvalue1, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit1 = formatValue(bvalue1, commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values for AWD
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // First element in list (only one value by PageOneValue)
|
||||
String name2 = bvalue2->getName().c_str(); // Value name
|
||||
name2 = name2.substring(0, 6); // String length limit for value name
|
||||
double value2 = bvalue2->value; // Value as double in SI unit
|
||||
// bool valid2 = bvalue2->valid; // Valid information
|
||||
String svalue2 = formatValue(bvalue2, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit2 = formatValue(bvalue2, commonData).unit; // Unit of value
|
||||
|
||||
// Optical warning by limit violation (unused)
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
|
||||
// Logging boat values
|
||||
if (bvalue1 == NULL) return;
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageApparentWind, %s:%f, %s:%f", name1.c_str(), value1, name2.c_str(), value2);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
// Show values AWS
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 50);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(name1); // Value name
|
||||
getdisplay().print(": ");
|
||||
getdisplay().print(svalue1); // Value
|
||||
getdisplay().print(" ");
|
||||
getdisplay().print(unit1); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(name1); // Value name
|
||||
getdisplay().print(": ");
|
||||
getdisplay().print(svalue1old); // Value old
|
||||
getdisplay().print(" ");
|
||||
getdisplay().print(unit1old); // Unit old
|
||||
}
|
||||
|
||||
// Show values AWD
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 260);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(name2); // Value name
|
||||
getdisplay().print(": ");
|
||||
getdisplay().print(svalue2); // Value
|
||||
getdisplay().print(" ");
|
||||
getdisplay().print(unit2); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(name2); // Value name
|
||||
getdisplay().print(": ");
|
||||
getdisplay().print(svalue2old); // Value old
|
||||
getdisplay().print(" ");
|
||||
getdisplay().print(unit2old); // Unit old
|
||||
}
|
||||
|
||||
// Draw wind pointer
|
||||
static int16_t x0 = 200; // Center point
|
||||
static int16_t y0 = 145;
|
||||
static int16_t x1 = x0; // Start point for pointer
|
||||
static int16_t y1 = y0;
|
||||
static int16_t x2 = x0; // End point for pointer
|
||||
static int16_t y2 = y0;
|
||||
|
||||
//Draw instrument
|
||||
getdisplay().fillCircle(x0, y0, lp + 5, pixelcolor); // Black circle
|
||||
getdisplay().fillCircle(x0, y0, lp + 1, bgcolor); // White circle
|
||||
|
||||
// Calculation end point of pointer
|
||||
value2 = value2 - 3.14 / 2;
|
||||
x1 = x0 + cos(value2) * lp * 0.6;
|
||||
y1 = y0 + sin(value2) * lp * 0.6;
|
||||
x2 = x0 + cos(value2) * lp;
|
||||
y2 = y0 + sin(value2) * lp;
|
||||
getdisplay().drawLine(x1, y1, x2, y2, pixelcolor);
|
||||
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
static Page *createPage(CommonData &common){
|
||||
return new PageApparentWind(common);
|
||||
}
|
||||
/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect (0 here)
|
||||
* and will will provide the names of the fixed values we need
|
||||
*/
|
||||
PageDescription registerPageApparentWind(
|
||||
"ApparentWind", // Page name
|
||||
createPage, // Action
|
||||
0, // Number of bus values depends on selection in Web configuration
|
||||
{"AWS","AWA"}, // Bus values we need in the page
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,239 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
|
||||
class PageBME280 : public Page
|
||||
{
|
||||
bool keylock = false; // Keylock
|
||||
|
||||
public:
|
||||
PageBME280(CommonData &comon){
|
||||
comon.logger->logDebug(GwLog::LOG,"Show PageThreeValue");
|
||||
}
|
||||
|
||||
virtual int handleKey(int key){
|
||||
if(key == 11){ // Code for keylock
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData){
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
double value1 = 0;
|
||||
double value2 = 0;
|
||||
double value3 = 0;
|
||||
String svalue1 = "";
|
||||
String svalue2 = "";
|
||||
String svalue3 = "";
|
||||
|
||||
// Get config data
|
||||
String tempformat = config->getString(config->tempFormat);
|
||||
bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
String useenvsensor = config->getString(config->useEnvSensor);
|
||||
|
||||
// Get sensor values #1
|
||||
String name1 = "Temp"; // Value name
|
||||
name1 = name1.substring(0, 6); // String length limit for value name
|
||||
if(simulation == false){
|
||||
value1 = commonData.data.airTemperature; // Value as double in SI unit
|
||||
}
|
||||
else{
|
||||
value1 = 23.0 + float(random(0, 10)) / 10.0;
|
||||
}
|
||||
// Display data when sensor activated
|
||||
if(String(useenvsensor) == "BME280"){
|
||||
svalue1 = String(value1, 1); // Formatted value as string including unit conversion and switching decimal places
|
||||
}
|
||||
else{
|
||||
svalue1 = "---";
|
||||
}
|
||||
String unit1 = "Deg C"; // Unit of value
|
||||
|
||||
// Get sensor values #2
|
||||
String name2 = "Humid"; // Value name
|
||||
name2 = name2.substring(0, 6); // String length limit for value name
|
||||
if(simulation == false){
|
||||
value2 = commonData.data.airHumidity; // Value as double in SI unit
|
||||
}
|
||||
else{
|
||||
value2 = 43 + float(random(0, 4));
|
||||
}
|
||||
// Display data when sensor activated
|
||||
if(String(useenvsensor) == "BME280"){
|
||||
svalue2 = String(value2, 0); // Formatted value as string including unit conversion and switching decimal places
|
||||
}
|
||||
else{
|
||||
svalue2 = "---";
|
||||
}
|
||||
String unit2 = "%"; // Unit of value
|
||||
|
||||
// Get sensor values #3
|
||||
String name3 = "Press"; // Value name
|
||||
name3 = name3.substring(0, 6); // String length limit for value name
|
||||
if(simulation == false){
|
||||
value3 = commonData.data.airPressure; // Value as double in SI unit
|
||||
}
|
||||
else{
|
||||
value3 = 1006 + float(random(0, 5));
|
||||
}
|
||||
// Display data when sensor activated
|
||||
if(String(useenvsensor) == "BME280"){
|
||||
svalue3 = String(value3, 0); // Formatted value as string including unit conversion and switching decimal places
|
||||
}
|
||||
else{
|
||||
svalue3 = "---";
|
||||
}
|
||||
String unit3 = "hPa"; // Unit of value
|
||||
|
||||
// Optical warning by limit violation (unused)
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
|
||||
// Logging boat values
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageBME280, %s: %f, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
// ############### Value 1 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 55);
|
||||
getdisplay().print(name1); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(20, 90);
|
||||
getdisplay().print(unit1); // Unit
|
||||
|
||||
// Switch font if format for any values
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic30pt7b);
|
||||
getdisplay().setCursor(180, 90);
|
||||
|
||||
// Show bus data
|
||||
getdisplay().print(svalue1); // Real value as formated string
|
||||
|
||||
// ############### Horizontal Line ################
|
||||
|
||||
// Horizontal line 3 pix
|
||||
getdisplay().fillRect(0, 105, 400, 3, pixelcolor);
|
||||
|
||||
// ############### Value 2 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 145);
|
||||
getdisplay().print(name2); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(20, 180);
|
||||
getdisplay().print(unit2); // Unit
|
||||
|
||||
// Switch font if format for any values
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic30pt7b);
|
||||
getdisplay().setCursor(180, 180);
|
||||
|
||||
// Show bus data
|
||||
getdisplay().print(svalue2); // Real value as formated string
|
||||
|
||||
// ############### Horizontal Line ################
|
||||
|
||||
// Horizontal line 3 pix
|
||||
getdisplay().fillRect(0, 195, 400, 3, pixelcolor);
|
||||
|
||||
// ############### Value 3 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 235);
|
||||
getdisplay().print(name3); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(20, 270);
|
||||
getdisplay().print(unit3); // Unit
|
||||
|
||||
// Switch font if format for any values
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic30pt7b);
|
||||
getdisplay().setCursor(180, 270);
|
||||
|
||||
// Show bus data
|
||||
getdisplay().print(svalue3); // Real value as formated string
|
||||
|
||||
// ############### Key Layout ################
|
||||
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
static Page *createPage(CommonData &common){
|
||||
return new PageBME280(common);
|
||||
}/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect
|
||||
* this will be number of BoatValue pointers in pageData.values
|
||||
*/
|
||||
PageDescription registerPageBME280(
|
||||
"BME280", // Page name
|
||||
createPage, // Action
|
||||
0, // Number of bus values depends on selection in Web configuration
|
||||
{}, // Names of bus values undepends on selection in Web configuration (refer GwBoatData.h)
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,351 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
|
||||
class PageBattery : public Page
|
||||
{
|
||||
bool keylock = false; // Keylock
|
||||
int average = 0; // Average type [0...3], 0=off, 1=10s, 2=60s, 3=300s
|
||||
|
||||
public:
|
||||
PageBattery(CommonData &comon){
|
||||
comon.logger->logDebug(GwLog::LOG,"Show PageThreeValue");
|
||||
}
|
||||
|
||||
virtual int handleKey(int key){
|
||||
// Change average
|
||||
if(key == 1){
|
||||
average ++;
|
||||
average = average % 4; // Modulo 4
|
||||
return 0; // Commit the key
|
||||
}
|
||||
|
||||
// Code for keylock
|
||||
if(key == 11){
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData){
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
// Old values for hold function
|
||||
double value1 = 0;
|
||||
static String svalue1old = "";
|
||||
static String unit1old = "";
|
||||
double value2 = 0;
|
||||
static String svalue2old = "";
|
||||
static String unit2old = "";
|
||||
double value3 = 0;
|
||||
static String svalue3old = "";
|
||||
static String unit3old = "";
|
||||
|
||||
// Get config data
|
||||
String lengthformat = config->getString(config->lengthFormat);
|
||||
// bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
String powsensor1 = config->getString(config->usePowSensor1);
|
||||
bool simulation = config->getBool(config->useSimuData);
|
||||
|
||||
// Get voltage value
|
||||
String name1 = "VBat"; // Value name
|
||||
if(String(powsensor1) == "INA219" || String(powsensor1) == "INA226"){
|
||||
// Switch average values
|
||||
switch (average) {
|
||||
case 0:
|
||||
value1 = commonData.data.batteryVoltage; // Live data
|
||||
break;
|
||||
case 1:
|
||||
value1 = commonData.data.batteryVoltage10; // Average 10s
|
||||
break;
|
||||
case 2:
|
||||
value1 = commonData.data.batteryVoltage60; // Average 60s
|
||||
break;
|
||||
case 3:
|
||||
value1 = commonData.data.batteryVoltage300; // Average 300s
|
||||
break;
|
||||
default:
|
||||
value1 = commonData.data.batteryVoltage; // Default
|
||||
break;
|
||||
}
|
||||
}
|
||||
else{
|
||||
if(simulation == true){
|
||||
value1 = 12 + float(random(0, 5)) / 10; // Simulation data
|
||||
}
|
||||
}
|
||||
String svalue1 = String(value1); // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit1 = "V"; // Unit of value
|
||||
|
||||
// Get current value
|
||||
String name2 = "IBat"; // Value name
|
||||
if(String(powsensor1) == "INA219" || String(powsensor1) == "INA226"){
|
||||
switch (average) {
|
||||
case 0:
|
||||
value2 = commonData.data.batteryCurrent; // Live data
|
||||
break;
|
||||
case 1:
|
||||
value2 = commonData.data.batteryCurrent10; // Average 10s
|
||||
break;
|
||||
case 2:
|
||||
value2 = commonData.data.batteryCurrent60; // Average 60s
|
||||
break;
|
||||
case 3:
|
||||
value2 = commonData.data.batteryCurrent300; // Average 300s
|
||||
break;
|
||||
default:
|
||||
value2 = commonData.data.batteryCurrent; // Default
|
||||
break;
|
||||
}
|
||||
}
|
||||
else{
|
||||
if(simulation == true){
|
||||
value2 = 8 + float(random(0, 10)) / 10; // Simulation data
|
||||
}
|
||||
}
|
||||
String svalue2 = String(value2); // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit2 = "A"; // Unit of value
|
||||
|
||||
// Get power value
|
||||
String name3 = "PBat"; // Value name
|
||||
if(String(powsensor1) == "INA219" || String(powsensor1) == "INA226"){
|
||||
switch (average) {
|
||||
case 0:
|
||||
value3 = commonData.data.batteryPower; // Live data
|
||||
break;
|
||||
case 1:
|
||||
value3 = commonData.data.batteryPower10; // Average 10s
|
||||
break;
|
||||
case 2:
|
||||
value3 = commonData.data.batteryPower60; // Average 60s
|
||||
break;
|
||||
case 3:
|
||||
value3 = commonData.data.batteryPower300; // Average 300s
|
||||
break;
|
||||
default:
|
||||
value3 = commonData.data.batteryPower; // Default
|
||||
break;
|
||||
}
|
||||
}
|
||||
else{
|
||||
if(simulation == true){
|
||||
value3 = value1 * value2; // Simulation data
|
||||
}
|
||||
}
|
||||
String svalue3 = String(value3); // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit3 = "W"; // Unit of value
|
||||
|
||||
// Optical warning by limit violation (unused)
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
|
||||
// Logging boat values
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageBattery, %s: %f, %s: %f, %s: %f, Avg: %d", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3, average);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
// Show average settings
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
switch (average) {
|
||||
case 0:
|
||||
getdisplay().setCursor(60, 90);
|
||||
getdisplay().print("Avg: 1s");
|
||||
getdisplay().setCursor(60, 180);
|
||||
getdisplay().print("Avg: 1s");
|
||||
getdisplay().setCursor(60, 270);
|
||||
getdisplay().print("Avg: 1s");
|
||||
break;
|
||||
case 1:
|
||||
getdisplay().setCursor(60, 90);
|
||||
getdisplay().print("Avg: 10s");
|
||||
getdisplay().setCursor(60, 180);
|
||||
getdisplay().print("Avg: 10s");
|
||||
getdisplay().setCursor(60, 270);
|
||||
getdisplay().print("Avg: 10s");
|
||||
break;
|
||||
case 2:
|
||||
getdisplay().setCursor(60, 90);
|
||||
getdisplay().print("Avg: 60s");
|
||||
getdisplay().setCursor(60, 180);
|
||||
getdisplay().print("Avg: 60s");
|
||||
getdisplay().setCursor(60, 270);
|
||||
getdisplay().print("Avg: 60s");
|
||||
break;
|
||||
case 3:
|
||||
getdisplay().setCursor(60, 90);
|
||||
getdisplay().print("Avg: 300s");
|
||||
getdisplay().setCursor(60, 180);
|
||||
getdisplay().print("Avg: 300s");
|
||||
getdisplay().setCursor(60, 270);
|
||||
getdisplay().print("Avg: 300s");
|
||||
break;
|
||||
default:
|
||||
getdisplay().setCursor(60, 90);
|
||||
getdisplay().print("Avg: 1s");
|
||||
getdisplay().setCursor(60, 180);
|
||||
getdisplay().print("Avg: 1s");
|
||||
getdisplay().setCursor(60, 270);
|
||||
getdisplay().print("Avg: 1s");
|
||||
break;
|
||||
}
|
||||
|
||||
// ############### Value 1 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 55);
|
||||
getdisplay().print(name1); // Value name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(20, 90);
|
||||
getdisplay().print(unit1); // Unit
|
||||
|
||||
// Show value
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic30pt7b);
|
||||
getdisplay().setCursor(180, 90);
|
||||
|
||||
// Show bus data
|
||||
if(String(powsensor1) != "off"){
|
||||
getdisplay().print(value1,2); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print("---"); // No sensor data (sensor is off)
|
||||
}
|
||||
|
||||
// ############### Horizontal Line ################
|
||||
|
||||
// Horizontal line 3 pix
|
||||
getdisplay().fillRect(0, 105, 400, 3, pixelcolor);
|
||||
|
||||
// ############### Value 2 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 145);
|
||||
getdisplay().print(name2); // Value name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(20, 180);
|
||||
getdisplay().print(unit2); // Unit
|
||||
|
||||
// Show value
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic30pt7b);
|
||||
getdisplay().setCursor(180, 180);
|
||||
|
||||
// Show bus data
|
||||
if(String(powsensor1) != "off"){
|
||||
getdisplay().print(value2,1); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print("---"); // No sensor data (sensor is off)
|
||||
}
|
||||
|
||||
// ############### Horizontal Line ################
|
||||
|
||||
// Horizontal line 3 pix
|
||||
getdisplay().fillRect(0, 195, 400, 3, pixelcolor);
|
||||
|
||||
// ############### Value 3 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 235);
|
||||
getdisplay().print(name3); // Value name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(20, 270);
|
||||
getdisplay().print(unit3); // Unit
|
||||
|
||||
// Show value
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic30pt7b);
|
||||
getdisplay().setCursor(180, 270);
|
||||
|
||||
// Show bus data
|
||||
if(String(powsensor1) != "off"){
|
||||
getdisplay().print(value3,1); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print("---"); // No sensor data (sensor is off)
|
||||
}
|
||||
|
||||
|
||||
// ############### Key Layout ################
|
||||
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(10, 290);
|
||||
getdisplay().print("[AVG]");
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
static Page *createPage(CommonData &common){
|
||||
return new PageBattery(common);
|
||||
}/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect
|
||||
* this will be number of BoatValue pointers in pageData.values
|
||||
*/
|
||||
PageDescription registerPageBattery(
|
||||
"Battery", // Page name
|
||||
createPage, // Action
|
||||
0, // Number of bus values depends on selection in Web configuration
|
||||
{}, // Names of bus values undepends on selection in Web configuration (refer GwBoatData.h)
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,395 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
#include "movingAvg.h" // Lib for moving average building
|
||||
|
||||
class PageBattery2 : public Page
|
||||
{
|
||||
bool init = false; // Marker for init done
|
||||
bool keylock = false; // Keylock
|
||||
int average = 0; // Average type [0...3], 0=off, 1=10s, 2=60s, 3=300s
|
||||
bool trend = true; // Trend indicator [0|1], 0=off, 1=on
|
||||
double raw = 0;
|
||||
|
||||
public:
|
||||
PageBattery2(CommonData &common){
|
||||
common.logger->logDebug(GwLog::LOG,"Show PageBattery2");
|
||||
}
|
||||
virtual int handleKey(int key){
|
||||
// Change average
|
||||
if(key == 1){
|
||||
average ++;
|
||||
average = average % 4; // Modulo 4
|
||||
return 0; // Commit the key
|
||||
}
|
||||
|
||||
// Trend indicator
|
||||
if(key == 5){
|
||||
trend = !trend;
|
||||
return 0; // Commit the key
|
||||
}
|
||||
|
||||
// Code for keylock
|
||||
if(key == 11){
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData)
|
||||
{
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
// Polynominal coefficients second order for battery energy level calculation
|
||||
// index 0 = Pb, 1 = Gel, 2 = AGM, 3 = LiFePo4
|
||||
float x0[4] = {+3082.5178, +1656.1571, +1316.8766, +14986.9336}; // Offset
|
||||
float x1[4] = {-603.7478, -351.6503, -298.1454, -2432.1985}; // X
|
||||
float x2[4] = {+29.0340, +17.9000, +15.8196, +98.6132}; // X²
|
||||
int batPercentage = 0; // Battery level
|
||||
float batRange = 0; // Range in hours
|
||||
|
||||
// Get config data
|
||||
bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
bool holdvalues = config->getBool(config->holdvalues);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String batVoltage = config->getString(config->batteryVoltage);
|
||||
int batCapacity = config->getInt(config->batteryCapacity);
|
||||
String batType = config->getString(config->batteryType);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
String powerSensor = config->getString(config->usePowSensor1);
|
||||
|
||||
double value1 = 0; // Battery voltage
|
||||
double value2 = 0; // Battery current
|
||||
double value3 = 0; // Battery power consumption
|
||||
double valueTrend = 0; // Average over 10 values
|
||||
|
||||
// Get voltage value
|
||||
String name1 = "VBat";
|
||||
|
||||
// Create trend value
|
||||
if(init == false){ // Load start values for first page run
|
||||
valueTrend = commonData.data.batteryVoltage10;
|
||||
init = true;
|
||||
}
|
||||
else{ // Reading trend value
|
||||
valueTrend = commonData.data.batteryVoltage10;
|
||||
}
|
||||
|
||||
// Get raw value for trend indicator
|
||||
raw = commonData.data.batteryVoltage; // Live data
|
||||
|
||||
// Switch average values
|
||||
switch (average) {
|
||||
case 0:
|
||||
value1 = commonData.data.batteryVoltage; // Live data
|
||||
value2 = commonData.data.batteryCurrent;
|
||||
value3 = commonData.data.batteryPower;
|
||||
break;
|
||||
case 1:
|
||||
value1 = commonData.data.batteryVoltage10; // Average 10s
|
||||
value2 = commonData.data.batteryCurrent10;
|
||||
value3 = commonData.data.batteryPower10;
|
||||
break;
|
||||
case 2:
|
||||
value1 = commonData.data.batteryVoltage60; // Average 60s
|
||||
value2 = commonData.data.batteryCurrent60;
|
||||
value3 = commonData.data.batteryPower60;
|
||||
break;
|
||||
case 3:
|
||||
value1 = commonData.data.batteryVoltage300; // Average 300s
|
||||
value2 = commonData.data.batteryCurrent300;
|
||||
value3 = commonData.data.batteryPower300;
|
||||
break;
|
||||
default:
|
||||
value1 = commonData.data.batteryVoltage; // Default
|
||||
value2 = commonData.data.batteryCurrent;
|
||||
value3 = commonData.data.batteryPower;
|
||||
break;
|
||||
}
|
||||
bool valid1 = true;
|
||||
|
||||
// Battery energy level calculation
|
||||
if(String(batType) == "Pb"){
|
||||
batPercentage = (value1 * value1 * x2[0]) + (value1 * x1[0]) + x0[0];
|
||||
}
|
||||
if(String(batType) == "Gel"){
|
||||
batPercentage = (value1 * value1 * x2[1]) + (value1 * x1[1]) + x0[1];
|
||||
}
|
||||
if(String(batType) == "AGM"){
|
||||
batPercentage = (value1 * value1 * x2[2]) + (value1 * x1[2]) + x0[2];
|
||||
}
|
||||
if(String(batType) == "LiFePo4"){
|
||||
batPercentage = (value1 * value1 * x2[3]) + (value1 * x1[3]) + x0[3];
|
||||
}
|
||||
// Limits for battery level
|
||||
if(batPercentage < 0) batPercentage = 0;
|
||||
if(batPercentage > 99) batPercentage = 99;
|
||||
|
||||
// Battery range calculation
|
||||
if(value2 <= 0) value2 = 0.0000001; // Limiting current
|
||||
batRange = batCapacity * batPercentage / 100 / value2;
|
||||
// Limits for battery range
|
||||
if(batRange < 0) batRange = 0;
|
||||
if(batRange > 99) batRange = 99;
|
||||
|
||||
// Optical warning by limit violation
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
// Limits for Pb battery
|
||||
if(String(batType) == "Pb" && (raw < 11.8 || raw > 14.8)){
|
||||
setBlinkingLED(true);
|
||||
}
|
||||
if(String(batType) == "Pb" && (raw >= 11.8 && raw <= 14.8)){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
// Limits for Gel battery
|
||||
if(String(batType) == "Gel" && (raw < 11.8 || raw > 14.4)){
|
||||
setBlinkingLED(true);
|
||||
}
|
||||
if(String(batType) == "Gel" && (raw >= 11.8 && raw <= 14.4)){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
// Limits for AGM battery
|
||||
if(String(batType) == "AGM" && (raw < 11.8 || raw > 14.7)){
|
||||
setBlinkingLED(true);
|
||||
}
|
||||
if(String(batType) == "AGM" && (raw >= 11.8 && raw <= 14.7)){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
// Limits for LiFePo4 battery
|
||||
if(String(batType) == "LiFePo4" && (raw < 12.0 || raw > 14.6)){
|
||||
setBlinkingLED(true);
|
||||
}
|
||||
if(String(batType) == "LiFePo4" && (raw >= 12.0 && raw <= 14.6)){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
}
|
||||
|
||||
// Logging voltage value
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageBattery2, Type:%s %s:=%f", batType.c_str(), name1.c_str(), raw);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Clear display, set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(10, 65);
|
||||
getdisplay().print("Bat.");
|
||||
|
||||
// Show batery type
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(90, 65);
|
||||
getdisplay().print(batType);
|
||||
|
||||
// Show voltage type
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(10, 140);
|
||||
int bvoltage = 0;
|
||||
if(String(batVoltage) == "12V") bvoltage = 12;
|
||||
else bvoltage = 24;
|
||||
getdisplay().print(bvoltage);
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().print("V");
|
||||
|
||||
// Show batery capacity
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(10, 200);
|
||||
if(batCapacity <= 999) getdisplay().print(batCapacity, 0);
|
||||
if(batCapacity > 999) getdisplay().print(float(batCapacity/1000.0), 1);
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
if(batCapacity <= 999) getdisplay().print("Ah");
|
||||
if(batCapacity > 999) getdisplay().print("kAh");
|
||||
|
||||
// Show info
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(10, 235);
|
||||
getdisplay().print("Installed");
|
||||
getdisplay().setCursor(10, 255);
|
||||
getdisplay().print("Battery Type");
|
||||
|
||||
// Show battery with fill level
|
||||
batteryGraphic(150, 45, batPercentage, pixelcolor, bgcolor);
|
||||
|
||||
// Show average settings
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(150, 145);
|
||||
switch (average) {
|
||||
case 0:
|
||||
getdisplay().print("Avg: 1s");
|
||||
break;
|
||||
case 1:
|
||||
getdisplay().print("Avg: 10s");
|
||||
break;
|
||||
case 2:
|
||||
getdisplay().print("Avg: 60s");
|
||||
break;
|
||||
case 3:
|
||||
getdisplay().print("Avg: 300s");
|
||||
break;
|
||||
default:
|
||||
getdisplay().print("Avg: 1s");
|
||||
break;
|
||||
}
|
||||
|
||||
// Show fill level in percent
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(150, 200);
|
||||
getdisplay().print(batPercentage);
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().print("%");
|
||||
|
||||
// Show time to full discharge
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(150, 260);
|
||||
if((powerSensor == "INA219" || powerSensor == "INA226") && simulation == false){
|
||||
if(batRange < 9.9) getdisplay().print(batRange, 1);
|
||||
else getdisplay().print(batRange, 0);
|
||||
}
|
||||
else getdisplay().print("--");
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().print("h");
|
||||
|
||||
// Show sensor type info
|
||||
String i2cAddr = "";
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(270, 60);
|
||||
if(powerSensor == "off") getdisplay().print("Internal");
|
||||
if(powerSensor == "INA219"){
|
||||
getdisplay().print("INA219");
|
||||
}
|
||||
if(powerSensor == "INA226"){
|
||||
getdisplay().print("INA226");
|
||||
i2cAddr = " (0x" + String(INA226_I2C_ADDR1, HEX) + ")";
|
||||
}
|
||||
getdisplay().print(i2cAddr);
|
||||
getdisplay().setCursor(270, 80);
|
||||
getdisplay().print("Sensor Modul");
|
||||
|
||||
// Reading bus data or using simulation data
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(260, 140);
|
||||
if(simulation == true){
|
||||
if(batVoltage == "12V"){
|
||||
value1 = 12.0;
|
||||
}
|
||||
if(batVoltage == "24V"){
|
||||
value1 = 24.0;
|
||||
}
|
||||
value1 += float(random(0, 5)) / 10; // Simulation data
|
||||
getdisplay().print(value1,1);
|
||||
}
|
||||
else{
|
||||
// Check for valid real data, display also if hold values activated
|
||||
if(valid1 == true || holdvalues == true){
|
||||
// Resolution switching
|
||||
if(value1 <= 9.9) getdisplay().print(value1, 2);
|
||||
if(value1 > 9.9 && value1 <= 99.9)getdisplay().print(value1, 1);
|
||||
if(value1 > 99.9) getdisplay().print(value1, 0);
|
||||
}
|
||||
else{
|
||||
getdisplay().print("---"); // Missing bus data
|
||||
}
|
||||
}
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().print("V");
|
||||
|
||||
// Show actual current in A
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(260, 200);
|
||||
if((powerSensor == "INA219" || powerSensor == "INA226") && simulation == false){
|
||||
if(value2 <= 9.9) getdisplay().print(value2, 2);
|
||||
if(value2 > 9.9 && value2 <= 99.9)getdisplay().print(value2, 1);
|
||||
if(value2 > 99.9) getdisplay().print(value2, 0);
|
||||
}
|
||||
else getdisplay().print("---");
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().print("A");
|
||||
|
||||
// Show actual consumption in W
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(260, 260);
|
||||
if((powerSensor == "INA219" || powerSensor == "INA226") && simulation == false){
|
||||
if(value3 <= 9.9) getdisplay().print(value3, 2);
|
||||
if(value3 > 9.9 && value3 <= 99.9)getdisplay().print(value3, 1);
|
||||
if(value3 > 99.9) getdisplay().print(value3, 0);
|
||||
}
|
||||
else getdisplay().print("---");
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().print("W");
|
||||
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(10, 290);
|
||||
getdisplay().print("[AVG]");
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
};
|
||||
};
|
||||
|
||||
static Page *createPage(CommonData &common){
|
||||
return new PageBattery2(common);
|
||||
}
|
||||
/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect (0 here)
|
||||
* and will will provide the names of the fixed values we need
|
||||
*/
|
||||
PageDescription registerPageBattery2(
|
||||
"Battery2", // Name of page
|
||||
createPage, // Action
|
||||
0, // Number of bus values depends on selection in Web configuration
|
||||
{}, // Names of bus values undepends on selection in Web configuration (refer GwBoatData.h)
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,360 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
|
||||
class PageClock : public Page
|
||||
{
|
||||
bool keylock = false; // Keylock
|
||||
|
||||
public:
|
||||
PageClock(CommonData &common){
|
||||
common.logger->logDebug(GwLog::LOG,"Show PageClock");
|
||||
}
|
||||
|
||||
// Key functions
|
||||
virtual int handleKey(int key){
|
||||
// Keylock function
|
||||
if(key == 11){ // Code for keylock
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData)
|
||||
{
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
static String svalue1old = "";
|
||||
static String unit1old = "";
|
||||
static String svalue2old = "";
|
||||
static String unit2old = "";
|
||||
static String svalue3old = "";
|
||||
static String svalue4old = "";
|
||||
|
||||
double value1 = 0;
|
||||
double value2 = 0;
|
||||
|
||||
// Get config data
|
||||
String lengthformat = config->getString(config->lengthFormat);
|
||||
bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
bool holdvalues = config->getBool(config->holdvalues);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
String stimezone = config->getString(config->timeZone);
|
||||
double timezone = stimezone.toDouble();
|
||||
|
||||
// Get boat values for GPS time
|
||||
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
|
||||
String name1 = bvalue1->getName().c_str(); // Value name
|
||||
name1 = name1.substring(0, 6); // String length limit for value name
|
||||
if(simulation == false){
|
||||
value1 = bvalue1->value; // Value as double in SI unit
|
||||
}
|
||||
else{
|
||||
value1 = 38160; // Simulation data for time value 11:36 in seconds
|
||||
} // Other simulation data see OBP60Formater.cpp
|
||||
bool valid1 = bvalue1->valid; // Valid information
|
||||
String svalue1 = formatValue(bvalue1, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit1 = formatValue(bvalue1, commonData).unit; // Unit of value
|
||||
if(valid1 == true){
|
||||
svalue1old = svalue1; // Save old value
|
||||
unit1old = unit1; // Save old unit
|
||||
}
|
||||
|
||||
// Get boat values for GPS date
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // First element in list (only one value by PageOneValue)
|
||||
String name2 = bvalue2->getName().c_str(); // Value name
|
||||
name2 = name2.substring(0, 6); // String length limit for value name
|
||||
value2 = bvalue2->value; // Value as double in SI unit
|
||||
bool valid2 = bvalue2->valid; // Valid information
|
||||
String svalue2 = formatValue(bvalue2, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit2 = formatValue(bvalue2, commonData).unit; // Unit of value
|
||||
if(valid2 == true){
|
||||
svalue2old = svalue2; // Save old value
|
||||
unit2old = unit2; // Save old unit
|
||||
}
|
||||
|
||||
// Optical warning by limit violation (unused)
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
|
||||
// Logging boat values
|
||||
if (bvalue1 == NULL) return;
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageClock, %s:%f, %s:%f", name1.c_str(), value1, name2.c_str(), value2);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
// Show values GPS date
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(10, 65);
|
||||
if(holdvalues == false) getdisplay().print(svalue2); // Value
|
||||
else getdisplay().print(svalue2old);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(10, 95);
|
||||
getdisplay().print("Date"); // Name
|
||||
|
||||
// Horizintal separator left
|
||||
getdisplay().fillRect(0, 149, 60, 3, pixelcolor);
|
||||
|
||||
// Show values GPS time
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(10, 250);
|
||||
if(holdvalues == false) getdisplay().print(svalue1); // Value
|
||||
else getdisplay().print(svalue1old);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(10, 220);
|
||||
getdisplay().print("Time"); // Name
|
||||
|
||||
// Show values sunrise
|
||||
String sunrise = "---";
|
||||
if(valid1 == true && valid2 == true){
|
||||
sunrise = String(commonData.sundata.sunriseHour) + ":" + String(commonData.sundata.sunriseMinute + 100).substring(1);
|
||||
svalue3old = sunrise;
|
||||
}
|
||||
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(335, 65);
|
||||
if(holdvalues == false) getdisplay().print(sunrise); // Value
|
||||
else getdisplay().print(svalue3old);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(335, 95);
|
||||
getdisplay().print("SunR"); // Name
|
||||
|
||||
// Horizintal separator right
|
||||
getdisplay().fillRect(340, 149, 80, 3, pixelcolor);
|
||||
|
||||
// Show values sunset
|
||||
String sunset = "---";
|
||||
if(valid1 == true && valid2 == true){
|
||||
sunset = String(commonData.sundata.sunsetHour) + ":" + String(commonData.sundata.sunsetMinute + 100).substring(1);
|
||||
svalue4old = sunset;
|
||||
}
|
||||
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(335, 250);
|
||||
if(holdvalues == false) getdisplay().print(sunset); // Value
|
||||
else getdisplay().print(svalue4old);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(335, 220);
|
||||
getdisplay().print("SunS"); // Name
|
||||
|
||||
//*******************************************************************************************
|
||||
|
||||
// Draw clock
|
||||
int rInstrument = 110; // Radius of clock
|
||||
float pi = 3.141592;
|
||||
|
||||
getdisplay().fillCircle(200, 150, rInstrument + 10, pixelcolor); // Outer circle
|
||||
getdisplay().fillCircle(200, 150, rInstrument + 7, bgcolor); // Outer circle
|
||||
|
||||
for(int i=0; i<360; i=i+1)
|
||||
{
|
||||
// Scaling values
|
||||
float x = 200 + (rInstrument-30)*sin(i/180.0*pi); // x-coordinate dots
|
||||
float y = 150 - (rInstrument-30)*cos(i/180.0*pi); // y-coordinate cots
|
||||
const char *ii = "";
|
||||
switch (i)
|
||||
{
|
||||
case 0: ii="12"; break;
|
||||
case 30 : ii=""; break;
|
||||
case 60 : ii=""; break;
|
||||
case 90 : ii="3"; break;
|
||||
case 120 : ii=""; break;
|
||||
case 150 : ii=""; break;
|
||||
case 180 : ii="6"; break;
|
||||
case 210 : ii=""; break;
|
||||
case 240 : ii=""; break;
|
||||
case 270 : ii="9"; break;
|
||||
case 300 : ii=""; break;
|
||||
case 330 : ii=""; break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
// Print text centered on position x, y
|
||||
int16_t x1, y1; // Return values of getTextBounds
|
||||
uint16_t w, h; // Return values of getTextBounds
|
||||
getdisplay().getTextBounds(ii, int(x), int(y), &x1, &y1, &w, &h); // Calc width of new string
|
||||
getdisplay().setCursor(x-w/2, y+h/2);
|
||||
if(i % 30 == 0){
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().print(ii);
|
||||
}
|
||||
|
||||
// Draw sub scale with dots
|
||||
float sinx = 0;
|
||||
float cosx = 0;
|
||||
if(i % 6 == 0){
|
||||
float x1c = 200 + rInstrument*sin(i/180.0*pi);
|
||||
float y1c = 150 - rInstrument*cos(i/180.0*pi);
|
||||
getdisplay().fillCircle((int)x1c, (int)y1c, 2, pixelcolor);
|
||||
sinx=sin(i/180.0*pi);
|
||||
cosx=cos(i/180.0*pi);
|
||||
}
|
||||
|
||||
// Draw sub scale with lines (two triangles)
|
||||
if(i % 30 == 0){
|
||||
float dx=2; // Line thickness = 2*dx+1
|
||||
float xx1 = -dx;
|
||||
float xx2 = +dx;
|
||||
float yy1 = -(rInstrument-10);
|
||||
float yy2 = -(rInstrument+10);
|
||||
getdisplay().fillTriangle(200+(int)(cosx*xx1-sinx*yy1),150+(int)(sinx*xx1+cosx*yy1),
|
||||
200+(int)(cosx*xx2-sinx*yy1),150+(int)(sinx*xx2+cosx*yy1),
|
||||
200+(int)(cosx*xx1-sinx*yy2),150+(int)(sinx*xx1+cosx*yy2),pixelcolor);
|
||||
getdisplay().fillTriangle(200+(int)(cosx*xx2-sinx*yy1),150+(int)(sinx*xx2+cosx*yy1),
|
||||
200+(int)(cosx*xx1-sinx*yy2),150+(int)(sinx*xx1+cosx*yy2),
|
||||
200+(int)(cosx*xx2-sinx*yy2),150+(int)(sinx*xx2+cosx*yy2),pixelcolor);
|
||||
}
|
||||
}
|
||||
|
||||
// Print Unit in clock
|
||||
getdisplay().setTextColor(textcolor);
|
||||
if(holdvalues == false){
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(175, 110);
|
||||
getdisplay().print(unit2); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(175, 110);
|
||||
getdisplay().print(unit2old); // Unit
|
||||
}
|
||||
|
||||
// Clock values
|
||||
double hour = 0;
|
||||
double minute = 0;
|
||||
value1 = value1 + int(timezone*3600);
|
||||
if (value1 > 86400) {value1 = value1 - 86400;}
|
||||
if (value1 < 0) {value1 = value1 + 86400;}
|
||||
hour = (value1 / 3600.0);
|
||||
if(hour > 12) hour = hour - 12.0;
|
||||
// minute = (hour - int(hour)) * 3600.0 / 60.0; // Analog minute pointer smoth moving
|
||||
minute = int((hour - int(hour)) * 3600.0 / 60.0); // Jumping minute pointer from minute to minute
|
||||
LOG_DEBUG(GwLog::DEBUG,"... PageClock, value1: %f hour: %f minute:%f", value1, hour, minute);
|
||||
|
||||
// Draw hour pointer
|
||||
float startwidth = 8; // Start width of pointer
|
||||
if(valid1 == true || holdvalues == true || simulation == true){
|
||||
float sinx=sin(hour * 30.0 * pi / 180); // Hour
|
||||
float cosx=cos(hour * 30.0 * pi / 180);
|
||||
// Normal pointer
|
||||
// Pointer as triangle with center base 2*width
|
||||
float xx1 = -startwidth;
|
||||
float xx2 = startwidth;
|
||||
float yy1 = -startwidth;
|
||||
float yy2 = -(rInstrument * 0.5);
|
||||
getdisplay().fillTriangle(200+(int)(cosx*xx1-sinx*yy1),150+(int)(sinx*xx1+cosx*yy1),
|
||||
200+(int)(cosx*xx2-sinx*yy1),150+(int)(sinx*xx2+cosx*yy1),
|
||||
200+(int)(cosx*0-sinx*yy2),150+(int)(sinx*0+cosx*yy2),pixelcolor);
|
||||
// Inverted pointer
|
||||
// Pointer as triangle with center base 2*width
|
||||
float endwidth = 2; // End width of pointer
|
||||
float ix1 = endwidth;
|
||||
float ix2 = -endwidth;
|
||||
float iy1 = -(rInstrument * 0.5);
|
||||
float iy2 = -endwidth;
|
||||
getdisplay().fillTriangle(200+(int)(cosx*ix1-sinx*iy1),150+(int)(sinx*ix1+cosx*iy1),
|
||||
200+(int)(cosx*ix2-sinx*iy1),150+(int)(sinx*ix2+cosx*iy1),
|
||||
200+(int)(cosx*0-sinx*iy2),150+(int)(sinx*0+cosx*iy2),pixelcolor);
|
||||
}
|
||||
|
||||
// Draw minute pointer
|
||||
startwidth = 8; // Start width of pointer
|
||||
if(valid1 == true || holdvalues == true || simulation == true){
|
||||
float sinx=sin(minute * 6.0 * pi / 180); // Minute
|
||||
float cosx=cos(minute * 6.0 * pi / 180);
|
||||
// Normal pointer
|
||||
// Pointer as triangle with center base 2*width
|
||||
float xx1 = -startwidth;
|
||||
float xx2 = startwidth;
|
||||
float yy1 = -startwidth;
|
||||
float yy2 = -(rInstrument - 15);
|
||||
getdisplay().fillTriangle(200+(int)(cosx*xx1-sinx*yy1),150+(int)(sinx*xx1+cosx*yy1),
|
||||
200+(int)(cosx*xx2-sinx*yy1),150+(int)(sinx*xx2+cosx*yy1),
|
||||
200+(int)(cosx*0-sinx*yy2),150+(int)(sinx*0+cosx*yy2),pixelcolor);
|
||||
// Inverted pointer
|
||||
// Pointer as triangle with center base 2*width
|
||||
float endwidth = 2; // End width of pointer
|
||||
float ix1 = endwidth;
|
||||
float ix2 = -endwidth;
|
||||
float iy1 = -(rInstrument - 15);
|
||||
float iy2 = -endwidth;
|
||||
getdisplay().fillTriangle(200+(int)(cosx*ix1-sinx*iy1),150+(int)(sinx*ix1+cosx*iy1),
|
||||
200+(int)(cosx*ix2-sinx*iy1),150+(int)(sinx*ix2+cosx*iy1),
|
||||
200+(int)(cosx*0-sinx*iy2),150+(int)(sinx*0+cosx*iy2),pixelcolor);
|
||||
}
|
||||
|
||||
// Center circle
|
||||
getdisplay().fillCircle(200, 150, startwidth + 6, bgcolor);
|
||||
getdisplay().fillCircle(200, 150, startwidth + 4, pixelcolor);
|
||||
|
||||
//*******************************************************************************************
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
static Page *createPage(CommonData &common){
|
||||
return new PageClock(common);
|
||||
}
|
||||
/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect (0 here)
|
||||
* and will will provide the names of the fixed values we need
|
||||
*/
|
||||
PageDescription registerPageClock(
|
||||
"Clock", // Page name
|
||||
createPage, // Action
|
||||
0, // Number of bus values depends on selection in Web configuration
|
||||
{"GPST", "GPSD"}, // Bus values we need in the page
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,308 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
|
||||
class PageDST810 : public Page
|
||||
{
|
||||
bool keylock = false; // Keylock
|
||||
|
||||
public:
|
||||
PageDST810(CommonData &comon){
|
||||
comon.logger->logDebug(GwLog::LOG,"Show PageDST810");
|
||||
}
|
||||
|
||||
virtual int handleKey(int key){
|
||||
if(key == 11){ // Code for keylock
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData){
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
// Old values for hold function
|
||||
static String svalue1old = "";
|
||||
static String unit1old = "";
|
||||
static String svalue2old = "";
|
||||
static String unit2old = "";
|
||||
static String svalue3old = "";
|
||||
static String unit3old = "";
|
||||
static String svalue4old = "";
|
||||
static String unit4old = "";
|
||||
|
||||
// Get config data
|
||||
String lengthformat = config->getString(config->lengthFormat);
|
||||
// bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
bool holdvalues = config->getBool(config->holdvalues);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
|
||||
// Get boat values #1
|
||||
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
|
||||
String name1 = xdrDelete(bvalue1->getName()); // Value name
|
||||
name1 = name1.substring(0, 6); // String length limit for value name
|
||||
double value1 = bvalue1->value; // Value as double in SI unit
|
||||
bool valid1 = bvalue1->valid; // Valid information
|
||||
String svalue1 = formatValue(bvalue1, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit1 = formatValue(bvalue1, commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #2
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list (only one value by PageOneValue)
|
||||
String name2 = xdrDelete(bvalue2->getName()); // Value name
|
||||
name2 = name2.substring(0, 6); // String length limit for value name
|
||||
double value2 = bvalue2->value; // Value as double in SI unit
|
||||
bool valid2 = bvalue2->valid; // Valid information
|
||||
String svalue2 = formatValue(bvalue2, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit2 = formatValue(bvalue2, commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #3
|
||||
GwApi::BoatValue *bvalue3 = pageData.values[2]; // Second element in list (only one value by PageOneValue)
|
||||
String name3 = xdrDelete(bvalue3->getName()); // Value name
|
||||
name3 = name3.substring(0, 6); // String length limit for value name
|
||||
double value3 = bvalue3->value; // Value as double in SI unit
|
||||
bool valid3 = bvalue3->valid; // Valid information
|
||||
String svalue3 = formatValue(bvalue3, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit3 = formatValue(bvalue3, commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #4
|
||||
GwApi::BoatValue *bvalue4 = pageData.values[3]; // Second element in list (only one value by PageOneValue)
|
||||
String name4 = xdrDelete(bvalue4->getName()); // Value name
|
||||
name4 = name4.substring(0, 6); // String length limit for value name
|
||||
double value4 = bvalue4->value; // Value as double in SI unit
|
||||
bool valid4 = bvalue4->valid; // Valid information
|
||||
String svalue4 = formatValue(bvalue4, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit4 = formatValue(bvalue4, commonData).unit; // Unit of value
|
||||
|
||||
// Optical warning by limit violation (unused)
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
|
||||
// Logging boat values
|
||||
if (bvalue1 == NULL) return;
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageDST810, %s: %f, %s: %f, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3, name4.c_str(), value4);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
// ############### Value 1 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 55);
|
||||
getdisplay().print("Depth"); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(20, 90);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit1); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit1old);
|
||||
}
|
||||
|
||||
// Set font
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic30pt7b);
|
||||
getdisplay().setCursor(180, 90);
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue1); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue1old); // Old value as formated string
|
||||
}
|
||||
if(valid1 == true){
|
||||
svalue1old = svalue1; // Save the old value
|
||||
unit1old = unit1; // Save the old unit
|
||||
}
|
||||
|
||||
// ############### Horizontal Line ################
|
||||
|
||||
// Horizontal line 3 pix
|
||||
getdisplay().fillRect(0, 105, 400, 3, pixelcolor);
|
||||
|
||||
// ############### Value 2 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 145);
|
||||
getdisplay().print("Speed"); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(20, 180);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit2); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit2old);
|
||||
}
|
||||
|
||||
// Setfont
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic30pt7b);
|
||||
getdisplay().setCursor(180, 180);
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue2); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue2old); // Old value as formated string
|
||||
}
|
||||
if(valid2 == true){
|
||||
svalue2old = svalue2; // Save the old value
|
||||
unit2old = unit2; // Save the old unit
|
||||
}
|
||||
|
||||
// ############### Horizontal Line ################
|
||||
|
||||
// Horizontal line 3 pix
|
||||
getdisplay().fillRect(0, 195, 400, 3, pixelcolor);
|
||||
|
||||
// ############### Value 3 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(20, 220);
|
||||
getdisplay().print("Log"); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(20, 240);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit3); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit3old);
|
||||
}
|
||||
|
||||
// Set font
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(80, 270);
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue3); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue3old); // Old value as formated string
|
||||
}
|
||||
if(valid3 == true){
|
||||
svalue3old = svalue3; // Save the old value
|
||||
unit3old = unit3; // Save the old unit
|
||||
}
|
||||
|
||||
// ############### Vertical Line ################
|
||||
|
||||
// Vertical line 3 pix
|
||||
getdisplay().fillRect(200, 195, 3, 75, pixelcolor);
|
||||
|
||||
// ############### Value 4 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(220, 220);
|
||||
getdisplay().print("Temp"); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(220, 240);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit4); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit4old);
|
||||
}
|
||||
|
||||
// Set font
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(280, 270);
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue4); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue4old); // Old value as formated string
|
||||
}
|
||||
if(valid4 == true){
|
||||
svalue4old = svalue4; // Save the old value
|
||||
unit4old = unit4; // Save the old unit
|
||||
}
|
||||
|
||||
|
||||
// ############### Key Layout ################
|
||||
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
static Page *createPage(CommonData &common){
|
||||
return new PageDST810(common);
|
||||
}/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect
|
||||
* this will be number of BoatValue pointers in pageData.values
|
||||
*/
|
||||
PageDescription registerPageDST810(
|
||||
"DST810", // Page name
|
||||
createPage, // Action
|
||||
0, // Number of bus values depends on selection in Web configuration
|
||||
{"DBT","STW","Log","WTemp"}, // Bus values we need in the page
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,347 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
|
||||
class PageFourValues : public Page
|
||||
{
|
||||
bool keylock = false; // Keylock
|
||||
|
||||
public:
|
||||
PageFourValues(CommonData &comon){
|
||||
comon.logger->logDebug(GwLog::LOG,"Show PageFourValues");
|
||||
}
|
||||
|
||||
virtual int handleKey(int key){
|
||||
if(key == 11){ // Code for keylock
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData){
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
// Old values for hold function
|
||||
static String svalue1old = "";
|
||||
static String unit1old = "";
|
||||
static String svalue2old = "";
|
||||
static String unit2old = "";
|
||||
static String svalue3old = "";
|
||||
static String unit3old = "";
|
||||
static String svalue4old = "";
|
||||
static String unit4old = "";
|
||||
|
||||
// Get config data
|
||||
String lengthformat = config->getString(config->lengthFormat);
|
||||
// bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
bool holdvalues = config->getBool(config->holdvalues);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
|
||||
// Get boat values #1
|
||||
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
|
||||
String name1 = xdrDelete(bvalue1->getName()); // Value name
|
||||
name1 = name1.substring(0, 6); // String length limit for value name
|
||||
double value1 = bvalue1->value; // Value as double in SI unit
|
||||
bool valid1 = bvalue1->valid; // Valid information
|
||||
String svalue1 = formatValue(bvalue1, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit1 = formatValue(bvalue1, commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #2
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list (only one value by PageOneValue)
|
||||
String name2 = xdrDelete(bvalue2->getName()); // Value name
|
||||
name2 = name2.substring(0, 6); // String length limit for value name
|
||||
double value2 = bvalue2->value; // Value as double in SI unit
|
||||
bool valid2 = bvalue2->valid; // Valid information
|
||||
String svalue2 = formatValue(bvalue2, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit2 = formatValue(bvalue2, commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #3
|
||||
GwApi::BoatValue *bvalue3 = pageData.values[2]; // Second element in list (only one value by PageOneValue)
|
||||
String name3 = xdrDelete(bvalue3->getName()); // Value name
|
||||
name3 = name3.substring(0, 6); // String length limit for value name
|
||||
double value3 = bvalue3->value; // Value as double in SI unit
|
||||
bool valid3 = bvalue3->valid; // Valid information
|
||||
String svalue3 = formatValue(bvalue3, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit3 = formatValue(bvalue3, commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #4
|
||||
GwApi::BoatValue *bvalue4 = pageData.values[3]; // Second element in list (only one value by PageOneValue)
|
||||
String name4 = xdrDelete(bvalue4->getName()); // Value name
|
||||
name4 = name4.substring(0, 6); // String length limit for value name
|
||||
double value4 = bvalue4->value; // Value as double in SI unit
|
||||
bool valid4 = bvalue4->valid; // Valid information
|
||||
String svalue4 = formatValue(bvalue4, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit4 = formatValue(bvalue4, commonData).unit; // Unit of value
|
||||
|
||||
// Optical warning by limit violation (unused)
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
|
||||
// Logging boat values
|
||||
if (bvalue1 == NULL) return;
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageFourValues, %s: %f, %s: %f, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3, name4.c_str(), value4);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
// ############### Value 1 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().setCursor(20, 45);
|
||||
getdisplay().print(name1); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(20, 65);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit1); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit1old);
|
||||
}
|
||||
|
||||
// Switch font if format for any values
|
||||
if(bvalue1->getFormat() == "formatLatitude" || bvalue1->getFormat() == "formatLongitude"){
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(120, 55);
|
||||
}
|
||||
else if(bvalue1->getFormat() == "formatTime" || bvalue1->getFormat() == "formatDate"){
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(150, 58);
|
||||
}
|
||||
else{
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(180, 65);
|
||||
}
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue1); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue1old); // Old value as formated string
|
||||
}
|
||||
if(valid1 == true){
|
||||
svalue1old = svalue1; // Save the old value
|
||||
unit1old = unit1; // Save the old unit
|
||||
}
|
||||
|
||||
// ############### Horizontal Line ################
|
||||
|
||||
// Horizontal line 3 pix
|
||||
getdisplay().fillRect(0, 80, 400, 3, pixelcolor);
|
||||
|
||||
// ############### Value 2 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().setCursor(20, 113);
|
||||
getdisplay().print(name2); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(20, 133);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit2); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit2old);
|
||||
}
|
||||
|
||||
// Switch font if format for any values
|
||||
if(bvalue2->getFormat() == "formatLatitude" || bvalue2->getFormat() == "formatLongitude"){
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(120, 123);
|
||||
}
|
||||
else if(bvalue2->getFormat() == "formatTime" || bvalue2->getFormat() == "formatDate"){
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(150, 123);
|
||||
}
|
||||
else{
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(180, 133);
|
||||
}
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue2); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue2old); // Old value as formated string
|
||||
}
|
||||
if(valid2 == true){
|
||||
svalue2old = svalue2; // Save the old value
|
||||
unit2old = unit2; // Save the old unit
|
||||
}
|
||||
|
||||
// ############### Horizontal Line ################
|
||||
|
||||
// Horizontal line 3 pix
|
||||
getdisplay().fillRect(0, 146, 400, 3, pixelcolor);
|
||||
|
||||
// ############### Value 3 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().setCursor(20, 181);
|
||||
getdisplay().print(name3); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(20, 201);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit3); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit3old);
|
||||
}
|
||||
|
||||
// Switch font if format for any values
|
||||
if(bvalue3->getFormat() == "formatLatitude" || bvalue3->getFormat() == "formatLongitude"){
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(120, 191);
|
||||
}
|
||||
else if(bvalue3->getFormat() == "formatTime" || bvalue3->getFormat() == "formatDate"){
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(150, 191);
|
||||
}
|
||||
else{
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(180, 201);
|
||||
}
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue3); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue3old); // Old value as formated string
|
||||
}
|
||||
if(valid3 == true){
|
||||
svalue3old = svalue3; // Save the old value
|
||||
unit3old = unit3; // Save the old unit
|
||||
}
|
||||
|
||||
// ############### Horizontal Line ################
|
||||
|
||||
// Horizontal line 3 pix
|
||||
getdisplay().fillRect(0, 214, 400, 3, pixelcolor);
|
||||
|
||||
// ############### Value 4 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().setCursor(20, 249);
|
||||
getdisplay().print(name4); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(20, 269);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit4); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit4old);
|
||||
}
|
||||
|
||||
// Switch font if format for any values
|
||||
if(bvalue4->getFormat() == "formatLatitude" || bvalue4->getFormat() == "formatLongitude"){
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(120, 259);
|
||||
}
|
||||
else if(bvalue4->getFormat() == "formatTime" || bvalue4->getFormat() == "formatDate"){
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(150, 259);
|
||||
}
|
||||
else{
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(180, 269);
|
||||
}
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue4); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue4old); // Old value as formated string
|
||||
}
|
||||
if(valid4 == true){
|
||||
svalue4old = svalue4; // Save the old value
|
||||
unit4old = unit4; // Save the old unit
|
||||
}
|
||||
|
||||
|
||||
// ############### Key Layout ################
|
||||
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
static Page *createPage(CommonData &common){
|
||||
return new PageFourValues(common);
|
||||
}/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect
|
||||
* this will be number of BoatValue pointers in pageData.values
|
||||
*/
|
||||
PageDescription registerPageFourValues(
|
||||
"FourValues", // Page name
|
||||
createPage, // Action
|
||||
4, // Number of bus values depends on selection in Web configuration
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,347 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
|
||||
class PageFourValues2 : public Page
|
||||
{
|
||||
bool keylock = false; // Keylock
|
||||
|
||||
public:
|
||||
PageFourValues2(CommonData &comon){
|
||||
comon.logger->logDebug(GwLog::LOG,"Show PageFourValues2");
|
||||
}
|
||||
|
||||
virtual int handleKey(int key){
|
||||
if(key == 11){ // Code for keylock
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData){
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
// Old values for hold function
|
||||
static String svalue1old = "";
|
||||
static String unit1old = "";
|
||||
static String svalue2old = "";
|
||||
static String unit2old = "";
|
||||
static String svalue3old = "";
|
||||
static String unit3old = "";
|
||||
static String svalue4old = "";
|
||||
static String unit4old = "";
|
||||
|
||||
// Get config data
|
||||
String lengthformat = config->getString(config->lengthFormat);
|
||||
// bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
bool holdvalues = config->getBool(config->holdvalues);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
|
||||
// Get boat values #1
|
||||
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
|
||||
String name1 = xdrDelete(bvalue1->getName()); // Value name
|
||||
name1 = name1.substring(0, 6); // String length limit for value name
|
||||
double value1 = bvalue1->value; // Value as double in SI unit
|
||||
bool valid1 = bvalue1->valid; // Valid information
|
||||
String svalue1 = formatValue(bvalue1, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit1 = formatValue(bvalue1, commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #2
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list (only one value by PageOneValue)
|
||||
String name2 = xdrDelete(bvalue2->getName()); // Value name
|
||||
name2 = name2.substring(0, 6); // String length limit for value name
|
||||
double value2 = bvalue2->value; // Value as double in SI unit
|
||||
bool valid2 = bvalue2->valid; // Valid information
|
||||
String svalue2 = formatValue(bvalue2, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit2 = formatValue(bvalue2, commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #3
|
||||
GwApi::BoatValue *bvalue3 = pageData.values[2]; // Second element in list (only one value by PageOneValue)
|
||||
String name3 = xdrDelete(bvalue3->getName()); // Value name
|
||||
name3 = name3.substring(0, 6); // String length limit for value name
|
||||
double value3 = bvalue3->value; // Value as double in SI unit
|
||||
bool valid3 = bvalue3->valid; // Valid information
|
||||
String svalue3 = formatValue(bvalue3, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit3 = formatValue(bvalue3, commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #4
|
||||
GwApi::BoatValue *bvalue4 = pageData.values[3]; // Second element in list (only one value by PageOneValue)
|
||||
String name4 = xdrDelete(bvalue4->getName()); // Value name
|
||||
name4 = name4.substring(0, 6); // String length limit for value name
|
||||
double value4 = bvalue4->value; // Value as double in SI unit
|
||||
bool valid4 = bvalue4->valid; // Valid information
|
||||
String svalue4 = formatValue(bvalue4, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit4 = formatValue(bvalue4, commonData).unit; // Unit of value
|
||||
|
||||
// Optical warning by limit violation (unused)
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
|
||||
// Logging boat values
|
||||
if (bvalue1 == NULL) return;
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageFourValues2, %s: %f, %s: %f, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3, name4.c_str(), value4);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
// ############### Value 1 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 55);
|
||||
getdisplay().print(name1); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(20, 90);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit1); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit1old);
|
||||
}
|
||||
|
||||
// Switch font if format for any values
|
||||
if(bvalue1->getFormat() == "formatLatitude" || bvalue1->getFormat() == "formatLongitude"){
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(100, 90);
|
||||
}
|
||||
else if(bvalue1->getFormat() == "formatTime" || bvalue1->getFormat() == "formatDate"){
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(180, 77);
|
||||
}
|
||||
else{
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic30pt7b);
|
||||
getdisplay().setCursor(180, 90);
|
||||
}
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue1); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue1old); // Old value as formated string
|
||||
}
|
||||
if(valid1 == true){
|
||||
svalue1old = svalue1; // Save the old value
|
||||
unit1old = unit1; // Save the old unit
|
||||
}
|
||||
|
||||
// ############### Horizontal Line ################
|
||||
|
||||
// Horizontal line 3 pix
|
||||
getdisplay().fillRect(0, 105, 400, 3, pixelcolor);
|
||||
|
||||
// ############### Value 2 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 145);
|
||||
getdisplay().print(name2); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(20, 180);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit2); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit2old);
|
||||
}
|
||||
|
||||
// Switch font if format for any values
|
||||
if(bvalue2->getFormat() == "formatLatitude" || bvalue2->getFormat() == "formatLongitude"){
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(100, 180);
|
||||
}
|
||||
else if(bvalue2->getFormat() == "formatTime" || bvalue2->getFormat() == "formatDate"){
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(180, 158);
|
||||
}
|
||||
else{
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic30pt7b);
|
||||
getdisplay().setCursor(180, 180);
|
||||
}
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue2); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue2old); // Old value as formated string
|
||||
}
|
||||
if(valid2 == true){
|
||||
svalue2old = svalue2; // Save the old value
|
||||
unit2old = unit2; // Save the old unit
|
||||
}
|
||||
|
||||
// ############### Horizontal Line ################
|
||||
|
||||
// Horizontal line 3 pix
|
||||
getdisplay().fillRect(0, 195, 400, 3, pixelcolor);
|
||||
|
||||
// ############### Value 3 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(20, 220);
|
||||
getdisplay().print(name3); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(20, 240);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit3); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit3old);
|
||||
}
|
||||
|
||||
// Switch font if format for any values
|
||||
if(bvalue3->getFormat() == "formatLatitude" || bvalue3->getFormat() == "formatLongitude"){
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(50, 240);
|
||||
}
|
||||
else if(bvalue3->getFormat() == "formatTime" || bvalue3->getFormat() == "formatDate"){
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(100, 240);
|
||||
}
|
||||
else{
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(80, 270);
|
||||
}
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue3); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue3old); // Old value as formated string
|
||||
}
|
||||
if(valid3 == true){
|
||||
svalue3old = svalue3; // Save the old value
|
||||
unit3old = unit3; // Save the old unit
|
||||
}
|
||||
|
||||
// ############### Vertical Line ################
|
||||
|
||||
// Vertical line 3 pix
|
||||
getdisplay().fillRect(200, 195, 3, 75, pixelcolor);
|
||||
|
||||
// ############### Value 4 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(220, 220);
|
||||
getdisplay().print(name4); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(220, 240);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit4); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit4old);
|
||||
}
|
||||
|
||||
// Switch font if format for any values
|
||||
if(bvalue4->getFormat() == "formatLatitude" || bvalue4->getFormat() == "formatLongitude"){
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(250, 240);
|
||||
}
|
||||
else if(bvalue4->getFormat() == "formatTime" || bvalue4->getFormat() == "formatDate"){
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(300, 240);
|
||||
}
|
||||
else{
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(280, 270);
|
||||
}
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue4); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue4old); // Old value as formated string
|
||||
}
|
||||
if(valid4 == true){
|
||||
svalue4old = svalue4; // Save the old value
|
||||
unit4old = unit4; // Save the old unit
|
||||
}
|
||||
|
||||
|
||||
// ############### Key Layout ################
|
||||
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
static Page *createPage(CommonData &common){
|
||||
return new PageFourValues2(common);
|
||||
}/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect
|
||||
* this will be number of BoatValue pointers in pageData.values
|
||||
*/
|
||||
PageDescription registerPageFourValues2(
|
||||
"FourValues2", // Page name
|
||||
createPage, // Action
|
||||
4, // Number of bus values depends on selection in Web configuration
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,267 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3s
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
#include "movingAvg.h" // Lib for moving average building
|
||||
|
||||
class PageGenerator : public Page
|
||||
{
|
||||
bool init = false; // Marker for init done
|
||||
bool keylock = false; // Keylock
|
||||
|
||||
public:
|
||||
PageGenerator(CommonData &common){
|
||||
common.logger->logDebug(GwLog::LOG,"Show PageGenerator");
|
||||
}
|
||||
virtual int handleKey(int key){
|
||||
// Code for keylock
|
||||
if(key == 11){
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData)
|
||||
{
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
// Get config data
|
||||
bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
bool holdvalues = config->getBool(config->holdvalues);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String batVoltage = config->getString(config->batteryVoltage);
|
||||
int genPower = config->getInt(config->genPower);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
String powerSensor = config->getString(config->usePowSensor3);
|
||||
|
||||
double value1 = 0; // Solar voltage
|
||||
double value2 = 0; // Solar current
|
||||
double value3 = 0; // Solar output power
|
||||
double valueTrend = 0; // Average over 10 values
|
||||
int genPercentage = 0; // Power generator load
|
||||
|
||||
// Get voltage value
|
||||
String name1 = "VGen";
|
||||
|
||||
// Get raw value for trend indicator
|
||||
if(powerSensor != "off"){
|
||||
value1 = commonData.data.generatorVoltage; // Use voltage from external sensor
|
||||
}
|
||||
else{
|
||||
value1 = commonData.data.batteryVoltage; // Use internal voltage sensor
|
||||
}
|
||||
value2 = commonData.data.generatorCurrent;
|
||||
value3 = commonData.data.generatorPower;
|
||||
genPercentage = value3 * 100 / (double)genPower; // Load value
|
||||
// Limits for battery level
|
||||
if(genPercentage < 0) genPercentage = 0;
|
||||
if(genPercentage > 99) genPercentage = 99;
|
||||
|
||||
bool valid1 = true;
|
||||
|
||||
// Optical warning by limit violation
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
// Over voltage
|
||||
if(value1 > 14.8 && batVoltage == "12V"){
|
||||
setBlinkingLED(true);
|
||||
}
|
||||
if(value1 <= 14.8 && batVoltage == "12V"){
|
||||
setBlinkingLED(false);
|
||||
}
|
||||
if(value1 > 29.6 && batVoltage == "24V"){
|
||||
setBlinkingLED(true);
|
||||
}
|
||||
if(value1 <= 29.6 && batVoltage == "24V"){
|
||||
setBlinkingLED(false);
|
||||
}
|
||||
}
|
||||
|
||||
// Logging voltage value
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageGenerator, Type:%iW %s:=%f", genPower, name1.c_str(), value1);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Clear display, set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(10, 65);
|
||||
getdisplay().print("Power");
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(12, 82);
|
||||
getdisplay().print("Generator");
|
||||
|
||||
// Show voltage type
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(10, 140);
|
||||
int bvoltage = 0;
|
||||
if(String(batVoltage) == "12V") bvoltage = 12;
|
||||
else bvoltage = 24;
|
||||
getdisplay().print(bvoltage);
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().print("V");
|
||||
|
||||
// Show solar power
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(10, 200);
|
||||
if(genPower <= 999) getdisplay().print(genPower, 0);
|
||||
if(genPower > 999) getdisplay().print(float(genPower/1000.0), 1);
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
if(genPower <= 999) getdisplay().print("W");
|
||||
if(genPower > 999) getdisplay().print("kW");
|
||||
|
||||
// Show info
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(10, 235);
|
||||
getdisplay().print("Installed");
|
||||
getdisplay().setCursor(10, 255);
|
||||
getdisplay().print("Power Modul");
|
||||
|
||||
// Show generator
|
||||
generatorGraphic(200, 95, pixelcolor, bgcolor);
|
||||
|
||||
// Show load level in percent
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(150, 200);
|
||||
getdisplay().print(genPercentage);
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().print("%");
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(150, 235);
|
||||
getdisplay().print("Load");
|
||||
|
||||
// Show sensor type info
|
||||
String i2cAddr = "";
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(270, 60);
|
||||
if(powerSensor == "off") getdisplay().print("Internal");
|
||||
if(powerSensor == "INA219"){
|
||||
getdisplay().print("INA219");
|
||||
i2cAddr = " (0x" + String(INA219_I2C_ADDR3, HEX) + ")";
|
||||
}
|
||||
if(powerSensor == "INA226"){
|
||||
getdisplay().print("INA226");
|
||||
i2cAddr = " (0x" + String(INA226_I2C_ADDR3, HEX) + ")";
|
||||
}
|
||||
getdisplay().print(i2cAddr);
|
||||
getdisplay().setCursor(270, 80);
|
||||
getdisplay().print("Sensor Modul");
|
||||
|
||||
// Reading bus data or using simulation data
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(260, 140);
|
||||
if(simulation == true){
|
||||
if(batVoltage == "12V"){
|
||||
value1 = 12.0;
|
||||
}
|
||||
if(batVoltage == "24V"){
|
||||
value1 = 24.0;
|
||||
}
|
||||
value1 += float(random(0, 5)) / 10; // Simulation data
|
||||
getdisplay().print(value1,1);
|
||||
}
|
||||
else{
|
||||
// Check for valid real data, display also if hold values activated
|
||||
if(valid1 == true || holdvalues == true){
|
||||
// Resolution switching
|
||||
if(value1 <= 9.9) getdisplay().print(value1, 2);
|
||||
if(value1 > 9.9 && value1 <= 99.9)getdisplay().print(value1, 1);
|
||||
if(value1 > 99.9) getdisplay().print(value1, 0);
|
||||
}
|
||||
else{
|
||||
getdisplay().print("---"); // Missing bus data
|
||||
}
|
||||
}
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().print("V");
|
||||
|
||||
// Show actual current in A
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(260, 200);
|
||||
if((powerSensor == "INA219" || powerSensor == "INA226") && simulation == false){
|
||||
if(value2 <= 9.9) getdisplay().print(value2, 2);
|
||||
if(value2 > 9.9 && value2 <= 99.9)getdisplay().print(value2, 1);
|
||||
if(value2 > 99.9) getdisplay().print(value2, 0);
|
||||
}
|
||||
else getdisplay().print("---");
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().print("A");
|
||||
|
||||
// Show actual consumption in W
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(260, 260);
|
||||
if((powerSensor == "INA219" || powerSensor == "INA226") && simulation == false){
|
||||
if(value3 <= 9.9) getdisplay().print(value3, 2);
|
||||
if(value3 > 9.9 && value3 <= 99.9)getdisplay().print(value3, 1);
|
||||
if(value3 > 99.9) getdisplay().print(value3, 0);
|
||||
}
|
||||
else getdisplay().print("---");
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().print("W");
|
||||
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
};
|
||||
};
|
||||
|
||||
static Page *createPage(CommonData &common){
|
||||
return new PageGenerator(common);
|
||||
}
|
||||
/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect (0 here)
|
||||
* and will will provide the names of the fixed values we need
|
||||
*/
|
||||
PageDescription registerPageGenerator(
|
||||
"Generator", // Name of page
|
||||
createPage, // Action
|
||||
0, // Number of bus values depends on selection in Web configuration
|
||||
{}, // Names of bus values undepends on selection in Web configuration (refer GwBoatData.h)
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,267 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
|
||||
class PageKeelPosition : public Page
|
||||
{
|
||||
bool keylock = false; // Keylock
|
||||
|
||||
public:
|
||||
PageKeelPosition(CommonData &common){
|
||||
common.logger->logDebug(GwLog::LOG,"Show PageKeelPosition");
|
||||
}
|
||||
|
||||
// Key functions
|
||||
virtual int handleKey(int key){
|
||||
// Keylock function
|
||||
if(key == 11){ // Code for keylock
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData)
|
||||
{
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
double value1 = 0;
|
||||
double value1old = 0;
|
||||
|
||||
// Get config data
|
||||
String lengthformat = config->getString(config->lengthFormat);
|
||||
bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
bool holdvalues = config->getBool(config->holdvalues);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
String rotsensor = config->getString(config->useRotSensor);
|
||||
String rotfunction = config->getString(config->rotFunction);
|
||||
|
||||
// Get boat values for Keel position
|
||||
bool valid1 = commonData.data.validRotAngle; // Valid information
|
||||
if(simulation == false && rotsensor == "AS5600" && rotfunction == "Keel"){
|
||||
value1 = commonData.data.rotationAngle; // Raw value without unit convertion
|
||||
}
|
||||
else{
|
||||
value1 = 0;
|
||||
}
|
||||
if(simulation == true){
|
||||
value1 = (170 + float(random(0, 40)) / 10.0) * 2 * PI / 360; // Simulation data in radiant
|
||||
}
|
||||
|
||||
String unit1 = "Deg"; // Unit of value
|
||||
if(valid1 == true){
|
||||
value1old = value1; // Save old value
|
||||
}
|
||||
|
||||
// Optical warning by limit violation (unused)
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
|
||||
// Logging boat values
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageKeelPosition, Keel:%f", value1);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
//*******************************************************************************************
|
||||
|
||||
// Draw KeelPosition
|
||||
int rInstrument = 110; // Radius of KeelPosition
|
||||
float pi = 3.141592;
|
||||
|
||||
getdisplay().fillCircle(200, 150, rInstrument + 10, pixelcolor); // Outer circle
|
||||
getdisplay().fillCircle(200, 150, rInstrument + 7, bgcolor); // Outer circle
|
||||
getdisplay().fillRect(0, 30, 400, 122, bgcolor); // Delete half top circle
|
||||
|
||||
for(int i=90; i<=270; i=i+10)
|
||||
{
|
||||
// Scaling values
|
||||
float x = 200 + (rInstrument-30)*sin(i/180.0*pi); // x-coordinate dots
|
||||
float y = 150 - (rInstrument-30)*cos(i/180.0*pi); // y-coordinate cots
|
||||
const char *ii = " ";
|
||||
switch (i)
|
||||
{
|
||||
case 0: ii=" "; break; // Use a blank for a empty scale value
|
||||
case 30 : ii=" "; break;
|
||||
case 60 : ii=" "; break;
|
||||
case 90 : ii="45"; break;
|
||||
case 120 : ii="30"; break;
|
||||
case 150 : ii="15"; break;
|
||||
case 180 : ii="0"; break;
|
||||
case 210 : ii="15"; break;
|
||||
case 240 : ii="30"; break;
|
||||
case 270 : ii="45"; break;
|
||||
case 300 : ii=" "; break;
|
||||
case 330 : ii=" "; break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
// Print text centered on position x, y
|
||||
int16_t x1, y1; // Return values of getTextBounds
|
||||
uint16_t w, h; // Return values of getTextBounds
|
||||
getdisplay().getTextBounds(ii, int(x), int(y), &x1, &y1, &w, &h); // Calc width of new string
|
||||
getdisplay().setCursor(x-w/2, y+h/2);
|
||||
if(i % 30 == 0){
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().print(ii);
|
||||
}
|
||||
|
||||
// Draw sub scale with dots
|
||||
float x1c = 200 + rInstrument*sin(i/180.0*pi);
|
||||
float y1c = 150 - rInstrument*cos(i/180.0*pi);
|
||||
getdisplay().fillCircle((int)x1c, (int)y1c, 2, pixelcolor);
|
||||
float sinx=sin(i/180.0*pi);
|
||||
float cosx=cos(i/180.0*pi);
|
||||
|
||||
// Draw sub scale with lines (two triangles)
|
||||
if(i % 30 == 0){
|
||||
float dx=2; // Line thickness = 2*dx+1
|
||||
float xx1 = -dx;
|
||||
float xx2 = +dx;
|
||||
float yy1 = -(rInstrument-10);
|
||||
float yy2 = -(rInstrument+10);
|
||||
getdisplay().fillTriangle(200+(int)(cosx*xx1-sinx*yy1),150+(int)(sinx*xx1+cosx*yy1),
|
||||
200+(int)(cosx*xx2-sinx*yy1),150+(int)(sinx*xx2+cosx*yy1),
|
||||
200+(int)(cosx*xx1-sinx*yy2),150+(int)(sinx*xx1+cosx*yy2),pixelcolor);
|
||||
getdisplay().fillTriangle(200+(int)(cosx*xx2-sinx*yy1),150+(int)(sinx*xx2+cosx*yy1),
|
||||
200+(int)(cosx*xx1-sinx*yy2),150+(int)(sinx*xx1+cosx*yy2),
|
||||
200+(int)(cosx*xx2-sinx*yy2),150+(int)(sinx*xx2+cosx*yy2),pixelcolor);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Angle limits to +/-45° (Attention: 180° offset!)
|
||||
if(value1 < (3 * PI / 4)){
|
||||
value1 = 3 * PI / 4;
|
||||
}
|
||||
if(value1 > (5 * PI / 4)){
|
||||
value1 = 5 * PI / 4;
|
||||
}
|
||||
|
||||
if(holdvalues == true && valid1 == false){
|
||||
value1 = value1old;
|
||||
}
|
||||
|
||||
// Calculate keel position
|
||||
value1 = (value1 * 2) + PI;
|
||||
|
||||
// Draw keel position pointer
|
||||
float startwidth = 8; // Start width of pointer
|
||||
|
||||
if((rotsensor == "AS5600" && rotfunction == "Keel" && (valid1 == true || holdvalues == true)) || simulation == true){
|
||||
float sinx=sin(value1);
|
||||
float cosx=cos(value1);
|
||||
// Normal pointer
|
||||
// Pointer as triangle with center base 2*width
|
||||
float xx1 = -startwidth;
|
||||
float xx2 = startwidth;
|
||||
float yy1 = -startwidth;
|
||||
float yy2 = -(rInstrument * 0.6);
|
||||
getdisplay().fillTriangle(200+(int)(cosx*xx1-sinx*yy1),150+(int)(sinx*xx1+cosx*yy1),
|
||||
200+(int)(cosx*xx2-sinx*yy1),150+(int)(sinx*xx2+cosx*yy1),
|
||||
200+(int)(cosx*0-sinx*yy2),150+(int)(sinx*0+cosx*yy2),pixelcolor);
|
||||
// Inverted pointer
|
||||
// Pointer as triangle with center base 2*width
|
||||
float endwidth = 2; // End width of pointer
|
||||
float ix1 = endwidth;
|
||||
float ix2 = -endwidth;
|
||||
float iy1 = -(rInstrument * 0.6);
|
||||
float iy2 = -endwidth;
|
||||
getdisplay().fillTriangle(200+(int)(cosx*ix1-sinx*iy1),150+(int)(sinx*ix1+cosx*iy1),
|
||||
200+(int)(cosx*ix2-sinx*iy1),150+(int)(sinx*ix2+cosx*iy1),
|
||||
200+(int)(cosx*0-sinx*iy2),150+(int)(sinx*0+cosx*iy2),pixelcolor);
|
||||
|
||||
// Draw counterweight
|
||||
getdisplay().fillCircle(200+(int)(cosx*0-sinx*yy2),150+(int)(sinx*0+cosx*yy2), 5, pixelcolor);
|
||||
}
|
||||
|
||||
// Center circle
|
||||
getdisplay().fillCircle(200, 140, startwidth + 22, bgcolor);
|
||||
getdisplay().fillCircle(200, 140, startwidth + 20, pixelcolor); // Boat circle
|
||||
getdisplay().fillRect(200 - 30, 140 - 30, 2 * 30, 30, bgcolor); // Delete half top of boat circle
|
||||
getdisplay().fillRect(150, 150, 100, 4, pixelcolor); // Water line
|
||||
|
||||
// Print label
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().setCursor(100, 70);
|
||||
getdisplay().print("Keel Position"); // Label
|
||||
|
||||
if((rotsensor == "AS5600" && rotfunction == "Keel" && (valid1 == true || holdvalues == true)) || simulation == true){
|
||||
// Print Unit of keel position
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(175, 110);
|
||||
getdisplay().print(unit1); // Unit
|
||||
}
|
||||
else{
|
||||
// Print Unit of keel position
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(145, 110);
|
||||
getdisplay().print("No sensor data"); // Info missing sensor
|
||||
}
|
||||
|
||||
//*******************************************************************************************
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
static Page *createPage(CommonData &common){
|
||||
return new PageKeelPosition(common);
|
||||
}
|
||||
/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect (0 here)
|
||||
* and will will provide the names of the fixed values we need
|
||||
*/
|
||||
PageDescription registerPageKeelPosition(
|
||||
"KeelPosition", // Page name
|
||||
createPage, // Action
|
||||
0, // Number of bus values depends on selection in Web configuration
|
||||
{}, // Bus values we need in the page
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,160 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
|
||||
class PageOneValue : public Page{
|
||||
bool keylock = false; // Keylock
|
||||
|
||||
public:
|
||||
PageOneValue(CommonData &common){
|
||||
common.logger->logDebug(GwLog::LOG,"Show PageOneValue");
|
||||
}
|
||||
|
||||
virtual int handleKey(int key){
|
||||
if(key == 11){ // Code for keylock
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData){
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
// Old values for hold function
|
||||
static String svalue1old = "";
|
||||
static String unit1old = "";
|
||||
|
||||
// Get config data
|
||||
String lengthformat = config->getString(config->lengthFormat);
|
||||
// bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
bool holdvalues = config->getBool(config->holdvalues);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
|
||||
// Get boat values
|
||||
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
|
||||
String name1 = xdrDelete(bvalue1->getName()); // Value name
|
||||
name1 = name1.substring(0, 6); // String length limit for value name
|
||||
double value1 = bvalue1->value; // Value as double in SI unit
|
||||
bool valid1 = bvalue1->valid; // Valid information
|
||||
String svalue1 = formatValue(bvalue1, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit1 = formatValue(bvalue1, commonData).unit; // Unit of value
|
||||
|
||||
// Optical warning by limit violation (unused)
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
|
||||
// Logging boat values
|
||||
if (bvalue1 == NULL) return;
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageOneValue, %s: %f", name1.c_str(), value1);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
/// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold32pt7b);
|
||||
getdisplay().setCursor(20, 100);
|
||||
getdisplay().print(name1); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(270, 100);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit1); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit1old);
|
||||
}
|
||||
|
||||
// Switch font if format for any values
|
||||
if(bvalue1->getFormat() == "formatLatitude" || bvalue1->getFormat() == "formatLongitude"){
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 180);
|
||||
}
|
||||
else if(bvalue1->getFormat() == "formatTime" || bvalue1->getFormat() == "formatDate"){
|
||||
getdisplay().setFont(&Ubuntu_Bold32pt7b);
|
||||
getdisplay().setCursor(20, 200);
|
||||
}
|
||||
else{
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic60pt7b);
|
||||
getdisplay().setCursor(20, 240);
|
||||
}
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue1); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue1old); // Old value as formated string
|
||||
}
|
||||
if(valid1 == true){
|
||||
svalue1old = svalue1; // Save the old value
|
||||
unit1old = unit1; // Save the old unit
|
||||
}
|
||||
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
static Page* createPage(CommonData &common){
|
||||
return new PageOneValue(common);
|
||||
}
|
||||
|
||||
/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect
|
||||
* this will be number of BoatValue pointers in pageData.values
|
||||
*/
|
||||
PageDescription registerPageOneValue(
|
||||
"OneValue", // Page name
|
||||
createPage, // Action
|
||||
1, // Number of bus values depends on selection in Web configuration
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,360 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
|
||||
class PageRollPitch : public Page
|
||||
{
|
||||
bool keylock = false; // Keylock
|
||||
|
||||
public:
|
||||
PageRollPitch(CommonData &common){
|
||||
common.logger->logDebug(GwLog::LOG,"Show PageRollPitch");
|
||||
}
|
||||
|
||||
// Key functions
|
||||
virtual int handleKey(int key){
|
||||
// Keylock function
|
||||
if(key == 11){ // Code for keylock
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData)
|
||||
{
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
double value1 = 0;
|
||||
double value2 = 0;
|
||||
String svalue1 = "";
|
||||
String svalue1old = "";
|
||||
String svalue2 = "";
|
||||
String svalue2old = "";
|
||||
|
||||
|
||||
// Get config data
|
||||
String lengthformat = config->getString(config->lengthFormat);
|
||||
bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
bool holdvalues = config->getBool(config->holdvalues);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
int rolllimit = config->getInt(config->rollLimit);
|
||||
String roffset = config->getString(config->rollOffset);
|
||||
double rolloffset = roffset.toFloat()/360*(2*PI);
|
||||
String poffset = config->getString(config->pitchOffset);
|
||||
double pitchoffset = poffset.toFloat()/360*(2*PI);
|
||||
|
||||
// Get boat values for roll
|
||||
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (xdrRoll)
|
||||
String name1 = xdrDelete(bvalue1->getName()); // Value name
|
||||
name1 = name1.substring(0, 6); // String length limit for value name
|
||||
bool valid1 = bvalue1->valid; // Valid information
|
||||
if(valid1 == true){
|
||||
value1 = bvalue1->value + rolloffset; // Raw value for pitch
|
||||
}
|
||||
else{
|
||||
if(simulation == true){
|
||||
value1 = (20 + float(random(0, 50)) / 10.0)/360*2*PI;
|
||||
}
|
||||
else{
|
||||
value1 = 0;
|
||||
}
|
||||
}
|
||||
if(value1/(2*PI)*360 > -10 && value1/(2*PI)*360 < 10){
|
||||
svalue1 = String(value1/(2*PI)*360,1); // Convert raw value to string
|
||||
}
|
||||
else{
|
||||
svalue1 = String(value1/(2*PI)*360,0);
|
||||
}
|
||||
|
||||
// Get boat values for pitch
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list (xdrPitch)
|
||||
String name2 = xdrDelete(bvalue2->getName()); // Value name
|
||||
name2 = name2.substring(0, 6); // String length limit for value name
|
||||
bool valid2 = bvalue2->valid; // Valid information
|
||||
if(valid2 == true){
|
||||
value2 = bvalue2->value + pitchoffset; // Raw value for pitch
|
||||
}
|
||||
else{
|
||||
if(simulation == true){
|
||||
value2 = (float(random(-5, 5)))/360*2*PI;
|
||||
}
|
||||
else{
|
||||
value2 = 0;
|
||||
}
|
||||
}
|
||||
if(value2/(2*PI)*360 > -10 && value2/(2*PI)*360 < 10){
|
||||
svalue2 = String(value2/(2*PI)*360,1); // Convert raw value to string
|
||||
}
|
||||
else{
|
||||
svalue2 = String(value2/(2*PI)*360,0);
|
||||
}
|
||||
|
||||
// Optical warning by limit violation
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
// Limits for roll
|
||||
if(value1*360/(2*PI) >= -1*rolllimit && value1*360/(2*PI) <= rolllimit){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
else{
|
||||
setBlinkingLED(true);
|
||||
}
|
||||
}
|
||||
|
||||
// Logging boat values
|
||||
if (bvalue1 == NULL) return;
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageRollPitch, %s:%f, %s:%f", name1.c_str(), value1, name2.c_str(), value2);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
// Show roll limit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(10, 65);
|
||||
getdisplay().print(rolllimit); // Value
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(10, 95);
|
||||
getdisplay().print("Limit"); // Name
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(10, 115);
|
||||
getdisplay().print("DEG");
|
||||
|
||||
// Horizintal separator left
|
||||
getdisplay().fillRect(0, 149, 60, 3, pixelcolor);
|
||||
|
||||
// Show roll value
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(10, 270);
|
||||
if(holdvalues == false) getdisplay().print(svalue1); // Value
|
||||
else getdisplay().print(svalue1old);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(10, 220);
|
||||
getdisplay().print(name1); // Name
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(10, 190);
|
||||
getdisplay().print("Deg");
|
||||
|
||||
// Horizintal separator right
|
||||
getdisplay().fillRect(340, 149, 80, 3, pixelcolor);
|
||||
|
||||
// Show pitch value
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(295, 270);
|
||||
if(holdvalues == false) getdisplay().print(svalue2); // Value
|
||||
else getdisplay().print(svalue2old);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(335, 220);
|
||||
getdisplay().print(name2); // Name
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(335, 190);
|
||||
getdisplay().print("Deg");
|
||||
|
||||
//*******************************************************************************************
|
||||
|
||||
// Draw instrument
|
||||
int rInstrument = 100; // Radius of instrument
|
||||
float pi = 3.141592;
|
||||
|
||||
getdisplay().fillCircle(200, 150, rInstrument + 10, pixelcolor); // Outer circle
|
||||
getdisplay().fillCircle(200, 150, rInstrument + 7, bgcolor); // Outer circle
|
||||
|
||||
for(int i=0; i<360; i=i+10)
|
||||
{
|
||||
// Only scaling +/- 60 degrees
|
||||
if((i >= 0 && i <= 60) || (i >= 300 && i <= 360)){
|
||||
// Scaling values
|
||||
float x = 200 + (rInstrument+25)*sin(i/180.0*pi); // x-coordinate dots
|
||||
float y = 150 - (rInstrument+25)*cos(i/180.0*pi); // y-coordinate cots
|
||||
const char *ii = "";
|
||||
switch (i)
|
||||
{
|
||||
case 0: ii="0"; break;
|
||||
case 20 : ii="20"; break;
|
||||
case 40 : ii="40"; break;
|
||||
case 60 : ii="60"; break;
|
||||
case 300 : ii="60"; break;
|
||||
case 320 : ii="40"; break;
|
||||
case 340 : ii="20"; break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
// Print text centered on position x, y
|
||||
int16_t x1, y1; // Return values of getTextBounds
|
||||
uint16_t w, h; // Return values of getTextBounds
|
||||
getdisplay().getTextBounds(ii, int(x), int(y), &x1, &y1, &w, &h); // Calc width of new string
|
||||
getdisplay().setCursor(x-w/2, y+h/2);
|
||||
if(i % 20 == 0){
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().print(ii);
|
||||
}
|
||||
|
||||
// Draw sub scale with dots
|
||||
float x1c = 200 + rInstrument*sin(i/180.0*pi);
|
||||
float y1c = 150 - rInstrument*cos(i/180.0*pi);
|
||||
getdisplay().fillCircle((int)x1c, (int)y1c, 2, pixelcolor);
|
||||
float sinx=sin(i/180.0*pi);
|
||||
float cosx=cos(i/180.0*pi);
|
||||
|
||||
// Draw sub scale with lines (two triangles)
|
||||
if(i % 20 == 0){
|
||||
float dx=2; // Line thickness = 2*dx+1
|
||||
float xx1 = -dx;
|
||||
float xx2 = +dx;
|
||||
float yy1 = -(rInstrument-10);
|
||||
float yy2 = -(rInstrument+10);
|
||||
getdisplay().fillTriangle(200+(int)(cosx*xx1-sinx*yy1),150+(int)(sinx*xx1+cosx*yy1),
|
||||
200+(int)(cosx*xx2-sinx*yy1),150+(int)(sinx*xx2+cosx*yy1),
|
||||
200+(int)(cosx*xx1-sinx*yy2),150+(int)(sinx*xx1+cosx*yy2),pixelcolor);
|
||||
getdisplay().fillTriangle(200+(int)(cosx*xx2-sinx*yy1),150+(int)(sinx*xx2+cosx*yy1),
|
||||
200+(int)(cosx*xx1-sinx*yy2),150+(int)(sinx*xx1+cosx*yy2),
|
||||
200+(int)(cosx*xx2-sinx*yy2),150+(int)(sinx*xx2+cosx*yy2),pixelcolor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Draw mast position pointer
|
||||
float startwidth = 8; // Start width of pointer
|
||||
|
||||
// value1 = (2 * pi ) - value1; // Mirror coordiante system for pointer, keel and boat
|
||||
|
||||
if(valid1 == true || holdvalues == true || simulation == true){
|
||||
float sinx=sin(value1 + pi);
|
||||
float cosx=cos(value1 + pi);
|
||||
// Normal pointer
|
||||
// Pointer as triangle with center base 2*width
|
||||
float xx1 = -startwidth;
|
||||
float xx2 = startwidth;
|
||||
float yy1 = -startwidth;
|
||||
float yy2 = -(rInstrument * 0.7);
|
||||
getdisplay().fillTriangle(200+(int)(cosx*xx1-sinx*yy1),150+(int)(sinx*xx1+cosx*yy1),
|
||||
200+(int)(cosx*xx2-sinx*yy1),150+(int)(sinx*xx2+cosx*yy1),
|
||||
200+(int)(cosx*0-sinx*yy2),150+(int)(sinx*0+cosx*yy2),pixelcolor);
|
||||
// Inverted pointer
|
||||
// Pointer as triangle with center base 2*width
|
||||
float endwidth = 2; // End width of pointer
|
||||
float ix1 = endwidth;
|
||||
float ix2 = -endwidth;
|
||||
float iy1 = -(rInstrument * 0.7);
|
||||
float iy2 = -endwidth;
|
||||
getdisplay().fillTriangle(200+(int)(cosx*ix1-sinx*iy1),150+(int)(sinx*ix1+cosx*iy1),
|
||||
200+(int)(cosx*ix2-sinx*iy1),150+(int)(sinx*ix2+cosx*iy1),
|
||||
200+(int)(cosx*0-sinx*iy2),150+(int)(sinx*0+cosx*iy2),pixelcolor);
|
||||
|
||||
// Draw counterweight
|
||||
getdisplay().fillCircle(200+(int)(cosx*0-sinx*yy2),150+(int)(sinx*0+cosx*yy2), 5, pixelcolor);
|
||||
}
|
||||
|
||||
// Center circle
|
||||
getdisplay().fillCircle(200, 150, startwidth + 22, bgcolor);
|
||||
getdisplay().fillCircle(200, 150, startwidth + 20, pixelcolor); // Boat circle
|
||||
int x0 = 200;
|
||||
int y0 = 150;
|
||||
int x1 = x0 + 50*cos(value1);
|
||||
int y1 = y0 + 50*sin(value1);
|
||||
int x2 = x0 + 50*cos(value1 - pi/2);
|
||||
int y2 = y0 + 50*sin(value1 - pi/2);
|
||||
getdisplay().fillTriangle(x0, y0, x1, y1, x2, y2, bgcolor); // Clear half top side of boat circle (right triangle)
|
||||
x1 = x0 + 50*cos(value1 + pi);
|
||||
y1 = y0 + 50*sin(value1 + pi);
|
||||
getdisplay().fillTriangle(x0, y0, x1, y1, x2, y2, bgcolor); // Clear half top side of boat circle (left triangle)
|
||||
getdisplay().fillRect(150, 160, 100, 4, pixelcolor); // Water line
|
||||
|
||||
// Draw roll pointer
|
||||
startwidth = 4; // Start width of pointer
|
||||
if(valid1 == true || holdvalues == true || simulation == true){
|
||||
float sinx=sin(value1); // Roll
|
||||
float cosx=cos(value1);
|
||||
// Normal pointer
|
||||
// Pointer as triangle with center base 2*width
|
||||
float xx1 = -startwidth;
|
||||
float xx2 = startwidth;
|
||||
float yy1 = -startwidth;
|
||||
float yy2 = -(rInstrument - 15);
|
||||
getdisplay().fillTriangle(200+(int)(cosx*xx1-sinx*yy1),150+(int)(sinx*xx1+cosx*yy1),
|
||||
200+(int)(cosx*xx2-sinx*yy1),150+(int)(sinx*xx2+cosx*yy1),
|
||||
200+(int)(cosx*0-sinx*yy2),150+(int)(sinx*0+cosx*yy2),pixelcolor);
|
||||
// Inverted pointer
|
||||
// Pointer as triangle with center base 2*width
|
||||
float endwidth = 2; // End width of pointer
|
||||
float ix1 = endwidth;
|
||||
float ix2 = -endwidth;
|
||||
float iy1 = -(rInstrument - 15);
|
||||
float iy2 = -endwidth;
|
||||
getdisplay().fillTriangle(200+(int)(cosx*ix1-sinx*iy1),150+(int)(sinx*ix1+cosx*iy1),
|
||||
200+(int)(cosx*ix2-sinx*iy1),150+(int)(sinx*ix2+cosx*iy1),
|
||||
200+(int)(cosx*0-sinx*iy2),150+(int)(sinx*0+cosx*iy2),pixelcolor);
|
||||
}
|
||||
else{
|
||||
// Print sensor info
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(145, 200);
|
||||
getdisplay().print("No sensor data"); // Info missing sensor
|
||||
}
|
||||
|
||||
//*******************************************************************************************
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
static Page *createPage(CommonData &common){
|
||||
return new PageRollPitch(common);
|
||||
}
|
||||
/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect (0 here)
|
||||
* and will will provide the names of the fixed values we need
|
||||
*/
|
||||
PageDescription registerPageRollPitch(
|
||||
"RollPitch", // Page name
|
||||
createPage, // Action
|
||||
0, // Number of bus values depends on selection in Web configuration
|
||||
{"xdrRoll", "xdrPitch"},// Bus values we need in the page
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,266 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
|
||||
class PageRudderPosition : public Page
|
||||
{
|
||||
bool keylock = false; // Keylock
|
||||
|
||||
public:
|
||||
PageRudderPosition(CommonData &common){
|
||||
common.logger->logDebug(GwLog::LOG,"Show PageRudderPosition");
|
||||
}
|
||||
|
||||
// Key functions
|
||||
virtual int handleKey(int key){
|
||||
// Keylock function
|
||||
if(key == 11){ // Code for keylock
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData)
|
||||
{
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
static String unit1old = "";
|
||||
double value1 = 0.1;
|
||||
double value1old = 0.1;
|
||||
|
||||
// Get config data
|
||||
String lengthformat = config->getString(config->lengthFormat);
|
||||
bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
bool holdvalues = config->getBool(config->holdvalues);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
|
||||
// Get boat values for rudder position
|
||||
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list
|
||||
String name1 = bvalue1->getName().c_str(); // Value name
|
||||
name1 = name1.substring(0, 6); // String length limit for value name
|
||||
value1 = bvalue1->value; // Raw value without unit convertion
|
||||
bool valid1 = bvalue1->valid; // Valid information
|
||||
String svalue1 = formatValue(bvalue1, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit1 = formatValue(bvalue1, commonData).unit; // Unit of value
|
||||
if(valid1 == true){
|
||||
value1old = value1; // Save old value
|
||||
unit1old = unit1; // Save old unit
|
||||
}
|
||||
|
||||
if(simulation == true){
|
||||
value1 = (3 + float(random(0, 50)) / 10.0)/360*2*PI;
|
||||
unit1 = "Deg";
|
||||
}
|
||||
else{
|
||||
value1 = 0;
|
||||
}
|
||||
|
||||
|
||||
// Optical warning by limit violation (unused)
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
|
||||
// Logging boat values
|
||||
if (bvalue1 == NULL) return;
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageRudderPosition, %s:%f", name1.c_str(), value1);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
//*******************************************************************************************
|
||||
|
||||
// Draw RudderPosition
|
||||
int rInstrument = 110; // Radius of RudderPosition
|
||||
float pi = 3.141592;
|
||||
|
||||
getdisplay().fillCircle(200, 150, rInstrument + 10, pixelcolor); // Outer circle
|
||||
getdisplay().fillCircle(200, 150, rInstrument + 7, bgcolor); // Outer circle
|
||||
getdisplay().fillRect(0, 30, 400, 122, bgcolor); // Delete half top circle
|
||||
|
||||
for(int i=90; i<=270; i=i+10)
|
||||
{
|
||||
// Scaling values
|
||||
float x = 200 + (rInstrument-30)*sin(i/180.0*pi); // x-coordinate dots
|
||||
float y = 150 - (rInstrument-30)*cos(i/180.0*pi); // y-coordinate cots
|
||||
const char *ii = " ";
|
||||
switch (i)
|
||||
{
|
||||
case 0: ii=" "; break; // Use a blank for a empty scale value
|
||||
case 30 : ii=" "; break;
|
||||
case 60 : ii=" "; break;
|
||||
case 90 : ii="45"; break;
|
||||
case 120 : ii="30"; break;
|
||||
case 150 : ii="15"; break;
|
||||
case 180 : ii="0"; break;
|
||||
case 210 : ii="15"; break;
|
||||
case 240 : ii="30"; break;
|
||||
case 270 : ii="45"; break;
|
||||
case 300 : ii=" "; break;
|
||||
case 330 : ii=" "; break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
// Print text centered on position x, y
|
||||
int16_t x1, y1; // Return values of getTextBounds
|
||||
uint16_t w, h; // Return values of getTextBounds
|
||||
getdisplay().getTextBounds(ii, int(x), int(y), &x1, &y1, &w, &h); // Calc width of new string
|
||||
getdisplay().setCursor(x-w/2, y+h/2);
|
||||
if(i % 30 == 0){
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().print(ii);
|
||||
}
|
||||
|
||||
// Draw sub scale with dots
|
||||
float x1c = 200 + rInstrument*sin(i/180.0*pi);
|
||||
float y1c = 150 - rInstrument*cos(i/180.0*pi);
|
||||
getdisplay().fillCircle((int)x1c, (int)y1c, 2, pixelcolor);
|
||||
float sinx=sin(i/180.0*pi);
|
||||
float cosx=cos(i/180.0*pi);
|
||||
|
||||
// Draw sub scale with lines (two triangles)
|
||||
if(i % 30 == 0){
|
||||
float dx=2; // Line thickness = 2*dx+1
|
||||
float xx1 = -dx;
|
||||
float xx2 = +dx;
|
||||
float yy1 = -(rInstrument-10);
|
||||
float yy2 = -(rInstrument+10);
|
||||
getdisplay().fillTriangle(200+(int)(cosx*xx1-sinx*yy1),150+(int)(sinx*xx1+cosx*yy1),
|
||||
200+(int)(cosx*xx2-sinx*yy1),150+(int)(sinx*xx2+cosx*yy1),
|
||||
200+(int)(cosx*xx1-sinx*yy2),150+(int)(sinx*xx1+cosx*yy2),pixelcolor);
|
||||
getdisplay().fillTriangle(200+(int)(cosx*xx2-sinx*yy1),150+(int)(sinx*xx2+cosx*yy1),
|
||||
200+(int)(cosx*xx1-sinx*yy2),150+(int)(sinx*xx1+cosx*yy2),
|
||||
200+(int)(cosx*xx2-sinx*yy2),150+(int)(sinx*xx2+cosx*yy2),pixelcolor);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Print label
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().setCursor(80, 70);
|
||||
getdisplay().print("Rudder Position"); // Label
|
||||
|
||||
// Print Unit in RudderPosition
|
||||
if(valid1 == true || simulation == true){
|
||||
if(holdvalues == false){
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(175, 110);
|
||||
getdisplay().print(unit1); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(175, 110);
|
||||
getdisplay().print(unit1old); // Unit
|
||||
}
|
||||
}
|
||||
else{
|
||||
// Print Unit of keel position
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(145, 110);
|
||||
getdisplay().print("No sensor data"); // Info missing sensor
|
||||
}
|
||||
|
||||
// Calculate rudder position
|
||||
if(holdvalues == true && valid1 == false){
|
||||
value1 = 2 * pi - ((value1old * 2) + pi);
|
||||
}
|
||||
else{
|
||||
value1 = 2 * pi - ((value1 * 2) + pi);
|
||||
}
|
||||
|
||||
// Draw rudder position pointer
|
||||
float startwidth = 8; // Start width of pointer
|
||||
|
||||
if(valid1 == true || holdvalues == true || simulation == true){
|
||||
float sinx=sin(value1);
|
||||
float cosx=cos(value1);
|
||||
// Normal pointer
|
||||
// Pointer as triangle with center base 2*width
|
||||
float xx1 = -startwidth;
|
||||
float xx2 = startwidth;
|
||||
float yy1 = -startwidth;
|
||||
float yy2 = -(rInstrument * 0.5);
|
||||
getdisplay().fillTriangle(200+(int)(cosx*xx1-sinx*yy1),150+(int)(sinx*xx1+cosx*yy1),
|
||||
200+(int)(cosx*xx2-sinx*yy1),150+(int)(sinx*xx2+cosx*yy1),
|
||||
200+(int)(cosx*0-sinx*yy2),150+(int)(sinx*0+cosx*yy2),pixelcolor);
|
||||
// Inverted pointer
|
||||
// Pointer as triangle with center base 2*width
|
||||
float endwidth = 2; // End width of pointer
|
||||
float ix1 = endwidth;
|
||||
float ix2 = -endwidth;
|
||||
float iy1 = -(rInstrument * 0.5);
|
||||
float iy2 = -endwidth;
|
||||
getdisplay().fillTriangle(200+(int)(cosx*ix1-sinx*iy1),150+(int)(sinx*ix1+cosx*iy1),
|
||||
200+(int)(cosx*ix2-sinx*iy1),150+(int)(sinx*ix2+cosx*iy1),
|
||||
200+(int)(cosx*0-sinx*iy2),150+(int)(sinx*0+cosx*iy2),pixelcolor);
|
||||
}
|
||||
|
||||
// Center circle
|
||||
getdisplay().fillCircle(200, 150, startwidth + 6, bgcolor);
|
||||
getdisplay().fillCircle(200, 150, startwidth + 4, pixelcolor);
|
||||
|
||||
//*******************************************************************************************
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
};
|
||||
};
|
||||
|
||||
static Page *createPage(CommonData &common){
|
||||
return new PageRudderPosition(common);
|
||||
}
|
||||
/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect (0 here)
|
||||
* and will will provide the names of the fixed values we need
|
||||
*/
|
||||
PageDescription registerPageRudderPosition(
|
||||
"RudderPosition", // Page name
|
||||
createPage, // Action
|
||||
0, // Number of bus values depends on selection in Web configuration
|
||||
{"RPOS"}, // Bus values we need in the page
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,264 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
#include "movingAvg.h" // Lib for moving average building
|
||||
|
||||
class PageSolar : public Page
|
||||
{
|
||||
bool init = false; // Marker for init done
|
||||
bool keylock = false; // Keylock
|
||||
|
||||
public:
|
||||
PageSolar(CommonData &common){
|
||||
common.logger->logDebug(GwLog::LOG,"Show PageSolar");
|
||||
}
|
||||
virtual int handleKey(int key){
|
||||
// Code for keylock
|
||||
if(key == 11){
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData)
|
||||
{
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
// Get config data
|
||||
bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
bool holdvalues = config->getBool(config->holdvalues);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String batVoltage = config->getString(config->batteryVoltage);
|
||||
int solPower = config->getInt(config->solarPower);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
String powerSensor = config->getString(config->usePowSensor2);
|
||||
|
||||
double value1 = 0; // Solar voltage
|
||||
double value2 = 0; // Solar current
|
||||
double value3 = 0; // Solar output power
|
||||
double valueTrend = 0; // Average over 10 values
|
||||
int solPercentage = 0; // Solar load
|
||||
|
||||
// Get voltage value
|
||||
String name1 = "VSol";
|
||||
|
||||
// Get raw value for trend indicator
|
||||
if(powerSensor != "off"){
|
||||
value1 = commonData.data.solarVoltage; // Use voltage from external sensor
|
||||
}
|
||||
else{
|
||||
value1 = commonData.data.batteryVoltage; // Use internal voltage sensor
|
||||
}
|
||||
value2 = commonData.data.solarCurrent;
|
||||
value3 = commonData.data.solarPower;
|
||||
solPercentage = value3 * 100 / (double)solPower; // Load value
|
||||
// Limits for battery level
|
||||
if(solPercentage < 0) solPercentage = 0;
|
||||
if(solPercentage > 99) solPercentage = 99;
|
||||
|
||||
bool valid1 = true;
|
||||
|
||||
// Optical warning by limit violation
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
// Over voltage
|
||||
if(value1 > 14.8 && batVoltage == "12V"){
|
||||
setBlinkingLED(true);
|
||||
}
|
||||
if(value1 <= 14.8 && batVoltage == "12V"){
|
||||
setBlinkingLED(false);
|
||||
}
|
||||
if(value1 > 29.6 && batVoltage == "24V"){
|
||||
setBlinkingLED(true);
|
||||
}
|
||||
if(value1 <= 29.6 && batVoltage == "24V"){
|
||||
setBlinkingLED(false);
|
||||
}
|
||||
}
|
||||
|
||||
// Logging voltage value
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageSolar, Type:%iW %s:=%f", solPower, name1.c_str(), value1);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Clear display, set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(10, 65);
|
||||
getdisplay().print("Solar");
|
||||
|
||||
// Show voltage type
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(10, 140);
|
||||
int bvoltage = 0;
|
||||
if(String(batVoltage) == "12V") bvoltage = 12;
|
||||
else bvoltage = 24;
|
||||
getdisplay().print(bvoltage);
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().print("V");
|
||||
|
||||
// Show solar power
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(10, 200);
|
||||
if(solPower <= 999) getdisplay().print(solPower, 0);
|
||||
if(solPower > 999) getdisplay().print(float(solPower/1000.0), 1);
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
if(solPower <= 999) getdisplay().print("W");
|
||||
if(solPower > 999) getdisplay().print("kW");
|
||||
|
||||
// Show info
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(10, 235);
|
||||
getdisplay().print("Installed");
|
||||
getdisplay().setCursor(10, 255);
|
||||
getdisplay().print("Solar Modul");
|
||||
|
||||
// Show solar panel
|
||||
solarGraphic(150, 45, pixelcolor, bgcolor);
|
||||
|
||||
// Show load level in percent
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(150, 200);
|
||||
getdisplay().print(solPercentage);
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().print("%");
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(150, 235);
|
||||
getdisplay().print("Load");
|
||||
|
||||
// Show sensor type info
|
||||
String i2cAddr = "";
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(270, 60);
|
||||
if(powerSensor == "off") getdisplay().print("Internal");
|
||||
if(powerSensor == "INA219"){
|
||||
getdisplay().print("INA219");
|
||||
i2cAddr = " (0x" + String(INA219_I2C_ADDR2, HEX) + ")";
|
||||
}
|
||||
if(powerSensor == "INA226"){
|
||||
getdisplay().print("INA226");
|
||||
i2cAddr = " (0x" + String(INA226_I2C_ADDR2, HEX) + ")";
|
||||
}
|
||||
getdisplay().print(i2cAddr);
|
||||
getdisplay().setCursor(270, 80);
|
||||
getdisplay().print("Sensor Modul");
|
||||
|
||||
// Reading bus data or using simulation data
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(260, 140);
|
||||
if(simulation == true){
|
||||
if(batVoltage == "12V"){
|
||||
value1 = 12.0;
|
||||
}
|
||||
if(batVoltage == "24V"){
|
||||
value1 = 24.0;
|
||||
}
|
||||
value1 += float(random(0, 5)) / 10; // Simulation data
|
||||
getdisplay().print(value1,1);
|
||||
}
|
||||
else{
|
||||
// Check for valid real data, display also if hold values activated
|
||||
if(valid1 == true || holdvalues == true){
|
||||
// Resolution switching
|
||||
if(value1 <= 9.9) getdisplay().print(value1, 2);
|
||||
if(value1 > 9.9 && value1 <= 99.9)getdisplay().print(value1, 1);
|
||||
if(value1 > 99.9) getdisplay().print(value1, 0);
|
||||
}
|
||||
else{
|
||||
getdisplay().print("---"); // Missing bus data
|
||||
}
|
||||
}
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().print("V");
|
||||
|
||||
// Show actual current in A
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(260, 200);
|
||||
if((powerSensor == "INA219" || powerSensor == "INA226") && simulation == false){
|
||||
if(value2 <= 9.9) getdisplay().print(value2, 2);
|
||||
if(value2 > 9.9 && value2 <= 99.9)getdisplay().print(value2, 1);
|
||||
if(value2 > 99.9) getdisplay().print(value2, 0);
|
||||
}
|
||||
else getdisplay().print("---");
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().print("A");
|
||||
|
||||
// Show actual consumption in W
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(260, 260);
|
||||
if((powerSensor == "INA219" || powerSensor == "INA226") && simulation == false){
|
||||
if(value3 <= 9.9) getdisplay().print(value3, 2);
|
||||
if(value3 > 9.9 && value3 <= 99.9)getdisplay().print(value3, 1);
|
||||
if(value3 > 99.9) getdisplay().print(value3, 0);
|
||||
}
|
||||
else getdisplay().print("---");
|
||||
getdisplay().setFont(&Ubuntu_Bold16pt7b);
|
||||
getdisplay().print("W");
|
||||
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
};
|
||||
};
|
||||
|
||||
static Page *createPage(CommonData &common){
|
||||
return new PageSolar(common);
|
||||
}
|
||||
/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect (0 here)
|
||||
* and will will provide the names of the fixed values we need
|
||||
*/
|
||||
PageDescription registerPageSolar(
|
||||
"Solar", // Name of page
|
||||
createPage, // Action
|
||||
0, // Number of bus values depends on selection in Web configuration
|
||||
{}, // Names of bus values undepends on selection in Web configuration (refer GwBoatData.h)
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,285 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
|
||||
class PageThreeValues : public Page
|
||||
{
|
||||
bool keylock = false; // Keylock
|
||||
|
||||
public:
|
||||
PageThreeValues(CommonData &comon){
|
||||
comon.logger->logDebug(GwLog::LOG,"Show PageThreeValue");
|
||||
}
|
||||
|
||||
virtual int handleKey(int key){
|
||||
if(key == 11){ // Code for keylock
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData){
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
// Old values for hold function
|
||||
static String svalue1old = "";
|
||||
static String unit1old = "";
|
||||
static String svalue2old = "";
|
||||
static String unit2old = "";
|
||||
static String svalue3old = "";
|
||||
static String unit3old = "";
|
||||
|
||||
// Get config data
|
||||
String lengthformat = config->getString(config->lengthFormat);
|
||||
// bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
bool holdvalues = config->getBool(config->holdvalues);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
|
||||
// Get boat values #1
|
||||
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
|
||||
String name1 = xdrDelete(bvalue1->getName()); // Value name
|
||||
name1 = name1.substring(0, 6); // String length limit for value name
|
||||
double value1 = bvalue1->value; // Value as double in SI unit
|
||||
bool valid1 = bvalue1->valid; // Valid information
|
||||
String svalue1 = formatValue(bvalue1, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit1 = formatValue(bvalue1, commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #2
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list (only one value by PageOneValue)
|
||||
String name2 = xdrDelete(bvalue2->getName()); // Value name
|
||||
name2 = name2.substring(0, 6); // String length limit for value name
|
||||
double value2 = bvalue2->value; // Value as double in SI unit
|
||||
bool valid2 = bvalue2->valid; // Valid information
|
||||
String svalue2 = formatValue(bvalue2, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit2 = formatValue(bvalue2, commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #3
|
||||
GwApi::BoatValue *bvalue3 = pageData.values[2]; // Second element in list (only one value by PageOneValue)
|
||||
String name3 = xdrDelete(bvalue3->getName()); // Value name
|
||||
name3 = name3.substring(0, 6); // String length limit for value name
|
||||
double value3 = bvalue3->value; // Value as double in SI unit
|
||||
bool valid3 = bvalue3->valid; // Valid information
|
||||
String svalue3 = formatValue(bvalue3, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit3 = formatValue(bvalue3, commonData).unit; // Unit of value
|
||||
|
||||
// Optical warning by limit violation (unused)
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
|
||||
// Logging boat values
|
||||
if (bvalue1 == NULL) return;
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageThreeValues, %s: %f, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
/// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
// ############### Value 1 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 55);
|
||||
getdisplay().print(name1); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(20, 90);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit1); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit1old);
|
||||
}
|
||||
|
||||
// Switch font if format for any values
|
||||
if(bvalue1->getFormat() == "formatLatitude" || bvalue1->getFormat() == "formatLongitude"){
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(50, 90);
|
||||
}
|
||||
else if(bvalue1->getFormat() == "formatTime" || bvalue1->getFormat() == "formatDate"){
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(170, 68);
|
||||
}
|
||||
else{
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic30pt7b);
|
||||
getdisplay().setCursor(180, 90);
|
||||
}
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue1); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue1old); // Old value as formated string
|
||||
}
|
||||
if(valid1 == true){
|
||||
svalue1old = svalue1; // Save the old value
|
||||
unit1old = unit1; // Save the old unit
|
||||
}
|
||||
|
||||
// ############### Horizontal Line ################
|
||||
|
||||
// Horizontal line 3 pix
|
||||
getdisplay().fillRect(0, 105, 400, 3, pixelcolor);
|
||||
|
||||
// ############### Value 2 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 145);
|
||||
getdisplay().print(name2); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(20, 180);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit2); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit2old);
|
||||
}
|
||||
|
||||
// Switch font if format for any values
|
||||
if(bvalue2->getFormat() == "formatLatitude" || bvalue2->getFormat() == "formatLongitude"){
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(50, 180);
|
||||
}
|
||||
else if(bvalue2->getFormat() == "formatTime" || bvalue2->getFormat() == "formatDate"){
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(170, 158);
|
||||
}
|
||||
else{
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic30pt7b);
|
||||
getdisplay().setCursor(180, 180);
|
||||
}
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue2); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue2old); // Old value as formated string
|
||||
}
|
||||
if(valid2 == true){
|
||||
svalue2old = svalue2; // Save the old value
|
||||
unit2old = unit2; // Save the old unit
|
||||
}
|
||||
|
||||
// ############### Horizontal Line ################
|
||||
|
||||
// Horizontal line 3 pix
|
||||
getdisplay().fillRect(0, 195, 400, 3, pixelcolor);
|
||||
|
||||
// ############### Value 3 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 235);
|
||||
getdisplay().print(name3); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(20, 270);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit3); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit3old);
|
||||
}
|
||||
|
||||
// Switch font if format for any values
|
||||
if(bvalue3->getFormat() == "formatLatitude" || bvalue3->getFormat() == "formatLongitude"){
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(50, 270);
|
||||
}
|
||||
else if(bvalue3->getFormat() == "formatTime" || bvalue3->getFormat() == "formatDate"){
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(170, 248);
|
||||
}
|
||||
else{
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic30pt7b);
|
||||
getdisplay().setCursor(180, 270);
|
||||
}
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue3); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue3old); // Old value as formated string
|
||||
}
|
||||
if(valid3 == true){
|
||||
svalue3old = svalue3; // Save the old value
|
||||
unit3old = unit3; // Save the old unit
|
||||
}
|
||||
|
||||
|
||||
// ############### Key Layout ################
|
||||
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
};
|
||||
};
|
||||
|
||||
static Page *createPage(CommonData &common){
|
||||
return new PageThreeValues(common);
|
||||
}/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect
|
||||
* this will be number of BoatValue pointers in pageData.values
|
||||
*/
|
||||
PageDescription registerPageThreeValues(
|
||||
"ThreeValues", // Page name
|
||||
createPage, // Action
|
||||
3, // Number of bus values depends on selection in Web configuration
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,225 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
|
||||
class PageTwoValues : public Page
|
||||
{
|
||||
bool keylock = false; // Keylock
|
||||
|
||||
public:
|
||||
PageTwoValues(CommonData &comon){
|
||||
comon.logger->logDebug(GwLog::LOG,"Show PageTwoValue");
|
||||
}
|
||||
|
||||
virtual int handleKey(int key){
|
||||
if(key == 11){ // Code for keylock
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData){
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
// Old values for hold function
|
||||
static String svalue1old = "";
|
||||
static String unit1old = "";
|
||||
static String svalue2old = "";
|
||||
static String unit2old = "";
|
||||
|
||||
// Get config data
|
||||
String lengthformat = config->getString(config->lengthFormat);
|
||||
// bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
bool holdvalues = config->getBool(config->holdvalues);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
|
||||
// Get boat values #1
|
||||
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
|
||||
String name1 = xdrDelete(bvalue1->getName()); // Value name
|
||||
name1 = name1.substring(0, 6); // String length limit for value name
|
||||
double value1 = bvalue1->value; // Value as double in SI unit
|
||||
bool valid1 = bvalue1->valid; // Valid information
|
||||
String svalue1 = formatValue(bvalue1, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit1 = formatValue(bvalue1, commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #2
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list (only one value by PageOneValue)
|
||||
String name2 = xdrDelete(bvalue2->getName()); // Value name
|
||||
name2 = name2.substring(0, 6); // String length limit for value name
|
||||
double value2 = bvalue2->value; // Value as double in SI unit
|
||||
bool valid2 = bvalue2->valid; // Valid information
|
||||
String svalue2 = formatValue(bvalue2, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit2 = formatValue(bvalue2, commonData).unit; // Unit of value
|
||||
|
||||
// Optical warning by limit violation (unused)
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
|
||||
// Logging boat values
|
||||
if (bvalue1 == NULL) return;
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageTwoValues, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
// ############### Value 1 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 80);
|
||||
getdisplay().print(name1); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(20, 130);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit1); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit1old);
|
||||
}
|
||||
|
||||
// Switch font if format for any values
|
||||
if(bvalue1->getFormat() == "formatLatitude" || bvalue1->getFormat() == "formatLongitude"){
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(50, 130);
|
||||
}
|
||||
else if(bvalue1->getFormat() == "formatTime" || bvalue1->getFormat() == "formatDate"){
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(170, 105);
|
||||
}
|
||||
else{
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic42pt7b);
|
||||
getdisplay().setCursor(180, 130);
|
||||
}
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue1); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue1old); // Old value as formated string
|
||||
}
|
||||
if(valid1 == true){
|
||||
svalue1old = svalue1; // Save the old value
|
||||
unit1old = unit1; // Save the old unit
|
||||
}
|
||||
|
||||
// ############### Horizontal Line ################
|
||||
|
||||
// Horizontal line 3 pix
|
||||
getdisplay().fillRect(0, 145, 400, 3, pixelcolor);
|
||||
|
||||
// ############### Value 2 ################
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(20, 190);
|
||||
getdisplay().print(name2); // Page name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(20, 240);
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit2); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit2old);
|
||||
}
|
||||
|
||||
// Switch font if format for any values
|
||||
if(bvalue2->getFormat() == "formatLatitude" || bvalue2->getFormat() == "formatLongitude"){
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(50, 240);
|
||||
}
|
||||
else if(bvalue2->getFormat() == "formatTime" || bvalue2->getFormat() == "formatDate"){
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(170, 215);
|
||||
}
|
||||
else{
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic42pt7b);
|
||||
getdisplay().setCursor(180, 240);
|
||||
}
|
||||
|
||||
// Show bus data
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(svalue2); // Real value as formated string
|
||||
}
|
||||
else{
|
||||
getdisplay().print(svalue2old); // Old value as formated string
|
||||
}
|
||||
if(valid2 == true){
|
||||
svalue2old = svalue2; // Save the old value
|
||||
unit2old = unit2; // Save the old unit
|
||||
}
|
||||
|
||||
|
||||
// ############### Key Layout ################
|
||||
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
};
|
||||
};
|
||||
|
||||
static Page *createPage(CommonData &common){
|
||||
return new PageTwoValues(common);
|
||||
}
|
||||
/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect
|
||||
* this will be number of BoatValue pointers in pageData.values
|
||||
*/
|
||||
PageDescription registerPageTwoValues(
|
||||
"TwoValues", // Page name
|
||||
createPage, // Action
|
||||
2, // Number of bus values depends on selection in Web configuration
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,287 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
#include "movingAvg.h" // Lib for moving average building
|
||||
|
||||
class PageVoltage : public Page
|
||||
{
|
||||
bool init = false; // Marker for init done
|
||||
bool keylock = false; // Keylock
|
||||
int average = 0; // Average type [0...3], 0=off, 1=10s, 2=60s, 3=300s
|
||||
bool trend = true; // Trend indicator [0|1], 0=off, 1=on
|
||||
double raw = 0;
|
||||
|
||||
public:
|
||||
PageVoltage(CommonData &common){
|
||||
common.logger->logDebug(GwLog::LOG,"Show PageVoltage");
|
||||
}
|
||||
virtual int handleKey(int key){
|
||||
// Change average
|
||||
if(key == 1){
|
||||
average ++;
|
||||
average = average % 4; // Modulo 4
|
||||
return 0; // Commit the key
|
||||
}
|
||||
|
||||
// Trend indicator
|
||||
if(key == 5){
|
||||
trend = !trend;
|
||||
return 0; // Commit the key
|
||||
}
|
||||
|
||||
// Code for keylock
|
||||
if(key == 11){
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData)
|
||||
{
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
// Get config data
|
||||
bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
bool holdvalues = config->getBool(config->holdvalues);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String batVoltage = config->getString(config->batteryVoltage);
|
||||
String batType = config->getString(config->batteryType);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
|
||||
double value1 = 0;
|
||||
double valueTrend = 0; // Average over 10 values
|
||||
|
||||
// Get voltage value
|
||||
String name1 = "VBat";
|
||||
|
||||
// Create trend value
|
||||
if(init == false){ // Load start values for first page run
|
||||
valueTrend = commonData.data.batteryVoltage10;
|
||||
init = true;
|
||||
}
|
||||
else{ // Reading trend value
|
||||
valueTrend = commonData.data.batteryVoltage10;
|
||||
}
|
||||
|
||||
// Get raw value for trend indicator
|
||||
raw = commonData.data.batteryVoltage; // Live data
|
||||
|
||||
// Switch average values
|
||||
switch (average) {
|
||||
case 0:
|
||||
value1 = commonData.data.batteryVoltage; // Live data
|
||||
break;
|
||||
case 1:
|
||||
value1 = commonData.data.batteryVoltage10; // Average 10s
|
||||
break;
|
||||
case 2:
|
||||
value1 = commonData.data.batteryVoltage60; // Average 60s
|
||||
break;
|
||||
case 3:
|
||||
value1 = commonData.data.batteryVoltage300; // Average 300s
|
||||
break;
|
||||
default:
|
||||
value1 = commonData.data.batteryVoltage; // Default
|
||||
break;
|
||||
}
|
||||
bool valid1 = true;
|
||||
|
||||
// Optical warning by limit violation
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
// Limits for Pb battery
|
||||
if(String(batType) == "Pb" && (raw < 11.8 || raw > 14.8)){
|
||||
setBlinkingLED(true);
|
||||
}
|
||||
if(String(batType) == "Pb" && (raw >= 11.8 && raw <= 14.8)){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
// Limits for Gel battery
|
||||
if(String(batType) == "Gel" && (raw < 11.8 || raw > 14.4)){
|
||||
setBlinkingLED(true);
|
||||
}
|
||||
if(String(batType) == "Gel" && (raw >= 11.8 && raw <= 14.4)){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
// Limits for AGM battery
|
||||
if(String(batType) == "AGM" && (raw < 11.8 || raw > 14.7)){
|
||||
setBlinkingLED(true);
|
||||
}
|
||||
if(String(batType) == "AGM" && (raw >= 11.8 && raw <= 14.7)){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
// Limits for LiFePo4 battery
|
||||
if(String(batType) == "LiFePo4" && (raw < 12.0 || raw > 14.6)){
|
||||
setBlinkingLED(true);
|
||||
}
|
||||
if(String(batType) == "LiFePo4" && (raw >= 12.0 && raw <= 14.6)){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
}
|
||||
|
||||
// Logging voltage value
|
||||
if (raw == NULL) return;
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageVoltage, Type:%s %s:=%f", batType, name1.c_str(), raw);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Clear display, set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
// Show name
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold32pt7b);
|
||||
getdisplay().setCursor(20, 100);
|
||||
getdisplay().print(name1); // Value name
|
||||
|
||||
// Show unit
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(270, 100);
|
||||
getdisplay().print("V");
|
||||
|
||||
// Show batery type
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(295, 100);
|
||||
getdisplay().print(batType);
|
||||
|
||||
// Show average settings
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(320, 100);
|
||||
switch (average) {
|
||||
case 0:
|
||||
getdisplay().print("Avg: 1s");
|
||||
break;
|
||||
case 1:
|
||||
getdisplay().print("Avg: 10s");
|
||||
break;
|
||||
case 2:
|
||||
getdisplay().print("Avg: 60s");
|
||||
break;
|
||||
case 3:
|
||||
getdisplay().print("Avg: 300s");
|
||||
break;
|
||||
default:
|
||||
getdisplay().print("Avg: 1s");
|
||||
break;
|
||||
}
|
||||
|
||||
// Reading bus data or using simulation data
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic60pt7b);
|
||||
getdisplay().setCursor(20, 240);
|
||||
if(simulation == true){
|
||||
if(batVoltage == "12V"){
|
||||
value1 = 12.0;
|
||||
}
|
||||
if(batVoltage == "24V"){
|
||||
value1 = 24.0;
|
||||
}
|
||||
value1 += float(random(0, 5)) / 10; // Simulation data
|
||||
getdisplay().print(value1,1);
|
||||
}
|
||||
else{
|
||||
// Check for valid real data, display also if hold values activated
|
||||
if(valid1 == true || holdvalues == true){
|
||||
// Resolution switching
|
||||
if(value1 < 10){
|
||||
getdisplay().print(value1,2);
|
||||
}
|
||||
if(value1 >= 10 && value1 < 100){
|
||||
getdisplay().print(value1,1);
|
||||
}
|
||||
if(value1 >= 100){
|
||||
getdisplay().print(value1,0);
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().print("---"); // Missing bus data
|
||||
}
|
||||
}
|
||||
|
||||
// Trend indicator
|
||||
// Show trend indicator
|
||||
if(trend == true){
|
||||
getdisplay().fillRect(310, 240, 40, 120, bgcolor); // Clear area
|
||||
getdisplay().fillRect(315, 183, 35, 4, textcolor); // Draw separator
|
||||
if(int(raw * 10) > int(valueTrend * 10)){
|
||||
displayTrendHigh(320, 174, 11, textcolor); // Show high indicator
|
||||
}
|
||||
if(int(raw * 10) < int(valueTrend * 10)){
|
||||
displayTrendLow(320, 195, 11, textcolor); // Show low indicator
|
||||
}
|
||||
}
|
||||
// No trend indicator
|
||||
else{
|
||||
getdisplay().fillRect(310, 240, 40, 120, bgcolor); // Clear area
|
||||
}
|
||||
|
||||
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(10, 290);
|
||||
getdisplay().print("[AVG]");
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
getdisplay().setCursor(293, 290);
|
||||
getdisplay().print("[TRD]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
};
|
||||
};
|
||||
|
||||
static Page *createPage(CommonData &common){
|
||||
return new PageVoltage(common);
|
||||
}
|
||||
/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect (0 here)
|
||||
* and will will provide the names of the fixed values we need
|
||||
*/
|
||||
PageDescription registerPageVoltage(
|
||||
"Voltage", // Name of page
|
||||
createPage, // Action
|
||||
0, // Number of bus values depends on selection in Web configuration
|
||||
{}, // Names of bus values undepends on selection in Web configuration (refer GwBoatData.h)
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,63 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
|
||||
class PageWhite : public Page{
|
||||
bool keylock = false; // Keylock
|
||||
|
||||
public:
|
||||
PageWhite(CommonData &common){
|
||||
common.logger->logDebug(GwLog::LOG,"Show PageWhite");
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData){
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
// Get config data
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
|
||||
// Optical warning by limit violation (unused)
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
|
||||
// Logging boat values
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageWhite");
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Set background color
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
|
||||
// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
static Page* createPage(CommonData &common){
|
||||
return new PageWhite(common);
|
||||
}
|
||||
|
||||
/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect
|
||||
* this will be number of BoatValue pointers in pageData.values
|
||||
*/
|
||||
PageDescription registerPageWhite(
|
||||
"WhitePage", // Page name
|
||||
createPage, // Action
|
||||
0, // Number of bus values depends on selection in Web configuration
|
||||
false // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,412 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
|
||||
#include "Pagedata.h"
|
||||
#include "OBP60Extensions.h"
|
||||
|
||||
class PageWindRose : public Page
|
||||
{
|
||||
bool keylock = false; // Keylock
|
||||
int16_t lp = 80; // Pointer length
|
||||
|
||||
public:
|
||||
PageWindRose(CommonData &common){
|
||||
common.logger->logDebug(GwLog::LOG,"Show PageWindRose");
|
||||
}
|
||||
|
||||
// Key functions
|
||||
virtual int handleKey(int key){
|
||||
// Keylock function
|
||||
if(key == 11){ // Code for keylock
|
||||
keylock = !keylock; // Toggle keylock
|
||||
return 0; // Commit the key
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData)
|
||||
{
|
||||
GwConfigHandler *config = commonData.config;
|
||||
GwLog *logger=commonData.logger;
|
||||
|
||||
static String svalue1old = "";
|
||||
static String unit1old = "";
|
||||
static String svalue2old = "";
|
||||
static String unit2old = "";
|
||||
static String svalue3old = "";
|
||||
static String unit3old = "";
|
||||
static String svalue4old = "";
|
||||
static String unit4old = "";
|
||||
static String svalue5old = "";
|
||||
static String unit5old = "";
|
||||
static String svalue6old = "";
|
||||
static String unit6old = "";
|
||||
|
||||
// Get config data
|
||||
String lengthformat = config->getString(config->lengthFormat);
|
||||
bool simulation = config->getBool(config->useSimuData);
|
||||
String displaycolor = config->getString(config->displaycolor);
|
||||
bool holdvalues = config->getBool(config->holdvalues);
|
||||
String flashLED = config->getString(config->flashLED);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
|
||||
// Get boat values for AWA
|
||||
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
|
||||
String name1 = xdrDelete(bvalue1->getName()); // Value name
|
||||
name1 = name1.substring(0, 6); // String length limit for value name
|
||||
double value1 = bvalue1->value; // Value as double in SI unit
|
||||
bool valid1 = bvalue1->valid; // Valid information
|
||||
value1 = formatValue(bvalue1, commonData).value;// Format only nesaccery for simulation data for pointer
|
||||
String svalue1 = formatValue(bvalue1, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit1 = formatValue(bvalue1, commonData).unit; // Unit of value
|
||||
if(valid1 == true){
|
||||
svalue1old = svalue1; // Save old value
|
||||
unit1old = unit1; // Save old unit
|
||||
}
|
||||
|
||||
// Get boat values for AWS
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // First element in list (only one value by PageOneValue)
|
||||
String name2 = xdrDelete(bvalue2->getName()); // Value name
|
||||
name2 = name2.substring(0, 6); // String length limit for value name
|
||||
double value2 = bvalue2->value; // Value as double in SI unit
|
||||
bool valid2 = bvalue2->valid; // Valid information
|
||||
String svalue2 = formatValue(bvalue2, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit2 = formatValue(bvalue2, commonData).unit; // Unit of value
|
||||
if(valid2 == true){
|
||||
svalue2old = svalue2; // Save old value
|
||||
unit2old = unit2; // Save old unit
|
||||
}
|
||||
|
||||
// Get boat values TWD
|
||||
GwApi::BoatValue *bvalue3 = pageData.values[2]; // Second element in list (only one value by PageOneValue)
|
||||
String name3 = xdrDelete(bvalue3->getName()); // Value name
|
||||
name3 = name3.substring(0, 6); // String length limit for value name
|
||||
double value3 = bvalue3->value; // Value as double in SI unit
|
||||
bool valid3 = bvalue3->valid; // Valid information
|
||||
String svalue3 = formatValue(bvalue3, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit3 = formatValue(bvalue3, commonData).unit; // Unit of value
|
||||
if(valid3 == true){
|
||||
svalue3old = svalue3; // Save old value
|
||||
unit3old = unit3; // Save old unit
|
||||
}
|
||||
|
||||
// Get boat values TWS
|
||||
GwApi::BoatValue *bvalue4 = pageData.values[3]; // Second element in list (only one value by PageOneValue)
|
||||
String name4 = xdrDelete(bvalue4->getName()); // Value name
|
||||
name4 = name4.substring(0, 6); // String length limit for value name
|
||||
double value4 = bvalue4->value; // Value as double in SI unit
|
||||
bool valid4 = bvalue4->valid; // Valid information
|
||||
String svalue4 = formatValue(bvalue4, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit4 = formatValue(bvalue4, commonData).unit; // Unit of value
|
||||
if(valid4 == true){
|
||||
svalue4old = svalue4; // Save old value
|
||||
unit4old = unit4; // Save old unit
|
||||
}
|
||||
|
||||
// Get boat values DBT
|
||||
GwApi::BoatValue *bvalue5 = pageData.values[4]; // Second element in list (only one value by PageOneValue)
|
||||
String name5 = xdrDelete(bvalue5->getName()); // Value name
|
||||
name5 = name5.substring(0, 6); // String length limit for value name
|
||||
double value5 = bvalue5->value; // Value as double in SI unit
|
||||
bool valid5 = bvalue5->valid; // Valid information
|
||||
String svalue5 = formatValue(bvalue5, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit5 = formatValue(bvalue5, commonData).unit; // Unit of value
|
||||
if(valid5 == true){
|
||||
svalue5old = svalue5; // Save old value
|
||||
unit5old = unit5; // Save old unit
|
||||
}
|
||||
|
||||
// Get boat values STW
|
||||
GwApi::BoatValue *bvalue6 = pageData.values[5]; // Second element in list (only one value by PageOneValue)
|
||||
String name6 = xdrDelete(bvalue6->getName()); // Value name
|
||||
name6 = name6.substring(0, 6); // String length limit for value name
|
||||
double value6 = bvalue6->value; // Value as double in SI unit
|
||||
bool valid6 = bvalue6->valid; // Valid information
|
||||
String svalue6 = formatValue(bvalue6, commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
|
||||
String unit6 = formatValue(bvalue6, commonData).unit; // Unit of value
|
||||
if(valid6 == true){
|
||||
svalue6old = svalue6; // Save old value
|
||||
unit6old = unit6; // Save old unit
|
||||
}
|
||||
|
||||
// Optical warning by limit violation (unused)
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
|
||||
// Logging boat values
|
||||
if (bvalue1 == NULL) return;
|
||||
LOG_DEBUG(GwLog::LOG,"Drawing at PageWindRose, %s:%f, %s:%f, %s:%f, %s:%f, %s:%f, %s:%f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3, name4.c_str(), value4, name5.c_str(), value5, name6.c_str(), value6);
|
||||
|
||||
// Draw page
|
||||
//***********************************************************
|
||||
|
||||
// Set background color and text color
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
// Set display in partial refresh mode
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
|
||||
// Show values AWA
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(10, 65);
|
||||
getdisplay().print(svalue1); // Value
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(10, 95);
|
||||
getdisplay().print(name1); // Name
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(10, 115);
|
||||
getdisplay().print(" ");
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit1); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit1old); // Unit
|
||||
}
|
||||
|
||||
// Horizintal separator left
|
||||
getdisplay().fillRect(0, 149, 60, 3, pixelcolor);
|
||||
|
||||
// Show values AWS
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(10, 270);
|
||||
getdisplay().print(svalue2); // Value
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(10, 220);
|
||||
getdisplay().print(name2); // Name
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(10, 190);
|
||||
getdisplay().print(" ");
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit2); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit2old); // Unit
|
||||
}
|
||||
|
||||
// Show values TWD
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(295, 65);
|
||||
if(valid3 == true){
|
||||
getdisplay().print(abs(value3 * 360 / PI), 0); // Value
|
||||
}
|
||||
else{
|
||||
getdisplay().print("---"); // Value
|
||||
}
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(335, 95);
|
||||
getdisplay().print(name3); // Name
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(335, 115);
|
||||
getdisplay().print(" ");
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit3); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit3old); // Unit
|
||||
}
|
||||
|
||||
// Horizintal separator right
|
||||
getdisplay().fillRect(340, 149, 80, 3, pixelcolor);
|
||||
|
||||
// Show values TWS
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(295, 270);
|
||||
getdisplay().print(svalue4); // Value
|
||||
getdisplay().setFont(&Ubuntu_Bold12pt7b);
|
||||
getdisplay().setCursor(335, 220);
|
||||
getdisplay().print(name4); // Name
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(335, 190);
|
||||
getdisplay().print(" ");
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit4); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit4old); // Unit
|
||||
}
|
||||
|
||||
//*******************************************************************************************
|
||||
|
||||
// Draw wind rose
|
||||
int rInstrument = 110; // Radius of grafic instrument
|
||||
float pi = 3.141592;
|
||||
|
||||
getdisplay().fillCircle(200, 150, rInstrument + 10, pixelcolor); // Outer circle
|
||||
getdisplay().fillCircle(200, 150, rInstrument + 7, bgcolor); // Outer circle
|
||||
getdisplay().fillCircle(200, 150, rInstrument - 10, pixelcolor); // Inner circle
|
||||
getdisplay().fillCircle(200, 150, rInstrument - 13, bgcolor); // Inner circle
|
||||
|
||||
for(int i=0; i<360; i=i+10)
|
||||
{
|
||||
// Scaling values
|
||||
float x = 200 + (rInstrument-30)*sin(i/180.0*pi); // x-coordinate dots
|
||||
float y = 150 - (rInstrument-30)*cos(i/180.0*pi); // y-coordinate cots
|
||||
const char *ii = "";
|
||||
switch (i)
|
||||
{
|
||||
case 0: ii="0"; break;
|
||||
case 30 : ii="30"; break;
|
||||
case 60 : ii="60"; break;
|
||||
case 90 : ii="90"; break;
|
||||
case 120 : ii="120"; break;
|
||||
case 150 : ii="150"; break;
|
||||
case 180 : ii="180"; break;
|
||||
case 210 : ii="210"; break;
|
||||
case 240 : ii="240"; break;
|
||||
case 270 : ii="270"; break;
|
||||
case 300 : ii="300"; break;
|
||||
case 330 : ii="330"; break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
// Print text centered on position x, y
|
||||
int16_t x1, y1; // Return values of getTextBounds
|
||||
uint16_t w, h; // Return values of getTextBounds
|
||||
getdisplay().getTextBounds(ii, int(x), int(y), &x1, &y1, &w, &h); // Calc width of new string
|
||||
getdisplay().setCursor(x-w/2, y+h/2);
|
||||
if(i % 30 == 0){
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().print(ii);
|
||||
}
|
||||
|
||||
// Draw sub scale with dots
|
||||
float x1c = 200 + rInstrument*sin(i/180.0*pi);
|
||||
float y1c = 150 - rInstrument*cos(i/180.0*pi);
|
||||
getdisplay().fillCircle((int)x1c, (int)y1c, 2, pixelcolor);
|
||||
float sinx=sin(i/180.0*pi);
|
||||
float cosx=cos(i/180.0*pi);
|
||||
|
||||
// Draw sub scale with lines (two triangles)
|
||||
if(i % 30 == 0){
|
||||
float dx=2; // Line thickness = 2*dx+1
|
||||
float xx1 = -dx;
|
||||
float xx2 = +dx;
|
||||
float yy1 = -(rInstrument-10);
|
||||
float yy2 = -(rInstrument+10);
|
||||
getdisplay().fillTriangle(200+(int)(cosx*xx1-sinx*yy1),150+(int)(sinx*xx1+cosx*yy1),
|
||||
200+(int)(cosx*xx2-sinx*yy1),150+(int)(sinx*xx2+cosx*yy1),
|
||||
200+(int)(cosx*xx1-sinx*yy2),150+(int)(sinx*xx1+cosx*yy2),pixelcolor);
|
||||
getdisplay().fillTriangle(200+(int)(cosx*xx2-sinx*yy1),150+(int)(sinx*xx2+cosx*yy1),
|
||||
200+(int)(cosx*xx1-sinx*yy2),150+(int)(sinx*xx1+cosx*yy2),
|
||||
200+(int)(cosx*xx2-sinx*yy2),150+(int)(sinx*xx2+cosx*yy2),pixelcolor);
|
||||
}
|
||||
}
|
||||
|
||||
// Draw wind pointer
|
||||
float startwidth = 8; // Start width of pointer
|
||||
if(valid2 == true || holdvalues == true || simulation == true){
|
||||
float sinx=sin(value1); // Wind direction
|
||||
float cosx=cos(value1);
|
||||
// Normal pointer
|
||||
// Pointer as triangle with center base 2*width
|
||||
float xx1 = -startwidth;
|
||||
float xx2 = startwidth;
|
||||
float yy1 = -startwidth;
|
||||
float yy2 = -(rInstrument-15);
|
||||
getdisplay().fillTriangle(200+(int)(cosx*xx1-sinx*yy1),150+(int)(sinx*xx1+cosx*yy1),
|
||||
200+(int)(cosx*xx2-sinx*yy1),150+(int)(sinx*xx2+cosx*yy1),
|
||||
200+(int)(cosx*0-sinx*yy2),150+(int)(sinx*0+cosx*yy2),pixelcolor);
|
||||
// Inverted pointer
|
||||
// Pointer as triangle with center base 2*width
|
||||
float endwidth = 2; // End width of pointer
|
||||
float ix1 = endwidth;
|
||||
float ix2 = -endwidth;
|
||||
float iy1 = -(rInstrument-15);
|
||||
float iy2 = -endwidth;
|
||||
getdisplay().fillTriangle(200+(int)(cosx*ix1-sinx*iy1),150+(int)(sinx*ix1+cosx*iy1),
|
||||
200+(int)(cosx*ix2-sinx*iy1),150+(int)(sinx*ix2+cosx*iy1),
|
||||
200+(int)(cosx*0-sinx*iy2),150+(int)(sinx*0+cosx*iy2),pixelcolor);
|
||||
}
|
||||
|
||||
// Center circle
|
||||
getdisplay().fillCircle(200, 150, startwidth + 6, bgcolor);
|
||||
getdisplay().fillCircle(200, 150, startwidth + 4, pixelcolor);
|
||||
|
||||
//*******************************************************************************************
|
||||
|
||||
// Show values DBT
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic16pt7b);
|
||||
getdisplay().setCursor(160, 200);
|
||||
getdisplay().print(svalue5); // Value
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(190, 215);
|
||||
getdisplay().print(" ");
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit5); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit5old); // Unit
|
||||
}
|
||||
|
||||
// Show values STW
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic16pt7b);
|
||||
getdisplay().setCursor(160, 130);
|
||||
getdisplay().print(svalue6); // Value
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
getdisplay().setCursor(190, 90);
|
||||
getdisplay().print(" ");
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit6); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit6old); // Unit
|
||||
}
|
||||
|
||||
// Key Layout
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt7b);
|
||||
if(keylock == false){
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print("[ <<<< " + String(commonData.data.actpage) + "/" + String(commonData.data.maxpage) + " >>>> ]");
|
||||
if(String(backlightMode) == "Control by Key"){ // Key for illumination
|
||||
getdisplay().setCursor(343, 290);
|
||||
getdisplay().print("[ILUM]");
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setCursor(130, 290);
|
||||
getdisplay().print(" [ Keylock active ]");
|
||||
}
|
||||
|
||||
// Update display
|
||||
getdisplay().nextPage(); // Partial update (fast)
|
||||
};
|
||||
};
|
||||
|
||||
static Page *createPage(CommonData &common){
|
||||
return new PageWindRose(common);
|
||||
}
|
||||
/**
|
||||
* with the code below we make this page known to the PageTask
|
||||
* we give it a type (name) that can be selected in the config
|
||||
* we define which function is to be called
|
||||
* and we provide the number of user parameters we expect (0 here)
|
||||
* and will will provide the names of the fixed values we need
|
||||
*/
|
||||
PageDescription registerPageWindRose(
|
||||
"WindRose", // Page name
|
||||
createPage, // Action
|
||||
0, // Number of bus values depends on selection in Web configuration
|
||||
{"AWA", "AWS", "TWD", "TWS", "DBT", "STW"}, // Bus values we need in the page
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,124 +0,0 @@
|
|||
#pragma once
|
||||
#include <Arduino.h>
|
||||
#include "GwApi.h"
|
||||
#include <functional>
|
||||
#include <vector>
|
||||
|
||||
typedef std::vector<GwApi::BoatValue *> ValueList;
|
||||
typedef struct{
|
||||
String pageName;
|
||||
//the values will always contain the user defined values first
|
||||
ValueList values;
|
||||
} PageData;
|
||||
|
||||
// Sensor data structure (only for extended sensors, not for NMEA bus sensors)
|
||||
typedef struct{
|
||||
int actpage = 0;
|
||||
int maxpage = 0;
|
||||
double batteryVoltage = 0;
|
||||
double batteryCurrent = 0;
|
||||
double batteryPower = 0;
|
||||
double batteryVoltage10 = 0; // Sliding average over 10 values
|
||||
double batteryCurrent10 = 0;
|
||||
double batteryPower10 = 0;
|
||||
double batteryVoltage60 = 0; // Sliding average over 60 values
|
||||
double batteryCurrent60 = 0;
|
||||
double batteryPower60 = 0;
|
||||
double batteryVoltage300 = 0; // Sliding average over 300 values
|
||||
double batteryCurrent300 = 0;
|
||||
double batteryPower300 = 0;
|
||||
double solarVoltage = 0;
|
||||
double solarCurrent = 0;
|
||||
double solarPower = 0;
|
||||
double generatorVoltage = 0;
|
||||
double generatorCurrent = 0;
|
||||
double generatorPower = 0;
|
||||
double airTemperature = 0;
|
||||
double airHumidity = 0;
|
||||
double airPressure = 0;
|
||||
double onewireTemp[8] = {0,0,0,0,0,0,0,0};
|
||||
double rotationAngle = 0; // Rotation angle in radiant
|
||||
bool validRotAngle = false; // Valid flag magnet present for rotation sensor
|
||||
int rtcYear = 0; // UTC time
|
||||
int rtcMonth = 0;
|
||||
int rtcDay = 0;
|
||||
int rtcHour = 0;
|
||||
int rtcMinute = 0;
|
||||
int rtcSecond = 0;
|
||||
int sunsetHour = 0;
|
||||
int sunsetMinute = 0;
|
||||
int sunriseHour = 0;
|
||||
int sunriseMinute = 0;
|
||||
bool sunDown = true;
|
||||
} SensorData;
|
||||
|
||||
typedef struct{
|
||||
int sunsetHour = 0;
|
||||
int sunsetMinute = 0;
|
||||
int sunriseHour = 0;
|
||||
int sunriseMinute = 0;
|
||||
bool sunDown = true;
|
||||
} SunData;
|
||||
|
||||
typedef struct{
|
||||
GwApi::Status status;
|
||||
GwLog *logger=NULL;
|
||||
GwConfigHandler *config=NULL;
|
||||
SensorData data;
|
||||
SunData sundata;
|
||||
GwApi::BoatValue *time=NULL;
|
||||
GwApi::BoatValue *date=NULL;
|
||||
} CommonData;
|
||||
|
||||
//a base class that all pages must inherit from
|
||||
class Page{
|
||||
public:
|
||||
virtual void displayPage(CommonData &commonData, PageData &pageData)=0;
|
||||
virtual void displayNew(CommonData &commonData, PageData &pageData){}
|
||||
//return -1 if handled by the page
|
||||
virtual int handleKey(int key){return key;}
|
||||
};
|
||||
|
||||
typedef std::function<Page* (CommonData &)> PageFunction;
|
||||
typedef std::vector<String> StringList;
|
||||
|
||||
/**
|
||||
* a class that describes a page
|
||||
* it contains the name (type)
|
||||
* the number of expected user defined boat Values
|
||||
* and a list of boatValue names that are fixed
|
||||
* for each page you define a variable of this type
|
||||
* and add this to registerAllPages in the obp60task
|
||||
*/
|
||||
class PageDescription{
|
||||
public:
|
||||
String pageName;
|
||||
int userParam=0;
|
||||
StringList fixedParam;
|
||||
PageFunction creator;
|
||||
bool header=true;
|
||||
PageDescription(String name, PageFunction creator,int userParam,StringList fixedParam,bool header=true){
|
||||
this->pageName=name;
|
||||
this->userParam=userParam;
|
||||
this->fixedParam=fixedParam;
|
||||
this->creator=creator;
|
||||
this->header=header;
|
||||
}
|
||||
PageDescription(String name, PageFunction creator,int userParam,bool header=true){
|
||||
this->pageName=name;
|
||||
this->userParam=userParam;
|
||||
this->creator=creator;
|
||||
this->header=header;
|
||||
}
|
||||
};
|
||||
|
||||
// Structure for formated boat values
|
||||
typedef struct{
|
||||
double value;
|
||||
String svalue;
|
||||
String unit;
|
||||
} FormatedData;
|
||||
|
||||
|
||||
// Formater for boat values
|
||||
FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata);
|
|
@ -1,516 +0,0 @@
|
|||
// A library for handling real-time clocks, dates, etc.
|
||||
// 2010-02-04 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php
|
||||
// 2012-11-08 RAM methods - idreammicro.com
|
||||
// 2012-11-14 SQW/OUT methods - idreammicro.com
|
||||
// 2012-01-12 DS1388 support
|
||||
// 2013-08-29 ENERGIA MSP430 support
|
||||
// 2023-11-24 Return value for begin() to RTC presence check - NoWa
|
||||
|
||||
#include <Wire.h>
|
||||
// Energia support
|
||||
#ifndef ENERGIA
|
||||
// #include <avr/pgmspace.h>
|
||||
#else
|
||||
#define pgm_read_word(data) *data
|
||||
#define pgm_read_byte(data) *data
|
||||
#define PROGMEM
|
||||
#endif
|
||||
#include "RTClib.h"
|
||||
#include <Arduino.h>
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// utility code, some of this could be exposed in the DateTime API if needed
|
||||
|
||||
static const uint8_t daysInMonth [] PROGMEM = {
|
||||
31,28,31,30,31,30,31,31,30,31,30,31
|
||||
};
|
||||
|
||||
// number of days since 2000/01/01, valid for 2001..2099
|
||||
static uint16_t date2days(uint16_t y, uint8_t m, uint8_t d) {
|
||||
if (y >= 2000)
|
||||
y -= 2000;
|
||||
uint16_t days = d;
|
||||
for (uint8_t i = 1; i < m; ++i)
|
||||
days += pgm_read_byte(daysInMonth + i - 1);
|
||||
if (m > 2 && y % 4 == 0)
|
||||
++days;
|
||||
return days + 365 * y + (y + 3) / 4 - 1;
|
||||
}
|
||||
|
||||
static long time2long(uint16_t days, uint8_t h, uint8_t m, uint8_t s) {
|
||||
return ((days * 24L + h) * 60 + m) * 60 + s;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// DateTime implementation - ignores time zones and DST changes
|
||||
// NOTE: also ignores leap seconds, see http://en.wikipedia.org/wiki/Leap_second
|
||||
|
||||
DateTime::DateTime (long t) {
|
||||
ss = t % 60;
|
||||
t /= 60;
|
||||
mm = t % 60;
|
||||
t /= 60;
|
||||
hh = t % 24;
|
||||
uint16_t days = t / 24;
|
||||
uint8_t leap;
|
||||
for (yOff = 0; ; ++yOff) {
|
||||
leap = yOff % 4 == 0;
|
||||
if (days < 365 + leap)
|
||||
break;
|
||||
days -= 365 + leap;
|
||||
}
|
||||
for (m = 1; ; ++m) {
|
||||
uint8_t daysPerMonth = pgm_read_byte(daysInMonth + m - 1);
|
||||
if (leap && m == 2)
|
||||
++daysPerMonth;
|
||||
if (days < daysPerMonth)
|
||||
break;
|
||||
days -= daysPerMonth;
|
||||
}
|
||||
d = days + 1;
|
||||
}
|
||||
|
||||
DateTime::DateTime (uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t min, uint8_t sec) {
|
||||
if (year >= 2000)
|
||||
year -= 2000;
|
||||
yOff = year;
|
||||
m = month;
|
||||
d = day;
|
||||
hh = hour;
|
||||
mm = min;
|
||||
ss = sec;
|
||||
}
|
||||
|
||||
static uint8_t conv2d(const char* p) {
|
||||
uint8_t v = 0;
|
||||
if ('0' <= *p && *p <= '9')
|
||||
v = *p - '0';
|
||||
return 10 * v + *++p - '0';
|
||||
}
|
||||
|
||||
// A convenient constructor for using "the compiler's time":
|
||||
// DateTime now (__DATE__, __TIME__);
|
||||
// NOTE: using PSTR would further reduce the RAM footprint
|
||||
DateTime::DateTime (const char* date, const char* time) {
|
||||
// sample input: date = "Dec 26 2009", time = "12:34:56"
|
||||
yOff = conv2d(date + 9);
|
||||
// Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
|
||||
switch (date[0]) {
|
||||
case 'J': m = date[1] == 'a' ? 1 : m = date[2] == 'n' ? 6 : 7; break;
|
||||
case 'F': m = 2; break;
|
||||
case 'A': m = date[2] == 'r' ? 4 : 8; break;
|
||||
case 'M': m = date[2] == 'r' ? 3 : 5; break;
|
||||
case 'S': m = 9; break;
|
||||
case 'O': m = 10; break;
|
||||
case 'N': m = 11; break;
|
||||
case 'D': m = 12; break;
|
||||
}
|
||||
d = conv2d(date + 4);
|
||||
hh = conv2d(time);
|
||||
mm = conv2d(time + 3);
|
||||
ss = conv2d(time + 6);
|
||||
}
|
||||
|
||||
uint8_t DateTime::dayOfWeek() const {
|
||||
uint16_t day = get() / SECONDS_PER_DAY;
|
||||
return (day + 6) % 7; // Jan 1, 2000 is a Saturday, i.e. returns 6
|
||||
}
|
||||
|
||||
long DateTime::get() const {
|
||||
uint16_t days = date2days(yOff, m, d);
|
||||
return time2long(days, hh, mm, ss);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// RTC_DS1307 implementation
|
||||
|
||||
void RTC_DS1307::adjust(const DateTime& dt) {
|
||||
Wire.beginTransmission(DS1307_ADDRESS);
|
||||
Wire.write((byte) 0);
|
||||
Wire.write(bin2bcd(dt.second()));
|
||||
Wire.write(bin2bcd(dt.minute()));
|
||||
Wire.write(bin2bcd(dt.hour()));
|
||||
Wire.write(bin2bcd(0));
|
||||
Wire.write(bin2bcd(dt.day()));
|
||||
Wire.write(bin2bcd(dt.month()));
|
||||
Wire.write(bin2bcd(dt.year() - 2000));
|
||||
Wire.write((byte) 0);
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
DateTime RTC_DS1307::now() {
|
||||
Wire.beginTransmission(DS1307_ADDRESS);
|
||||
Wire.write((byte) 0);
|
||||
Wire.endTransmission();
|
||||
|
||||
Wire.requestFrom(DS1307_ADDRESS, 7);
|
||||
uint8_t ss = bcd2bin(Wire.read());
|
||||
uint8_t mm = bcd2bin(Wire.read());
|
||||
uint8_t hh = bcd2bin(Wire.read());
|
||||
Wire.read();
|
||||
uint8_t d = bcd2bin(Wire.read());
|
||||
uint8_t m = bcd2bin(Wire.read());
|
||||
uint16_t y = bcd2bin(Wire.read()) + 2000;
|
||||
|
||||
return DateTime (y, m, d, hh, mm, ss);
|
||||
}
|
||||
|
||||
void RTC_DS1307::setSqwOutLevel(uint8_t level) {
|
||||
uint8_t value = (level == LOW) ? 0x00 : (1 << RTC_DS1307__OUT);
|
||||
Wire.beginTransmission(DS1307_ADDRESS);
|
||||
Wire.write(DS1307_CONTROL_REGISTER);
|
||||
Wire.write(value);
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
void RTC_DS1307::setSqwOutSignal(Frequencies frequency) {
|
||||
uint8_t value = (1 << RTC_DS1307__SQWE);
|
||||
switch (frequency)
|
||||
{
|
||||
case Frequency_1Hz:
|
||||
// Nothing to do.
|
||||
break;
|
||||
case Frequency_4096Hz:
|
||||
value |= (1 << RTC_DS1307__RS0);
|
||||
break;
|
||||
case Frequency_8192Hz:
|
||||
value |= (1 << RTC_DS1307__RS1);
|
||||
break;
|
||||
case Frequency_32768Hz:
|
||||
default:
|
||||
value |= (1 << RTC_DS1307__RS1) | (1 << RTC_DS1307__RS0);
|
||||
break;
|
||||
}
|
||||
Wire.beginTransmission(DS1307_ADDRESS);
|
||||
Wire.write(DS1307_CONTROL_REGISTER);
|
||||
Wire.write(value);
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
uint8_t RTC_DS1307::readByteInRam(uint8_t address) {
|
||||
Wire.beginTransmission(DS1307_ADDRESS);
|
||||
Wire.write(address);
|
||||
Wire.endTransmission();
|
||||
|
||||
Wire.requestFrom(DS1307_ADDRESS, 1);
|
||||
uint8_t data = Wire.read();
|
||||
Wire.endTransmission();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
void RTC_DS1307::readBytesInRam(uint8_t address, uint8_t length, uint8_t* p_data) {
|
||||
Wire.beginTransmission(DS1307_ADDRESS);
|
||||
Wire.write(address);
|
||||
Wire.endTransmission();
|
||||
|
||||
Wire.requestFrom(DS1307_ADDRESS, (int)length);
|
||||
for (uint8_t i = 0; i < length; i++) {
|
||||
p_data[i] = Wire.read();
|
||||
}
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
void RTC_DS1307::writeByteInRam(uint8_t address, uint8_t data) {
|
||||
Wire.beginTransmission(DS1307_ADDRESS);
|
||||
Wire.write(address);
|
||||
Wire.write(data);
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
void RTC_DS1307::writeBytesInRam(uint8_t address, uint8_t length, uint8_t* p_data) {
|
||||
Wire.beginTransmission(DS1307_ADDRESS);
|
||||
Wire.write(address);
|
||||
for (uint8_t i = 0; i < length; i++) {
|
||||
Wire.write(p_data[i]);
|
||||
}
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
uint8_t RTC_DS1307::isrunning(void) {
|
||||
Wire.beginTransmission(DS1307_ADDRESS);
|
||||
Wire.write((byte) 0);
|
||||
Wire.endTransmission();
|
||||
|
||||
Wire.requestFrom(DS1307_ADDRESS, 1);
|
||||
uint8_t ss = Wire.read();
|
||||
return !(ss>>7);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// DS 1388 implementation
|
||||
|
||||
void RTC_DS1388::adjust(const DateTime& dt) {
|
||||
Wire.beginTransmission(DS1388_ADDRESS);
|
||||
Wire.write((byte) 0);
|
||||
Wire.write(bin2bcd(0)); // hundreds of seconds 0x00
|
||||
Wire.write(bin2bcd(dt.second())); // 0x01
|
||||
Wire.write(bin2bcd(dt.minute())); // 0x02
|
||||
Wire.write(bin2bcd(dt.hour())); // 0x03
|
||||
Wire.write(bin2bcd(0)); // 0x04
|
||||
Wire.write(bin2bcd(dt.day())); // 0x05
|
||||
Wire.write(bin2bcd(dt.month())); // 0x06
|
||||
Wire.write(bin2bcd(dt.year() - 2000)); // 0x07
|
||||
Wire.endTransmission();
|
||||
|
||||
Wire.beginTransmission(DS1388_ADDRESS);
|
||||
Wire.write((byte) 0x0b);
|
||||
Wire.write((byte) 0x00); //clear the 'time is invalid ' flag bit (OSF)
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
DateTime RTC_DS1388::now() {
|
||||
Wire.beginTransmission(DS1388_ADDRESS);
|
||||
Wire.write((byte) 0);
|
||||
Wire.endTransmission();
|
||||
|
||||
Wire.requestFrom(DS1388_ADDRESS, 8);
|
||||
uint8_t hs = bcd2bin(Wire.read() & 0x7F); // hundreds of seconds
|
||||
uint8_t ss = bcd2bin(Wire.read() & 0x7F);
|
||||
uint8_t mm = bcd2bin(Wire.read());
|
||||
uint8_t hh = bcd2bin(Wire.read());
|
||||
Wire.read();
|
||||
uint8_t d = bcd2bin(Wire.read());
|
||||
uint8_t m = bcd2bin(Wire.read());
|
||||
uint16_t y = bcd2bin(Wire.read()) + 2000;
|
||||
|
||||
return DateTime (y, m, d, hh, mm, ss);
|
||||
}
|
||||
|
||||
uint8_t RTC_DS1388::isrunning() {
|
||||
Wire.beginTransmission(DS1388_ADDRESS);
|
||||
Wire.write((byte)0x0b);
|
||||
Wire.endTransmission();
|
||||
|
||||
Wire.requestFrom(DS1388_ADDRESS, 1);
|
||||
uint8_t ss = Wire.read();
|
||||
return !(ss>>7); //OSF flag bit
|
||||
}
|
||||
|
||||
|
||||
void RTC_DS1388::EEPROMWrite(int pos, uint8_t c) {
|
||||
uint8_t rel_pos = pos % 256;
|
||||
if(pos > 255){
|
||||
Wire.beginTransmission(DS1388_ADDRESS | DS1388_EEPROM_1);
|
||||
} else {
|
||||
Wire.beginTransmission(DS1388_ADDRESS | DS1388_EEPROM_0);
|
||||
}
|
||||
// Set address
|
||||
Wire.write((byte)rel_pos);
|
||||
// Wite data
|
||||
Wire.write((byte)c);
|
||||
Wire.endTransmission();
|
||||
#if defined(__MSP430G2553__)
|
||||
delay(10); // Needed on MSP430 !!
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
uint8_t RTC_DS1388::EEPROMRead(int pos) {
|
||||
uint8_t rel_pos = pos % 256;
|
||||
if(pos > 255){
|
||||
Wire.beginTransmission(DS1388_ADDRESS | DS1388_EEPROM_1);
|
||||
} else {
|
||||
Wire.beginTransmission(DS1388_ADDRESS | DS1388_EEPROM_0);
|
||||
}
|
||||
// Set address
|
||||
Wire.write((byte)rel_pos);
|
||||
Wire.endTransmission(true); // Stay open
|
||||
// Request one byte
|
||||
if(pos > 255){
|
||||
Wire.requestFrom(DS1388_ADDRESS | DS1388_EEPROM_1, 1);
|
||||
} else {
|
||||
Wire.requestFrom(DS1388_ADDRESS | DS1388_EEPROM_0, 1);
|
||||
}
|
||||
uint8_t c = Wire.read();
|
||||
#if defined(__MSP430G2553__)
|
||||
delay(10); // Needed on MSP430 !!
|
||||
#endif
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// RTC_PCF8563 implementation
|
||||
// contributed by @mariusster, see http://forum.jeelabs.net/comment/1902
|
||||
|
||||
void RTC_PCF8563::adjust(const DateTime& dt) {
|
||||
Wire.beginTransmission(PCF8563_ADDRESS);
|
||||
Wire.write((byte) 0);
|
||||
Wire.write((byte) 0x0); // control/status1
|
||||
Wire.write((byte) 0x0); // control/status2
|
||||
Wire.write(bin2bcd(dt.second())); // set seconds
|
||||
Wire.write(bin2bcd(dt.minute())); // set minutes
|
||||
Wire.write(bin2bcd(dt.hour())); // set hour
|
||||
Wire.write(bin2bcd(dt.day())); // set day
|
||||
Wire.write((byte) 0x01); // set weekday
|
||||
Wire.write(bin2bcd(dt.month())); // set month, century to 1
|
||||
Wire.write(bin2bcd(dt.year() - 2000)); // set year to 00-99
|
||||
Wire.write((byte) 0x80); // minute alarm value reset to 00
|
||||
Wire.write((byte) 0x80); // hour alarm value reset to 00
|
||||
Wire.write((byte) 0x80); // day alarm value reset to 00
|
||||
Wire.write((byte) 0x80); // weekday alarm value reset to 00
|
||||
Wire.write((byte) 0x0); // set freqout 0= 32768khz, 1= 1hz
|
||||
Wire.write((byte) 0x0); // timer off
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
DateTime RTC_PCF8563::now() {
|
||||
Wire.beginTransmission(PCF8563_ADDRESS);
|
||||
Wire.write(PCF8563_SEC_ADDR);
|
||||
Wire.endTransmission();
|
||||
|
||||
Wire.requestFrom(PCF8563_ADDRESS, 7);
|
||||
uint8_t ss = bcd2bin(Wire.read() & 0x7F);
|
||||
uint8_t mm = bcd2bin(Wire.read() & 0x7F);
|
||||
uint8_t hh = bcd2bin(Wire.read() & 0x3F);
|
||||
uint8_t d = bcd2bin(Wire.read() & 0x3F);
|
||||
Wire.read();
|
||||
uint8_t m = bcd2bin(Wire.read()& 0x1F);
|
||||
uint16_t y = bcd2bin(Wire.read()) + 2000;
|
||||
|
||||
return DateTime (y, m, d, hh, mm, ss);
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// RTC_BQ32000 implementation
|
||||
|
||||
void RTC_BQ32000::adjust(const DateTime& dt) {
|
||||
Wire.beginTransmission(BQ32000_ADDRESS);
|
||||
Wire.write((byte) 0);
|
||||
Wire.write(bin2bcd(dt.second()));
|
||||
Wire.write(bin2bcd(dt.minute()));
|
||||
Wire.write(bin2bcd(dt.hour()));
|
||||
Wire.write(bin2bcd(0));
|
||||
Wire.write(bin2bcd(dt.day()));
|
||||
Wire.write(bin2bcd(dt.month()));
|
||||
Wire.write(bin2bcd(dt.year() - 2000));
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
DateTime RTC_BQ32000::now() {
|
||||
Wire.beginTransmission(BQ32000_ADDRESS);
|
||||
Wire.write((byte) 0);
|
||||
Wire.endTransmission();
|
||||
|
||||
Wire.requestFrom(DS1307_ADDRESS, 7);
|
||||
uint8_t ss = bcd2bin(Wire.read());
|
||||
uint8_t mm = bcd2bin(Wire.read());
|
||||
uint8_t hh = bcd2bin(Wire.read());
|
||||
Wire.read();
|
||||
uint8_t d = bcd2bin(Wire.read());
|
||||
uint8_t m = bcd2bin(Wire.read());
|
||||
uint16_t y = bcd2bin(Wire.read()) + 2000;
|
||||
|
||||
return DateTime (y, m, d, hh, mm, ss);
|
||||
}
|
||||
|
||||
void RTC_BQ32000::setIRQ(uint8_t state) {
|
||||
/* Set IRQ square wave output state: 0=disabled, 1=1Hz, 2=512Hz.
|
||||
*/
|
||||
uint8_t reg, value;
|
||||
if (state) {
|
||||
// Setting the frequency is a bit complicated on the BQ32000:
|
||||
Wire.beginTransmission(BQ32000_ADDRESS);
|
||||
Wire.write(BQ32000_SFKEY1);
|
||||
Wire.write(BQ32000_SFKEY1_VAL);
|
||||
Wire.write(BQ32000_SFKEY2_VAL);
|
||||
Wire.write((state == 1) ? BQ32000_FTF_1HZ : BQ32000_FTF_512HZ);
|
||||
Wire.endTransmission();
|
||||
}
|
||||
value = readRegister(BQ32000_CAL_CFG1);
|
||||
value = (!state) ? value & ~(1<<BQ32000__FT) : value | (1<<BQ32000__FT);
|
||||
writeRegister(BQ32000_CAL_CFG1, value);
|
||||
}
|
||||
|
||||
void RTC_BQ32000::setIRQLevel(uint8_t level) {
|
||||
/* Set IRQ output level when IRQ square wave output is disabled to
|
||||
* LOW or HIGH.
|
||||
*/
|
||||
uint8_t value;
|
||||
// The IRQ active level bit is in the same register as the calibration
|
||||
// settings, so we preserve its current state:
|
||||
value = readRegister(BQ32000_CAL_CFG1);
|
||||
value = (!level) ? value & ~(1<<BQ32000__OUT) : value | (1<<BQ32000__OUT);
|
||||
writeRegister(BQ32000_CAL_CFG1, value);
|
||||
}
|
||||
|
||||
void RTC_BQ32000::setCalibration(int8_t value) {
|
||||
/* Sets the calibration value to given value in the range -31 - 31, which
|
||||
* corresponds to -126ppm - +63ppm; see table 13 in th BQ32000 datasheet.
|
||||
*/
|
||||
uint8_t val;
|
||||
if (value > 31) value = 31;
|
||||
if (value < -31) value = -31;
|
||||
val = (uint8_t) (value < 0) ? -value | (1<<BQ32000__CAL_S) : value;
|
||||
val |= readRegister(BQ32000_CAL_CFG1) & ~0x3f;
|
||||
writeRegister(BQ32000_CAL_CFG1, val);
|
||||
}
|
||||
|
||||
void RTC_BQ32000::setCharger(int state) {
|
||||
/* If using a super capacitor instead of a battery for backup power, use this
|
||||
* method to set the state of the trickle charger: 0=disabled, 1=low-voltage
|
||||
* charge, 2=high-voltage charge. In low-voltage charge mode, the super cap is
|
||||
* charged through a diode with a voltage drop of about 0.5V, so it will charge
|
||||
* up to VCC-0.5V. In high-voltage charge mode the diode is bypassed and the super
|
||||
* cap will be charged up to VCC (make sure the charge voltage does not exceed your
|
||||
* super cap's voltage rating!!).
|
||||
*/
|
||||
// First disable charger regardless of state (prevents it from
|
||||
// possible starting up in the high voltage mode when the low
|
||||
// voltage mode is requested):
|
||||
uint8_t value;
|
||||
writeRegister(BQ32000_TCH2, 0);
|
||||
if (state <= 0 || state > 2) return;
|
||||
value = BQ32000_CHARGE_ENABLE;
|
||||
if (state == 2) {
|
||||
// High voltage charge enable:
|
||||
value |= (1 << BQ32000__TCFE);
|
||||
}
|
||||
writeRegister(BQ32000_CFG2, value);
|
||||
// Now enable charger:
|
||||
writeRegister(BQ32000_TCH2, 1 << BQ32000__TCH2_BIT);
|
||||
}
|
||||
|
||||
|
||||
uint8_t RTC_BQ32000::readRegister(uint8_t address) {
|
||||
/* Read and return the value in the register at the given address.
|
||||
*/
|
||||
Wire.beginTransmission(BQ32000_ADDRESS);
|
||||
Wire.write((byte) address);
|
||||
Wire.endTransmission();
|
||||
Wire.requestFrom(DS1307_ADDRESS, 1);
|
||||
// Get register state:
|
||||
return Wire.read();
|
||||
}
|
||||
|
||||
uint8_t RTC_BQ32000::writeRegister(uint8_t address, uint8_t value) {
|
||||
/* Write the given value to the register at the given address.
|
||||
*/
|
||||
Wire.beginTransmission(BQ32000_ADDRESS);
|
||||
Wire.write(address);
|
||||
Wire.write(value);
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
uint8_t RTC_BQ32000::isrunning() {
|
||||
return !(readRegister(0x0)>>7);
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// RTC_Millis implementation
|
||||
|
||||
long RTC_Millis::offset = 0;
|
||||
|
||||
void RTC_Millis::adjust(const DateTime& dt) {
|
||||
offset = dt.get() - millis() / 1000;
|
||||
}
|
||||
|
||||
DateTime RTC_Millis::now() {
|
||||
return offset + millis() / 1000;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
|
@ -1,201 +0,0 @@
|
|||
// A library for handling real-time clocks, dates, etc.
|
||||
// 2010-02-04 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php
|
||||
// 2012-11-08 RAM methods - idreammicro.com
|
||||
// 2012-11-14 SQW/OUT methods - idreammicro.com
|
||||
// 2023-11-24 Return value for begin() to RTC presence check - NoWa
|
||||
|
||||
// DS1307
|
||||
#define DS1307_ADDRESS 0x68
|
||||
#define DS1307_CONTROL_REGISTER 0x07
|
||||
#define DS1307_RAM_REGISTER 0x08
|
||||
|
||||
// DS1307 Control register bits.
|
||||
#define RTC_DS1307__RS0 0x00
|
||||
#define RTC_DS1307__RS1 0x01
|
||||
#define RTC_DS1307__SQWE 0x04
|
||||
#define RTC_DS1307__OUT 0x07
|
||||
|
||||
// DS1388
|
||||
#define DS1388_ADDRESS 0x68
|
||||
|
||||
// DS1388 Control register bits
|
||||
#define DS1388_EEPROM_0 0x01
|
||||
#define DS1388_EEPROM_1 0x02
|
||||
|
||||
// PCF8563
|
||||
#define PCF8563_ADDRESS 0x51
|
||||
#define PCF8563_SEC_ADDR 0x02
|
||||
|
||||
// BQ32000
|
||||
#define BQ32000_ADDRESS 0x68
|
||||
// BQ32000 register addresses:
|
||||
#define BQ32000_CAL_CFG1 0x07
|
||||
#define BQ32000_TCH2 0x08
|
||||
#define BQ32000_CFG2 0x09
|
||||
#define BQ32000_SFKEY1 0x20
|
||||
#define BQ32000_SFKEY2 0x21
|
||||
#define BQ32000_SFR 0x22
|
||||
// BQ32000 config bits:
|
||||
#define BQ32000__OUT 0x07 // CAL_CFG1 - IRQ active state
|
||||
#define BQ32000__FT 0x06 // CAL_CFG1 - IRQ square wave enable
|
||||
#define BQ32000__CAL_S 0x05 // CAL_CFG1 - Calibration sign
|
||||
#define BQ32000__TCH2_BIT 0x05 // TCH2 - Trickle charger switch 2
|
||||
#define BQ32000__TCFE 0x06 // CFG2 - Trickle FET control
|
||||
// BQ32000 config values:
|
||||
#define BQ32000_CHARGE_ENABLE 0x05 // CFG2 - Trickle charger switch 1 enable
|
||||
#define BQ32000_SFKEY1_VAL 0x5E
|
||||
#define BQ32000_SFKEY2_VAL 0xC7
|
||||
#define BQ32000_FTF_1HZ 0x01
|
||||
#define BQ32000_FTF_512HZ 0x00
|
||||
|
||||
#define SECONDS_PER_DAY 86400L
|
||||
|
||||
// Simple general-purpose date/time class (no TZ / DST / leap second handling!)
|
||||
class DateTime {
|
||||
public:
|
||||
DateTime (long t =0);
|
||||
DateTime (uint16_t year, uint8_t month, uint8_t day,
|
||||
uint8_t hour =0, uint8_t min =0, uint8_t sec =0);
|
||||
DateTime (const char* date, const char* time);
|
||||
|
||||
uint16_t year() const { return 2000 + yOff; }
|
||||
uint8_t month() const { return m; }
|
||||
uint8_t day() const { return d; }
|
||||
uint8_t hour() const { return hh; }
|
||||
uint8_t minute() const { return mm; }
|
||||
uint8_t second() const { return ss; }
|
||||
uint8_t dayOfWeek() const;
|
||||
|
||||
// 32-bit times as seconds since 1/1/2000
|
||||
long get() const;
|
||||
|
||||
protected:
|
||||
uint8_t yOff, m, d, hh, mm, ss;
|
||||
};
|
||||
|
||||
// RTC based on the DS1307 chip connected via I2C and the Wire library
|
||||
class RTC_DS1307 {
|
||||
public:
|
||||
|
||||
// SQW/OUT frequencies.
|
||||
enum Frequencies
|
||||
{
|
||||
Frequency_1Hz,
|
||||
Frequency_4096Hz,
|
||||
Frequency_8192Hz,
|
||||
Frequency_32768Hz
|
||||
};
|
||||
|
||||
static bool begin() {
|
||||
Wire.beginTransmission(DS1307_ADDRESS);
|
||||
return (Wire.endTransmission() == 0);
|
||||
}
|
||||
static void adjust(const DateTime& dt);
|
||||
static DateTime now();
|
||||
static uint8_t isrunning();
|
||||
|
||||
// SQW/OUT functions.
|
||||
void setSqwOutLevel(uint8_t level);
|
||||
void setSqwOutSignal(Frequencies frequency);
|
||||
|
||||
// RAM registers read/write functions. Address locations 08h to 3Fh.
|
||||
// Max length = 56 bytes.
|
||||
static uint8_t readByteInRam(uint8_t address);
|
||||
static void readBytesInRam(uint8_t address, uint8_t length, uint8_t* p_data);
|
||||
static void writeByteInRam(uint8_t address, uint8_t data);
|
||||
static void writeBytesInRam(uint8_t address, uint8_t length, uint8_t* p_data);
|
||||
|
||||
// utility functions
|
||||
static uint8_t bcd2bin (uint8_t val) { return val - 6 * (val >> 4); }
|
||||
static uint8_t bin2bcd (uint8_t val) { return val + 6 * (val / 10); }
|
||||
};
|
||||
|
||||
|
||||
// DS1388 version
|
||||
class RTC_DS1388 {
|
||||
public:
|
||||
static bool begin() {
|
||||
Wire.beginTransmission(DS1388_ADDRESS);
|
||||
return (Wire.endTransmission() == 0);
|
||||
};
|
||||
static void adjust(const DateTime& dt);
|
||||
static DateTime now();
|
||||
static uint8_t isrunning();
|
||||
|
||||
// EEPROM
|
||||
static void EEPROMWrite(int pos, uint8_t c);
|
||||
static uint8_t EEPROMRead(int pos);
|
||||
|
||||
// utility functions
|
||||
static uint8_t bcd2bin (uint8_t val) { return val - 6 * (val >> 4); }
|
||||
static uint8_t bin2bcd (uint8_t val) { return val + 6 * (val / 10); }
|
||||
};
|
||||
|
||||
|
||||
|
||||
// RTC based on the PCF8563 chip connected via I2C and the Wire library
|
||||
// contributed by @mariusster, see http://forum.jeelabs.net/comment/1902
|
||||
class RTC_PCF8563 {
|
||||
public:
|
||||
static bool begin() {
|
||||
Wire.beginTransmission(PCF8563_ADDRESS);
|
||||
return (Wire.endTransmission() == 0);
|
||||
}
|
||||
static void adjust(const DateTime& dt);
|
||||
static DateTime now();
|
||||
|
||||
// utility functions
|
||||
static uint8_t bcd2bin (uint8_t val) { return val - 6 * (val >> 4); }
|
||||
static uint8_t bin2bcd (uint8_t val) { return val + 6 * (val / 10); }
|
||||
};
|
||||
|
||||
|
||||
// TI BQ32000 I2C RTC
|
||||
class RTC_BQ32000 {
|
||||
public:
|
||||
static bool begin() {
|
||||
Wire.beginTransmission(BQ32000_ADDRESS);
|
||||
return (Wire.endTransmission() == 0);
|
||||
}
|
||||
static void adjust(const DateTime& dt);
|
||||
static DateTime now();
|
||||
static uint8_t isrunning();
|
||||
|
||||
static void setIRQ(uint8_t state);
|
||||
/* Set IRQ output state: 0=disabled, 1=1Hz, 2=512Hz.
|
||||
*/
|
||||
static void setIRQLevel(uint8_t level);
|
||||
/* Set IRQ output active state to LOW or HIGH.
|
||||
*/
|
||||
static void setCalibration(int8_t value);
|
||||
/* Sets the calibration value to given value in the range -31 - 31, which
|
||||
* corresponds to -126ppm - +63ppm; see table 13 in th BQ32000 datasheet.
|
||||
*/
|
||||
static void setCharger(int state);
|
||||
/* If using a super capacitor instead of a battery for backup power, use this
|
||||
method to set the state of the trickle charger: 0=disabled, 1=low-voltage
|
||||
charge, 2=high-voltage charge. In low-voltage charge mode, the super cap is
|
||||
charged through a diode with a voltage drop of about 0.5V, so it will charge
|
||||
up to VCC-0.5V. In high-voltage charge mode the diode is bypassed and the super
|
||||
cap will be charged up to VCC (make sure the charge voltage does not exceed your
|
||||
super cap's voltage rating!!). */
|
||||
|
||||
// utility functions:
|
||||
static uint8_t readRegister(uint8_t address);
|
||||
static uint8_t writeRegister(uint8_t address, uint8_t value);
|
||||
static uint8_t bcd2bin (uint8_t val) { return val - 6 * (val >> 4); }
|
||||
static uint8_t bin2bcd (uint8_t val) { return val + 6 * (val / 10); }
|
||||
};
|
||||
|
||||
|
||||
// RTC using the internal millis() clock, has to be initialized before use
|
||||
// NOTE: this clock won't be correct once the millis() timer rolls over (>49d?)
|
||||
class RTC_Millis {
|
||||
public:
|
||||
static void begin(const DateTime& dt) { adjust(dt); }
|
||||
static void adjust(const DateTime& dt);
|
||||
static DateTime now();
|
||||
|
||||
protected:
|
||||
static long offset;
|
||||
};
|
Binary file not shown.
Binary file not shown.
|
@ -1,290 +0,0 @@
|
|||
const uint8_t Ubuntu_Bold12pt7bBitmaps[] PROGMEM = {
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0x60, 0xF7, 0xFB, 0xFD,
|
||||
0xFE, 0xFF, 0x7F, 0xBF, 0x9C, 0x0F, 0x3C, 0x1E, 0x78, 0x3C, 0xF0, 0xF3,
|
||||
0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x3C, 0x3E, 0xF8, 0x79, 0xE3,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x9E, 0x1E, 0x78, 0x3C, 0xF0, 0x79,
|
||||
0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x01, 0xFC, 0x7F, 0xE7, 0xFE, 0xF0, 0x4F,
|
||||
0x00, 0xF0, 0x0F, 0xF0, 0x7F, 0xC3, 0xFE, 0x07, 0xF0, 0x1F, 0x00, 0xF6,
|
||||
0x0F, 0xFF, 0xEF, 0xFC, 0x3F, 0x80, 0xE0, 0x0E, 0x00, 0xE0, 0x3E, 0x0F,
|
||||
0x07, 0xF0, 0xE0, 0xF7, 0x9E, 0x0E, 0x39, 0xC0, 0xE3, 0xBC, 0x0E, 0x3B,
|
||||
0x80, 0xF7, 0xF8, 0x07, 0xF7, 0x00, 0x3E, 0xF7, 0xC0, 0x0E, 0xFE, 0x01,
|
||||
0xFE, 0xF0, 0x1D, 0xC7, 0x03, 0xDC, 0x70, 0x39, 0xC7, 0x07, 0x9E, 0xF0,
|
||||
0x70, 0xFE, 0x0F, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0xC0, 0x3F, 0xE0, 0x38,
|
||||
0xE0, 0x38, 0xE0, 0x3D, 0xE0, 0x1F, 0xC0, 0x1F, 0x80, 0x3F, 0x9E, 0x7F,
|
||||
0x9E, 0xF3, 0xDC, 0xF1, 0xFC, 0xF0, 0xF8, 0xF8, 0xF8, 0xFF, 0xFC, 0x7F,
|
||||
0xFE, 0x1F, 0x9F, 0xFF, 0xFF, 0xFF, 0xE0, 0x08, 0x3C, 0xF1, 0xE7, 0x8F,
|
||||
0x1E, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0x78, 0xF1, 0xE1,
|
||||
0xE3, 0xC3, 0xC2, 0x00, 0x21, 0xE1, 0xE3, 0xC3, 0xC7, 0x8F, 0x0F, 0x1E,
|
||||
0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x3C, 0x78, 0xF3, 0xC7, 0x9E, 0x08,
|
||||
0x00, 0x0E, 0x01, 0xC1, 0x39, 0x7A, 0xFF, 0xFE, 0x1C, 0x06, 0xC1, 0xDC,
|
||||
0x7B, 0xC2, 0x20, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x0F, 0xFF, 0xFF, 0xFF,
|
||||
0xF8, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x00, 0x7B, 0xDE, 0xF7, 0xBB, 0xCC,
|
||||
0xFF, 0xFF, 0xF8, 0x6F, 0xF6, 0x00, 0xF0, 0x1F, 0x01, 0xE0, 0x1E, 0x03,
|
||||
0xC0, 0x3C, 0x03, 0xC0, 0x78, 0x07, 0x80, 0x78, 0x0F, 0x00, 0xF0, 0x0F,
|
||||
0x01, 0xE0, 0x1E, 0x01, 0xE0, 0x3C, 0x03, 0xC0, 0x3C, 0x07, 0x80, 0x78,
|
||||
0x0F, 0x80, 0xF0, 0x00, 0x0F, 0x03, 0xFC, 0x7F, 0xE7, 0x9E, 0x70, 0xEF,
|
||||
0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xE7,
|
||||
0x9E, 0x7F, 0xE3, 0xFC, 0x0F, 0x00, 0x07, 0x1F, 0x7F, 0xFF, 0xEF, 0x4F,
|
||||
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x1F,
|
||||
0x07, 0xFC, 0xFF, 0xE6, 0x3E, 0x01, 0xE0, 0x1E, 0x03, 0xE0, 0x3C, 0x07,
|
||||
0x80, 0xF8, 0x3F, 0x03, 0xE0, 0x7C, 0x0F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xF0, 0x3E, 0x1F, 0xF3, 0xFF, 0x21, 0xE0, 0x3C, 0x07, 0x87, 0xE0, 0xF8,
|
||||
0x1F, 0xC0, 0x78, 0x07, 0x80, 0xF0, 0x1E, 0x07, 0xFF, 0xF7, 0xFC, 0x7F,
|
||||
0x00, 0x03, 0xC0, 0x7C, 0x0F, 0xC0, 0xFC, 0x1F, 0xC3, 0xBC, 0x3B, 0xC7,
|
||||
0x3C, 0x73, 0xCF, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x3C, 0x03, 0xC0,
|
||||
0x3C, 0x03, 0xC0, 0x3F, 0xE3, 0xFE, 0x3F, 0xE3, 0x80, 0x38, 0x07, 0x80,
|
||||
0x7F, 0x07, 0xFC, 0x7F, 0xE0, 0x3F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x1F,
|
||||
0xFF, 0xEF, 0xFC, 0x7F, 0x00, 0x01, 0xE0, 0xFE, 0x1F, 0xE3, 0xF0, 0x7C,
|
||||
0x07, 0x80, 0xFF, 0x8F, 0xFE, 0xFF, 0xEF, 0x1F, 0xF0, 0xFF, 0x0F, 0xF0,
|
||||
0xF7, 0x9F, 0x7F, 0xE3, 0xFC, 0x1F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
|
||||
0x1E, 0x03, 0xE0, 0x7C, 0x07, 0x80, 0x78, 0x0F, 0x00, 0xF0, 0x1F, 0x01,
|
||||
0xE0, 0x1E, 0x01, 0xE0, 0x3C, 0x03, 0xC0, 0x3C, 0x00, 0x1F, 0x83, 0xFE,
|
||||
0x7F, 0xEF, 0x9F, 0xF0, 0xFF, 0x0F, 0xF9, 0xF7, 0xFE, 0x3F, 0xC7, 0xFE,
|
||||
0xF9, 0xFF, 0x0F, 0xF0, 0xFF, 0x8F, 0xFF, 0xE7, 0xFE, 0x1F, 0x80, 0x1F,
|
||||
0x03, 0xFC, 0x7F, 0xEF, 0x9E, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x8F, 0x7F,
|
||||
0xF7, 0xFF, 0x1F, 0xF0, 0x1E, 0x03, 0xE0, 0x7C, 0x7F, 0x87, 0xF0, 0x78,
|
||||
0x00, 0x6F, 0xF6, 0x00, 0x00, 0x06, 0xFF, 0x60, 0x33, 0xDE, 0x60, 0x00,
|
||||
0x00, 0x03, 0xDE, 0xF7, 0xBD, 0xDE, 0x60, 0x00, 0x60, 0x3E, 0x1F, 0xFF,
|
||||
0xFF, 0xFF, 0x8F, 0x00, 0xFF, 0x8F, 0xFF, 0x1F, 0xF0, 0x3E, 0x00, 0x60,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x60,
|
||||
0x07, 0xC0, 0xFF, 0x8F, 0xFF, 0x1F, 0xF0, 0x0F, 0x1F, 0xFF, 0xFF, 0xFF,
|
||||
0x87, 0xC0, 0x60, 0x00, 0x3E, 0x3F, 0xEF, 0xF9, 0x0F, 0x03, 0xC0, 0xF0,
|
||||
0x7C, 0x1E, 0x0F, 0x83, 0xC1, 0xE0, 0x78, 0x1C, 0x07, 0x00, 0x00, 0x30,
|
||||
0x1E, 0x07, 0x80, 0xC0, 0x01, 0xFC, 0x00, 0x3F, 0xFC, 0x03, 0xFF, 0xF0,
|
||||
0x7E, 0x07, 0xC3, 0xC0, 0x0F, 0x3C, 0x7E, 0x39, 0xC7, 0xF8, 0xFE, 0x7F,
|
||||
0xC7, 0xE7, 0x8E, 0x3F, 0x38, 0x71, 0xF9, 0xC3, 0x8F, 0xCE, 0x1C, 0x7E,
|
||||
0x78, 0xE7, 0x71, 0xFF, 0xF9, 0xCF, 0xFF, 0x8F, 0x1F, 0xF8, 0x3C, 0x00,
|
||||
0x01, 0xF8, 0x00, 0x07, 0xFF, 0x80, 0x0F, 0xFE, 0x00, 0x1F, 0xE0, 0x00,
|
||||
0x03, 0xE0, 0x01, 0xF0, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x77, 0x00, 0x7B,
|
||||
0xC0, 0x3D, 0xE0, 0x3C, 0x78, 0x1E, 0x3C, 0x0F, 0x1E, 0x0F, 0xFF, 0x87,
|
||||
0xFF, 0xC3, 0xFF, 0xE3, 0xC0, 0x79, 0xE0, 0x3D, 0xF0, 0x1E, 0xF0, 0x07,
|
||||
0x80, 0xFF, 0x87, 0xFF, 0x3F, 0xF9, 0xE3, 0xEF, 0x0F, 0x78, 0x7B, 0xC7,
|
||||
0xDF, 0xFC, 0xFF, 0xE7, 0xFF, 0xBC, 0x3F, 0xE0, 0xFF, 0x07, 0xF8, 0x7F,
|
||||
0xFF, 0xDF, 0xFC, 0xFF, 0x80, 0x07, 0xF0, 0x7F, 0xF3, 0xFF, 0xDF, 0x82,
|
||||
0x78, 0x03, 0xE0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00,
|
||||
0x3E, 0x00, 0x78, 0x01, 0xF0, 0x23, 0xFF, 0xC7, 0xFF, 0x07, 0xF0, 0xFF,
|
||||
0x81, 0xFF, 0xE3, 0xFF, 0xE7, 0x87, 0xEF, 0x03, 0xDE, 0x07, 0xFC, 0x07,
|
||||
0xF8, 0x0F, 0xF0, 0x1F, 0xE0, 0x3F, 0xC0, 0x7F, 0x81, 0xFF, 0x03, 0xDE,
|
||||
0x1F, 0xBF, 0xFE, 0x7F, 0xF8, 0xFF, 0x80, 0xFF, 0xEF, 0xFE, 0xFF, 0xEF,
|
||||
0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0xFE, 0xFF, 0xEF, 0xFE, 0xF0, 0x0F,
|
||||
0x00, 0xF0, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xF8, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0xFE, 0xFF, 0xDF, 0xFB, 0xC0,
|
||||
0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x00, 0x07, 0xF0, 0x7F,
|
||||
0xF3, 0xFF, 0xDF, 0x02, 0x78, 0x03, 0xE0, 0x0F, 0x00, 0x3C, 0x00, 0xF0,
|
||||
0x3F, 0xC0, 0xFF, 0x03, 0xFE, 0x0F, 0x78, 0x3D, 0xF0, 0xF3, 0xFF, 0xC7,
|
||||
0xFF, 0x07, 0xF8, 0xF0, 0x3F, 0xC0, 0xFF, 0x03, 0xFC, 0x0F, 0xF0, 0x3F,
|
||||
0xC0, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFC, 0x0F,
|
||||
0xF0, 0x3F, 0xC0, 0xFF, 0x03, 0xFC, 0x0F, 0xF0, 0x3C, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0,
|
||||
0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E,
|
||||
0x87, 0xDF, 0xF7, 0xFE, 0x3F, 0x00, 0xF0, 0xFF, 0xC7, 0xEF, 0x1F, 0x3C,
|
||||
0xF8, 0xF7, 0xC3, 0xFE, 0x0F, 0xF0, 0x3F, 0x80, 0xFF, 0x03, 0xFC, 0x0F,
|
||||
0x78, 0x3D, 0xF0, 0xF3, 0xE3, 0xC7, 0x8F, 0x1F, 0x3C, 0x3E, 0xF0, 0x7C,
|
||||
0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00,
|
||||
0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xF0, 0x78, 0x03, 0xCF, 0x80, 0xF9, 0xF0, 0x1F, 0x3F, 0x07, 0xE7,
|
||||
0xE0, 0xFC, 0xFE, 0x3F, 0xBD, 0xC7, 0xFF, 0xBC, 0xEF, 0xF3, 0xB9, 0xFE,
|
||||
0x77, 0x3F, 0xCF, 0xE7, 0xF8, 0xF8, 0xFF, 0x1F, 0x1F, 0xE1, 0xC3, 0xFC,
|
||||
0x38, 0x7F, 0x80, 0x0F, 0xF0, 0x01, 0xE0, 0xF0, 0x3F, 0xE0, 0xFF, 0x83,
|
||||
0xFF, 0x0F, 0xFE, 0x3F, 0xF8, 0xFF, 0x73, 0xFD, 0xCF, 0xF3, 0xBF, 0xCF,
|
||||
0xFF, 0x1F, 0xFC, 0x3F, 0xF0, 0xFF, 0xC1, 0xFF, 0x07, 0xFC, 0x0F, 0xF0,
|
||||
0x3C, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF, 0x8F, 0x83, 0xE7, 0x80, 0xF7,
|
||||
0xC0, 0x7F, 0xC0, 0x1F, 0xE0, 0x0F, 0xF0, 0x07, 0xF8, 0x03, 0xFC, 0x01,
|
||||
0xFF, 0x01, 0xF7, 0x80, 0xF3, 0xE0, 0xF8, 0xFF, 0xF8, 0x3F, 0xF8, 0x07,
|
||||
0xF0, 0x00, 0xFF, 0x0F, 0xFC, 0xFF, 0xEF, 0x1F, 0xF0, 0xFF, 0x0F, 0xF0,
|
||||
0xFF, 0x1F, 0xFF, 0xEF, 0xFC, 0xFF, 0x8F, 0x00, 0xF0, 0x0F, 0x00, 0xF0,
|
||||
0x0F, 0x00, 0xF0, 0x00, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF, 0x8F, 0x83,
|
||||
0xE7, 0x80, 0xF7, 0xC0, 0x7F, 0xC0, 0x1F, 0xE0, 0x0F, 0xF0, 0x07, 0xF8,
|
||||
0x03, 0xFC, 0x01, 0xFF, 0x01, 0xF7, 0x80, 0xF3, 0xE0, 0xF8, 0xFF, 0xF8,
|
||||
0x3F, 0xF8, 0x07, 0xF0, 0x00, 0xF0, 0x00, 0x3E, 0x00, 0x1F, 0xE0, 0x07,
|
||||
0xF0, 0x00, 0x70, 0xFF, 0x83, 0xFF, 0x8F, 0xFF, 0x3C, 0x3E, 0xF0, 0x7B,
|
||||
0xC1, 0xEF, 0x07, 0xBC, 0x3E, 0xFF, 0xF3, 0xFF, 0x8F, 0xFC, 0x3C, 0xF8,
|
||||
0xF1, 0xF3, 0xC3, 0xCF, 0x0F, 0xBC, 0x1E, 0xF0, 0x7C, 0x1F, 0x87, 0xFE,
|
||||
0x7F, 0xCF, 0x04, 0xF0, 0x0F, 0x00, 0xFC, 0x07, 0xF8, 0x3F, 0xC0, 0xFE,
|
||||
0x01, 0xF0, 0x0F, 0x00, 0xF4, 0x1F, 0xFF, 0xEF, 0xFE, 0x3F, 0x80, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xC1, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01,
|
||||
0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00,
|
||||
0x78, 0x01, 0xE0, 0x07, 0x80, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF,
|
||||
0x07, 0xF8, 0x3F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0,
|
||||
0xFF, 0x07, 0xBC, 0x79, 0xFF, 0xC7, 0xFC, 0x0F, 0x80, 0xF0, 0x07, 0xFC,
|
||||
0x07, 0x9E, 0x03, 0xCF, 0x01, 0xE7, 0xC1, 0xE1, 0xE0, 0xF0, 0xF0, 0x78,
|
||||
0x3C, 0x78, 0x1E, 0x3C, 0x0F, 0x1E, 0x03, 0xDE, 0x01, 0xEF, 0x00, 0xF7,
|
||||
0x80, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x03, 0xE0, 0x00, 0xF0, 0x00,
|
||||
0x1F, 0xE0, 0x00, 0x3F, 0xE0, 0xE0, 0xFB, 0xC3, 0xE1, 0xE7, 0x87, 0xC3,
|
||||
0xCF, 0x0F, 0x87, 0x9E, 0x1F, 0x8F, 0x3C, 0x77, 0x3E, 0x7C, 0xEE, 0x7C,
|
||||
0x7B, 0xDE, 0xF0, 0xF7, 0x1D, 0xE1, 0xEE, 0x3B, 0xC3, 0xFC, 0x7F, 0x83,
|
||||
0xF0, 0x7E, 0x07, 0xE0, 0xFC, 0x0F, 0xC1, 0xF8, 0x1F, 0x01, 0xF0, 0xF8,
|
||||
0x1F, 0x7C, 0x3E, 0x3C, 0x3C, 0x3E, 0x7C, 0x1F, 0xF8, 0x0F, 0xF0, 0x0F,
|
||||
0xF0, 0x07, 0xE0, 0x03, 0xC0, 0x07, 0xE0, 0x0F, 0xF0, 0x0F, 0xF0, 0x1F,
|
||||
0xF8, 0x3E, 0x7C, 0x3C, 0x3C, 0x7C, 0x3E, 0xF8, 0x1F, 0xF8, 0x1F, 0x78,
|
||||
0x1E, 0x7C, 0x3E, 0x3C, 0x3C, 0x3E, 0x7C, 0x1E, 0xF8, 0x0F, 0xF0, 0x0F,
|
||||
0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03,
|
||||
0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
|
||||
0x03, 0xE0, 0x1E, 0x01, 0xF0, 0x1F, 0x00, 0xF0, 0x0F, 0x80, 0xF8, 0x07,
|
||||
0x80, 0x7C, 0x07, 0xC0, 0x3E, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF,
|
||||
0xFF, 0xFF, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, 0x3C,
|
||||
0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0xFF, 0xFF, 0x80, 0xF0, 0x07, 0x80, 0x78,
|
||||
0x07, 0x80, 0x3C, 0x03, 0xC0, 0x3C, 0x01, 0xE0, 0x1E, 0x01, 0xE0, 0x0F,
|
||||
0x00, 0xF0, 0x0F, 0x00, 0x78, 0x07, 0x80, 0x78, 0x03, 0xC0, 0x3C, 0x03,
|
||||
0xC0, 0x1E, 0x01, 0xE0, 0x1E, 0x00, 0xF0, 0xFF, 0xFF, 0xF8, 0xF1, 0xE3,
|
||||
0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, 0x78,
|
||||
0xFF, 0xFF, 0xFF, 0x80, 0x07, 0x00, 0x7C, 0x03, 0xE0, 0x3F, 0x83, 0xDE,
|
||||
0x1E, 0xF1, 0xE3, 0xCE, 0x0E, 0xF0, 0x79, 0x01, 0x00, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xF0, 0x23, 0xC7, 0x8F, 0x08, 0x7F, 0x1F, 0xE7, 0xFC, 0x0F, 0x03,
|
||||
0xCF, 0xF7, 0xFF, 0xCF, 0xF3, 0xFC, 0xFF, 0xFD, 0xFF, 0x3F, 0x80, 0x70,
|
||||
0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xFF, 0x8F, 0xFC, 0xFF,
|
||||
0xEF, 0x1F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x1E, 0xFF,
|
||||
0xEF, 0xFC, 0x7F, 0x00, 0x0F, 0x8F, 0xF7, 0xFD, 0xE0, 0xF0, 0x3C, 0x0F,
|
||||
0x03, 0xC0, 0xF0, 0x1E, 0x17, 0xFC, 0xFF, 0x0F, 0x80, 0x00, 0x70, 0x0F,
|
||||
0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x1F, 0xF3, 0xFF, 0x7F, 0xFF, 0x8F,
|
||||
0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xF7, 0x8F, 0x7F, 0xF3, 0xFF,
|
||||
0x0F, 0xE0, 0x0F, 0x83, 0xFC, 0x7F, 0xE7, 0x9E, 0xF0, 0xFF, 0x0F, 0xFF,
|
||||
0xFF, 0xFF, 0xF0, 0x07, 0x82, 0x7F, 0xE3, 0xFE, 0x0F, 0xC0, 0x1F, 0x3F,
|
||||
0x9F, 0xDF, 0x0F, 0x07, 0x83, 0xFD, 0xFE, 0xFF, 0x78, 0x3C, 0x1E, 0x0F,
|
||||
0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x00, 0x1F, 0xC7, 0xFD, 0xFF,
|
||||
0xFC, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xF9, 0xEF, 0xFD, 0xFF, 0x9F,
|
||||
0xF0, 0x1E, 0x87, 0xDF, 0xF3, 0xFE, 0x7F, 0x00, 0x70, 0x1E, 0x03, 0xC0,
|
||||
0x78, 0x0F, 0x01, 0xE0, 0x3F, 0xE7, 0xFE, 0xFF, 0xDE, 0x7F, 0xC7, 0xF8,
|
||||
0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xF1, 0xFE, 0x3F, 0xC7, 0x80, 0xFF,
|
||||
0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x1E, 0x3C, 0x78,
|
||||
0xF0, 0x00, 0x07, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x1E,
|
||||
0x3C, 0x78, 0xFF, 0xFF, 0xBE, 0x00, 0x70, 0x0F, 0x00, 0xF0, 0x0F, 0x00,
|
||||
0xF0, 0x0F, 0x00, 0xF1, 0xFF, 0x3E, 0xF7, 0xCF, 0xF8, 0xFF, 0x0F, 0xE0,
|
||||
0xFF, 0x0F, 0xF8, 0xF7, 0x8F, 0x7C, 0xF3, 0xEF, 0x1E, 0xF1, 0xF0, 0x73,
|
||||
0xCF, 0x3C, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0x3E, 0xFD,
|
||||
0xF3, 0xC0, 0x7F, 0x3F, 0x3F, 0xFF, 0xEF, 0xFF, 0xFB, 0xCF, 0x9F, 0xF1,
|
||||
0xE3, 0xFC, 0x78, 0xFF, 0x1E, 0x3F, 0xC7, 0x8F, 0xF1, 0xE3, 0xFC, 0x78,
|
||||
0xFF, 0x1E, 0x3F, 0xC7, 0x8F, 0xF1, 0xE3, 0xC0, 0x7F, 0x1F, 0xFB, 0xFF,
|
||||
0x79, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xF1, 0xFE, 0x3F, 0xC7, 0xF8,
|
||||
0xFF, 0x1E, 0x0F, 0x81, 0xFF, 0x1F, 0xFC, 0xF1, 0xEF, 0x07, 0xF8, 0x3F,
|
||||
0xC1, 0xFE, 0x0F, 0xF0, 0x7B, 0xC7, 0x9F, 0xFC, 0x7F, 0xC0, 0xF8, 0x00,
|
||||
0x7F, 0x0F, 0xFC, 0xFF, 0xEF, 0x1E, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F,
|
||||
0xF0, 0xFF, 0x1F, 0xFF, 0xEF, 0xFC, 0xFF, 0x8F, 0x00, 0xF0, 0x0F, 0x00,
|
||||
0xF0, 0x00, 0x0F, 0xF1, 0xFF, 0xDF, 0xFE, 0xF0, 0xFF, 0x07, 0xF8, 0x3F,
|
||||
0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0xC3, 0xDF, 0xFE, 0x7F, 0xF1, 0xFF, 0x80,
|
||||
0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x3F, 0xFF, 0xFF, 0xFE, 0x0F, 0x07,
|
||||
0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x00, 0x1F, 0x9F, 0xEF,
|
||||
0xFB, 0xC0, 0xF0, 0x3F, 0xE7, 0xFC, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0xFE,
|
||||
0x7E, 0x00, 0x70, 0x78, 0x3C, 0x1E, 0x0F, 0xF7, 0xFB, 0xFD, 0xE0, 0xF0,
|
||||
0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xFC, 0xFE, 0x3F, 0x00, 0xF1, 0xFE,
|
||||
0x3F, 0xC7, 0xF8, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xF1, 0xFF, 0x3D,
|
||||
0xFF, 0xBF, 0xF1, 0xFC, 0xF0, 0x7F, 0xC7, 0xDE, 0x3C, 0xF1, 0xE7, 0x8F,
|
||||
0x1C, 0xF0, 0xF7, 0x87, 0xBC, 0x3D, 0xC0, 0xFE, 0x07, 0xF0, 0x1F, 0x00,
|
||||
0xF8, 0x00, 0xF0, 0xE1, 0xFE, 0x1C, 0x3D, 0xC7, 0xC7, 0x3C, 0xF9, 0xE7,
|
||||
0x9F, 0x3C, 0xF7, 0xE7, 0x8E, 0xEE, 0xE1, 0xDD, 0xDC, 0x3F, 0x3F, 0x83,
|
||||
0xE3, 0xE0, 0x7C, 0x7C, 0x0F, 0x07, 0x80, 0xE0, 0xE0, 0xF8, 0xFB, 0xC7,
|
||||
0x8F, 0x78, 0x7B, 0xC1, 0xFC, 0x07, 0xC0, 0x1C, 0x01, 0xF0, 0x1F, 0xC1,
|
||||
0xEF, 0x0F, 0x78, 0xFB, 0xEF, 0x8F, 0x80, 0xF0, 0x7F, 0xC7, 0xDE, 0x3C,
|
||||
0xF1, 0xE7, 0x8F, 0x1E, 0xF0, 0xF7, 0x87, 0xBC, 0x1D, 0xC0, 0xFE, 0x07,
|
||||
0xF0, 0x1F, 0x00, 0xF8, 0x0F, 0x83, 0xFC, 0x1F, 0xC0, 0xFC, 0x00, 0xFF,
|
||||
0xFF, 0xFF, 0xFC, 0x3E, 0x0F, 0x87, 0xC3, 0xE0, 0xF8, 0x7C, 0x1F, 0x0F,
|
||||
0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0x1F, 0x3F, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C,
|
||||
0x3C, 0x7C, 0xF8, 0xF0, 0xF8, 0x7C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C,
|
||||
0x3F, 0x1F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
|
||||
0xF0, 0xF8, 0xFC, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3E, 0x1F, 0x0F,
|
||||
0x1F, 0x3E, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0xFC, 0xF8, 0xF0, 0x38,
|
||||
0x27, 0xE7, 0xFF, 0xFE, 0x7E, 0x41, 0xC0 };
|
||||
|
||||
const GFXglyph Ubuntu_Bold12pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 0, 0, 6, 0, 1 }, // 0x20 ' '
|
||||
{ 0, 4, 17, 8, 2, -16 }, // 0x21 '!'
|
||||
{ 9, 9, 7, 11, 1, -17 }, // 0x22 '"'
|
||||
{ 17, 15, 17, 17, 1, -16 }, // 0x23 '#'
|
||||
{ 49, 12, 22, 14, 1, -18 }, // 0x24 '$'
|
||||
{ 82, 20, 17, 22, 1, -16 }, // 0x25 '%'
|
||||
{ 125, 16, 17, 17, 1, -16 }, // 0x26 '&'
|
||||
{ 159, 4, 7, 6, 1, -17 }, // 0x27 '''
|
||||
{ 163, 7, 23, 9, 2, -18 }, // 0x28 '('
|
||||
{ 184, 7, 23, 9, 0, -18 }, // 0x29 ')'
|
||||
{ 205, 11, 10, 12, 1, -16 }, // 0x2A '*'
|
||||
{ 219, 11, 11, 13, 1, -12 }, // 0x2B '+'
|
||||
{ 235, 5, 8, 6, 0, -3 }, // 0x2C ','
|
||||
{ 240, 7, 3, 9, 1, -8 }, // 0x2D '-'
|
||||
{ 243, 4, 4, 6, 1, -3 }, // 0x2E '.'
|
||||
{ 245, 12, 23, 10, -1, -18 }, // 0x2F '/'
|
||||
{ 280, 12, 17, 14, 1, -16 }, // 0x30 '0'
|
||||
{ 306, 8, 17, 14, 2, -16 }, // 0x31 '1'
|
||||
{ 323, 12, 17, 14, 1, -16 }, // 0x32 '2'
|
||||
{ 349, 11, 17, 14, 1, -16 }, // 0x33 '3'
|
||||
{ 373, 12, 17, 14, 1, -16 }, // 0x34 '4'
|
||||
{ 399, 12, 17, 14, 1, -16 }, // 0x35 '5'
|
||||
{ 425, 12, 17, 14, 1, -16 }, // 0x36 '6'
|
||||
{ 451, 12, 17, 14, 1, -16 }, // 0x37 '7'
|
||||
{ 477, 12, 17, 14, 1, -16 }, // 0x38 '8'
|
||||
{ 503, 12, 17, 14, 1, -16 }, // 0x39 '9'
|
||||
{ 529, 4, 13, 6, 1, -12 }, // 0x3A ':'
|
||||
{ 536, 5, 17, 6, 0, -12 }, // 0x3B ';'
|
||||
{ 547, 12, 11, 14, 1, -12 }, // 0x3C '<'
|
||||
{ 564, 11, 8, 14, 2, -10 }, // 0x3D '='
|
||||
{ 575, 12, 11, 14, 1, -12 }, // 0x3E '>'
|
||||
{ 592, 10, 19, 11, 0, -18 }, // 0x3F '?'
|
||||
{ 616, 21, 21, 23, 1, -16 }, // 0x40 '@'
|
||||
{ 672, 17, 17, 17, 0, -16 }, // 0x41 'A'
|
||||
{ 709, 13, 17, 16, 2, -16 }, // 0x42 'B'
|
||||
{ 737, 14, 17, 16, 1, -16 }, // 0x43 'C'
|
||||
{ 767, 15, 17, 18, 2, -16 }, // 0x44 'D'
|
||||
{ 799, 12, 17, 15, 2, -16 }, // 0x45 'E'
|
||||
{ 825, 11, 17, 14, 2, -16 }, // 0x46 'F'
|
||||
{ 849, 14, 17, 17, 1, -16 }, // 0x47 'G'
|
||||
{ 879, 14, 17, 18, 2, -16 }, // 0x48 'H'
|
||||
{ 909, 4, 17, 8, 2, -16 }, // 0x49 'I'
|
||||
{ 918, 11, 17, 13, 0, -16 }, // 0x4A 'J'
|
||||
{ 942, 14, 17, 16, 2, -16 }, // 0x4B 'K'
|
||||
{ 972, 12, 17, 14, 2, -16 }, // 0x4C 'L'
|
||||
{ 998, 19, 17, 21, 1, -16 }, // 0x4D 'M'
|
||||
{ 1039, 14, 17, 18, 2, -16 }, // 0x4E 'N'
|
||||
{ 1069, 17, 17, 19, 1, -16 }, // 0x4F 'O'
|
||||
{ 1106, 12, 17, 15, 2, -16 }, // 0x50 'P'
|
||||
{ 1132, 17, 22, 19, 1, -16 }, // 0x51 'Q'
|
||||
{ 1179, 14, 17, 16, 2, -16 }, // 0x52 'R'
|
||||
{ 1209, 12, 17, 14, 1, -16 }, // 0x53 'S'
|
||||
{ 1235, 14, 17, 14, 0, -16 }, // 0x54 'T'
|
||||
{ 1265, 13, 17, 17, 2, -16 }, // 0x55 'U'
|
||||
{ 1293, 17, 17, 17, 0, -16 }, // 0x56 'V'
|
||||
{ 1330, 23, 17, 23, 0, -16 }, // 0x57 'W'
|
||||
{ 1379, 16, 17, 16, 0, -16 }, // 0x58 'X'
|
||||
{ 1413, 16, 17, 16, 0, -16 }, // 0x59 'Y'
|
||||
{ 1447, 13, 17, 15, 1, -16 }, // 0x5A 'Z'
|
||||
{ 1475, 7, 23, 9, 2, -18 }, // 0x5B '['
|
||||
{ 1496, 12, 23, 10, -1, -18 }, // 0x5C '\'
|
||||
{ 1531, 7, 23, 9, 0, -18 }, // 0x5D ']'
|
||||
{ 1552, 13, 10, 13, 0, -16 }, // 0x5E '^'
|
||||
{ 1569, 12, 3, 12, 0, 2 }, // 0x5F '_'
|
||||
{ 1574, 6, 5, 7, 1, -18 }, // 0x60 '`'
|
||||
{ 1578, 10, 13, 13, 1, -12 }, // 0x61 'a'
|
||||
{ 1595, 12, 19, 15, 2, -18 }, // 0x62 'b'
|
||||
{ 1624, 10, 13, 12, 1, -12 }, // 0x63 'c'
|
||||
{ 1641, 12, 19, 15, 1, -18 }, // 0x64 'd'
|
||||
{ 1670, 12, 13, 14, 1, -12 }, // 0x65 'e'
|
||||
{ 1690, 9, 19, 10, 2, -18 }, // 0x66 'f'
|
||||
{ 1712, 11, 17, 14, 1, -12 }, // 0x67 'g'
|
||||
{ 1736, 11, 19, 15, 2, -18 }, // 0x68 'h'
|
||||
{ 1763, 4, 19, 8, 2, -18 }, // 0x69 'i'
|
||||
{ 1773, 7, 23, 6, -2, -18 }, // 0x6A 'j'
|
||||
{ 1794, 12, 19, 14, 2, -18 }, // 0x6B 'k'
|
||||
{ 1823, 6, 19, 8, 2, -18 }, // 0x6C 'l'
|
||||
{ 1838, 18, 13, 22, 2, -12 }, // 0x6D 'm'
|
||||
{ 1868, 11, 13, 15, 2, -12 }, // 0x6E 'n'
|
||||
{ 1886, 13, 13, 15, 1, -12 }, // 0x6F 'o'
|
||||
{ 1908, 12, 17, 15, 2, -12 }, // 0x70 'p'
|
||||
{ 1934, 13, 17, 15, 1, -12 }, // 0x71 'q'
|
||||
{ 1962, 9, 13, 11, 2, -12 }, // 0x72 'r'
|
||||
{ 1977, 10, 13, 12, 1, -12 }, // 0x73 's'
|
||||
{ 1994, 9, 17, 11, 2, -16 }, // 0x74 't'
|
||||
{ 2014, 11, 13, 15, 2, -12 }, // 0x75 'u'
|
||||
{ 2032, 13, 13, 13, 0, -12 }, // 0x76 'v'
|
||||
{ 2054, 19, 13, 19, 0, -12 }, // 0x77 'w'
|
||||
{ 2085, 13, 13, 13, 0, -12 }, // 0x78 'x'
|
||||
{ 2107, 13, 17, 13, 0, -12 }, // 0x79 'y'
|
||||
{ 2135, 10, 13, 12, 1, -12 }, // 0x7A 'z'
|
||||
{ 2152, 8, 23, 9, 1, -18 }, // 0x7B '{'
|
||||
{ 2175, 3, 23, 7, 2, -18 }, // 0x7C '|'
|
||||
{ 2184, 8, 23, 9, 0, -18 }, // 0x7D '}'
|
||||
{ 2207, 12, 5, 14, 1, -9 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont Ubuntu_Bold12pt7b PROGMEM = {
|
||||
(uint8_t *)Ubuntu_Bold12pt7bBitmaps,
|
||||
(GFXglyph *)Ubuntu_Bold12pt7bGlyphs,
|
||||
0x20, 0x7E, 28 };
|
||||
|
||||
// Approx. 2887 bytes
|
|
@ -1,402 +0,0 @@
|
|||
const uint8_t Ubuntu_Bold16pt7bBitmaps[] PROGMEM = {
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x00, 0x0E, 0xFF, 0xFF,
|
||||
0xF7, 0x00, 0xF9, 0xFF, 0x9F, 0xF9, 0xFF, 0x9F, 0xF9, 0xFF, 0x9F, 0xF9,
|
||||
0xFF, 0x1E, 0x70, 0xE0, 0x07, 0xCF, 0x81, 0xF3, 0xE0, 0x7D, 0xF8, 0x3E,
|
||||
0x7C, 0x0F, 0x9F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xC7, 0xCF, 0x81, 0xF3, 0xE0, 0x7C, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0x7C, 0x0F, 0x9F, 0x07, 0xEF, 0x81, 0xF3,
|
||||
0xE0, 0x7C, 0xF8, 0x00, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x07, 0xF8,
|
||||
0x1F, 0xFE, 0x3F, 0xFE, 0x3F, 0xFC, 0x7E, 0x0C, 0x7C, 0x00, 0x7C, 0x00,
|
||||
0x7E, 0x00, 0x7F, 0xE0, 0x3F, 0xF8, 0x1F, 0xFC, 0x0F, 0xFE, 0x01, 0xFF,
|
||||
0x00, 0x3F, 0x00, 0x1F, 0x00, 0x1F, 0x70, 0x3F, 0x7F, 0xFE, 0xFF, 0xFE,
|
||||
0xFF, 0xFC, 0x1F, 0xF0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0,
|
||||
0x1F, 0x80, 0xF8, 0x0F, 0xF0, 0x3C, 0x07, 0xFE, 0x1F, 0x03, 0xE7, 0xC7,
|
||||
0x80, 0xF0, 0xF3, 0xE0, 0x3C, 0x3C, 0xF0, 0x0F, 0x0F, 0x78, 0x03, 0xC3,
|
||||
0xFE, 0x00, 0xF9, 0xFF, 0x00, 0x1F, 0xFF, 0xDF, 0x83, 0xFD, 0xEF, 0xF0,
|
||||
0x7E, 0xFF, 0xFE, 0x00, 0x3F, 0xE7, 0xC0, 0x1F, 0xF0, 0xF0, 0x07, 0xBC,
|
||||
0x3C, 0x03, 0xCF, 0x0F, 0x01, 0xF3, 0xC3, 0xC0, 0x78, 0xF9, 0xF0, 0x3E,
|
||||
0x1F, 0xF8, 0x0F, 0x03, 0xFC, 0x07, 0xC0, 0x7E, 0x00, 0x07, 0xF0, 0x00,
|
||||
0x7F, 0xE0, 0x07, 0xFF, 0x00, 0x7F, 0xFC, 0x03, 0xE3, 0xE0, 0x1F, 0x1F,
|
||||
0x00, 0xFD, 0xF0, 0x03, 0xFF, 0x80, 0x1F, 0xF8, 0x00, 0xFF, 0x00, 0x0F,
|
||||
0xFC, 0xF8, 0xFF, 0xF7, 0xC7, 0xDF, 0xBE, 0x7C, 0x7F, 0xE3, 0xE1, 0xFF,
|
||||
0x1F, 0x07, 0xF0, 0xFC, 0x1F, 0x87, 0xFF, 0xFE, 0x1F, 0xFF, 0xF8, 0x7F,
|
||||
0xFF, 0xE0, 0xFE, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x70, 0x04,
|
||||
0x07, 0x87, 0xE3, 0xE3, 0xF1, 0xF1, 0xF8, 0xF8, 0x7C, 0x3E, 0x3E, 0x1F,
|
||||
0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x07, 0xC3, 0xE1,
|
||||
0xF0, 0xFC, 0x3E, 0x1F, 0x87, 0xC3, 0xF0, 0xF0, 0x20, 0x10, 0x3C, 0x3F,
|
||||
0x0F, 0x87, 0xE1, 0xF0, 0xFC, 0x3E, 0x1F, 0x0F, 0x83, 0xE1, 0xF0, 0xF8,
|
||||
0x7C, 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF1, 0xF0, 0xF8, 0x7C, 0x7E,
|
||||
0x3E, 0x3F, 0x1F, 0x1F, 0x87, 0x80, 0x80, 0x0F, 0x80, 0x7C, 0x1B, 0xCC,
|
||||
0xEE, 0xEF, 0xFF, 0xFF, 0xFC, 0x1C, 0x03, 0xF8, 0x3D, 0xE3, 0xEF, 0x8E,
|
||||
0x38, 0x11, 0x00, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x83,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1E, 0x00, 0x78, 0x01, 0xE0,
|
||||
0x07, 0x80, 0x1E, 0x00, 0x7D, 0xF7, 0xDF, 0x7D, 0xE7, 0xBE, 0xF0, 0xC0,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x7B, 0xFF, 0xFF, 0xFD, 0xE0, 0x00, 0x3E,
|
||||
0x00, 0xFC, 0x01, 0xF0, 0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x00, 0x3E, 0x00,
|
||||
0xFC, 0x01, 0xF0, 0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x00, 0x3E, 0x00, 0xFC,
|
||||
0x01, 0xF0, 0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x00, 0x3E, 0x00, 0xFC, 0x01,
|
||||
0xF0, 0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x00, 0x3E, 0x00, 0xFC, 0x01, 0xF0,
|
||||
0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x00, 0x00, 0x07, 0xE0, 0x1F, 0xF8, 0x3F,
|
||||
0xFC, 0x3F, 0xFC, 0x7E, 0x7E, 0x7C, 0x3E, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8,
|
||||
0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8,
|
||||
0x1F, 0x7C, 0x3E, 0x7E, 0x7E, 0x3F, 0xFC, 0x3F, 0xFC, 0x1F, 0xF8, 0x07,
|
||||
0xE0, 0x03, 0xC1, 0xF1, 0xFD, 0xFF, 0xFF, 0xFF, 0xF7, 0x7D, 0x1F, 0x07,
|
||||
0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0,
|
||||
0x7C, 0x1F, 0x07, 0xC0, 0x0F, 0xC0, 0x7F, 0xE3, 0xFF, 0xE7, 0xFF, 0xE7,
|
||||
0x8F, 0xC4, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0xF8, 0x03, 0xF0, 0x0F,
|
||||
0xC0, 0x3F, 0x00, 0xFE, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x3E, 0x00,
|
||||
0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, 0xE0, 0x1F, 0xC0, 0xFF, 0xE3,
|
||||
0xFF, 0xE3, 0xFF, 0xE6, 0x0F, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x7C, 0x1F,
|
||||
0xF8, 0x3F, 0xC0, 0x7F, 0xE0, 0xFF, 0xE0, 0x0F, 0xE0, 0x07, 0xC0, 0x0F,
|
||||
0x80, 0x1F, 0x60, 0x7F, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, 0xC3, 0xFC, 0x00,
|
||||
0x00, 0x7C, 0x00, 0xFC, 0x01, 0xFC, 0x03, 0xFC, 0x07, 0xFC, 0x0F, 0xFC,
|
||||
0x0F, 0x7C, 0x1F, 0x7C, 0x3E, 0x7C, 0x3C, 0x7C, 0x78, 0x7C, 0xF8, 0x7C,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7C, 0x00, 0x7C,
|
||||
0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x3F, 0xFC, 0x7F, 0xF8, 0xFF, 0xF1,
|
||||
0xFF, 0xE3, 0xC0, 0x07, 0x80, 0x1F, 0x00, 0x3F, 0xC0, 0x7F, 0xF0, 0xFF,
|
||||
0xF1, 0xFF, 0xF0, 0x0F, 0xF0, 0x07, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F,
|
||||
0x40, 0x7F, 0xFF, 0xFB, 0xFF, 0xE7, 0xFF, 0x83, 0xFC, 0x00, 0x00, 0x3E,
|
||||
0x01, 0xFE, 0x07, 0xFE, 0x0F, 0xFE, 0x1F, 0xE0, 0x3F, 0x00, 0x7E, 0x00,
|
||||
0x7C, 0x00, 0xFF, 0xF0, 0xFF, 0xFC, 0xFF, 0xFE, 0xFF, 0xFE, 0xF8, 0x3F,
|
||||
0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0x7C, 0x3F, 0x7F, 0xFE, 0x3F, 0xFC,
|
||||
0x1F, 0xF8, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0x3E, 0x00, 0x7C, 0x00, 0xFC, 0x00, 0xF8, 0x01, 0xF8, 0x01, 0xF0,
|
||||
0x01, 0xF0, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x07, 0xC0, 0x07, 0xC0,
|
||||
0x07, 0xC0, 0x0F, 0x80, 0x0F, 0x80, 0x0F, 0x80, 0x0F, 0x80, 0x0F, 0xE0,
|
||||
0x3F, 0xF8, 0x7F, 0xFC, 0x7F, 0xFE, 0xFC, 0x7E, 0xF8, 0x3E, 0xF8, 0x3E,
|
||||
0xFC, 0x7C, 0x7F, 0xFC, 0x3F, 0xF0, 0x3F, 0xFC, 0x7F, 0xFE, 0xFC, 0x3E,
|
||||
0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xFC, 0x3F, 0x7F, 0xFE, 0x7F, 0xFE,
|
||||
0x3F, 0xFC, 0x07, 0xF0, 0x07, 0xE0, 0x1F, 0xF8, 0x3F, 0xFC, 0x7F, 0xFE,
|
||||
0xFC, 0x3E, 0xF8, 0x3F, 0xF8, 0x1F, 0xF8, 0x1F, 0xFC, 0x1F, 0x7F, 0xFF,
|
||||
0x7F, 0xFF, 0x3F, 0xFF, 0x0F, 0xDF, 0x00, 0x3E, 0x00, 0x7E, 0x00, 0xFE,
|
||||
0x03, 0xFC, 0x3F, 0xF8, 0x3F, 0xF0, 0x3F, 0xC0, 0x3E, 0x00, 0x7B, 0xFF,
|
||||
0xFF, 0xFD, 0xE0, 0x00, 0x00, 0x00, 0x1E, 0xFF, 0xFF, 0xFF, 0x78, 0x7B,
|
||||
0xFF, 0xFF, 0xFD, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xF7, 0xDF, 0x7D,
|
||||
0xE7, 0xBE, 0xF0, 0xC0, 0x00, 0x0C, 0x01, 0xF8, 0x3F, 0xFB, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0x3F, 0xE0, 0x7C, 0x00, 0xFF, 0x81, 0xFF, 0xF3, 0xFF,
|
||||
0xFB, 0xFF, 0xF0, 0xFF, 0xE0, 0x1F, 0x80, 0x03, 0x00, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x60, 0x01, 0xF0, 0x0F, 0xFC, 0x3F,
|
||||
0xFE, 0xFF, 0xFC, 0xFF, 0xF0, 0x3F, 0xC0, 0x1F, 0x03, 0xFC, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFE, 0xFF, 0xC1, 0xF0, 0x06, 0x00, 0x00, 0x3F, 0x8F, 0xFC,
|
||||
0xFF, 0xE7, 0xFF, 0x63, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x03, 0xE0, 0x7E,
|
||||
0x0F, 0xC0, 0xF8, 0x1F, 0x01, 0xE0, 0x1E, 0x01, 0xE0, 0x00, 0x00, 0x00,
|
||||
0x1E, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x01, 0xE0, 0x00, 0x7F, 0x80,
|
||||
0x00, 0x7F, 0xFC, 0x00, 0x7F, 0xFF, 0xC0, 0x3F, 0x03, 0xF8, 0x1F, 0x00,
|
||||
0x3F, 0x0F, 0x80, 0x03, 0xC3, 0xC1, 0xF8, 0x79, 0xE1, 0xFF, 0x1E, 0x78,
|
||||
0xFF, 0xC7, 0xFE, 0x3C, 0xF0, 0xFF, 0x1E, 0x3C, 0x3F, 0xC7, 0x8F, 0x0F,
|
||||
0xF1, 0xE3, 0xC3, 0xFC, 0x78, 0xF0, 0xFF, 0x1E, 0x3C, 0x3F, 0xC7, 0x8F,
|
||||
0x0F, 0xF1, 0xE3, 0xC7, 0xBE, 0x3C, 0xF1, 0xE7, 0x8F, 0xFF, 0xF1, 0xE1,
|
||||
0xFF, 0xF8, 0x3C, 0x3E, 0xF8, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00,
|
||||
0x3F, 0x80, 0x40, 0x07, 0xFF, 0xF0, 0x00, 0x7F, 0xFC, 0x00, 0x03, 0xFE,
|
||||
0x00, 0x00, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x7F, 0x80, 0x07, 0xFC, 0x00,
|
||||
0x3F, 0xF0, 0x03, 0xEF, 0x80, 0x1F, 0x7C, 0x00, 0xFB, 0xF0, 0x0F, 0x8F,
|
||||
0x80, 0x7C, 0x7E, 0x03, 0xE3, 0xF0, 0x3E, 0x0F, 0x81, 0xFF, 0xFC, 0x1F,
|
||||
0xFF, 0xF0, 0xFF, 0xFF, 0x87, 0xFF, 0xFC, 0x7E, 0x03, 0xF3, 0xE0, 0x0F,
|
||||
0x9F, 0x00, 0x7D, 0xF8, 0x03, 0xFF, 0x80, 0x0F, 0x80, 0xFF, 0xE0, 0x7F,
|
||||
0xFE, 0x3F, 0xFF, 0x9F, 0xFF, 0xEF, 0x83, 0xF7, 0xC0, 0xFB, 0xE0, 0x7D,
|
||||
0xF0, 0x7E, 0xFF, 0xFE, 0x7F, 0xFE, 0x3F, 0xFF, 0x9F, 0xFF, 0xEF, 0x81,
|
||||
0xFF, 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x1F, 0xFF, 0xFF, 0xBF,
|
||||
0xFF, 0xDF, 0xFF, 0x87, 0xFF, 0x00, 0x01, 0xFC, 0x03, 0xFF, 0xC7, 0xFF,
|
||||
0xE7, 0xFF, 0xE3, 0xF0, 0x33, 0xF0, 0x01, 0xF0, 0x01, 0xF0, 0x00, 0xF8,
|
||||
0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03,
|
||||
0xF0, 0x00, 0xFC, 0x00, 0x7F, 0x03, 0x1F, 0xFF, 0x87, 0xFF, 0xE1, 0xFF,
|
||||
0xF0, 0x3F, 0xC0, 0xFF, 0xE0, 0x1F, 0xFF, 0x83, 0xFF, 0xFC, 0x7F, 0xFF,
|
||||
0xCF, 0x83, 0xF9, 0xF0, 0x1F, 0xBE, 0x01, 0xF7, 0xC0, 0x3F, 0xF8, 0x03,
|
||||
0xFF, 0x00, 0x7F, 0xE0, 0x0F, 0xFC, 0x01, 0xFF, 0x80, 0x3F, 0xF0, 0x0F,
|
||||
0xFE, 0x01, 0xF7, 0xC0, 0x7E, 0xF8, 0x3F, 0x9F, 0xFF, 0xF3, 0xFF, 0xFC,
|
||||
0x7F, 0xFE, 0x0F, 0xFE, 0x00, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF,
|
||||
0xFE, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xFF, 0xFC, 0xFF,
|
||||
0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8,
|
||||
0x00, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x1F, 0x00, 0x3E, 0x00,
|
||||
0x7C, 0x00, 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, 0xEF, 0x80, 0x1F,
|
||||
0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xC0,
|
||||
0x0F, 0x80, 0x00, 0x01, 0xFE, 0x01, 0xFF, 0xF1, 0xFF, 0xFC, 0xFF, 0xFE,
|
||||
0x3F, 0x01, 0x9F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3E,
|
||||
0x00, 0x0F, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xF7, 0xC0,
|
||||
0x7D, 0xF8, 0x1F, 0x7F, 0x07, 0xCF, 0xFF, 0xF1, 0xFF, 0xFC, 0x3F, 0xFF,
|
||||
0x01, 0xFF, 0x00, 0xF8, 0x03, 0xFF, 0x00, 0x7F, 0xE0, 0x0F, 0xFC, 0x01,
|
||||
0xFF, 0x80, 0x3F, 0xF0, 0x07, 0xFE, 0x00, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0xF0, 0x07,
|
||||
0xFE, 0x00, 0xFF, 0xC0, 0x1F, 0xF8, 0x03, 0xFF, 0x00, 0x7F, 0xE0, 0x0F,
|
||||
0xFC, 0x01, 0xFF, 0x80, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x7C, 0x01, 0xF0, 0x07,
|
||||
0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01,
|
||||
0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x60,
|
||||
0xFD, 0xFF, 0xEF, 0xFF, 0xBF, 0xFC, 0x1F, 0xC0, 0xF8, 0x1F, 0xDF, 0x07,
|
||||
0xF3, 0xE1, 0xFC, 0x7C, 0x7F, 0x0F, 0x9F, 0xC1, 0xF7, 0xF0, 0x3F, 0xFC,
|
||||
0x07, 0xFF, 0x00, 0xFF, 0xC0, 0x1F, 0xF0, 0x03, 0xFF, 0x00, 0x7F, 0xF0,
|
||||
0x0F, 0xFF, 0x01, 0xF7, 0xE0, 0x3E, 0x7E, 0x07, 0xC7, 0xE0, 0xF8, 0x7E,
|
||||
0x1F, 0x07, 0xE3, 0xE0, 0x7E, 0x7C, 0x0F, 0xEF, 0x80, 0xFE, 0xF8, 0x03,
|
||||
0xE0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00,
|
||||
0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x80,
|
||||
0x3E, 0x00, 0xF8, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3E,
|
||||
0x00, 0x7C, 0x3E, 0x00, 0x7C, 0x3F, 0x00, 0xFC, 0x7F, 0x00, 0xFE, 0x7F,
|
||||
0x80, 0xFE, 0x7F, 0x81, 0xFE, 0x7F, 0xC1, 0xFE, 0x7F, 0xC3, 0xFE, 0x7F,
|
||||
0xE3, 0xFE, 0x7D, 0xE7, 0xBE, 0x79, 0xF7, 0x9E, 0x78, 0xF7, 0x9E, 0x78,
|
||||
0xFF, 0x1E, 0xF8, 0x7F, 0x1E, 0xF8, 0x7E, 0x1F, 0xF8, 0x3E, 0x1F, 0xF8,
|
||||
0x3E, 0x1F, 0xF8, 0x3C, 0x1F, 0xF8, 0x00, 0x1F, 0xF8, 0x00, 0x1F, 0xF8,
|
||||
0x00, 0x1F, 0xF8, 0x03, 0xFF, 0x80, 0x7F, 0xF8, 0x0F, 0xFF, 0x01, 0xFF,
|
||||
0xF0, 0x3F, 0xFF, 0x07, 0xFF, 0xF0, 0xFF, 0xFF, 0x1F, 0xFB, 0xE3, 0xFF,
|
||||
0x3E, 0x7F, 0xE3, 0xEF, 0xFC, 0x7D, 0xFF, 0x87, 0xFF, 0xF0, 0x7F, 0xFE,
|
||||
0x07, 0xFF, 0xC0, 0xFF, 0xF8, 0x0F, 0xFF, 0x00, 0xFF, 0xE0, 0x1F, 0xFC,
|
||||
0x01, 0xFF, 0x80, 0x3E, 0x01, 0xF8, 0x00, 0xFF, 0xF0, 0x1F, 0xFF, 0x83,
|
||||
0xFF, 0xFC, 0x3F, 0x0F, 0xC7, 0xE0, 0x7E, 0x7C, 0x03, 0xEF, 0x80, 0x1F,
|
||||
0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01,
|
||||
0xFF, 0x80, 0x1F, 0x7C, 0x03, 0xE7, 0xE0, 0x7E, 0x7F, 0x0F, 0xE3, 0xFF,
|
||||
0xFC, 0x1F, 0xFF, 0x80, 0xFF, 0xF0, 0x01, 0xF8, 0x00, 0xFF, 0xE0, 0x7F,
|
||||
0xFE, 0x3F, 0xFF, 0x9F, 0xFF, 0xEF, 0x83, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F,
|
||||
0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x1F, 0xFF, 0xFF, 0xDF, 0xFF, 0xCF, 0xFF,
|
||||
0xC7, 0xFF, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E,
|
||||
0x00, 0x1F, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0xFF, 0xF0, 0x1F,
|
||||
0xFF, 0x83, 0xFF, 0xFC, 0x3F, 0x0F, 0xC7, 0xE0, 0x7E, 0x7C, 0x03, 0xEF,
|
||||
0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F,
|
||||
0xF8, 0x01, 0xFF, 0x80, 0x1F, 0x7C, 0x03, 0xF7, 0xE0, 0x7E, 0x3F, 0x0F,
|
||||
0xE3, 0xFF, 0xFC, 0x1F, 0xFF, 0xC0, 0xFF, 0xF0, 0x01, 0xFE, 0x00, 0x07,
|
||||
0xC0, 0x00, 0x7F, 0x00, 0x03, 0xFE, 0x00, 0x1F, 0xE0, 0x00, 0xFC, 0x00,
|
||||
0x03, 0xC0, 0xFF, 0xE0, 0x3F, 0xFF, 0x0F, 0xFF, 0xE3, 0xFF, 0xFC, 0xF8,
|
||||
0x3F, 0xBE, 0x03, 0xEF, 0x80, 0xFB, 0xE0, 0x3E, 0xF8, 0x0F, 0xBE, 0x0F,
|
||||
0xEF, 0xFF, 0xF3, 0xFF, 0xF8, 0xFF, 0xFC, 0x3F, 0xFE, 0x0F, 0x9F, 0xC3,
|
||||
0xE3, 0xF0, 0xF8, 0x7E, 0x3E, 0x0F, 0xCF, 0x83, 0xF3, 0xE0, 0x7E, 0xF8,
|
||||
0x0F, 0xC0, 0x07, 0xF0, 0x3F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFC, 0xFC, 0x0C,
|
||||
0xF8, 0x00, 0xF8, 0x00, 0xFC, 0x00, 0x7F, 0x80, 0x7F, 0xF0, 0x1F, 0xFC,
|
||||
0x07, 0xFE, 0x00, 0xFF, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x1F, 0x70, 0x3F,
|
||||
0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFC, 0x1F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07,
|
||||
0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00,
|
||||
0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8,
|
||||
0x00, 0x7C, 0x00, 0x3E, 0x00, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F,
|
||||
0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8,
|
||||
0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01,
|
||||
0xFF, 0x80, 0x7F, 0xF0, 0x3F, 0x7E, 0x1F, 0x9F, 0xFF, 0xE3, 0xFF, 0xF0,
|
||||
0x7F, 0xF8, 0x07, 0xF8, 0x00, 0xF8, 0x00, 0xFF, 0xE0, 0x0F, 0x9F, 0x00,
|
||||
0x7C, 0xF8, 0x03, 0xE7, 0xE0, 0x3E, 0x1F, 0x01, 0xF0, 0xF8, 0x1F, 0x87,
|
||||
0xE0, 0xF8, 0x1F, 0x07, 0xC0, 0xF8, 0x7E, 0x07, 0xE3, 0xE0, 0x1F, 0x1F,
|
||||
0x00, 0xFD, 0xF8, 0x07, 0xEF, 0x80, 0x1F, 0x7C, 0x00, 0xFF, 0xE0, 0x03,
|
||||
0xFE, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x80, 0x03, 0xF8, 0x00, 0x1F, 0xC0,
|
||||
0x00, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x0F, 0xDF, 0x03, 0xE0, 0x7C,
|
||||
0xF8, 0x1F, 0x03, 0xE7, 0xC1, 0xFC, 0x1F, 0x3E, 0x0F, 0xE0, 0xF8, 0xF0,
|
||||
0x7F, 0x0F, 0x87, 0xC3, 0xF8, 0x7C, 0x3E, 0x3D, 0xE3, 0xE1, 0xF1, 0xEF,
|
||||
0x1F, 0x07, 0x8F, 0x78, 0xF0, 0x3E, 0xFB, 0xEF, 0x81, 0xF7, 0x8F, 0x7C,
|
||||
0x0F, 0xBC, 0x7B, 0xE0, 0x3D, 0xE3, 0xFE, 0x01, 0xFF, 0x1F, 0xF0, 0x0F,
|
||||
0xF0, 0x7F, 0x80, 0x3F, 0x83, 0xF8, 0x01, 0xFC, 0x1F, 0xC0, 0x0F, 0xC0,
|
||||
0x7E, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0xFC, 0x01, 0xFB, 0xF0, 0x1F, 0x8F,
|
||||
0xC1, 0xF8, 0x3E, 0x0F, 0x81, 0xF8, 0xFC, 0x07, 0xEF, 0xC0, 0x1F, 0xFC,
|
||||
0x00, 0xFF, 0xE0, 0x03, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0x3E, 0x00, 0x03,
|
||||
0xF8, 0x00, 0x3F, 0xE0, 0x03, 0xFF, 0x80, 0x1F, 0xFC, 0x01, 0xFB, 0xF0,
|
||||
0x1F, 0x8F, 0xC1, 0xF8, 0x3E, 0x0F, 0xC1, 0xF8, 0xFC, 0x07, 0xEF, 0xC0,
|
||||
0x1F, 0x80, 0xFC, 0x01, 0xFB, 0xE0, 0x1F, 0x9F, 0x80, 0xFC, 0x7E, 0x0F,
|
||||
0xC1, 0xF0, 0x7C, 0x0F, 0xC7, 0xE0, 0x3F, 0x7E, 0x01, 0xFB, 0xF0, 0x07,
|
||||
0xFF, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x80, 0x03, 0xF8, 0x00, 0x0F, 0x80,
|
||||
0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07,
|
||||
0xC0, 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x7F, 0xFF,
|
||||
0xBF, 0xFF, 0xDF, 0xFF, 0xEF, 0xFF, 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x03,
|
||||
0xF0, 0x03, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xFC, 0x00,
|
||||
0xFC, 0x00, 0xFC, 0x00, 0xFE, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7F, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xF8, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3E,
|
||||
0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x0F, 0x83,
|
||||
0xE0, 0xF8, 0x3E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF8, 0x01, 0xF8,
|
||||
0x01, 0xF0, 0x03, 0xE0, 0x07, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x80,
|
||||
0x1F, 0x00, 0x3E, 0x00, 0x7E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF8, 0x01,
|
||||
0xF0, 0x03, 0xE0, 0x07, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x80, 0x1F,
|
||||
0x00, 0x3E, 0x00, 0x7E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF8, 0x01, 0xF0,
|
||||
0x03, 0xE0, 0x07, 0xE0, 0x07, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07,
|
||||
0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0,
|
||||
0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F,
|
||||
0x07, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xC0, 0x01, 0xF0,
|
||||
0x01, 0xFC, 0x00, 0xFE, 0x00, 0xFF, 0x80, 0x7B, 0xC0, 0x7D, 0xF0, 0x7C,
|
||||
0x7C, 0x3C, 0x1E, 0x3E, 0x0F, 0xBE, 0x03, 0xEF, 0x01, 0xE1, 0x00, 0x40,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x20, 0xE3, 0xE3, 0xE3,
|
||||
0xE3, 0x82, 0x00, 0x1F, 0xE0, 0xFF, 0xC3, 0xFF, 0x8F, 0xFF, 0x00, 0xFC,
|
||||
0x01, 0xF1, 0xFF, 0xDF, 0xFF, 0x7F, 0xFF, 0xF1, 0xFF, 0x87, 0xFE, 0x1F,
|
||||
0xFF, 0xFD, 0xFF, 0xF7, 0xFF, 0xC7, 0xFC, 0x38, 0x00, 0xF8, 0x00, 0xF8,
|
||||
0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xFB,
|
||||
0xE0, 0xFF, 0xF8, 0xFF, 0xFC, 0xFF, 0xFE, 0xF8, 0x3E, 0xF8, 0x3F, 0xF8,
|
||||
0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x3F, 0xF8, 0x7E, 0xFF,
|
||||
0xFE, 0xFF, 0xFC, 0xFF, 0xF8, 0x3F, 0xE0, 0x03, 0xF8, 0x3F, 0xF3, 0xFF,
|
||||
0xDF, 0xFE, 0x7E, 0x03, 0xF0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0,
|
||||
0x0F, 0xC0, 0x1F, 0x80, 0x7F, 0xFC, 0xFF, 0xF1, 0xFF, 0xC1, 0xFE, 0x00,
|
||||
0x07, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00,
|
||||
0x1F, 0x00, 0x1F, 0x07, 0xDF, 0x1F, 0xFF, 0x3F, 0xFF, 0x7F, 0xFF, 0x7C,
|
||||
0x1F, 0xFC, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xFC,
|
||||
0x1F, 0x7E, 0x1F, 0x7F, 0xFF, 0x3F, 0xFF, 0x1F, 0xFF, 0x07, 0xFC, 0x07,
|
||||
0xE0, 0x1F, 0xF8, 0x3F, 0xFC, 0x7F, 0xFE, 0x7C, 0x3F, 0xF8, 0x1F, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xFC, 0x00, 0x7E, 0x04, 0x7F,
|
||||
0xFE, 0x3F, 0xFE, 0x1F, 0xFE, 0x07, 0xF8, 0x0F, 0xE3, 0xFF, 0x7F, 0xE7,
|
||||
0xFE, 0xFC, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xFF, 0xEF, 0xFE, 0xFF, 0xEF,
|
||||
0xFE, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F,
|
||||
0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0x07, 0xF8, 0x3F, 0xFC, 0xFF,
|
||||
0xFB, 0xFF, 0xF7, 0xC3, 0xFF, 0x87, 0xFE, 0x0F, 0xFC, 0x1F, 0xF8, 0x3F,
|
||||
0xF0, 0x7F, 0xF0, 0xFB, 0xFF, 0xF7, 0xFF, 0xE7, 0xFF, 0xC3, 0xFF, 0x80,
|
||||
0x1F, 0x00, 0x3E, 0x40, 0xFD, 0xFF, 0xF3, 0xFF, 0xE7, 0xFF, 0x03, 0xF8,
|
||||
0x00, 0x38, 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F,
|
||||
0x80, 0x3E, 0x00, 0xFF, 0xE3, 0xFF, 0xCF, 0xFF, 0xBF, 0xFE, 0xF8, 0xFF,
|
||||
0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F,
|
||||
0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0x77, 0xFF, 0xF7, 0x00, 0x00,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x07,
|
||||
0xC3, 0xE1, 0xF0, 0x70, 0x00, 0x00, 0x00, 0x0F, 0x87, 0xC3, 0xE1, 0xF0,
|
||||
0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E,
|
||||
0x1F, 0x0F, 0x8F, 0xFF, 0xFF, 0xEF, 0xE7, 0xE0, 0x38, 0x01, 0xF0, 0x03,
|
||||
0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8,
|
||||
0xFF, 0xF1, 0xFB, 0xE7, 0xE7, 0xDF, 0x8F, 0xFF, 0x1F, 0xFC, 0x3F, 0xF0,
|
||||
0x7F, 0xC0, 0xFF, 0xC1, 0xFF, 0xC3, 0xFF, 0xC7, 0xDF, 0x8F, 0x9F, 0x9F,
|
||||
0x1F, 0xBE, 0x3F, 0x7C, 0x3F, 0x38, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
|
||||
0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
|
||||
0xFC, 0xFF, 0x7F, 0x7F, 0x1E, 0x3F, 0xC3, 0xF1, 0xFF, 0xFF, 0xF3, 0xFF,
|
||||
0xFF, 0xF7, 0xFF, 0xFF, 0xEF, 0x8F, 0xC7, 0xFF, 0x0F, 0x87, 0xFE, 0x1F,
|
||||
0x0F, 0xFC, 0x3E, 0x1F, 0xF8, 0x7C, 0x3F, 0xF0, 0xF8, 0x7F, 0xE1, 0xF0,
|
||||
0xFF, 0xC3, 0xE1, 0xFF, 0x87, 0xC3, 0xFF, 0x0F, 0x87, 0xFE, 0x1F, 0x0F,
|
||||
0xFC, 0x3E, 0x1F, 0x3F, 0xC3, 0xFF, 0xCF, 0xFF, 0xBF, 0xFE, 0xF8, 0xFF,
|
||||
0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F,
|
||||
0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0x07, 0xF0, 0x0F, 0xFE, 0x0F,
|
||||
0xFF, 0x8F, 0xFF, 0xE7, 0xE3, 0xF7, 0xE0, 0xFF, 0xE0, 0x3F, 0xF0, 0x1F,
|
||||
0xF8, 0x0F, 0xFC, 0x07, 0xFF, 0x07, 0xEF, 0xC7, 0xE7, 0xFF, 0xF1, 0xFF,
|
||||
0xF0, 0x7F, 0xF0, 0x0F, 0xE0, 0x3F, 0xC0, 0xFF, 0xF8, 0xFF, 0xFC, 0xFF,
|
||||
0xFE, 0xF8, 0x7E, 0xF8, 0x3F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8,
|
||||
0x1F, 0xF8, 0x3F, 0xF8, 0x3E, 0xFF, 0xFE, 0xFF, 0xFC, 0xFF, 0xF8, 0xFB,
|
||||
0xF0, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8,
|
||||
0x00, 0x03, 0xFE, 0x0F, 0xFF, 0xCF, 0xFF, 0xEF, 0xFF, 0xF7, 0xE0, 0xFF,
|
||||
0xE0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFF, 0x03,
|
||||
0xEF, 0xC1, 0xF7, 0xFF, 0xF9, 0xFF, 0xFC, 0x7F, 0xFE, 0x0F, 0xDF, 0x00,
|
||||
0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C,
|
||||
0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0xF8,
|
||||
0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0x0F, 0xE1,
|
||||
0xFF, 0x9F, 0xFD, 0xFF, 0xEF, 0x81, 0x7C, 0x03, 0xFF, 0xDF, 0xFE, 0x7F,
|
||||
0xF9, 0xFF, 0xC0, 0x3F, 0x81, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0x8F, 0xF0,
|
||||
0x38, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0xFE, 0xFF, 0xEF, 0xFE,
|
||||
0xFF, 0xEF, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80,
|
||||
0xFC, 0x0F, 0xFE, 0x7F, 0xE3, 0xFF, 0x0F, 0xE0, 0xF8, 0x7F, 0xE1, 0xFF,
|
||||
0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F,
|
||||
0xE1, 0xFF, 0x87, 0xFF, 0x1F, 0x7F, 0xFD, 0xFF, 0xF3, 0xFF, 0xC3, 0xFC,
|
||||
0xF8, 0x0F, 0xFE, 0x0F, 0xDF, 0x07, 0xCF, 0x83, 0xE7, 0xE3, 0xF1, 0xF1,
|
||||
0xF0, 0xF8, 0xF8, 0x7E, 0xFC, 0x1F, 0x7C, 0x0F, 0xBE, 0x03, 0xFE, 0x01,
|
||||
0xFF, 0x00, 0xFF, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x07, 0xC0, 0xF8, 0x38,
|
||||
0x1F, 0xF8, 0x3C, 0x1F, 0x7C, 0x7C, 0x3E, 0x7C, 0x7C, 0x3E, 0x7C, 0x7E,
|
||||
0x3E, 0x3C, 0x7E, 0x3C, 0x3C, 0xFE, 0x3C, 0x3E, 0xEE, 0x7C, 0x1E, 0xEF,
|
||||
0x78, 0x1E, 0xEF, 0x78, 0x1F, 0xE7, 0xF8, 0x0F, 0xC7, 0xF0, 0x0F, 0xC3,
|
||||
0xF0, 0x0F, 0xC3, 0xF0, 0x07, 0x83, 0xE0, 0x07, 0x81, 0xE0, 0xFC, 0x1F,
|
||||
0xBF, 0x1F, 0x8F, 0xDF, 0x87, 0xEF, 0xC1, 0xFF, 0xC0, 0x7F, 0xC0, 0x3F,
|
||||
0xE0, 0x0F, 0xE0, 0x07, 0xF0, 0x07, 0xF8, 0x03, 0xFE, 0x03, 0xFF, 0x83,
|
||||
0xF7, 0xE1, 0xFB, 0xF1, 0xF8, 0xFD, 0xF8, 0x3F, 0xF8, 0x0F, 0xFE, 0x0F,
|
||||
0xDF, 0x07, 0xCF, 0x83, 0xE7, 0xC3, 0xF1, 0xF1, 0xF0, 0xF8, 0xF8, 0x7C,
|
||||
0x78, 0x1F, 0x7C, 0x0F, 0xBE, 0x03, 0xDE, 0x01, 0xFF, 0x00, 0x7F, 0x00,
|
||||
0x3F, 0x80, 0x0F, 0xC0, 0x07, 0xC0, 0x03, 0xE0, 0x03, 0xE0, 0x1F, 0xF0,
|
||||
0x1F, 0xF0, 0x0F, 0xF0, 0x03, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0x03, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xF8, 0x1F, 0xC0, 0xFE,
|
||||
0x03, 0xF0, 0x1F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
|
||||
0xE1, 0xFC, 0x3F, 0x8F, 0xF1, 0xF8, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03,
|
||||
0xE0, 0x7C, 0x0F, 0x83, 0xF1, 0xFC, 0x3F, 0x87, 0xE0, 0xFE, 0x07, 0xE0,
|
||||
0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xF0, 0x7F,
|
||||
0x87, 0xF0, 0x7E, 0x07, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0x83, 0xF8,
|
||||
0x7F, 0x83, 0xF0, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F,
|
||||
0x81, 0xF8, 0x1F, 0xC3, 0xF8, 0x7F, 0x0F, 0xE3, 0xF0, 0x7C, 0x0F, 0x81,
|
||||
0xF0, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x07, 0xE3, 0xFC, 0x7F, 0x0F, 0xE1,
|
||||
0xF0, 0x00, 0x1E, 0x06, 0x3F, 0x8F, 0x7F, 0xFF, 0xFF, 0xFE, 0xF1, 0xFC,
|
||||
0x60, 0x78 };
|
||||
|
||||
const GFXglyph Ubuntu_Bold16pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 0, 0, 7, 0, 1 }, // 0x20 ' '
|
||||
{ 0, 5, 21, 9, 2, -20 }, // 0x21 '!'
|
||||
{ 14, 12, 9, 14, 2, -23 }, // 0x22 '"'
|
||||
{ 28, 18, 21, 22, 2, -20 }, // 0x23 '#'
|
||||
{ 76, 16, 28, 18, 1, -23 }, // 0x24 '$'
|
||||
{ 132, 26, 21, 28, 1, -20 }, // 0x25 '%'
|
||||
{ 201, 21, 21, 22, 1, -20 }, // 0x26 '&'
|
||||
{ 257, 5, 9, 9, 2, -23 }, // 0x27 '''
|
||||
{ 263, 9, 30, 11, 2, -23 }, // 0x28 '('
|
||||
{ 297, 9, 30, 11, 0, -23 }, // 0x29 ')'
|
||||
{ 331, 13, 12, 16, 2, -20 }, // 0x2A '*'
|
||||
{ 351, 14, 14, 18, 2, -15 }, // 0x2B '+'
|
||||
{ 376, 6, 10, 8, 1, -4 }, // 0x2C ','
|
||||
{ 384, 9, 4, 11, 1, -10 }, // 0x2D '-'
|
||||
{ 389, 6, 6, 8, 1, -5 }, // 0x2E '.'
|
||||
{ 394, 15, 30, 14, -1, -23 }, // 0x2F '/'
|
||||
{ 451, 16, 21, 18, 1, -20 }, // 0x30 '0'
|
||||
{ 493, 10, 21, 18, 3, -20 }, // 0x31 '1'
|
||||
{ 520, 15, 21, 18, 1, -20 }, // 0x32 '2'
|
||||
{ 560, 15, 21, 18, 1, -20 }, // 0x33 '3'
|
||||
{ 600, 16, 21, 18, 1, -20 }, // 0x34 '4'
|
||||
{ 642, 15, 21, 18, 1, -20 }, // 0x35 '5'
|
||||
{ 682, 16, 21, 18, 1, -20 }, // 0x36 '6'
|
||||
{ 724, 16, 21, 18, 1, -20 }, // 0x37 '7'
|
||||
{ 766, 16, 21, 18, 1, -20 }, // 0x38 '8'
|
||||
{ 808, 16, 21, 18, 1, -20 }, // 0x39 '9'
|
||||
{ 850, 6, 17, 8, 1, -16 }, // 0x3A ':'
|
||||
{ 863, 6, 22, 8, 1, -16 }, // 0x3B ';'
|
||||
{ 880, 15, 15, 18, 1, -16 }, // 0x3C '<'
|
||||
{ 909, 15, 11, 18, 1, -14 }, // 0x3D '='
|
||||
{ 930, 14, 15, 18, 2, -16 }, // 0x3E '>'
|
||||
{ 957, 12, 24, 14, 1, -23 }, // 0x3F '?'
|
||||
{ 993, 26, 27, 30, 2, -21 }, // 0x40 '@'
|
||||
{ 1081, 21, 21, 21, 0, -20 }, // 0x41 'A'
|
||||
{ 1137, 17, 21, 21, 2, -20 }, // 0x42 'B'
|
||||
{ 1182, 17, 21, 20, 2, -20 }, // 0x43 'C'
|
||||
{ 1227, 19, 21, 23, 2, -20 }, // 0x44 'D'
|
||||
{ 1277, 16, 21, 19, 2, -20 }, // 0x45 'E'
|
||||
{ 1319, 15, 21, 18, 2, -20 }, // 0x46 'F'
|
||||
{ 1359, 18, 21, 22, 2, -20 }, // 0x47 'G'
|
||||
{ 1407, 19, 21, 23, 2, -20 }, // 0x48 'H'
|
||||
{ 1457, 5, 21, 9, 2, -20 }, // 0x49 'I'
|
||||
{ 1471, 14, 21, 16, 0, -20 }, // 0x4A 'J'
|
||||
{ 1508, 19, 21, 21, 2, -20 }, // 0x4B 'K'
|
||||
{ 1558, 14, 21, 17, 2, -20 }, // 0x4C 'L'
|
||||
{ 1595, 24, 21, 28, 2, -20 }, // 0x4D 'M'
|
||||
{ 1658, 19, 21, 23, 2, -20 }, // 0x4E 'N'
|
||||
{ 1708, 20, 21, 24, 2, -20 }, // 0x4F 'O'
|
||||
{ 1761, 17, 21, 20, 2, -20 }, // 0x50 'P'
|
||||
{ 1806, 20, 27, 24, 2, -20 }, // 0x51 'Q'
|
||||
{ 1874, 18, 21, 21, 2, -20 }, // 0x52 'R'
|
||||
{ 1922, 16, 21, 18, 1, -20 }, // 0x53 'S'
|
||||
{ 1964, 17, 21, 19, 1, -20 }, // 0x54 'T'
|
||||
{ 2009, 18, 21, 22, 2, -20 }, // 0x55 'U'
|
||||
{ 2057, 21, 21, 21, 0, -20 }, // 0x56 'V'
|
||||
{ 2113, 29, 21, 31, 1, -20 }, // 0x57 'W'
|
||||
{ 2190, 21, 21, 21, 0, -20 }, // 0x58 'X'
|
||||
{ 2246, 21, 21, 21, 0, -20 }, // 0x59 'Y'
|
||||
{ 2302, 17, 21, 19, 1, -20 }, // 0x5A 'Z'
|
||||
{ 2347, 10, 30, 12, 2, -23 }, // 0x5B '['
|
||||
{ 2385, 15, 30, 14, -1, -23 }, // 0x5C '\'
|
||||
{ 2442, 10, 30, 12, 0, -23 }, // 0x5D ']'
|
||||
{ 2480, 17, 13, 19, 1, -21 }, // 0x5E '^'
|
||||
{ 2508, 16, 4, 16, 0, 3 }, // 0x5F '_'
|
||||
{ 2516, 7, 7, 9, 1, -24 }, // 0x60 '`'
|
||||
{ 2523, 14, 16, 17, 1, -15 }, // 0x61 'a'
|
||||
{ 2551, 16, 24, 19, 2, -23 }, // 0x62 'b'
|
||||
{ 2599, 14, 16, 16, 1, -15 }, // 0x63 'c'
|
||||
{ 2627, 16, 24, 19, 1, -23 }, // 0x64 'd'
|
||||
{ 2675, 16, 16, 18, 1, -15 }, // 0x65 'e'
|
||||
{ 2707, 12, 24, 14, 2, -23 }, // 0x66 'f'
|
||||
{ 2743, 15, 22, 18, 1, -15 }, // 0x67 'g'
|
||||
{ 2785, 14, 24, 18, 2, -23 }, // 0x68 'h'
|
||||
{ 2827, 5, 24, 9, 2, -23 }, // 0x69 'i'
|
||||
{ 2842, 9, 30, 9, -2, -23 }, // 0x6A 'j'
|
||||
{ 2876, 15, 24, 18, 2, -23 }, // 0x6B 'k'
|
||||
{ 2921, 8, 24, 10, 2, -23 }, // 0x6C 'l'
|
||||
{ 2945, 23, 16, 27, 2, -15 }, // 0x6D 'm'
|
||||
{ 2991, 14, 16, 18, 2, -15 }, // 0x6E 'n'
|
||||
{ 3019, 17, 16, 19, 1, -15 }, // 0x6F 'o'
|
||||
{ 3053, 16, 22, 19, 2, -15 }, // 0x70 'p'
|
||||
{ 3097, 17, 22, 19, 1, -15 }, // 0x71 'q'
|
||||
{ 3144, 11, 16, 13, 2, -15 }, // 0x72 'r'
|
||||
{ 3166, 13, 16, 15, 1, -15 }, // 0x73 's'
|
||||
{ 3192, 12, 21, 15, 2, -20 }, // 0x74 't'
|
||||
{ 3224, 14, 16, 18, 2, -15 }, // 0x75 'u'
|
||||
{ 3252, 17, 16, 17, 0, -15 }, // 0x76 'v'
|
||||
{ 3286, 24, 16, 24, 0, -15 }, // 0x77 'w'
|
||||
{ 3334, 17, 16, 17, 0, -15 }, // 0x78 'x'
|
||||
{ 3368, 17, 22, 17, 0, -15 }, // 0x79 'y'
|
||||
{ 3415, 14, 16, 16, 1, -15 }, // 0x7A 'z'
|
||||
{ 3443, 11, 30, 12, 1, -23 }, // 0x7B '{'
|
||||
{ 3485, 4, 30, 10, 3, -23 }, // 0x7C '|'
|
||||
{ 3500, 11, 30, 12, 0, -23 }, // 0x7D '}'
|
||||
{ 3542, 16, 6, 18, 1, -11 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont Ubuntu_Bold16pt7b PROGMEM = {
|
||||
(uint8_t *)Ubuntu_Bold16pt7bBitmaps,
|
||||
(GFXglyph *)Ubuntu_Bold16pt7bGlyphs,
|
||||
0x20, 0x7E, 36 };
|
||||
|
||||
// Approx. 4226 bytes
|
|
@ -1,578 +0,0 @@
|
|||
const uint8_t Ubuntu_Bold20pt7bBitmaps[] PROGMEM = {
|
||||
0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E,
|
||||
0x7E, 0x7E, 0x7E, 0x3C, 0x3C, 0x3C, 0x00, 0x00, 0x3C, 0x7E, 0xFF, 0xFF,
|
||||
0xFF, 0x7E, 0x3C, 0xFC, 0x7F, 0xF8, 0xFF, 0xF1, 0xFF, 0xE3, 0xFF, 0xC7,
|
||||
0xFF, 0x8F, 0xFF, 0x1F, 0xFE, 0x3F, 0xF8, 0x7C, 0xF0, 0x79, 0xE0, 0xF0,
|
||||
0x01, 0xF9, 0xF8, 0x03, 0xF3, 0xF0, 0x07, 0xEF, 0xE0, 0x1F, 0x9F, 0x80,
|
||||
0x3F, 0x3F, 0x00, 0x7E, 0x7E, 0x00, 0xFC, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0x3F, 0x00, 0x7E,
|
||||
0x7E, 0x01, 0xFD, 0xFC, 0x03, 0xF3, 0xF0, 0x07, 0xE7, 0xE0, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0xF9, 0xF8,
|
||||
0x03, 0xF3, 0xF0, 0x07, 0xE7, 0xE0, 0x0F, 0xCF, 0xC0, 0x3F, 0xBF, 0x00,
|
||||
0x7E, 0x7E, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03,
|
||||
0xE0, 0x00, 0x7C, 0x00, 0x1F, 0xF0, 0x1F, 0xFF, 0x87, 0xFF, 0xF1, 0xFF,
|
||||
0xFE, 0x3F, 0xFF, 0x8F, 0xE0, 0x71, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xF0,
|
||||
0x00, 0xFF, 0x80, 0x1F, 0xFE, 0x01, 0xFF, 0xF0, 0x1F, 0xFF, 0x81, 0xFF,
|
||||
0xF8, 0x0F, 0xFF, 0x00, 0x3F, 0xF0, 0x00, 0xFE, 0x00, 0x0F, 0xC0, 0x01,
|
||||
0xF8, 0x00, 0x3F, 0x78, 0x0F, 0xEF, 0xFF, 0xF9, 0xFF, 0xFF, 0x7F, 0xFF,
|
||||
0xC7, 0xFF, 0xF0, 0x1F, 0xF8, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8,
|
||||
0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x80, 0x03, 0xF0, 0x0F, 0xF8,
|
||||
0x01, 0xF8, 0x07, 0xFF, 0x00, 0x7E, 0x01, 0xFF, 0xC0, 0x3F, 0x00, 0xF8,
|
||||
0xF8, 0x0F, 0x80, 0x3C, 0x1E, 0x07, 0xE0, 0x0F, 0x07, 0x83, 0xF0, 0x03,
|
||||
0xC1, 0xE0, 0xF8, 0x00, 0xF0, 0x78, 0x7E, 0x00, 0x3C, 0x1E, 0x1F, 0x00,
|
||||
0x0F, 0x07, 0x8F, 0xC0, 0x03, 0xE3, 0xE7, 0xE1, 0xF0, 0x7F, 0xF1, 0xF1,
|
||||
0xFF, 0x1F, 0xFC, 0xFC, 0xFF, 0xE3, 0xFE, 0x3E, 0x3F, 0xF8, 0x3E, 0x1F,
|
||||
0x9F, 0x1F, 0x00, 0x0F, 0xC7, 0x83, 0xC0, 0x03, 0xE1, 0xE0, 0xF0, 0x01,
|
||||
0xF8, 0x78, 0x3C, 0x00, 0x7C, 0x1E, 0x0F, 0x00, 0x3F, 0x07, 0x83, 0xC0,
|
||||
0x1F, 0x81, 0xE0, 0xF0, 0x07, 0xC0, 0x7C, 0x7C, 0x03, 0xF0, 0x0F, 0xFE,
|
||||
0x01, 0xF8, 0x03, 0xFF, 0x80, 0x7E, 0x00, 0x7F, 0xC0, 0x3F, 0x00, 0x07,
|
||||
0xC0, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x3F, 0xFF, 0x00, 0x07,
|
||||
0xFF, 0xF0, 0x01, 0xFF, 0xFE, 0x00, 0x3F, 0x8F, 0xC0, 0x07, 0xE1, 0xF8,
|
||||
0x00, 0xFC, 0x3F, 0x00, 0x1F, 0xCF, 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x3F,
|
||||
0xFE, 0x00, 0x03, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x3F, 0xFC, 0x3E,
|
||||
0x0F, 0xFF, 0xC7, 0xE3, 0xFB, 0xFC, 0xFC, 0x7E, 0x3F, 0xFF, 0x1F, 0x83,
|
||||
0xFF, 0xE3, 0xF0, 0x3F, 0xF8, 0x7E, 0x07, 0xFF, 0x0F, 0xC0, 0x7F, 0xC1,
|
||||
0xFE, 0x07, 0xFC, 0x1F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF,
|
||||
0xFF, 0x83, 0xFF, 0xF7, 0xF8, 0x0F, 0xF0, 0x7F, 0x80, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xF9, 0xE7, 0x80, 0x01, 0x00, 0x70, 0x1F, 0x87, 0xE0,
|
||||
0xFC, 0x3F, 0x07, 0xE1, 0xF8, 0x3F, 0x07, 0xE1, 0xF8, 0x3F, 0x07, 0xE1,
|
||||
0xFC, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8,
|
||||
0x3F, 0x07, 0xE0, 0xFC, 0x0F, 0xC1, 0xF8, 0x3F, 0x03, 0xF0, 0x7E, 0x0F,
|
||||
0xC0, 0xFC, 0x1F, 0x81, 0xF8, 0x3F, 0x03, 0xF0, 0x38, 0x02, 0x00, 0x10,
|
||||
0x07, 0x03, 0xF0, 0x3F, 0x07, 0xE0, 0x7E, 0x0F, 0xC0, 0xFC, 0x1F, 0x83,
|
||||
0xF0, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x81, 0xF8, 0x3F, 0x07, 0xE0, 0xFC,
|
||||
0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x0F, 0xE1, 0xF8, 0x3F,
|
||||
0x07, 0xE1, 0xF8, 0x3F, 0x07, 0xE1, 0xF8, 0x3F, 0x0F, 0xC1, 0xF8, 0x7E,
|
||||
0x03, 0x80, 0x20, 0x00, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x0C, 0x7C,
|
||||
0x67, 0x9C, 0xF3, 0xEE, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFC, 0x03,
|
||||
0xF8, 0x03, 0xDE, 0x03, 0xEF, 0x83, 0xF7, 0xE0, 0xF1, 0xE0, 0x38, 0xE0,
|
||||
0x08, 0x20, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00,
|
||||
0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0x00, 0x03, 0xE0, 0x00,
|
||||
0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00,
|
||||
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x7E, 0x7E, 0x7E, 0x7C, 0xFC, 0x18,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x38, 0xFB, 0xFF, 0xFF, 0xEF,
|
||||
0x8E, 0x00, 0x00, 0x07, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0x00, 0x07, 0xE0,
|
||||
0x01, 0xFC, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0x00,
|
||||
0x07, 0xE0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x01, 0xF8, 0x00,
|
||||
0x3F, 0x00, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x01,
|
||||
0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07,
|
||||
0xE0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x3F,
|
||||
0x00, 0x0F, 0xE0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x0F, 0xE0, 0x01, 0xF8,
|
||||
0x00, 0x3F, 0x00, 0x0F, 0xE0, 0x01, 0xF8, 0x00, 0x00, 0x01, 0xF8, 0x00,
|
||||
0x7F, 0xE0, 0x0F, 0xFF, 0x01, 0xFF, 0xF8, 0x3F, 0xFF, 0xC3, 0xF0, 0xFE,
|
||||
0x7E, 0x07, 0xE7, 0xE0, 0x7E, 0xFE, 0x07, 0xEF, 0xC0, 0x3F, 0xFC, 0x03,
|
||||
0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0,
|
||||
0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x07, 0xF7, 0xE0, 0x7E, 0x7E,
|
||||
0x07, 0xE7, 0xF0, 0xFE, 0x3F, 0xFF, 0xC1, 0xFF, 0xF8, 0x1F, 0xFF, 0x00,
|
||||
0x7F, 0xE0, 0x01, 0xF8, 0x00, 0x00, 0xF8, 0x0F, 0xC0, 0xFE, 0x0F, 0xF1,
|
||||
0xFF, 0xBF, 0xFF, 0xFF, 0xEF, 0xBF, 0x79, 0xF9, 0x0F, 0xC0, 0x7E, 0x03,
|
||||
0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E,
|
||||
0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0,
|
||||
0x7E, 0x07, 0xF8, 0x03, 0xFF, 0xC1, 0xFF, 0xFC, 0x7F, 0xFF, 0xC7, 0xFF,
|
||||
0xFC, 0xF8, 0x3F, 0x8C, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01,
|
||||
0xF8, 0x00, 0x7E, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFE, 0x00, 0x7F,
|
||||
0x80, 0x1F, 0xE0, 0x07, 0xF8, 0x01, 0xFE, 0x00, 0x7F, 0x80, 0x0F, 0xE0,
|
||||
0x03, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0xFF, 0xFB, 0xFF, 0xFF, 0x7F, 0xFF,
|
||||
0xEF, 0xFF, 0xFD, 0xFF, 0xFF, 0x80, 0x07, 0xF0, 0x07, 0xFF, 0xC3, 0xFF,
|
||||
0xFC, 0x3F, 0xFF, 0xC7, 0xFF, 0xF8, 0x70, 0x3F, 0x88, 0x03, 0xF0, 0x00,
|
||||
0x7E, 0x00, 0x0F, 0xC0, 0x07, 0xF8, 0x3F, 0xFE, 0x07, 0xFF, 0x80, 0xFF,
|
||||
0xE0, 0x1F, 0xFE, 0x03, 0xFF, 0xF0, 0x01, 0xFE, 0x00, 0x0F, 0xE0, 0x00,
|
||||
0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0xFE, 0xE0, 0x3F, 0xDF, 0xFF,
|
||||
0xF7, 0xFF, 0xFE, 0xFF, 0xFF, 0x9F, 0xFF, 0xC0, 0x3F, 0xC0, 0x00, 0x00,
|
||||
0x1F, 0x80, 0x03, 0xF8, 0x00, 0x7F, 0x80, 0x0F, 0xF8, 0x01, 0xFF, 0x80,
|
||||
0x1F, 0xF8, 0x03, 0xFF, 0x80, 0x7F, 0xF8, 0x07, 0xDF, 0x80, 0xF9, 0xF8,
|
||||
0x1F, 0x9F, 0x81, 0xF1, 0xF8, 0x3E, 0x1F, 0x83, 0xE1, 0xF8, 0x7C, 0x1F,
|
||||
0x8F, 0xC1, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00,
|
||||
0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x1F, 0xFF, 0xC3, 0xFF, 0xF8,
|
||||
0x7F, 0xFF, 0x0F, 0xFF, 0xE1, 0xFF, 0xFC, 0x3E, 0x00, 0x07, 0xC0, 0x00,
|
||||
0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0xFF, 0x80, 0x1F, 0xFE, 0x03,
|
||||
0xFF, 0xF0, 0x7F, 0xFF, 0x0F, 0xFF, 0xF0, 0x03, 0xFE, 0x00, 0x0F, 0xE0,
|
||||
0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0xFE, 0xC0, 0x3F, 0xDF,
|
||||
0xFF, 0xF7, 0xFF, 0xFC, 0xFF, 0xFF, 0x1F, 0xFF, 0xC0, 0x7F, 0xC0, 0x00,
|
||||
0x00, 0x07, 0xC0, 0x07, 0xFC, 0x01, 0xFF, 0xC0, 0x3F, 0xFC, 0x0F, 0xFF,
|
||||
0xC1, 0xFF, 0xC0, 0x1F, 0xE0, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x07, 0xE0,
|
||||
0x00, 0x7F, 0xFC, 0x0F, 0xFF, 0xF8, 0xFF, 0xFF, 0xCF, 0xFF, 0xFE, 0xFF,
|
||||
0xFF, 0xEF, 0xC0, 0xFF, 0xFC, 0x07, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF,
|
||||
0xC0, 0x3F, 0x7E, 0x07, 0xF7, 0xF0, 0xFE, 0x3F, 0xFF, 0xE3, 0xFF, 0xFC,
|
||||
0x1F, 0xFF, 0x80, 0xFF, 0xF0, 0x01, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x07, 0xE0, 0x03, 0xF0,
|
||||
0x01, 0xFC, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x07, 0xE0, 0x01,
|
||||
0xF8, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x07, 0xE0, 0x01, 0xF8,
|
||||
0x00, 0x7E, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00,
|
||||
0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x03, 0xF8, 0x01,
|
||||
0xFF, 0xC0, 0x7F, 0xFC, 0x1F, 0xFF, 0xC3, 0xFF, 0xFC, 0xFE, 0x3F, 0x9F,
|
||||
0x83, 0xF3, 0xF0, 0x7E, 0x7E, 0x0F, 0xCF, 0xE3, 0xF0, 0xFE, 0x7E, 0x0F,
|
||||
0xFF, 0x80, 0xFF, 0xE0, 0x1F, 0xFE, 0x07, 0xFF, 0xE1, 0xF9, 0xFE, 0x7E,
|
||||
0x0F, 0xDF, 0x80, 0xFF, 0xF0, 0x1F, 0xFE, 0x03, 0xFF, 0xC0, 0x7F, 0xFC,
|
||||
0x1F, 0xDF, 0xFF, 0xF3, 0xFF, 0xFE, 0x3F, 0xFF, 0x83, 0xFF, 0xE0, 0x0F,
|
||||
0xE0, 0x00, 0x03, 0xF8, 0x01, 0xFF, 0xC0, 0x7F, 0xFC, 0x1F, 0xFF, 0xC7,
|
||||
0xFF, 0xF8, 0xFE, 0x3F, 0xBF, 0x83, 0xF7, 0xE0, 0x3F, 0xFC, 0x07, 0xFF,
|
||||
0x80, 0xFF, 0xF0, 0x1F, 0xFF, 0x03, 0xF7, 0xFF, 0xFE, 0xFF, 0xFF, 0xCF,
|
||||
0xFF, 0xF8, 0xFF, 0xFF, 0x07, 0xFF, 0xE0, 0x01, 0xF8, 0x00, 0x7F, 0x00,
|
||||
0x0F, 0xC0, 0x07, 0xF8, 0x07, 0xFE, 0x0F, 0xFF, 0x81, 0xFF, 0xE0, 0x3F,
|
||||
0xF8, 0x07, 0xFC, 0x00, 0xF8, 0x00, 0x00, 0x38, 0xFB, 0xFF, 0xFF, 0xEF,
|
||||
0x8E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x3E, 0xFF, 0xFF, 0xFB,
|
||||
0xE3, 0x80, 0x1C, 0x3E, 0x7F, 0x7F, 0x7F, 0x3E, 0x1C, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x7E, 0x7E,
|
||||
0x7E, 0x7C, 0xFC, 0x18, 0x00, 0x01, 0x80, 0x01, 0xF0, 0x01, 0xFF, 0x03,
|
||||
0xFF, 0xE3, 0xFF, 0xFD, 0xFF, 0xFF, 0xBF, 0xFF, 0xC7, 0xFF, 0xC0, 0xFF,
|
||||
0x80, 0x1F, 0x80, 0x03, 0xFE, 0x00, 0x7F, 0xFC, 0x0F, 0xFF, 0xF1, 0xFF,
|
||||
0xFF, 0x8F, 0xFF, 0xF0, 0x3F, 0xFE, 0x00, 0x7F, 0xC0, 0x01, 0xF0, 0x00,
|
||||
0x06, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x30, 0x00,
|
||||
0x07, 0xC0, 0x01, 0xFF, 0x00, 0x3F, 0xFE, 0x07, 0xFF, 0xF8, 0xFF, 0xFF,
|
||||
0xC7, 0xFF, 0xF8, 0x1F, 0xFF, 0x00, 0x3F, 0xE0, 0x00, 0xFC, 0x00, 0xFF,
|
||||
0x81, 0xFF, 0xF1, 0xFF, 0xFE, 0xFF, 0xFF, 0xDF, 0xFF, 0xE3, 0xFF, 0xE0,
|
||||
0x7F, 0xC0, 0x07, 0xC0, 0x00, 0xC0, 0x00, 0x00, 0x0F, 0xE0, 0x7F, 0xF8,
|
||||
0xFF, 0xFC, 0x7F, 0xFE, 0x7F, 0xFF, 0x70, 0x7F, 0x00, 0x3F, 0x00, 0x3F,
|
||||
0x00, 0x3F, 0x00, 0x7E, 0x00, 0xFE, 0x01, 0xFC, 0x01, 0xF8, 0x03, 0xF8,
|
||||
0x03, 0xF0, 0x07, 0xE0, 0x07, 0xC0, 0x07, 0xC0, 0x07, 0xC0, 0x00, 0x00,
|
||||
0x00, 0x00, 0x03, 0x80, 0x07, 0xC0, 0x0F, 0xE0, 0x0F, 0xE0, 0x0F, 0xE0,
|
||||
0x07, 0xC0, 0x03, 0x80, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0xE0,
|
||||
0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x07, 0xFC, 0x07,
|
||||
0xFC, 0x03, 0xF8, 0x00, 0x3F, 0x81, 0xFC, 0x00, 0x07, 0xF0, 0x7C, 0x00,
|
||||
0x00, 0xFC, 0x3F, 0x01, 0xFC, 0x1F, 0x8F, 0x81, 0xFF, 0xC3, 0xE7, 0xC1,
|
||||
0xFF, 0xF0, 0xF9, 0xF0, 0x7F, 0xFC, 0x1F, 0xFC, 0x3F, 0x1F, 0x07, 0xFE,
|
||||
0x0F, 0x87, 0xC1, 0xFF, 0x87, 0xC1, 0xF0, 0x7F, 0xE1, 0xF0, 0x7C, 0x1F,
|
||||
0xF8, 0x7C, 0x1F, 0x07, 0xFE, 0x1F, 0x07, 0xC1, 0xFF, 0x87, 0xC1, 0xF0,
|
||||
0x7F, 0xE1, 0xF0, 0x7C, 0x3E, 0xF8, 0x7E, 0x1F, 0x0F, 0xBF, 0x0F, 0xC7,
|
||||
0xC7, 0xE7, 0xC3, 0xFF, 0xFF, 0xF1, 0xF0, 0x7F, 0xFF, 0xF8, 0x7E, 0x0F,
|
||||
0xFF, 0xFC, 0x0F, 0x80, 0xF8, 0xFC, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x7E,
|
||||
0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x20, 0x00,
|
||||
0x3F, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0xC0,
|
||||
0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00,
|
||||
0x01, 0xFF, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x0F, 0xFE, 0x00, 0x01, 0xFF,
|
||||
0xC0, 0x00, 0x7E, 0xF8, 0x00, 0x0F, 0xDF, 0x80, 0x01, 0xFB, 0xF0, 0x00,
|
||||
0x7E, 0x3F, 0x00, 0x0F, 0xC7, 0xE0, 0x03, 0xF8, 0xFC, 0x00, 0x7E, 0x0F,
|
||||
0xC0, 0x0F, 0xC1, 0xF8, 0x03, 0xF8, 0x3F, 0x80, 0x7E, 0x03, 0xF0, 0x0F,
|
||||
0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF,
|
||||
0x83, 0xFF, 0xFF, 0xF8, 0x7E, 0x00, 0x3F, 0x1F, 0xC0, 0x07, 0xE3, 0xF8,
|
||||
0x00, 0xFE, 0x7E, 0x00, 0x0F, 0xDF, 0xC0, 0x01, 0xFB, 0xF8, 0x00, 0x3F,
|
||||
0x80, 0x7F, 0xFC, 0x07, 0xFF, 0xFC, 0x3F, 0xFF, 0xF1, 0xFF, 0xFF, 0xCF,
|
||||
0xFF, 0xFF, 0x7E, 0x03, 0xFB, 0xF0, 0x0F, 0xDF, 0x80, 0x7E, 0xFC, 0x03,
|
||||
0xF7, 0xE0, 0x7F, 0x3F, 0xFF, 0xF9, 0xFF, 0xFF, 0x8F, 0xFF, 0xFC, 0x7F,
|
||||
0xFF, 0xF3, 0xFF, 0xFF, 0xDF, 0x80, 0xFF, 0xFC, 0x03, 0xFF, 0xE0, 0x0F,
|
||||
0xFF, 0x00, 0x7F, 0xF8, 0x03, 0xFF, 0xC0, 0x3F, 0xFE, 0x03, 0xFF, 0xFF,
|
||||
0xFF, 0xDF, 0xFF, 0xFC, 0xFF, 0xFF, 0xC7, 0xFF, 0xFC, 0x0F, 0xFF, 0x00,
|
||||
0x00, 0x3F, 0xC0, 0x07, 0xFF, 0xE0, 0x7F, 0xFF, 0xC3, 0xFF, 0xFE, 0x1F,
|
||||
0xFF, 0xF8, 0xFF, 0x81, 0xE3, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0x7E, 0x00,
|
||||
0x03, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03,
|
||||
0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF8,
|
||||
0x00, 0x07, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0xFF, 0x00,
|
||||
0xE1, 0xFF, 0xFF, 0x87, 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, 0x0F, 0xFF, 0xE0,
|
||||
0x07, 0xFC, 0x00, 0x7F, 0xFC, 0x00, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xE0,
|
||||
0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xF8, 0xFC, 0x07, 0xFC, 0xFC, 0x01, 0xFC,
|
||||
0xFC, 0x00, 0xFE, 0xFC, 0x00, 0x7E, 0xFC, 0x00, 0x7F, 0xFC, 0x00, 0x3F,
|
||||
0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F,
|
||||
0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x7F, 0xFC, 0x00, 0x7E,
|
||||
0xFC, 0x00, 0xFE, 0xFC, 0x01, 0xFC, 0xFC, 0x0F, 0xFC, 0xFF, 0xFF, 0xF8,
|
||||
0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0x80, 0x7F, 0xF8, 0x00,
|
||||
0xFF, 0xFF, 0xEF, 0xFF, 0xFE, 0xFF, 0xFF, 0xEF, 0xFF, 0xFE, 0xFF, 0xFF,
|
||||
0xEF, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0,
|
||||
0x00, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xFF,
|
||||
0xFF, 0xCF, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F,
|
||||
0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0F, 0xC0, 0x03,
|
||||
0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xFF, 0xFE, 0xFF,
|
||||
0xFF, 0xBF, 0xFF, 0xEF, 0xFF, 0xFB, 0xFF, 0xFE, 0xFC, 0x00, 0x3F, 0x00,
|
||||
0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03,
|
||||
0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x7F, 0xC0,
|
||||
0x07, 0xFF, 0xE0, 0x7F, 0xFF, 0xC3, 0xFF, 0xFE, 0x1F, 0xFF, 0xF8, 0xFF,
|
||||
0x81, 0xE3, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF8, 0x00,
|
||||
0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x03, 0xFF,
|
||||
0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF8, 0x03, 0xF7, 0xE0,
|
||||
0x0F, 0xDF, 0xC0, 0x3F, 0x7F, 0x80, 0xFC, 0xFF, 0x03, 0xF1, 0xFF, 0xFF,
|
||||
0xC3, 0xFF, 0xFF, 0x07, 0xFF, 0xFC, 0x0F, 0xFF, 0xF0, 0x07, 0xFE, 0x00,
|
||||
0xFC, 0x00, 0x7F, 0xF8, 0x00, 0xFF, 0xF0, 0x01, 0xFF, 0xE0, 0x03, 0xFF,
|
||||
0xC0, 0x07, 0xFF, 0x80, 0x0F, 0xFF, 0x00, 0x1F, 0xFE, 0x00, 0x3F, 0xFC,
|
||||
0x00, 0x7F, 0xF8, 0x00, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
|
||||
0x7F, 0xF8, 0x00, 0xFF, 0xF0, 0x01, 0xFF, 0xE0, 0x03, 0xFF, 0xC0, 0x07,
|
||||
0xFF, 0x80, 0x0F, 0xFF, 0x00, 0x1F, 0xFE, 0x00, 0x3F, 0xFC, 0x00, 0x7F,
|
||||
0xF8, 0x00, 0xFF, 0xF0, 0x01, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F,
|
||||
0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0,
|
||||
0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00,
|
||||
0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F,
|
||||
0x00, 0x1F, 0xDE, 0x0F, 0xE7, 0xFF, 0xF9, 0xFF, 0xFE, 0xFF, 0xFF, 0x1F,
|
||||
0xFF, 0x00, 0xFF, 0x00, 0xFC, 0x01, 0xFE, 0xFC, 0x03, 0xFC, 0xFC, 0x07,
|
||||
0xF8, 0xFC, 0x0F, 0xF0, 0xFC, 0x1F, 0xE0, 0xFC, 0x3F, 0xC0, 0xFC, 0x7F,
|
||||
0x80, 0xFC, 0xFF, 0x00, 0xFD, 0xFE, 0x00, 0xFF, 0xFC, 0x00, 0xFF, 0xF8,
|
||||
0x00, 0xFF, 0xF0, 0x00, 0xFF, 0xE0, 0x00, 0xFF, 0xF0, 0x00, 0xFF, 0xF8,
|
||||
0x00, 0xFF, 0xFC, 0x00, 0xFD, 0xFE, 0x00, 0xFC, 0xFE, 0x00, 0xFC, 0x7F,
|
||||
0x00, 0xFC, 0x3F, 0x80, 0xFC, 0x3F, 0xC0, 0xFC, 0x1F, 0xE0, 0xFC, 0x0F,
|
||||
0xF0, 0xFC, 0x07, 0xF8, 0xFC, 0x03, 0xFC, 0xFC, 0x01, 0xFE, 0xFC, 0x00,
|
||||
0xFF, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00,
|
||||
0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F,
|
||||
0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0,
|
||||
0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00,
|
||||
0x3F, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFC, 0x3F, 0x00, 0x01, 0xF8, 0x7F, 0x00, 0x07, 0xF0, 0xFE, 0x00,
|
||||
0x0F, 0xE1, 0xFE, 0x00, 0x3F, 0xC7, 0xFC, 0x00, 0x7F, 0xCF, 0xFC, 0x01,
|
||||
0xFF, 0x9F, 0xF8, 0x03, 0xFF, 0x3F, 0xF8, 0x07, 0xFE, 0x7F, 0xF0, 0x1F,
|
||||
0xFC, 0xFF, 0xE0, 0x3F, 0xF9, 0xFF, 0xE0, 0xFB, 0xF3, 0xF7, 0xC1, 0xF7,
|
||||
0xE7, 0xEF, 0xC7, 0xEF, 0xCF, 0xCF, 0x8F, 0x9F, 0x9F, 0x9F, 0x1F, 0x3F,
|
||||
0x3E, 0x1F, 0x7C, 0x3E, 0x7C, 0x3E, 0xF8, 0x7D, 0xF8, 0x7F, 0xE0, 0xFB,
|
||||
0xF0, 0x7F, 0xC1, 0xFF, 0xE0, 0xFF, 0x03, 0xFF, 0xC0, 0xFE, 0x07, 0xFF,
|
||||
0x81, 0xFC, 0x0F, 0xFF, 0x01, 0xF0, 0x1F, 0xFE, 0x03, 0xE0, 0x3F, 0xFC,
|
||||
0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x01, 0xF8, 0xF8,
|
||||
0x00, 0x7F, 0xF8, 0x00, 0xFF, 0xF8, 0x01, 0xFF, 0xF8, 0x03, 0xFF, 0xF8,
|
||||
0x07, 0xFF, 0xF8, 0x0F, 0xFF, 0xF0, 0x1F, 0xFF, 0xF0, 0x3F, 0xFF, 0xF0,
|
||||
0x7F, 0xFF, 0xF0, 0xFF, 0xF7, 0xE1, 0xFF, 0xE7, 0xE3, 0xFF, 0xCF, 0xE7,
|
||||
0xFF, 0x8F, 0xCF, 0xFF, 0x0F, 0xDF, 0xFE, 0x0F, 0xFF, 0xFC, 0x1F, 0xFF,
|
||||
0xF8, 0x1F, 0xFF, 0xF0, 0x1F, 0xFF, 0xE0, 0x3F, 0xFF, 0xC0, 0x3F, 0xFF,
|
||||
0x80, 0x3F, 0xFF, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFC, 0x00, 0xFF, 0xF8,
|
||||
0x00, 0xFF, 0xF0, 0x00, 0xF8, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xFE, 0x00,
|
||||
0x1F, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xF0, 0x7F, 0xC1,
|
||||
0xFF, 0x0F, 0xE0, 0x0F, 0xE3, 0xF8, 0x00, 0xFE, 0x7E, 0x00, 0x0F, 0xDF,
|
||||
0xC0, 0x01, 0xFF, 0xF0, 0x00, 0x1F, 0xFE, 0x00, 0x03, 0xFF, 0xC0, 0x00,
|
||||
0x7F, 0xF8, 0x00, 0x0F, 0xFF, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x3F, 0xFC,
|
||||
0x00, 0x07, 0xFF, 0xC0, 0x01, 0xFD, 0xF8, 0x00, 0x3F, 0x3F, 0x80, 0x0F,
|
||||
0xE3, 0xF8, 0x03, 0xF8, 0x7F, 0xC1, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0x7F,
|
||||
0xFF, 0xF0, 0x07, 0xFF, 0xFC, 0x00, 0x3F, 0xFE, 0x00, 0x01, 0xFF, 0x00,
|
||||
0x00, 0x7F, 0xF8, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0x8F, 0xFF, 0xFC, 0xFF,
|
||||
0xFF, 0xEF, 0xC0, 0xFE, 0xFC, 0x07, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF,
|
||||
0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x7F, 0xFC, 0x0F, 0xEF, 0xFF, 0xFE,
|
||||
0xFF, 0xFF, 0xCF, 0xFF, 0xF8, 0xFF, 0xFF, 0x0F, 0xFF, 0x80, 0xFC, 0x00,
|
||||
0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0,
|
||||
0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x80,
|
||||
0x00, 0x3F, 0xFE, 0x00, 0x1F, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0x01, 0xFF,
|
||||
0xFF, 0xF0, 0x7F, 0xC1, 0xFF, 0x0F, 0xE0, 0x0F, 0xE3, 0xF8, 0x00, 0xFE,
|
||||
0x7E, 0x00, 0x0F, 0xDF, 0xC0, 0x01, 0xFB, 0xF0, 0x00, 0x1F, 0xFE, 0x00,
|
||||
0x03, 0xFF, 0xC0, 0x00, 0x7F, 0xF8, 0x00, 0x0F, 0xFF, 0x00, 0x01, 0xFF,
|
||||
0xE0, 0x00, 0x3F, 0xFC, 0x00, 0x07, 0xFF, 0xC0, 0x01, 0xFD, 0xF8, 0x00,
|
||||
0x3F, 0x3F, 0x80, 0x0F, 0xE7, 0xF8, 0x03, 0xF8, 0x7F, 0xC1, 0xFF, 0x07,
|
||||
0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xF0, 0x07, 0xFF, 0xFC, 0x00, 0x7F, 0xFE,
|
||||
0x00, 0x01, 0xFF, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00,
|
||||
0x1F, 0xF0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0xFF,
|
||||
0x00, 0x00, 0x03, 0xE0, 0x7F, 0xF8, 0x01, 0xFF, 0xFE, 0x03, 0xFF, 0xFF,
|
||||
0x07, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0x1F, 0x81, 0xFE, 0x3F, 0x00, 0xFE,
|
||||
0x7E, 0x00, 0xFC, 0xFC, 0x01, 0xF9, 0xF8, 0x03, 0xF3, 0xF0, 0x0F, 0xE7,
|
||||
0xE0, 0x3F, 0x8F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xF0, 0x7F,
|
||||
0xFF, 0x80, 0xFF, 0xFF, 0x01, 0xF8, 0xFF, 0x03, 0xF0, 0xFE, 0x07, 0xE0,
|
||||
0xFE, 0x0F, 0xC0, 0xFE, 0x1F, 0x81, 0xFE, 0x3F, 0x01, 0xFC, 0x7E, 0x01,
|
||||
0xFC, 0xFC, 0x03, 0xFD, 0xF8, 0x03, 0xFB, 0xF0, 0x03, 0xF8, 0x03, 0xFE,
|
||||
0x00, 0xFF, 0xFC, 0x3F, 0xFF, 0xE7, 0xFF, 0xFC, 0x7F, 0xFF, 0xCF, 0xE0,
|
||||
0x1C, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x7F,
|
||||
0xC0, 0x07, 0xFF, 0x80, 0x3F, 0xFF, 0x01, 0xFF, 0xF8, 0x07, 0xFF, 0xC0,
|
||||
0x0F, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F,
|
||||
0x00, 0x03, 0xF7, 0x80, 0x7F, 0x7F, 0xFF, 0xE7, 0xFF, 0xFE, 0xFF, 0xFF,
|
||||
0xC7, 0xFF, 0xF8, 0x0F, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x03, 0xF0, 0x00, 0x0F,
|
||||
0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0,
|
||||
0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00,
|
||||
0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F,
|
||||
0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00,
|
||||
0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0xFF,
|
||||
0xF0, 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0,
|
||||
0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x03,
|
||||
0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x03, 0xFF,
|
||||
0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x03, 0xFF, 0xC0,
|
||||
0x0F, 0xFF, 0x80, 0x7F, 0x7E, 0x01, 0xF9, 0xFE, 0x1F, 0xE7, 0xFF, 0xFF,
|
||||
0x8F, 0xFF, 0xFC, 0x1F, 0xFF, 0xE0, 0x3F, 0xFF, 0x00, 0x1F, 0xE0, 0x00,
|
||||
0xFE, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF9, 0xF8, 0x00, 0x3F, 0x3F, 0x80,
|
||||
0x0F, 0xE3, 0xF0, 0x01, 0xF8, 0x7E, 0x00, 0x3F, 0x07, 0xE0, 0x0F, 0xC0,
|
||||
0xFC, 0x01, 0xF8, 0x1F, 0x80, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x3F, 0x01,
|
||||
0xF8, 0x07, 0xE0, 0x7E, 0x00, 0x7E, 0x0F, 0xC0, 0x0F, 0xC1, 0xF8, 0x00,
|
||||
0xFC, 0x7E, 0x00, 0x1F, 0x8F, 0xC0, 0x03, 0xF1, 0xF8, 0x00, 0x3F, 0x7E,
|
||||
0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7D, 0xF0, 0x00, 0x0F, 0xFE, 0x00, 0x01,
|
||||
0xFF, 0x80, 0x00, 0x1F, 0xF0, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x3F, 0x80,
|
||||
0x00, 0x07, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03,
|
||||
0xFF, 0xC0, 0x00, 0x00, 0x7F, 0x7E, 0x00, 0x00, 0x07, 0xE7, 0xE0, 0x1F,
|
||||
0x00, 0x7E, 0x7E, 0x03, 0xF8, 0x07, 0xE7, 0xE0, 0x3F, 0x80, 0x7E, 0x7E,
|
||||
0x03, 0xF8, 0x0F, 0xE3, 0xF0, 0x3F, 0xC0, 0xFC, 0x3F, 0x07, 0xFC, 0x0F,
|
||||
0xC3, 0xF0, 0x7F, 0xC0, 0xFC, 0x3F, 0x07, 0xFE, 0x0F, 0xC1, 0xF8, 0x7B,
|
||||
0xE1, 0xF8, 0x1F, 0x8F, 0xBE, 0x1F, 0x81, 0xF8, 0xFB, 0xF1, 0xF8, 0x1F,
|
||||
0x8F, 0x9F, 0x1F, 0x80, 0xFC, 0xF1, 0xF3, 0xF0, 0x0F, 0xDF, 0x1F, 0xBF,
|
||||
0x00, 0xFD, 0xF0, 0xFB, 0xF0, 0x07, 0xDF, 0x0F, 0xBE, 0x00, 0x7F, 0xE0,
|
||||
0xFF, 0xE0, 0x07, 0xFE, 0x07, 0xFE, 0x00, 0x7F, 0xE0, 0x7F, 0xE0, 0x03,
|
||||
0xFC, 0x07, 0xFC, 0x00, 0x3F, 0xC0, 0x3F, 0xC0, 0x03, 0xFC, 0x03, 0xFC,
|
||||
0x00, 0x1F, 0xC0, 0x3F, 0x80, 0x01, 0xF8, 0x01, 0xF8, 0x00, 0xFE, 0x00,
|
||||
0x1F, 0xDF, 0xC0, 0x0F, 0xE3, 0xF8, 0x07, 0xF0, 0xFF, 0x03, 0xFC, 0x1F,
|
||||
0xC0, 0xFE, 0x03, 0xF8, 0x7F, 0x00, 0x7F, 0x3F, 0x80, 0x1F, 0xCF, 0xE0,
|
||||
0x03, 0xFF, 0xF0, 0x00, 0x7F, 0xF8, 0x00, 0x1F, 0xFE, 0x00, 0x03, 0xFF,
|
||||
0x00, 0x00, 0x7F, 0x80, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x03,
|
||||
0xFF, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x7F, 0xF8, 0x00, 0x3F, 0xFF, 0x00,
|
||||
0x1F, 0xCF, 0xE0, 0x0F, 0xE3, 0xF8, 0x03, 0xF8, 0x7F, 0x01, 0xFC, 0x0F,
|
||||
0xE0, 0xFE, 0x01, 0xFC, 0x3F, 0x80, 0x7F, 0x1F, 0xC0, 0x0F, 0xEF, 0xE0,
|
||||
0x01, 0xFC, 0xFE, 0x00, 0x1F, 0xDF, 0xC0, 0x0F, 0xE7, 0xF0, 0x03, 0xF8,
|
||||
0xFE, 0x01, 0xFC, 0x3F, 0x80, 0x7F, 0x07, 0xF0, 0x3F, 0x80, 0xFC, 0x1F,
|
||||
0xC0, 0x3F, 0x87, 0xF0, 0x07, 0xF3, 0xF8, 0x01, 0xFC, 0xFE, 0x00, 0x3F,
|
||||
0xFF, 0x00, 0x07, 0xFF, 0x80, 0x01, 0xFF, 0xE0, 0x00, 0x3F, 0xF0, 0x00,
|
||||
0x0F, 0xF8, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x0F, 0xC0,
|
||||
0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x0F,
|
||||
0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00,
|
||||
0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x7F, 0xFF, 0xFD, 0xFF, 0xFF, 0xF7,
|
||||
0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFC, 0x00, 0x1F, 0xE0, 0x00,
|
||||
0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF8,
|
||||
0x00, 0x3F, 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0xC0, 0x01,
|
||||
0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xF0,
|
||||
0x00, 0x3F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0,
|
||||
0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E,
|
||||
0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F,
|
||||
0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xC0, 0xFC, 0x00, 0x1F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x03,
|
||||
0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03,
|
||||
0xF0, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x01,
|
||||
0xF8, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x00,
|
||||
0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00,
|
||||
0xFC, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00,
|
||||
0x7E, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00,
|
||||
0x3F, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xC0, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F,
|
||||
0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83,
|
||||
0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0,
|
||||
0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xC0, 0x00, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x07, 0xFC,
|
||||
0x00, 0x7F, 0xF0, 0x03, 0xFF, 0x80, 0x3F, 0x7E, 0x01, 0xFB, 0xF0, 0x1F,
|
||||
0x8F, 0xC1, 0xFC, 0x7F, 0x0F, 0xC1, 0xF8, 0xFC, 0x07, 0xE7, 0xE0, 0x3F,
|
||||
0x7E, 0x00, 0xFC, 0xF0, 0x07, 0x81, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x10, 0x1C, 0x1E,
|
||||
0x1F, 0x83, 0xE0, 0xF8, 0x3E, 0x0E, 0x02, 0x00, 0x0F, 0xF0, 0x1F, 0xFE,
|
||||
0x0F, 0xFF, 0x87, 0xFF, 0xE1, 0xFF, 0xF0, 0x81, 0xFC, 0x00, 0x7E, 0x00,
|
||||
0x3F, 0x0F, 0xFF, 0x9F, 0xFF, 0xDF, 0xFF, 0xEF, 0xFF, 0xFF, 0xE1, 0xFF,
|
||||
0xE0, 0xFF, 0xF0, 0x7F, 0xFC, 0x3F, 0xFF, 0xFF, 0xBF, 0xFF, 0xDF, 0xFF,
|
||||
0xE7, 0xFF, 0xF0, 0xFF, 0xC0, 0x1C, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00,
|
||||
0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00,
|
||||
0xFC, 0x00, 0x1F, 0xBF, 0x03, 0xFF, 0xF8, 0x7F, 0xFF, 0x8F, 0xFF, 0xF9,
|
||||
0xFF, 0xFF, 0xBF, 0x87, 0xF7, 0xE0, 0x7F, 0xFC, 0x07, 0xFF, 0x80, 0xFF,
|
||||
0xF0, 0x1F, 0xFE, 0x03, 0xFF, 0xC0, 0x7F, 0xF8, 0x0F, 0xFF, 0x03, 0xFF,
|
||||
0xE0, 0x7E, 0xFC, 0x1F, 0xDF, 0xFF, 0xF3, 0xFF, 0xFE, 0x7F, 0xFF, 0x8F,
|
||||
0xFF, 0xC0, 0x3F, 0xE0, 0x00, 0x01, 0xFE, 0x03, 0xFF, 0xC3, 0xFF, 0xE3,
|
||||
0xFF, 0xE3, 0xFF, 0xF3, 0xFC, 0x09, 0xF8, 0x01, 0xFC, 0x00, 0xFC, 0x00,
|
||||
0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x07, 0xF0, 0x01, 0xF8,
|
||||
0x00, 0xFF, 0x02, 0x7F, 0xFF, 0x1F, 0xFF, 0xC7, 0xFF, 0xE1, 0xFF, 0xF0,
|
||||
0x1F, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0,
|
||||
0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0,
|
||||
0x7E, 0xFC, 0x3F, 0xFF, 0x8F, 0xFF, 0xF3, 0xFF, 0xFE, 0xFF, 0xFF, 0xDF,
|
||||
0xC3, 0xFB, 0xF0, 0x3F, 0xFC, 0x07, 0xFF, 0x80, 0xFF, 0xF0, 0x1F, 0xFE,
|
||||
0x03, 0xFF, 0xC0, 0x7F, 0xF8, 0x0F, 0xFF, 0x81, 0xFB, 0xF0, 0x3F, 0x7F,
|
||||
0x07, 0xEF, 0xFF, 0xFC, 0xFF, 0xFF, 0x8F, 0xFF, 0xF0, 0xFF, 0xFE, 0x03,
|
||||
0xFE, 0x00, 0x01, 0xF8, 0x01, 0xFF, 0xC0, 0x7F, 0xFC, 0x1F, 0xFF, 0xC3,
|
||||
0xFF, 0xFC, 0xFE, 0x1F, 0x9F, 0x81, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x01, 0xF8, 0x00, 0x1F,
|
||||
0x80, 0x03, 0xFC, 0x04, 0x7F, 0xFF, 0x87, 0xFF, 0xF8, 0x7F, 0xFF, 0x07,
|
||||
0xFF, 0xE0, 0x1F, 0xE0, 0x07, 0xF0, 0x7F, 0xF3, 0xFF, 0xDF, 0xFE, 0x7F,
|
||||
0xFB, 0xF8, 0x2F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xFF, 0xEF, 0xFF, 0xBF,
|
||||
0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F,
|
||||
0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03,
|
||||
0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x00, 0x03, 0xFE, 0x03,
|
||||
0xFF, 0xF1, 0xFF, 0xFC, 0xFF, 0xFF, 0x7F, 0xFF, 0xDF, 0xC3, 0xFF, 0xE0,
|
||||
0xFF, 0xF0, 0x3F, 0xFC, 0x0F, 0xFF, 0x03, 0xFF, 0xC0, 0xFF, 0xF0, 0x3F,
|
||||
0xFE, 0x0F, 0xFF, 0x87, 0xF7, 0xFF, 0xFD, 0xFF, 0xFF, 0x3F, 0xFF, 0xC7,
|
||||
0xFF, 0xF0, 0x7E, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x07, 0xF3, 0x03,
|
||||
0xF8, 0xFF, 0xFE, 0x7F, 0xFF, 0x1F, 0xFF, 0xC7, 0xFF, 0xC0, 0x3F, 0xC0,
|
||||
0x1C, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x07, 0xE0,
|
||||
0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x7F, 0xF8, 0x3F, 0xFF, 0x1F,
|
||||
0xFF, 0xCF, 0xFF, 0xF7, 0xFF, 0xFB, 0xF0, 0xFF, 0xF8, 0x3F, 0xFC, 0x1F,
|
||||
0xFE, 0x0F, 0xFF, 0x07, 0xFF, 0x83, 0xFF, 0xC1, 0xFF, 0xE0, 0xFF, 0xF0,
|
||||
0x7F, 0xF8, 0x3F, 0xFC, 0x1F, 0xFE, 0x0F, 0xFF, 0x07, 0xFF, 0x83, 0xFF,
|
||||
0xC1, 0xFF, 0xE0, 0xFC, 0x3C, 0x7E, 0x7E, 0xFF, 0x7E, 0x7E, 0x3C, 0x00,
|
||||
0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E,
|
||||
0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x01, 0xE0,
|
||||
0x1F, 0x80, 0xFC, 0x0F, 0xF0, 0x3F, 0x01, 0xF8, 0x07, 0x80, 0x00, 0x00,
|
||||
0x00, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E,
|
||||
0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0,
|
||||
0x7E, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F,
|
||||
0xC0, 0xFE, 0x7F, 0xE3, 0xFF, 0x3F, 0xF1, 0xFF, 0x0F, 0xE0, 0x00, 0x1C,
|
||||
0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8,
|
||||
0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x83, 0xFF, 0xF0,
|
||||
0xFF, 0x7E, 0x3F, 0xCF, 0xC7, 0xF1, 0xF9, 0xFC, 0x3F, 0x7F, 0x87, 0xFF,
|
||||
0xE0, 0xFF, 0xF8, 0x1F, 0xFE, 0x03, 0xFF, 0x80, 0x7F, 0xF8, 0x0F, 0xFF,
|
||||
0x81, 0xFF, 0xF8, 0x3F, 0x7F, 0x07, 0xE7, 0xF0, 0xFC, 0x7F, 0x1F, 0x8F,
|
||||
0xE3, 0xF0, 0xFE, 0x7E, 0x1F, 0xEF, 0xC1, 0xFD, 0xF8, 0x1F, 0xC0, 0x1C,
|
||||
0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x1F,
|
||||
0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3,
|
||||
0xF1, 0xF8, 0xFE, 0x7F, 0xDF, 0xEF, 0xF3, 0xF0, 0x78, 0x1F, 0xF0, 0x7E,
|
||||
0x0F, 0xFF, 0xDF, 0xF8, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0xFF,
|
||||
0xFF, 0xFF, 0xEF, 0xC3, 0xF8, 0x7F, 0xFC, 0x3F, 0x87, 0xFF, 0xC1, 0xF8,
|
||||
0x3F, 0xFC, 0x1F, 0x83, 0xFF, 0xC1, 0xF8, 0x3F, 0xFC, 0x1F, 0x83, 0xFF,
|
||||
0xC1, 0xF8, 0x3F, 0xFC, 0x1F, 0x83, 0xFF, 0xC1, 0xF8, 0x3F, 0xFC, 0x1F,
|
||||
0x83, 0xFF, 0xC1, 0xF8, 0x3F, 0xFC, 0x1F, 0x83, 0xFF, 0xC1, 0xF8, 0x3F,
|
||||
0xFC, 0x1F, 0x83, 0xFF, 0xC1, 0xF8, 0x3F, 0xFC, 0x1F, 0x83, 0xF0, 0x1F,
|
||||
0xF0, 0x7F, 0xFE, 0x3F, 0xFF, 0x9F, 0xFF, 0xEF, 0xFF, 0xF7, 0xE1, 0xFF,
|
||||
0xF0, 0x7F, 0xF8, 0x3F, 0xFC, 0x1F, 0xFE, 0x0F, 0xFF, 0x07, 0xFF, 0x83,
|
||||
0xFF, 0xC1, 0xFF, 0xE0, 0xFF, 0xF0, 0x7F, 0xF8, 0x3F, 0xFC, 0x1F, 0xFE,
|
||||
0x0F, 0xFF, 0x07, 0xFF, 0x83, 0xFF, 0xC1, 0xF8, 0x01, 0xF8, 0x00, 0x7F,
|
||||
0xE0, 0x1F, 0xFF, 0x83, 0xFF, 0xFC, 0x3F, 0xFF, 0xC7, 0xF0, 0xFE, 0x7E,
|
||||
0x07, 0xEF, 0xE0, 0x7F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF,
|
||||
0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x7F, 0x7E, 0x07, 0xE7, 0xF0, 0xFE,
|
||||
0x3F, 0xFF, 0xE3, 0xFF, 0xFC, 0x1F, 0xFF, 0x80, 0xFF, 0xF0, 0x01, 0xF8,
|
||||
0x00, 0x1F, 0xF0, 0x1F, 0xFF, 0x83, 0xFF, 0xFC, 0x7F, 0xFF, 0xCF, 0xFF,
|
||||
0xF9, 0xF8, 0x3F, 0xBF, 0x03, 0xF7, 0xE0, 0x7F, 0xFC, 0x07, 0xFF, 0x80,
|
||||
0xFF, 0xF0, 0x1F, 0xFE, 0x03, 0xFF, 0xC0, 0x7F, 0xF8, 0x0F, 0xFF, 0x03,
|
||||
0xFF, 0xF0, 0xFE, 0xFF, 0xFF, 0xDF, 0xFF, 0xF3, 0xFF, 0xFC, 0x7F, 0xFF,
|
||||
0x0F, 0xDF, 0x81, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00,
|
||||
0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x7F,
|
||||
0xFF, 0x1F, 0xFF, 0xF3, 0xFF, 0xFF, 0x3F, 0xFF, 0xF7, 0xF8, 0x3F, 0x7E,
|
||||
0x03, 0xFF, 0xE0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF,
|
||||
0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFE, 0x03, 0xF7, 0xF0, 0x7F,
|
||||
0x7F, 0xFF, 0xF3, 0xFF, 0xFF, 0x1F, 0xFF, 0xF0, 0xFF, 0xFF, 0x03, 0xFB,
|
||||
0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00,
|
||||
0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x0F, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFE, 0xFF, 0xFB, 0xF0, 0x2F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F,
|
||||
0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03,
|
||||
0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x00, 0x07, 0xF8, 0x0F, 0xFE, 0x3F,
|
||||
0xFE, 0x3F, 0xFE, 0x7F, 0xFC, 0x7E, 0x04, 0x7E, 0x00, 0x7F, 0x00, 0x7F,
|
||||
0xF8, 0x7F, 0xFE, 0x3F, 0xFE, 0x1F, 0xFF, 0x07, 0xFF, 0x00, 0x7F, 0x00,
|
||||
0x3F, 0x70, 0x3F, 0x7F, 0xFF, 0x7F, 0xFE, 0x7F, 0xFE, 0xFF, 0xF8, 0x1F,
|
||||
0xE0, 0x1C, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F,
|
||||
0xFF, 0xBF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0x00, 0xFC, 0x03,
|
||||
0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00,
|
||||
0xFC, 0x03, 0xF8, 0x27, 0xFF, 0x9F, 0xFE, 0x3F, 0xFC, 0x7F, 0xF0, 0x7F,
|
||||
0x00, 0xFC, 0x1F, 0xFE, 0x0F, 0xFF, 0x07, 0xFF, 0x83, 0xFF, 0xC1, 0xFF,
|
||||
0xE0, 0xFF, 0xF0, 0x7F, 0xF8, 0x3F, 0xFC, 0x1F, 0xFE, 0x0F, 0xFF, 0x07,
|
||||
0xFF, 0x83, 0xFF, 0xC1, 0xFF, 0xE0, 0xFF, 0xF0, 0x7F, 0xFC, 0x3F, 0x7F,
|
||||
0xFF, 0xBF, 0xFF, 0xCF, 0xFF, 0xE3, 0xFF, 0xF0, 0x7F, 0xC0, 0xFC, 0x01,
|
||||
0xFF, 0xF0, 0x1F, 0xDF, 0x80, 0xFC, 0xFC, 0x07, 0xE7, 0xF0, 0x7F, 0x1F,
|
||||
0x83, 0xF0, 0xFC, 0x1F, 0x87, 0xE0, 0xFC, 0x3F, 0x8F, 0xC0, 0xFC, 0x7E,
|
||||
0x07, 0xE3, 0xF0, 0x3F, 0xBF, 0x00, 0xFD, 0xF8, 0x07, 0xEF, 0xC0, 0x1F,
|
||||
0xFC, 0x00, 0xFF, 0xE0, 0x07, 0xFF, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x80,
|
||||
0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFC, 0x0F, 0x80, 0xFF, 0xF0, 0x3E,
|
||||
0x03, 0xF7, 0xE0, 0xF8, 0x1F, 0x9F, 0x83, 0xF0, 0x7E, 0x7E, 0x0F, 0xC1,
|
||||
0xF8, 0xF8, 0x7F, 0x07, 0xC3, 0xF1, 0xFC, 0x3F, 0x0F, 0xC7, 0xF8, 0xFC,
|
||||
0x1F, 0x1F, 0xE3, 0xE0, 0x7C, 0xF7, 0x8F, 0x81, 0xFB, 0xDF, 0x7E, 0x07,
|
||||
0xEF, 0x7D, 0xF0, 0x0F, 0xBC, 0xF7, 0xC0, 0x3E, 0xE3, 0xDF, 0x00, 0xFF,
|
||||
0x8F, 0xF8, 0x01, 0xFE, 0x1F, 0xE0, 0x07, 0xF8, 0x7F, 0x80, 0x0F, 0xC1,
|
||||
0xFC, 0x00, 0x3F, 0x03, 0xF0, 0x00, 0xFC, 0x0F, 0xC0, 0x01, 0xF0, 0x3E,
|
||||
0x00, 0xFF, 0x03, 0xFD, 0xFC, 0x0F, 0xE3, 0xF8, 0x7F, 0x0F, 0xF3, 0xFC,
|
||||
0x1F, 0xCF, 0xE0, 0x3F, 0xFF, 0x00, 0x7F, 0xF8, 0x01, 0xFF, 0xE0, 0x03,
|
||||
0xFF, 0x00, 0x07, 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x80, 0x03, 0xFF,
|
||||
0x00, 0x1F, 0xFE, 0x00, 0x7F, 0xF8, 0x03, 0xFF, 0xF0, 0x1F, 0xCF, 0xE0,
|
||||
0xFF, 0x3F, 0x83, 0xF8, 0x7F, 0x1F, 0xC0, 0xFE, 0xFF, 0x03, 0xFC, 0xFC,
|
||||
0x01, 0xFF, 0xF0, 0x1F, 0xDF, 0x80, 0xFC, 0xFC, 0x07, 0xE7, 0xF0, 0x7F,
|
||||
0x1F, 0x83, 0xF0, 0xFC, 0x1F, 0x87, 0xE0, 0xFC, 0x3F, 0x8F, 0xC0, 0xFC,
|
||||
0x7E, 0x07, 0xE3, 0xF0, 0x1F, 0xBF, 0x00, 0xFD, 0xF8, 0x07, 0xEF, 0xC0,
|
||||
0x1F, 0xFC, 0x00, 0xFF, 0xE0, 0x07, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0xFF,
|
||||
0x80, 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x01, 0xFC, 0x00, 0x1F, 0xE0, 0x0F,
|
||||
0xFE, 0x00, 0x7F, 0xF0, 0x07, 0xFF, 0x00, 0x3F, 0xF0, 0x00, 0xFE, 0x00,
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xC0, 0x1F, 0xE0, 0x0F, 0xF0, 0x07, 0xF8, 0x01, 0xFC, 0x00, 0xFF, 0x00,
|
||||
0x7F, 0x80, 0x3F, 0xC0, 0x1F, 0xE0, 0x07, 0xF8, 0x03, 0xFC, 0x01, 0xFE,
|
||||
0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xC0, 0x00, 0xF8, 0x3F, 0xC3, 0xFE, 0x1F, 0xF1, 0xFF, 0x8F, 0xE0, 0x7E,
|
||||
0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0,
|
||||
0x7E, 0x03, 0xF0, 0x3F, 0x87, 0xF8, 0x3F, 0x81, 0xFC, 0x0F, 0xF0, 0x7F,
|
||||
0x80, 0xFE, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8,
|
||||
0x0F, 0xC0, 0x7E, 0x03, 0xF0, 0x1F, 0xC0, 0xFF, 0xC3, 0xFE, 0x1F, 0xF0,
|
||||
0x7F, 0x80, 0x7C, 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, 0xF0, 0xF8, 0x07, 0xF8, 0x3F,
|
||||
0xE1, 0xFF, 0x0F, 0xFC, 0x0F, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E,
|
||||
0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xE0,
|
||||
0x3F, 0xC0, 0xFE, 0x07, 0xF0, 0x7F, 0x87, 0xFC, 0x3F, 0x81, 0xF8, 0x0F,
|
||||
0xC0, 0x7E, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8,
|
||||
0x1F, 0xC7, 0xFE, 0x3F, 0xE1, 0xFF, 0x0F, 0xF0, 0x7C, 0x00, 0x0F, 0x00,
|
||||
0xC3, 0xFC, 0x0F, 0x3F, 0xF1, 0xF7, 0xFF, 0xFE, 0x7F, 0xFF, 0xEF, 0x8F,
|
||||
0xFC, 0xF0, 0x3F, 0xC3, 0x00, 0xF0 };
|
||||
|
||||
const GFXglyph Ubuntu_Bold20pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 0, 0, 9, 0, 1 }, // 0x20 ' '
|
||||
{ 0, 8, 27, 11, 2, -26 }, // 0x21 '!'
|
||||
{ 27, 15, 11, 18, 2, -29 }, // 0x22 '"'
|
||||
{ 48, 23, 27, 27, 2, -26 }, // 0x23 '#'
|
||||
{ 126, 19, 35, 22, 1, -29 }, // 0x24 '$'
|
||||
{ 210, 34, 27, 36, 1, -26 }, // 0x25 '%'
|
||||
{ 325, 27, 27, 28, 1, -26 }, // 0x26 '&'
|
||||
{ 417, 6, 11, 10, 2, -29 }, // 0x27 '''
|
||||
{ 426, 11, 38, 14, 3, -30 }, // 0x28 '('
|
||||
{ 479, 11, 38, 14, 0, -30 }, // 0x29 ')'
|
||||
{ 532, 17, 16, 20, 2, -26 }, // 0x2A '*'
|
||||
{ 566, 19, 19, 23, 2, -20 }, // 0x2B '+'
|
||||
{ 612, 8, 12, 9, 0, -5 }, // 0x2C ','
|
||||
{ 624, 11, 5, 13, 1, -13 }, // 0x2D '-'
|
||||
{ 631, 7, 7, 9, 1, -5 }, // 0x2E '.'
|
||||
{ 638, 19, 38, 17, -1, -30 }, // 0x2F '/'
|
||||
{ 729, 20, 27, 22, 1, -26 }, // 0x30 '0'
|
||||
{ 797, 13, 27, 22, 3, -26 }, // 0x31 '1'
|
||||
{ 841, 19, 27, 22, 1, -26 }, // 0x32 '2'
|
||||
{ 906, 19, 27, 22, 1, -26 }, // 0x33 '3'
|
||||
{ 971, 20, 27, 22, 1, -26 }, // 0x34 '4'
|
||||
{ 1039, 19, 27, 22, 1, -26 }, // 0x35 '5'
|
||||
{ 1104, 20, 27, 22, 1, -26 }, // 0x36 '6'
|
||||
{ 1172, 18, 27, 22, 2, -26 }, // 0x37 '7'
|
||||
{ 1233, 19, 27, 22, 2, -26 }, // 0x38 '8'
|
||||
{ 1298, 19, 27, 22, 1, -26 }, // 0x39 '9'
|
||||
{ 1363, 7, 21, 9, 1, -19 }, // 0x3A ':'
|
||||
{ 1382, 8, 26, 9, 0, -19 }, // 0x3B ';'
|
||||
{ 1408, 19, 19, 22, 2, -20 }, // 0x3C '<'
|
||||
{ 1454, 18, 14, 22, 2, -17 }, // 0x3D '='
|
||||
{ 1486, 19, 19, 22, 1, -20 }, // 0x3E '>'
|
||||
{ 1532, 16, 28, 18, 1, -27 }, // 0x3F '?'
|
||||
{ 1588, 34, 34, 38, 2, -27 }, // 0x40 '@'
|
||||
{ 1733, 27, 27, 27, 0, -26 }, // 0x41 'A'
|
||||
{ 1825, 21, 27, 26, 3, -26 }, // 0x42 'B'
|
||||
{ 1896, 22, 27, 25, 2, -26 }, // 0x43 'C'
|
||||
{ 1971, 24, 27, 29, 3, -26 }, // 0x44 'D'
|
||||
{ 2052, 20, 27, 24, 3, -26 }, // 0x45 'E'
|
||||
{ 2120, 18, 27, 22, 3, -26 }, // 0x46 'F'
|
||||
{ 2181, 22, 27, 27, 2, -26 }, // 0x47 'G'
|
||||
{ 2256, 23, 27, 29, 3, -26 }, // 0x48 'H'
|
||||
{ 2334, 6, 27, 12, 3, -26 }, // 0x49 'I'
|
||||
{ 2355, 18, 27, 21, 0, -26 }, // 0x4A 'J'
|
||||
{ 2416, 24, 27, 27, 3, -26 }, // 0x4B 'K'
|
||||
{ 2497, 18, 27, 22, 3, -26 }, // 0x4C 'L'
|
||||
{ 2558, 31, 27, 35, 2, -26 }, // 0x4D 'M'
|
||||
{ 2663, 23, 27, 29, 3, -26 }, // 0x4E 'N'
|
||||
{ 2741, 27, 27, 31, 2, -26 }, // 0x4F 'O'
|
||||
{ 2833, 20, 27, 25, 3, -26 }, // 0x50 'P'
|
||||
{ 2901, 27, 34, 31, 2, -26 }, // 0x51 'Q'
|
||||
{ 3016, 23, 27, 26, 3, -26 }, // 0x52 'R'
|
||||
{ 3094, 20, 27, 23, 1, -26 }, // 0x53 'S'
|
||||
{ 3162, 22, 27, 24, 1, -26 }, // 0x54 'T'
|
||||
{ 3237, 22, 27, 28, 3, -26 }, // 0x55 'U'
|
||||
{ 3312, 27, 27, 27, 0, -26 }, // 0x56 'V'
|
||||
{ 3404, 36, 27, 38, 1, -26 }, // 0x57 'W'
|
||||
{ 3526, 26, 27, 26, 0, -26 }, // 0x58 'X'
|
||||
{ 3614, 26, 27, 26, 0, -26 }, // 0x59 'Y'
|
||||
{ 3702, 22, 27, 24, 1, -26 }, // 0x5A 'Z'
|
||||
{ 3777, 11, 38, 14, 3, -30 }, // 0x5B '['
|
||||
{ 3830, 19, 38, 17, -1, -30 }, // 0x5C '\'
|
||||
{ 3921, 11, 38, 14, 0, -30 }, // 0x5D ']'
|
||||
{ 3974, 21, 16, 23, 1, -26 }, // 0x5E '^'
|
||||
{ 4016, 20, 5, 20, 0, 3 }, // 0x5F '_'
|
||||
{ 4029, 9, 9, 11, 1, -30 }, // 0x60 '`'
|
||||
{ 4040, 17, 21, 22, 2, -20 }, // 0x61 'a'
|
||||
{ 4085, 19, 30, 24, 3, -29 }, // 0x62 'b'
|
||||
{ 4157, 17, 21, 20, 2, -20 }, // 0x63 'c'
|
||||
{ 4202, 19, 30, 24, 2, -29 }, // 0x64 'd'
|
||||
{ 4274, 19, 21, 23, 2, -20 }, // 0x65 'e'
|
||||
{ 4324, 14, 30, 17, 3, -29 }, // 0x66 'f'
|
||||
{ 4377, 18, 28, 23, 2, -20 }, // 0x67 'g'
|
||||
{ 4440, 17, 30, 23, 3, -29 }, // 0x68 'h'
|
||||
{ 4504, 8, 30, 12, 2, -29 }, // 0x69 'i'
|
||||
{ 4534, 13, 37, 10, -4, -29 }, // 0x6A 'j'
|
||||
{ 4595, 19, 30, 23, 3, -29 }, // 0x6B 'k'
|
||||
{ 4667, 9, 30, 13, 3, -29 }, // 0x6C 'l'
|
||||
{ 4701, 28, 21, 34, 3, -20 }, // 0x6D 'm'
|
||||
{ 4775, 17, 21, 23, 3, -20 }, // 0x6E 'n'
|
||||
{ 4820, 20, 21, 24, 2, -20 }, // 0x6F 'o'
|
||||
{ 4873, 19, 28, 24, 3, -20 }, // 0x70 'p'
|
||||
{ 4940, 20, 28, 24, 2, -20 }, // 0x71 'q'
|
||||
{ 5010, 14, 21, 17, 3, -20 }, // 0x72 'r'
|
||||
{ 5047, 16, 21, 19, 1, -20 }, // 0x73 's'
|
||||
{ 5089, 14, 27, 18, 3, -26 }, // 0x74 't'
|
||||
{ 5137, 17, 21, 23, 3, -20 }, // 0x75 'u'
|
||||
{ 5182, 21, 21, 21, 0, -20 }, // 0x76 'v'
|
||||
{ 5238, 30, 21, 30, 0, -20 }, // 0x77 'w'
|
||||
{ 5317, 22, 21, 22, 0, -20 }, // 0x78 'x'
|
||||
{ 5375, 21, 28, 21, 0, -20 }, // 0x79 'y'
|
||||
{ 5449, 18, 21, 20, 1, -20 }, // 0x7A 'z'
|
||||
{ 5497, 13, 38, 14, 1, -30 }, // 0x7B '{'
|
||||
{ 5559, 6, 38, 14, 4, -30 }, // 0x7C '|'
|
||||
{ 5588, 13, 38, 14, 0, -30 }, // 0x7D '}'
|
||||
{ 5650, 20, 8, 22, 1, -15 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont Ubuntu_Bold20pt7b PROGMEM = {
|
||||
(uint8_t *)Ubuntu_Bold20pt7bBitmaps,
|
||||
(GFXglyph *)Ubuntu_Bold20pt7bGlyphs,
|
||||
0x20, 0x7E, 45 };
|
||||
|
||||
// Approx. 6342 bytes
|
File diff suppressed because it is too large
Load Diff
|
@ -1,182 +0,0 @@
|
|||
const uint8_t Ubuntu_Bold8pt7bBitmaps[] PROGMEM = {
|
||||
0xFF, 0xFC, 0xFC, 0xDE, 0xF7, 0xBD, 0x80, 0x1B, 0x0D, 0x87, 0xDF, 0xFF,
|
||||
0xF9, 0xB3, 0xFF, 0xFF, 0x6C, 0x36, 0x1B, 0x00, 0x18, 0x30, 0xFF, 0xFC,
|
||||
0x38, 0x1C, 0x1E, 0x0E, 0x0C, 0x1F, 0xF7, 0xC3, 0x06, 0x00, 0x78, 0x63,
|
||||
0xF3, 0x0C, 0xCC, 0x33, 0x60, 0xCF, 0xFB, 0xFF, 0xF7, 0xFC, 0xC1, 0xB3,
|
||||
0x0C, 0xCC, 0x33, 0xF1, 0x87, 0x80, 0x3C, 0x1F, 0x86, 0x61, 0x98, 0x3C,
|
||||
0x1E, 0x6C, 0xDB, 0x1C, 0xC7, 0x3F, 0xE7, 0xDC, 0xFF, 0xC0, 0x13, 0x66,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0x66, 0x31, 0x8C, 0x66, 0x33, 0x33, 0x33, 0x33,
|
||||
0x66, 0xC8, 0x39, 0xFF, 0xF8, 0x86, 0xDD, 0xD1, 0x00, 0x18, 0x18, 0x18,
|
||||
0xFF, 0xFF, 0x18, 0x18, 0x18, 0x6D, 0xEC, 0xFF, 0xC0, 0xFF, 0x80, 0x06,
|
||||
0x1C, 0x30, 0x60, 0xC3, 0x06, 0x0C, 0x30, 0x60, 0xC3, 0x06, 0x0C, 0x38,
|
||||
0x60, 0x38, 0xFB, 0xBE, 0x3C, 0x78, 0xF1, 0xE3, 0xEE, 0xF8, 0xE0, 0x1B,
|
||||
0xFE, 0xB1, 0x8C, 0x63, 0x18, 0xC6, 0x7D, 0xFD, 0x18, 0x30, 0xE3, 0x8E,
|
||||
0x38, 0xE1, 0xFF, 0xF8, 0x7D, 0xFC, 0x18, 0x33, 0xE7, 0x81, 0x83, 0x87,
|
||||
0xFF, 0xE0, 0x06, 0x0E, 0x1E, 0x3E, 0x36, 0x66, 0xE6, 0xFF, 0xFF, 0x06,
|
||||
0x06, 0x7E, 0xFD, 0x83, 0x0F, 0x9F, 0x83, 0x83, 0x07, 0xFB, 0xE0, 0x1C,
|
||||
0x79, 0xC7, 0x0F, 0xDF, 0xF1, 0xE3, 0xC6, 0xF8, 0xE0, 0xFF, 0xFC, 0x30,
|
||||
0xE1, 0x87, 0x0C, 0x18, 0x60, 0xC1, 0x80, 0x3C, 0xFF, 0x1E, 0x3E, 0xEF,
|
||||
0xBF, 0xE3, 0xC7, 0xFD, 0xF0, 0x38, 0xFB, 0x1E, 0x3C, 0x7F, 0xDF, 0x87,
|
||||
0x1C, 0xF1, 0xC0, 0xFF, 0x80, 0x3F, 0xE0, 0x77, 0x70, 0x00, 0x06, 0x66,
|
||||
0xCC, 0x06, 0x3E, 0xF8, 0xC0, 0xF8, 0x3F, 0x06, 0xFF, 0xFF, 0x00, 0x00,
|
||||
0xFF, 0xFF, 0x60, 0x7C, 0x1F, 0x03, 0x1F, 0xFC, 0x60, 0x7D, 0xFC, 0x18,
|
||||
0x30, 0xC3, 0x0C, 0x18, 0x00, 0x70, 0xE1, 0xC0, 0x0F, 0xC0, 0x7F, 0xC3,
|
||||
0x83, 0x98, 0x06, 0xE7, 0xCF, 0x3F, 0x3D, 0x8C, 0xF6, 0x33, 0xD8, 0xCF,
|
||||
0xBF, 0xE6, 0x7F, 0x1E, 0x00, 0x3F, 0xC0, 0x3F, 0x00, 0x0E, 0x01, 0xC0,
|
||||
0x7C, 0x0D, 0x83, 0xB8, 0x63, 0x0C, 0x63, 0xFE, 0x7F, 0xCC, 0x1B, 0x01,
|
||||
0x80, 0xFC, 0x7F, 0xB0, 0xD8, 0x6F, 0xE7, 0xFB, 0x07, 0x83, 0xC3, 0xFF,
|
||||
0xBF, 0x80, 0x1F, 0x1F, 0xD8, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0x60,
|
||||
0x3F, 0xC7, 0xC0, 0xFE, 0x3F, 0xCC, 0x3B, 0x07, 0xC0, 0xF0, 0x3C, 0x0F,
|
||||
0x07, 0xC3, 0xBF, 0xCF, 0xE0, 0xFF, 0xFF, 0xC0, 0xC0, 0xFE, 0xFE, 0xC0,
|
||||
0xC0, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xC0, 0xFE, 0xFE, 0xC0, 0xC0,
|
||||
0xC0, 0xC0, 0xC0, 0x1F, 0x1F, 0xD8, 0x18, 0x0C, 0x06, 0x0F, 0x07, 0x83,
|
||||
0x71, 0xBF, 0xC7, 0xE0, 0xC1, 0xE0, 0xF0, 0x78, 0x3F, 0xFF, 0xFF, 0x07,
|
||||
0x83, 0xC1, 0xE0, 0xF0, 0x60, 0xFF, 0xFF, 0xFC, 0x06, 0x0C, 0x18, 0x30,
|
||||
0x60, 0xC1, 0x83, 0x07, 0xF9, 0xE0, 0xC1, 0xB0, 0xCC, 0x63, 0x30, 0xF8,
|
||||
0x3C, 0x0D, 0x83, 0x30, 0xC6, 0x30, 0xCC, 0x18, 0xC0, 0xC0, 0xC0, 0xC0,
|
||||
0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0x60, 0x33, 0x83, 0x9C, 0x1C,
|
||||
0xF1, 0xED, 0x8D, 0xEE, 0xEF, 0x36, 0x79, 0xF3, 0xC7, 0x1E, 0x38, 0xF0,
|
||||
0x06, 0xC0, 0xF8, 0x3F, 0x0F, 0xE3, 0xDC, 0xF3, 0xBC, 0x7F, 0x0F, 0xC1,
|
||||
0xF0, 0x7C, 0x0C, 0x1F, 0x07, 0xF1, 0xC7, 0x70, 0x7C, 0x07, 0x80, 0xF0,
|
||||
0x1F, 0x07, 0x71, 0xCF, 0xF8, 0x7C, 0x00, 0xFC, 0xFE, 0xC3, 0xC3, 0xC3,
|
||||
0xFE, 0xFC, 0xC0, 0xC0, 0xC0, 0xC0, 0x1F, 0x07, 0xF1, 0xC7, 0x70, 0x7C,
|
||||
0x07, 0x80, 0xF0, 0x1F, 0x07, 0x71, 0xCF, 0xF0, 0xF8, 0x07, 0x00, 0x7C,
|
||||
0x07, 0x80, 0xFC, 0x7F, 0x30, 0xD8, 0x6C, 0x37, 0xF3, 0xE1, 0x98, 0xC6,
|
||||
0x63, 0xB0, 0xE0, 0x3D, 0xFF, 0x06, 0x0F, 0x0F, 0x87, 0x83, 0x07, 0xFD,
|
||||
0xF0, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xE3, 0xBF, 0x8F,
|
||||
0x80, 0xC0, 0x6C, 0x19, 0x83, 0x38, 0xE3, 0x18, 0x63, 0x06, 0xC0, 0xD8,
|
||||
0x0E, 0x01, 0xC0, 0x38, 0x00, 0xC0, 0x07, 0x87, 0x0D, 0x8E, 0x33, 0x1C,
|
||||
0x66, 0x6C, 0xC6, 0xDB, 0x0D, 0xB6, 0x1B, 0x6C, 0x1C, 0x70, 0x38, 0xE0,
|
||||
0x71, 0xC0, 0xE0, 0xEC, 0x18, 0xC6, 0x0D, 0x80, 0xE0, 0x1C, 0x03, 0x80,
|
||||
0xD8, 0x31, 0x8C, 0x1B, 0x83, 0x80, 0xC0, 0xD8, 0x67, 0x38, 0xCC, 0x1E,
|
||||
0x07, 0x80, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0xFF, 0xFF, 0x06, 0x0C,
|
||||
0x1C, 0x18, 0x30, 0x70, 0x60, 0xFF, 0xFF, 0xFF, 0xF1, 0x8C, 0x63, 0x18,
|
||||
0xC6, 0x31, 0x8C, 0x63, 0xFF, 0xC1, 0xC1, 0x83, 0x06, 0x06, 0x0C, 0x18,
|
||||
0x18, 0x30, 0x60, 0x60, 0xC1, 0x83, 0x83, 0xFF, 0xC6, 0x31, 0x8C, 0x63,
|
||||
0x18, 0xC6, 0x31, 0x8F, 0xFF, 0x08, 0x0E, 0x0F, 0x86, 0xC7, 0x77, 0x1D,
|
||||
0x04, 0xFF, 0xFF, 0x4E, 0x72, 0x7C, 0xFC, 0x1B, 0xFF, 0xF8, 0xFF, 0xBF,
|
||||
0xC1, 0x83, 0x06, 0x0F, 0x9F, 0xB3, 0xE3, 0xC7, 0x9F, 0xF7, 0xC0, 0x3D,
|
||||
0xFE, 0x30, 0xC3, 0x87, 0xCF, 0x06, 0x0C, 0x18, 0x33, 0xEF, 0xF9, 0xE3,
|
||||
0xC7, 0xCD, 0xF9, 0xF0, 0x38, 0xFB, 0x1F, 0xFF, 0xF8, 0x1F, 0x1E, 0x7F,
|
||||
0xF1, 0x8F, 0xFF, 0x18, 0xC6, 0x31, 0x80, 0x3E, 0xFF, 0x9E, 0x3C, 0x7C,
|
||||
0xDF, 0x9F, 0x06, 0xFB, 0xE0, 0xC1, 0x83, 0x06, 0x0F, 0xDF, 0xF1, 0xE3,
|
||||
0xC7, 0x8F, 0x1E, 0x30, 0xFC, 0xFF, 0xFF, 0x33, 0x30, 0x33, 0x33, 0x33,
|
||||
0x33, 0x3F, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC6, 0xCC, 0xD8, 0xF0, 0xD8,
|
||||
0xCC, 0xC6, 0xC7, 0xDB, 0x6D, 0xB6, 0xDB, 0xB0, 0xFD, 0xEF, 0xFF, 0xC6,
|
||||
0x3C, 0x63, 0xC6, 0x3C, 0x63, 0xC6, 0x3C, 0x63, 0xFD, 0xFF, 0x1E, 0x3C,
|
||||
0x78, 0xF1, 0xE3, 0x3C, 0x7E, 0xE7, 0xC3, 0xC3, 0xE7, 0x7E, 0x3C, 0xF9,
|
||||
0xFB, 0x3E, 0x3C, 0x79, 0xFF, 0x7C, 0xC1, 0x83, 0x00, 0x3E, 0xFF, 0x9E,
|
||||
0x3C, 0x7C, 0xDF, 0xBF, 0x06, 0x0C, 0x18, 0xFF, 0xF1, 0x8C, 0x63, 0x18,
|
||||
0x7F, 0xEC, 0x3E, 0x7C, 0x3F, 0xFE, 0xC6, 0x3F, 0xFC, 0x63, 0x18, 0xFB,
|
||||
0xC0, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xFF, 0xBF, 0xC1, 0xB1, 0x98, 0xCE,
|
||||
0xE3, 0x61, 0xF0, 0x70, 0x38, 0xC6, 0x79, 0xCD, 0xBB, 0x35, 0x66, 0xAC,
|
||||
0x77, 0x0E, 0xE1, 0x8C, 0xE3, 0xBB, 0x8D, 0x83, 0x81, 0xC1, 0xB1, 0xDD,
|
||||
0xC7, 0xE3, 0xB1, 0x98, 0xCE, 0xE3, 0x61, 0xF0, 0x70, 0x38, 0x18, 0x7C,
|
||||
0x3C, 0x00, 0xFF, 0xF1, 0x8E, 0x71, 0x8F, 0xFF, 0x3B, 0xD8, 0xC6, 0x31,
|
||||
0x98, 0xC3, 0x18, 0xC6, 0x31, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x8C,
|
||||
0x63, 0x18, 0xC3, 0x19, 0x8C, 0x63, 0x1B, 0xDC, 0x73, 0xFF, 0xCE };
|
||||
|
||||
const GFXglyph Ubuntu_Bold8pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 0, 0, 4, 0, 1 }, // 0x20 ' '
|
||||
{ 0, 2, 11, 4, 1, -10 }, // 0x21 '!'
|
||||
{ 3, 5, 5, 7, 1, -11 }, // 0x22 '"'
|
||||
{ 7, 9, 11, 11, 1, -10 }, // 0x23 '#'
|
||||
{ 20, 7, 15, 9, 1, -12 }, // 0x24 '$'
|
||||
{ 34, 14, 11, 16, 1, -10 }, // 0x25 '%'
|
||||
{ 54, 10, 11, 11, 1, -10 }, // 0x26 '&'
|
||||
{ 68, 2, 5, 4, 1, -11 }, // 0x27 '''
|
||||
{ 70, 4, 16, 6, 1, -12 }, // 0x28 '('
|
||||
{ 78, 4, 16, 6, 1, -12 }, // 0x29 ')'
|
||||
{ 86, 7, 7, 8, 1, -10 }, // 0x2A '*'
|
||||
{ 93, 8, 8, 10, 1, -8 }, // 0x2B '+'
|
||||
{ 101, 3, 5, 4, 0, -1 }, // 0x2C ','
|
||||
{ 103, 5, 2, 7, 1, -5 }, // 0x2D '-'
|
||||
{ 105, 3, 3, 5, 1, -2 }, // 0x2E '.'
|
||||
{ 107, 7, 16, 7, 0, -12 }, // 0x2F '/'
|
||||
{ 121, 7, 11, 9, 1, -10 }, // 0x30 '0'
|
||||
{ 131, 5, 11, 9, 1, -10 }, // 0x31 '1'
|
||||
{ 138, 7, 11, 9, 1, -10 }, // 0x32 '2'
|
||||
{ 148, 7, 11, 9, 1, -10 }, // 0x33 '3'
|
||||
{ 158, 8, 11, 9, 1, -10 }, // 0x34 '4'
|
||||
{ 169, 7, 11, 9, 1, -10 }, // 0x35 '5'
|
||||
{ 179, 7, 11, 9, 1, -10 }, // 0x36 '6'
|
||||
{ 189, 7, 11, 9, 1, -10 }, // 0x37 '7'
|
||||
{ 199, 7, 11, 9, 1, -10 }, // 0x38 '8'
|
||||
{ 209, 7, 11, 9, 1, -10 }, // 0x39 '9'
|
||||
{ 219, 3, 9, 5, 1, -8 }, // 0x3A ':'
|
||||
{ 223, 4, 12, 5, 0, -8 }, // 0x3B ';'
|
||||
{ 229, 8, 7, 9, 1, -7 }, // 0x3C '<'
|
||||
{ 236, 8, 6, 10, 1, -7 }, // 0x3D '='
|
||||
{ 242, 8, 7, 9, 0, -7 }, // 0x3E '>'
|
||||
{ 249, 7, 12, 7, 0, -11 }, // 0x3F '?'
|
||||
{ 260, 14, 14, 16, 1, -10 }, // 0x40 '@'
|
||||
{ 285, 11, 11, 11, 0, -10 }, // 0x41 'A'
|
||||
{ 301, 9, 11, 11, 1, -10 }, // 0x42 'B'
|
||||
{ 314, 9, 11, 11, 1, -10 }, // 0x43 'C'
|
||||
{ 327, 10, 11, 12, 1, -10 }, // 0x44 'D'
|
||||
{ 341, 8, 11, 10, 1, -10 }, // 0x45 'E'
|
||||
{ 352, 8, 11, 9, 1, -10 }, // 0x46 'F'
|
||||
{ 363, 9, 11, 11, 1, -10 }, // 0x47 'G'
|
||||
{ 376, 9, 11, 11, 1, -10 }, // 0x48 'H'
|
||||
{ 389, 2, 11, 4, 1, -10 }, // 0x49 'I'
|
||||
{ 392, 7, 11, 8, 0, -10 }, // 0x4A 'J'
|
||||
{ 402, 10, 11, 11, 1, -10 }, // 0x4B 'K'
|
||||
{ 416, 8, 11, 9, 1, -10 }, // 0x4C 'L'
|
||||
{ 427, 13, 11, 15, 1, -10 }, // 0x4D 'M'
|
||||
{ 445, 10, 11, 12, 1, -10 }, // 0x4E 'N'
|
||||
{ 459, 11, 11, 13, 1, -10 }, // 0x4F 'O'
|
||||
{ 475, 8, 11, 10, 1, -10 }, // 0x50 'P'
|
||||
{ 486, 11, 14, 13, 1, -10 }, // 0x51 'Q'
|
||||
{ 506, 9, 11, 10, 1, -10 }, // 0x52 'R'
|
||||
{ 519, 7, 11, 9, 1, -10 }, // 0x53 'S'
|
||||
{ 529, 8, 11, 8, 0, -10 }, // 0x54 'T'
|
||||
{ 540, 9, 11, 11, 1, -10 }, // 0x55 'U'
|
||||
{ 553, 11, 11, 11, 0, -10 }, // 0x56 'V'
|
||||
{ 569, 15, 11, 15, 0, -10 }, // 0x57 'W'
|
||||
{ 590, 11, 11, 11, 0, -10 }, // 0x58 'X'
|
||||
{ 606, 10, 11, 10, 0, -10 }, // 0x59 'Y'
|
||||
{ 620, 8, 11, 10, 1, -10 }, // 0x5A 'Z'
|
||||
{ 631, 5, 16, 6, 1, -12 }, // 0x5B '['
|
||||
{ 641, 7, 16, 7, 0, -12 }, // 0x5C '\'
|
||||
{ 655, 5, 16, 6, 0, -12 }, // 0x5D ']'
|
||||
{ 665, 9, 7, 9, 0, -10 }, // 0x5E '^'
|
||||
{ 673, 8, 2, 8, 0, 2 }, // 0x5F '_'
|
||||
{ 675, 4, 4, 5, 1, -12 }, // 0x60 '`'
|
||||
{ 677, 7, 8, 9, 1, -7 }, // 0x61 'a'
|
||||
{ 684, 7, 12, 9, 1, -11 }, // 0x62 'b'
|
||||
{ 695, 6, 8, 8, 1, -7 }, // 0x63 'c'
|
||||
{ 701, 7, 12, 9, 1, -11 }, // 0x64 'd'
|
||||
{ 712, 7, 8, 9, 1, -7 }, // 0x65 'e'
|
||||
{ 719, 5, 12, 6, 1, -11 }, // 0x66 'f'
|
||||
{ 727, 7, 11, 9, 1, -7 }, // 0x67 'g'
|
||||
{ 737, 7, 12, 9, 1, -11 }, // 0x68 'h'
|
||||
{ 748, 2, 12, 4, 1, -11 }, // 0x69 'i'
|
||||
{ 751, 4, 15, 4, -1, -11 }, // 0x6A 'j'
|
||||
{ 759, 8, 12, 9, 1, -11 }, // 0x6B 'k'
|
||||
{ 771, 3, 12, 4, 1, -11 }, // 0x6C 'l'
|
||||
{ 776, 12, 8, 14, 1, -7 }, // 0x6D 'm'
|
||||
{ 788, 7, 8, 9, 1, -7 }, // 0x6E 'n'
|
||||
{ 795, 8, 8, 10, 1, -7 }, // 0x6F 'o'
|
||||
{ 803, 7, 11, 9, 1, -7 }, // 0x70 'p'
|
||||
{ 813, 7, 11, 9, 1, -7 }, // 0x71 'q'
|
||||
{ 823, 5, 8, 6, 1, -7 }, // 0x72 'r'
|
||||
{ 828, 6, 8, 8, 1, -7 }, // 0x73 's'
|
||||
{ 834, 5, 10, 7, 1, -9 }, // 0x74 't'
|
||||
{ 841, 7, 8, 9, 1, -7 }, // 0x75 'u'
|
||||
{ 848, 9, 8, 9, 0, -7 }, // 0x76 'v'
|
||||
{ 857, 11, 8, 11, 0, -7 }, // 0x77 'w'
|
||||
{ 868, 9, 8, 9, 0, -7 }, // 0x78 'x'
|
||||
{ 877, 9, 11, 9, 0, -7 }, // 0x79 'y'
|
||||
{ 890, 6, 8, 8, 1, -7 }, // 0x7A 'z'
|
||||
{ 896, 5, 16, 5, 0, -12 }, // 0x7B '{'
|
||||
{ 906, 2, 16, 4, 1, -12 }, // 0x7C '|'
|
||||
{ 910, 5, 16, 5, 0, -12 }, // 0x7D '}'
|
||||
{ 920, 8, 3, 9, 1, -5 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont Ubuntu_Bold8pt7b PROGMEM = {
|
||||
(uint8_t *)Ubuntu_Bold8pt7bBitmaps,
|
||||
(GFXglyph *)Ubuntu_Bold8pt7bGlyphs,
|
||||
0x20, 0x7E, 18 };
|
||||
|
||||
// Approx. 1595 bytes
|
|
@ -1,20 +0,0 @@
|
|||
Using Gitpod
|
||||
############
|
||||
|
||||
Open web page:
|
||||
https://gitpod.io/#https://github.com/norbert-walter/esp32-nmea2000-obp60/tree/master/lib/obp60task
|
||||
|
||||
Input in terminal:
|
||||
cd /workspace/esp32-nmea2000-obp60
|
||||
bash /workspace/esp32-nmea2000-obp60/lib/obp60task/run
|
||||
|
||||
Compile result in:
|
||||
/workspace/esp32-nmea2000-obp60/.pio/build/obp60_s3/obp60_s3-all.bin, ready to flash to offset 0x0000
|
||||
|
||||
/workspace/esp32-nmea2000-obp60/.pio/build/obp60_s3/bootloader.bin
|
||||
/workspace/esp32-nmea2000-obp60/.pio/build/obp60_s3/firmware.bin
|
||||
/workspace/esp32-nmea2000-obp60/.pio/build/obp60_s3/partitions.bin
|
||||
|
||||
/workspace/esp32-nmea2000-obp60/.pio/build/obp60_s3/obp60_s3-all.bin
|
||||
/workspace/esp32-nmea2000-obp60/.pio/build/obp60_s3/obp60_s3-dev20231220-all.bin
|
||||
/workspace/esp32-nmea2000-obp60/.pio/build/obp60_s3/obp60_s3-dev20231220-update.bin
|
File diff suppressed because it is too large
Load Diff
|
@ -1,4 +0,0 @@
|
|||
git status
|
||||
git fetch upstream
|
||||
git diff --name-status upstream/master
|
||||
git checkout upstream/master platformio.ini
|
|
@ -1,6 +0,0 @@
|
|||
initHardware:
|
||||
* OBP60Extensions.cpp:60 setting clock speed for Wire does not work
|
||||
* why real hardware init in init task?
|
||||
|
||||
logging:
|
||||
* %s needs c-string not String! - e.g. obp60task.cpp:52,67,82
|
|
@ -1,67 +0,0 @@
|
|||
// Arduino Moving Average Library
|
||||
// https://github.com/JChristensen/movingAvg
|
||||
// Copyright (C) 2018 by Jack Christensen and licensed under
|
||||
// GNU GPL v3.0, https://www.gnu.org/licenses/gpl.html
|
||||
|
||||
#include <movingAvg.h>
|
||||
|
||||
// initialize - allocate the interval array
|
||||
void movingAvg::begin()
|
||||
{
|
||||
m_readings = new int[m_interval];
|
||||
}
|
||||
|
||||
// add a new reading and return the new moving average
|
||||
int movingAvg::reading(int newReading)
|
||||
{
|
||||
// add each new data point to the sum until the m_readings array is filled
|
||||
if (m_nbrReadings < m_interval) {
|
||||
++m_nbrReadings;
|
||||
m_sum += newReading;
|
||||
}
|
||||
// once the array is filled, subtract the oldest data point and add the new one
|
||||
else {
|
||||
m_sum = m_sum - m_readings[m_next] + newReading;
|
||||
}
|
||||
|
||||
m_readings[m_next] = newReading;
|
||||
if (++m_next >= m_interval) m_next = 0;
|
||||
return (m_sum + m_nbrReadings / 2) / m_nbrReadings;
|
||||
}
|
||||
|
||||
// just return the current moving average
|
||||
int movingAvg::getAvg()
|
||||
{
|
||||
return (m_sum + m_nbrReadings / 2) / m_nbrReadings;
|
||||
}
|
||||
|
||||
// return the average for a subset of the data, the most recent nPoints readings.
|
||||
// for invalid values of nPoints, return zero.
|
||||
int movingAvg::getAvg(int nPoints)
|
||||
{
|
||||
if (nPoints < 1 || nPoints > m_interval || nPoints > m_nbrReadings) {
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
long sum{0};
|
||||
int i = m_next;
|
||||
for (int n=0; n<nPoints; ++n) {
|
||||
if (i == 0) {
|
||||
i = m_interval - 1;
|
||||
}
|
||||
else {
|
||||
--i;
|
||||
}
|
||||
sum += m_readings[i];
|
||||
}
|
||||
return (sum + nPoints / 2) / nPoints;
|
||||
}
|
||||
}
|
||||
|
||||
// start the moving average over again
|
||||
void movingAvg::reset()
|
||||
{
|
||||
m_nbrReadings = 0;
|
||||
m_sum = 0;
|
||||
m_next = 0;
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
// Arduino Moving Average Library
|
||||
// https://github.com/JChristensen/movingAvg
|
||||
// Copyright (C) 2018 by Jack Christensen and licensed under
|
||||
// GNU GPL v3.0, https://www.gnu.org/licenses/gpl.html
|
||||
|
||||
#ifndef MOVINGAVG_H_INCLUDED
|
||||
#define MOVINGAVG_H_INCLUDED
|
||||
|
||||
class movingAvg
|
||||
{
|
||||
public:
|
||||
movingAvg(int interval)
|
||||
: m_interval{interval}, m_nbrReadings{0}, m_sum{0}, m_next{0} {}
|
||||
void begin();
|
||||
int reading(int newReading);
|
||||
int getAvg();
|
||||
int getAvg(int nPoints);
|
||||
int getCount() {return m_nbrReadings;}
|
||||
void reset();
|
||||
int* getReadings() {return m_readings;}
|
||||
|
||||
private:
|
||||
int m_interval; // number of data points for the moving average
|
||||
int m_nbrReadings; // number of readings
|
||||
long m_sum; // sum of the m_readings array
|
||||
int m_next; // index to the next reading
|
||||
int* m_readings; // pointer to the dynamically allocated interval array
|
||||
};
|
||||
#endif
|
|
@ -1,633 +0,0 @@
|
|||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
#include "obp60task.h"
|
||||
#include "Pagedata.h" // Data exchange for pages
|
||||
#include "OBP60Hardware.h" // PIN definitions
|
||||
#include <Wire.h> // I2C connections
|
||||
#include <RTClib.h> // DS1388 RTC
|
||||
#include <MCP23017.h> // MCP23017 extension Port
|
||||
#include <N2kTypes.h> // NMEA2000
|
||||
#include <N2kMessages.h>
|
||||
#include <NMEA0183.h> // NMEA0183
|
||||
#include <NMEA0183Msg.h>
|
||||
#include <NMEA0183Messages.h>
|
||||
#include <GxEPD2_BW.h> // GxEPD2 lib for black 6 white E-Ink displays
|
||||
#include "OBP60Extensions.h" // Functions lib for extension board
|
||||
#include "OBP60Keypad.h" // Functions for keypad
|
||||
|
||||
// True type character sets includes
|
||||
// See OBP60ExtensionPort.cpp
|
||||
|
||||
// Pictures
|
||||
//#include GxEPD_BitmapExamples // Example picture
|
||||
#include "MFD_OBP60_400x300_sw.h" // MFD with logo
|
||||
#include "Logo_OBP_400x300_sw.h" // OBP Logo
|
||||
#include "OBP60QRWiFi.h" // Functions lib for WiFi QR code
|
||||
#include "OBPSensorTask.h" // Functions lib for sensor data
|
||||
|
||||
#include "LedSpiTask.h"
|
||||
|
||||
// RTC DS1388
|
||||
RTC_DS1388 ds1388;
|
||||
|
||||
// Global vars
|
||||
bool initComplete = false; // Initialization complete
|
||||
int taskRunCounter = 0; // Task couter for loop section
|
||||
|
||||
// Hardware initialization before start all services
|
||||
//####################################################################################
|
||||
void OBP60Init(GwApi *api){
|
||||
|
||||
// Set a new device name and hidden the original name in the main config
|
||||
String devicename = api->getConfig()->getConfigItem(api->getConfig()->deviceName,true)->asString();
|
||||
api->getConfig()->setValue(GwConfigDefinitions::systemName, devicename, GwConfigInterface::ConfigType::HIDDEN);
|
||||
|
||||
api->getLogger()->logDebug(GwLog::LOG,"obp60init running");
|
||||
|
||||
// Check I2C devices
|
||||
|
||||
|
||||
// Init hardware
|
||||
hardwareInit();
|
||||
|
||||
// Settings for e-paper display
|
||||
String fastrefresh = api->getConfig()->getConfigItem(api->getConfig()->fastRefresh,true)->asString();
|
||||
api->getLogger()->logDebug(GwLog::DEBUG,"Fast Refresh Mode is: %s", fastrefresh.c_str());
|
||||
#ifdef DISPLAY_GDEY042T81
|
||||
if(fastrefresh == "true"){
|
||||
static const bool useFastFullUpdate = true; // Enable fast full display update only for GDEY042T81
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
setCpuFrequencyMhz(80);
|
||||
int freq = getCpuFrequencyMhz();
|
||||
api->getLogger()->logDebug(GwLog::LOG,"CPU speed: %i", freq);
|
||||
*/
|
||||
|
||||
// Settings for backlight
|
||||
String backlightMode = api->getConfig()->getConfigItem(api->getConfig()->backlight,true)->asString();
|
||||
api->getLogger()->logDebug(GwLog::DEBUG,"Backlight Mode is: %s", backlightMode.c_str());
|
||||
uint brightness = uint(api->getConfig()->getConfigItem(api->getConfig()->blBrightness,true)->asInt());
|
||||
String backlightColor = api->getConfig()->getConfigItem(api->getConfig()->blColor,true)->asString();
|
||||
if(String(backlightMode) == "On"){
|
||||
setBacklightLED(brightness, colorMapping(backlightColor));
|
||||
}
|
||||
if(String(backlightMode) == "Off"){
|
||||
setBacklightLED(0, COLOR_BLACK); // Backlight LEDs off (blue without britghness)
|
||||
}
|
||||
if(String(backlightMode) == "Control by Key"){
|
||||
setBacklightLED(0, COLOR_BLUE); // Backlight LEDs off (blue without britghness)
|
||||
}
|
||||
|
||||
// Settings flash LED mode
|
||||
String ledMode = api->getConfig()->getConfigItem(api->getConfig()->flashLED,true)->asString();
|
||||
api->getLogger()->logDebug(GwLog::DEBUG,"LED Mode is: %s", ledMode.c_str());
|
||||
if(String(ledMode) == "Off"){
|
||||
setBlinkingLED(false);
|
||||
}
|
||||
|
||||
// Marker for init complete
|
||||
// Used in OBP60Task()
|
||||
initComplete = true;
|
||||
|
||||
// Buzzer tone for initialization finish
|
||||
setBuzzerPower(uint(api->getConfig()->getConfigItem(api->getConfig()->buzzerPower,true)->asInt()));
|
||||
buzzer(TONE4, 500);
|
||||
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
int page0=0;
|
||||
QueueHandle_t queue;
|
||||
GwLog* logger = NULL;
|
||||
// GwApi* api = NULL;
|
||||
uint sensitivity = 100;
|
||||
} MyData;
|
||||
|
||||
// Keyboard Task
|
||||
void keyboardTask(void *param){
|
||||
MyData *data=(MyData *)param;
|
||||
|
||||
int keycode = 0;
|
||||
data->logger->logDebug(GwLog::LOG,"Start keyboard task");
|
||||
|
||||
// Loop for keyboard task
|
||||
while (true){
|
||||
keycode = readKeypad(data->sensitivity);
|
||||
//send a key event
|
||||
if(keycode != 0){
|
||||
xQueueSend(data->queue, &keycode, 0);
|
||||
data->logger->logDebug(GwLog::LOG,"Send keycode: %d", keycode);
|
||||
}
|
||||
delay(20); // 50Hz update rate (20ms)
|
||||
}
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
|
||||
class BoatValueList{
|
||||
public:
|
||||
static const int MAXVALUES=100;
|
||||
//we create a list containing all our BoatValues
|
||||
//this is the list we later use to let the api fill all the values
|
||||
//additionally we put the necessary values into the paga data - see below
|
||||
GwApi::BoatValue *allBoatValues[MAXVALUES];
|
||||
int numValues=0;
|
||||
|
||||
bool addValueToList(GwApi::BoatValue *v){
|
||||
for (int i=0;i<numValues;i++){
|
||||
if (allBoatValues[i] == v){
|
||||
//already in list...
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (numValues >= MAXVALUES) return false;
|
||||
allBoatValues[numValues]=v;
|
||||
numValues++;
|
||||
return true;
|
||||
}
|
||||
//helper to ensure that each BoatValue is only queried once
|
||||
GwApi::BoatValue *findValueOrCreate(String name){
|
||||
for (int i=0;i<numValues;i++){
|
||||
if (allBoatValues[i]->getName() == name) {
|
||||
return allBoatValues[i];
|
||||
}
|
||||
}
|
||||
GwApi::BoatValue *rt=new GwApi::BoatValue(name);
|
||||
addValueToList(rt);
|
||||
return rt;
|
||||
}
|
||||
};
|
||||
|
||||
//we want to have a list that has all our page definitions
|
||||
//this way each page can easily be added here
|
||||
//needs some minor tricks for the safe static initialization
|
||||
typedef std::vector<PageDescription*> Pages;
|
||||
//the page list class
|
||||
class PageList{
|
||||
public:
|
||||
Pages pages;
|
||||
void add(PageDescription *p){
|
||||
pages.push_back(p);
|
||||
}
|
||||
PageDescription *find(String name){
|
||||
for (auto it=pages.begin();it != pages.end();it++){
|
||||
if ((*it)->pageName == name){
|
||||
return *it;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
};
|
||||
|
||||
class PageStruct{
|
||||
public:
|
||||
Page *page=NULL;
|
||||
PageData parameters;
|
||||
PageDescription *description=NULL;
|
||||
};
|
||||
|
||||
/**
|
||||
* this function will add all the pages we know to the pagelist
|
||||
* each page should have defined a registerXXXPage variable of type
|
||||
* PageData that describes what it needs
|
||||
*/
|
||||
void registerAllPages(PageList &list){
|
||||
//the next line says that this variable is defined somewhere else
|
||||
//in our case in a separate C++ source file
|
||||
//this way this separate source file can be compiled by it's own
|
||||
//and has no access to any of our data except the one that we
|
||||
//give as a parameter to the page function
|
||||
extern PageDescription registerPageOneValue;
|
||||
//we add the variable to our list
|
||||
list.add(®isterPageOneValue);
|
||||
extern PageDescription registerPageTwoValues;
|
||||
list.add(®isterPageTwoValues);
|
||||
extern PageDescription registerPageThreeValues;
|
||||
list.add(®isterPageThreeValues);
|
||||
extern PageDescription registerPageFourValues;
|
||||
list.add(®isterPageFourValues);
|
||||
extern PageDescription registerPageFourValues2;
|
||||
list.add(®isterPageFourValues2);
|
||||
extern PageDescription registerPageApparentWind;
|
||||
list.add(®isterPageApparentWind);
|
||||
extern PageDescription registerPageWindRose;
|
||||
list.add(®isterPageWindRose);
|
||||
extern PageDescription registerPageVoltage;
|
||||
list.add(®isterPageVoltage);
|
||||
extern PageDescription registerPageDST810;
|
||||
list.add(®isterPageDST810);
|
||||
extern PageDescription registerPageClock;
|
||||
list.add(®isterPageClock);
|
||||
extern PageDescription registerPageWhite;
|
||||
list.add(®isterPageWhite);
|
||||
extern PageDescription registerPageBME280;
|
||||
list.add(®isterPageBME280);
|
||||
extern PageDescription registerPageRudderPosition;
|
||||
list.add(®isterPageRudderPosition);
|
||||
extern PageDescription registerPageKeelPosition;
|
||||
list.add(®isterPageKeelPosition);
|
||||
extern PageDescription registerPageBattery;
|
||||
list.add(®isterPageBattery);
|
||||
extern PageDescription registerPageBattery2;
|
||||
list.add(®isterPageBattery2);
|
||||
extern PageDescription registerPageRollPitch;
|
||||
list.add(®isterPageRollPitch);
|
||||
extern PageDescription registerPageSolar;
|
||||
list.add(®isterPageSolar);
|
||||
extern PageDescription registerPageGenerator;
|
||||
list.add(®isterPageGenerator);
|
||||
}
|
||||
|
||||
// Undervoltage detection for shutdown display
|
||||
void underVoltageDetection(GwApi *api){
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
// Read settings
|
||||
String displaycolor = api->getConfig()->getConfigItem(api->getConfig()->displaycolor,true)->asString();
|
||||
float vslope = uint(api->getConfig()->getConfigItem(api->getConfig()->vSlope,true)->asFloat());
|
||||
float voffset = uint(api->getConfig()->getConfigItem(api->getConfig()->vOffset,true)->asFloat());
|
||||
// Read supplay voltage
|
||||
float actVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // V = 1/20 * Vin
|
||||
actVoltage = actVoltage * vslope + voffset;
|
||||
if(actVoltage < MIN_VOLTAGE){
|
||||
// Switch off all power lines
|
||||
setPortPin(OBP_BACKLIGHT_LED, false); // Backlight Off
|
||||
setFlashLED(false); // Flash LED Off
|
||||
buzzer(TONE4, 20); // Buzzer tone 4kHz 20ms
|
||||
setPortPin(OBP_POWER_50, false); // Power rail 5.0V Off
|
||||
// Shutdown EInk display
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
getdisplay().fillScreen(bgcolor); // Clear screen
|
||||
getdisplay().setTextColor(textcolor);
|
||||
getdisplay().setFont(&Ubuntu_Bold20pt7b);
|
||||
getdisplay().setCursor(65, 150);
|
||||
getdisplay().print("Undervoltage");
|
||||
getdisplay().nextPage(); // Partial update
|
||||
getdisplay().powerOff(); // Display power off
|
||||
// Stop system
|
||||
while(true){
|
||||
esp_deep_sleep_start(); // Deep Sleep without weakup. Weakup only after power cycle (restart).
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// OBP60 Task
|
||||
//####################################################################################
|
||||
void OBP60Task(GwApi *api){
|
||||
GwLog *logger=api->getLogger();
|
||||
GwConfigHandler *config=api->getConfig();
|
||||
startLedTask(api);
|
||||
PageList allPages;
|
||||
registerAllPages(allPages);
|
||||
|
||||
tN2kMsg N2kMsg;
|
||||
|
||||
LOG_DEBUG(GwLog::LOG,"obp60task started");
|
||||
for (auto it=allPages.pages.begin();it != allPages.pages.end();it++){
|
||||
LOG_DEBUG(GwLog::LOG,"found registered page %s",(*it)->pageName.c_str());
|
||||
}
|
||||
|
||||
// Init E-Ink display
|
||||
String displaymode = api->getConfig()->getConfigItem(api->getConfig()->display,true)->asString();
|
||||
String displaycolor = api->getConfig()->getConfigItem(api->getConfig()->displaycolor,true)->asString();
|
||||
String systemname = api->getConfig()->getConfigItem(api->getConfig()->systemName,true)->asString();
|
||||
String wifipass = api->getConfig()->getConfigItem(api->getConfig()->apPassword,true)->asString();
|
||||
bool refreshmode = api->getConfig()->getConfigItem(api->getConfig()->refresh,true)->asBoolean();
|
||||
String fastrefresh = api->getConfig()->getConfigItem(api->getConfig()->fastRefresh,true)->asString();
|
||||
uint fullrefreshtime = uint(api->getConfig()->getConfigItem(api->getConfig()->fullRefreshTime,true)->asInt());
|
||||
int textcolor = GxEPD_BLACK;
|
||||
int pixelcolor = GxEPD_BLACK;
|
||||
int bgcolor = GxEPD_WHITE;
|
||||
|
||||
getdisplay().init(115200); // Init for nolrmal displays
|
||||
// getdisplay().init(115200, true, 2, false); // Use this for Waveshare boards with "clever" reset circuit, 2ms reset pulse
|
||||
getdisplay().setRotation(0); // Set display orientation (horizontal)
|
||||
if(displaycolor == "Normal"){
|
||||
textcolor = GxEPD_BLACK;
|
||||
pixelcolor = GxEPD_BLACK;
|
||||
bgcolor = GxEPD_WHITE;
|
||||
}
|
||||
else{
|
||||
textcolor = GxEPD_WHITE;
|
||||
pixelcolor = GxEPD_WHITE;
|
||||
bgcolor = GxEPD_BLACK;
|
||||
}
|
||||
getdisplay().setFullWindow(); // Set full Refresh
|
||||
getdisplay().firstPage(); // set first page
|
||||
getdisplay().fillScreen(bgcolor); // Draw white sreen
|
||||
getdisplay().setTextColor(textcolor); // Set display color
|
||||
getdisplay().nextPage(); // Full Refresh
|
||||
getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
|
||||
getdisplay().fillScreen(bgcolor); // Draw white sreen
|
||||
getdisplay().nextPage(); // Fast Refresh
|
||||
getdisplay().nextPage(); // Fast Refresh
|
||||
if(String(displaymode) == "Logo + QR Code" || String(displaymode) == "Logo"){
|
||||
getdisplay().fillScreen(bgcolor); // Draw white sreen
|
||||
getdisplay().drawBitmap(0, 0, gImage_Logo_OBP_400x300_sw, getdisplay().width(), getdisplay().height(), pixelcolor); // Draw start logo
|
||||
getdisplay().nextPage(); // Fast Refresh
|
||||
getdisplay().nextPage(); // Fast Refresh
|
||||
delay(SHOW_TIME); // Logo show time
|
||||
if(String(displaymode) == "Logo + QR Code"){
|
||||
getdisplay().fillScreen(bgcolor); // Draw white sreen
|
||||
qrWiFi(systemname, wifipass, displaycolor); // Show QR code for WiFi connection
|
||||
getdisplay().nextPage(); // Fast Refresh
|
||||
getdisplay().nextPage(); // Fast Refresh
|
||||
delay(SHOW_TIME); // QR code show time
|
||||
}
|
||||
getdisplay().fillScreen(bgcolor); // Draw white sreen
|
||||
getdisplay().nextPage(); // Fast Refresh
|
||||
getdisplay().nextPage(); // Fast Refresh
|
||||
}
|
||||
|
||||
// Init pages
|
||||
int numPages=1;
|
||||
PageStruct pages[MAX_PAGE_NUMBER];
|
||||
CommonData commonData;
|
||||
commonData.logger=logger;
|
||||
commonData.config=config;
|
||||
BoatValueList boatValues; //all the boat values for the api query
|
||||
//commonData.distanceformat=config->getString(xxx);
|
||||
//add all necessary data to common data
|
||||
|
||||
//fill the page data from config
|
||||
numPages=config->getInt(config->visiblePages,1);
|
||||
if (numPages < 1) numPages=1;
|
||||
if (numPages >= MAX_PAGE_NUMBER) numPages=MAX_PAGE_NUMBER;
|
||||
LOG_DEBUG(GwLog::LOG,"Number of pages %d",numPages);
|
||||
String configPrefix="page";
|
||||
for (int i=0;i< numPages;i++){
|
||||
String prefix=configPrefix+String(i+1); //e.g. page1
|
||||
String configName=prefix+String("type");
|
||||
LOG_DEBUG(GwLog::DEBUG,"asking for page config %s",configName.c_str());
|
||||
String pageType=config->getString(configName,"");
|
||||
PageDescription *description=allPages.find(pageType);
|
||||
if (description == NULL){
|
||||
LOG_DEBUG(GwLog::ERROR,"page description for %s not found",pageType.c_str());
|
||||
continue;
|
||||
}
|
||||
pages[i].description=description;
|
||||
pages[i].page=description->creator(commonData);
|
||||
pages[i].parameters.pageName=pageType;
|
||||
LOG_DEBUG(GwLog::DEBUG,"found page %s for number %d",pageType.c_str(),i);
|
||||
//fill in all the user defined parameters
|
||||
for (int uid=0;uid<description->userParam;uid++){
|
||||
String cfgName=prefix+String("value")+String(uid+1);
|
||||
GwApi::BoatValue *value=boatValues.findValueOrCreate(config->getString(cfgName,""));
|
||||
LOG_DEBUG(GwLog::DEBUG,"add user input cfg=%s,value=%s for page %d",
|
||||
cfgName.c_str(),
|
||||
value->getName().c_str(),
|
||||
i
|
||||
);
|
||||
pages[i].parameters.values.push_back(value);
|
||||
}
|
||||
//now add the predefined values
|
||||
for (auto it=description->fixedParam.begin();it != description->fixedParam.end();it++){
|
||||
GwApi::BoatValue *value=boatValues.findValueOrCreate(*it);
|
||||
LOG_DEBUG(GwLog::DEBUG,"added fixed value %s to page %d",value->getName().c_str(),i);
|
||||
pages[i].parameters.values.push_back(value);
|
||||
}
|
||||
}
|
||||
//now we have prepared the page data
|
||||
//we start a separate task that will fetch our keys...
|
||||
MyData allParameters;
|
||||
allParameters.logger=api->getLogger();
|
||||
allParameters.page0=3;
|
||||
allParameters.queue=xQueueCreate(10,sizeof(int));
|
||||
allParameters.sensitivity= api->getConfig()->getInt(GwConfigDefinitions::tSensitivity);
|
||||
xTaskCreate(keyboardTask,"keyboard",2000,&allParameters,configMAX_PRIORITIES-1,NULL);
|
||||
SharedData *shared=new SharedData(api);
|
||||
createSensorTask(shared);
|
||||
|
||||
// Task Loop
|
||||
//####################################################################################
|
||||
|
||||
// Configuration values for main loop
|
||||
String gpsFix = api->getConfig()->getConfigItem(api->getConfig()->flashLED,true)->asString();
|
||||
String backlight = api->getConfig()->getConfigItem(api->getConfig()->backlight,true)->asString();
|
||||
String gpsOn=api->getConfig()->getConfigItem(api->getConfig()->useGPS,true)->asString();
|
||||
String tz = api->getConfig()->getConfigItem(api->getConfig()->timeZone,true)->asString();
|
||||
String backlightColor = api->getConfig()->getConfigItem(api->getConfig()->blColor,true)->asString();
|
||||
Color color = colorMapping(backlightColor);
|
||||
uint brightness = 2.55 * uint(api->getConfig()->getConfigItem(api->getConfig()->blBrightness,true)->asInt());
|
||||
bool uvoltage = api->getConfig()->getConfigItem(api->getConfig()->underVoltage,true)->asBoolean();
|
||||
|
||||
// refreshmode defined in init section
|
||||
// displaycolor defined in init section
|
||||
// textcolor defined in init section
|
||||
// pixelcolor defined in init section
|
||||
// bgcolor defined in init section
|
||||
|
||||
// Boat values for main loop
|
||||
GwApi::BoatValue *date = boatValues.findValueOrCreate("GPSD"); // Load GpsDate
|
||||
GwApi::BoatValue *time = boatValues.findValueOrCreate("GPST"); // Load GpsTime
|
||||
GwApi::BoatValue *lat = boatValues.findValueOrCreate("LAT"); // Load GpsLatitude
|
||||
GwApi::BoatValue *lon = boatValues.findValueOrCreate("LON"); // Load GpsLongitude
|
||||
GwApi::BoatValue *hdop = boatValues.findValueOrCreate("HDOP"); // Load GpsHDOP
|
||||
|
||||
LOG_DEBUG(GwLog::LOG,"obp60task: start mainloop");
|
||||
// Set start page
|
||||
int pageNumber = int(api->getConfig()->getConfigItem(api->getConfig()->startPage,true)->asInt()) - 1;
|
||||
int lastPage=pageNumber;
|
||||
|
||||
commonData.time = boatValues.findValueOrCreate("GPST"); // Load GpsTime
|
||||
commonData.date = boatValues.findValueOrCreate("GPSD"); // Load GpsTime
|
||||
bool delayedDisplayUpdate = false; // If select a new pages then make a delayed full display update
|
||||
long firststart = millis(); // First start
|
||||
long starttime0 = millis(); // Mainloop
|
||||
long starttime1 = millis(); // Full display refresh for the first 5 min (more often as normal)
|
||||
long starttime2 = millis(); // Full display refresh after 5 min
|
||||
long starttime3 = millis(); // Display update all 1s
|
||||
long starttime4 = millis(); // Delayed display update after 4s when select a new page
|
||||
long starttime5 = millis(); // Calculate sunrise and sunset all 1s
|
||||
|
||||
// Main loop runs with 100ms
|
||||
//####################################################################################
|
||||
|
||||
while (true){
|
||||
delay(100); // Delay 100ms (loop time)
|
||||
|
||||
|
||||
// Undervoltage detection
|
||||
if(uvoltage == true){
|
||||
underVoltageDetection(api);
|
||||
}
|
||||
|
||||
if(millis() > starttime0 + 100){
|
||||
starttime0 = millis();
|
||||
commonData.data=shared->getSensorData();
|
||||
commonData.data.actpage = pageNumber + 1;
|
||||
commonData.data.maxpage = numPages;
|
||||
|
||||
// If GPS fix then LED off (HDOP)
|
||||
if(String(gpsFix) == "GPS Fix Lost" && date->valid == true){
|
||||
setFlashLED(false);
|
||||
}
|
||||
// If missing GPS fix then LED on
|
||||
if(String(gpsFix) == "GPS Fix Lost" && date->valid == false){
|
||||
setFlashLED(true);
|
||||
}
|
||||
|
||||
// Check the keyboard message
|
||||
int keyboardMessage=0;
|
||||
while (xQueueReceive(allParameters.queue,&keyboardMessage,0)){
|
||||
LOG_DEBUG(GwLog::LOG,"new key from keyboard %d",keyboardMessage);
|
||||
|
||||
Page *currentPage=pages[pageNumber].page;
|
||||
if (currentPage ){
|
||||
keyboardMessage=currentPage->handleKey(keyboardMessage);
|
||||
}
|
||||
if (keyboardMessage > 0)
|
||||
{
|
||||
// Decoding all key codes
|
||||
// #6 Backlight on if key controled
|
||||
if(String(backlight) == "Control by Key"){
|
||||
if(keyboardMessage == 6){
|
||||
LOG_DEBUG(GwLog::LOG,"Toggle Backlight LED");
|
||||
toggleBacklightLED(brightness, color);
|
||||
}
|
||||
}
|
||||
// #9 Swipe right
|
||||
if (keyboardMessage == 9)
|
||||
{
|
||||
pageNumber++;
|
||||
if (pageNumber >= numPages){
|
||||
pageNumber = 0;
|
||||
}
|
||||
commonData.data.actpage = pageNumber + 1;
|
||||
commonData.data.maxpage = numPages;
|
||||
}
|
||||
// #10 Swipe left
|
||||
if (keyboardMessage == 10)
|
||||
{
|
||||
pageNumber--;
|
||||
if (pageNumber < 0){
|
||||
pageNumber = numPages - 1;
|
||||
}
|
||||
commonData.data.actpage = pageNumber + 1;
|
||||
commonData.data.maxpage = numPages;
|
||||
}
|
||||
|
||||
// #9 or #10 Refresh display after a new page after 4s waiting time and if refresh is disabled
|
||||
if(refreshmode == true && (keyboardMessage == 9 || keyboardMessage == 10)){
|
||||
starttime4 = millis();
|
||||
starttime2 = millis(); // Reset the timer for full display update
|
||||
delayedDisplayUpdate = true;
|
||||
}
|
||||
}
|
||||
LOG_DEBUG(GwLog::LOG,"set pagenumber to %d",pageNumber);
|
||||
}
|
||||
|
||||
// Calculate sunrise, sunset and backlight control with sun status all 1s
|
||||
if(millis() > starttime5 + 1000){
|
||||
starttime5 = millis();
|
||||
if(time->valid == true && date->valid == true && lat->valid == true && lon->valid == true){
|
||||
// Provide sundata to all pages
|
||||
commonData.sundata = calcSunsetSunrise(api, time->value , date->value, lat->value, lon->value, tz.toDouble());
|
||||
// Backlight with sun control
|
||||
if(String(backlight) == "Control by Sun"){
|
||||
if(commonData.sundata.sunDown == true){
|
||||
setBacklightLED(brightness, color);
|
||||
}
|
||||
else{
|
||||
setBacklightLED(0, COLOR_BLUE); // Backlight LEDs off (blue without britghness)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Full display update afer a new selected page and 4s wait time
|
||||
if(millis() > starttime4 + 4000 && delayedDisplayUpdate == true){
|
||||
starttime1 = millis();
|
||||
starttime2 = millis();
|
||||
getdisplay().init(115200); // Display init
|
||||
getdisplay().setFullWindow(); // Set full update
|
||||
getdisplay().firstPage();
|
||||
if(fastrefresh == "false"){
|
||||
getdisplay().fillScreen(pixelcolor);// Clear display
|
||||
getdisplay().nextPage(); // Full update
|
||||
getdisplay().fillScreen(bgcolor); // Clear display
|
||||
getdisplay().nextPage(); // Full update
|
||||
}
|
||||
delayedDisplayUpdate = false;
|
||||
}
|
||||
|
||||
// Subtask E-Ink full refresh all 1 min for the first 5 min after power on or restart
|
||||
// This needs for a better display contrast after power on in cold or warm environments
|
||||
if(millis() < firststart + (5 * 60 * 1000) && millis() > starttime1 + (60 * 1000)){
|
||||
starttime1 = millis();
|
||||
starttime2 = millis();
|
||||
LOG_DEBUG(GwLog::DEBUG,"E-Ink full refresh first 5 min");
|
||||
getdisplay().init(115200); // Display init
|
||||
getdisplay().setFullWindow(); // Set full update
|
||||
getdisplay().firstPage();
|
||||
if(fastrefresh == "false"){
|
||||
getdisplay().fillScreen(pixelcolor);// Clear display
|
||||
getdisplay().nextPage(); // Full update
|
||||
getdisplay().fillScreen(bgcolor); // Clear display
|
||||
getdisplay().nextPage(); // Full update
|
||||
}
|
||||
}
|
||||
|
||||
// Subtask E-Ink full refresh
|
||||
if(millis() > starttime2 + fullrefreshtime * 60 * 1000){
|
||||
starttime2 = millis();
|
||||
LOG_DEBUG(GwLog::DEBUG,"E-Ink full refresh");
|
||||
getdisplay().init(115200); // Display init
|
||||
getdisplay().setFullWindow(); // Set full update
|
||||
getdisplay().firstPage();
|
||||
if(fastrefresh == "false"){
|
||||
getdisplay().fillScreen(pixelcolor);// Clear display
|
||||
getdisplay().nextPage(); // Full update
|
||||
getdisplay().fillScreen(bgcolor); // Clear display
|
||||
getdisplay().nextPage(); // Full update
|
||||
}
|
||||
}
|
||||
|
||||
// Refresh display data all 1s
|
||||
if(millis() > starttime3 + 1000){
|
||||
starttime3 = millis();
|
||||
//refresh data from api
|
||||
api->getBoatDataValues(boatValues.numValues,boatValues.allBoatValues);
|
||||
api->getStatus(commonData.status);
|
||||
|
||||
// Show header if enabled
|
||||
getdisplay().fillRect(0, 0, getdisplay().width(), getdisplay().height(), bgcolor); // Clear display
|
||||
if (pages[pageNumber].description && pages[pageNumber].description->header){
|
||||
//build some header and footer using commonData
|
||||
getdisplay().fillScreen(bgcolor); // Clear display
|
||||
displayHeader(commonData, date, time, hdop); // Sown header
|
||||
}
|
||||
|
||||
// Call the particular page
|
||||
Page *currentPage=pages[pageNumber].page;
|
||||
if (currentPage == NULL){
|
||||
LOG_DEBUG(GwLog::ERROR,"page number %d not found",pageNumber);
|
||||
// Error handling for missing page
|
||||
}
|
||||
else{
|
||||
if (lastPage != pageNumber){
|
||||
currentPage->displayNew(commonData,pages[pageNumber].parameters);
|
||||
lastPage=pageNumber;
|
||||
}
|
||||
//call the page code
|
||||
LOG_DEBUG(GwLog::DEBUG,"calling page %d",pageNumber);
|
||||
currentPage->displayPage(commonData,pages[pageNumber].parameters);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
vTaskDelete(NULL);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,27 +0,0 @@
|
|||
#pragma once
|
||||
#include "GwApi.h"
|
||||
//we only compile for some boards
|
||||
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
|
||||
#define USBSerial Serial
|
||||
// CAN NMEA2000
|
||||
#define ESP32_CAN_TX_PIN 46
|
||||
#define ESP32_CAN_RX_PIN 3
|
||||
// Bus load in 50mA steps
|
||||
#define N2K_LOAD_LEVEL 5 // 5x50mA = 250mA max bus load with back light on
|
||||
// RS485 NMEA0183
|
||||
#define GWSERIAL_TX 17
|
||||
#define GWSERIAL_RX 8
|
||||
#define GWSERIAL_MODE "UNI"
|
||||
// Allowed to set a new password for access point
|
||||
#define FORCE_AP_PWCHANGE
|
||||
|
||||
// Init OBP60 Task
|
||||
void OBP60Init(GwApi *param);
|
||||
DECLARE_INITFUNCTION(OBP60Init);
|
||||
|
||||
// OBP60 Task
|
||||
void OBP60Task(GwApi *param);
|
||||
DECLARE_USERTASK_PARAM(OBP60Task, 10000); // Need 8k RAM as stack size
|
||||
DECLARE_CAPABILITY(obp60,true);
|
||||
DECLARE_STRING_CAPABILITY(HELP_URL, "https://obp60-v2-docu.readthedocs.io/de/latest/"); // Link to help pages
|
||||
#endif
|
|
@ -1,27 +0,0 @@
|
|||
Partition table for OBP60 V2.1
|
||||
|
||||
based on default_16MB.csv
|
||||
|
||||
Start End Size Type Content
|
||||
---------------------------------------------------------------
|
||||
0x0000 - 0x3FFF 0x3FFF boot 16k Boatloader
|
||||
0x8000 - 0x8FFF 0x0FFF part 4k Partition table
|
||||
0x9000 - 0xDFFF 0x5000 data 20k NVS Partition
|
||||
0xE000 - 0xFFFF 0x2000 data 8k Application starter
|
||||
0x10000 - 0x64FFFF 0x640000 app 6.25M OTA-0 OBP60 Firmware
|
||||
0x650000 - 0xC8FFFF 0x640000 app 6.25M OTA-1 OBP60 Firmware
|
||||
0xC90000 - 0xFEFFFF 0x360000 data 3.37M SPIFFS
|
||||
0xFF0000 - 0x1000000 0x10000 data 64k Coredump
|
||||
|
||||
based on default_8MB.csv
|
||||
|
||||
Start End Size Type Content
|
||||
---------------------------------------------------------------
|
||||
0x0000 - 0x3FFF 0x3FFF boot 16k Boatloader
|
||||
0x8000 - 0x8FFF 0x0FFF part 4k Partition table
|
||||
0x9000 - 0xDFFF 0x5000 data 20k NVS Partition
|
||||
0xE000 - 0xFFFF 0x2000 data 8k Application starter
|
||||
0x10000 - 0x33FFFF 0x330000 app 3.18M OTA-0 OBP60 Firmware
|
||||
0x340000 - 0x66FFFF 0x330000 app 3.18M OTA-1 OBP60 Firmware
|
||||
0x670000 - 0x7EFFFF 0x180000 data 1.68M SPIFFS
|
||||
0x7F0000 - 0x800000 0x10000 data 64k Coredump
|
|
@ -1,50 +0,0 @@
|
|||
[platformio]
|
||||
#if you want a pio run to only build
|
||||
#your special environments you can set this here
|
||||
#by uncommenting the next line
|
||||
default_envs = obp60_s3
|
||||
[env:obp60_s3]
|
||||
platform = espressif32@6.8.1
|
||||
-D board_build.f_cpu = 160000000L
|
||||
board_build.variants_dir = variants
|
||||
#board = obp60_s3_n8 #ESP32-S3 N8, 8MB flash, no PSRAM
|
||||
#board = obp60_s3_n16 #ESP32-S3 N16,16MB flash, no PSRAM, zero series
|
||||
#board = obp60_s3_n8r8 #ESP32-S3 N8R8, 8MB flash, 8MB PSRAM
|
||||
board = obp60_s3_n16r8 #ESP32-S3 N16R8, 16MB flash, 8MB PSRAM, production series
|
||||
#board_build.partitions = default_8MB.csv #ESP32-S3 N8, 8MB flash
|
||||
board_build.partitions = default_16MB.csv #ESP32-S3 N16, 16MB flash
|
||||
framework = arduino
|
||||
lib_deps =
|
||||
${basedeps.lib_deps}
|
||||
Wire
|
||||
SPI
|
||||
esphome/AsyncTCP-esphome@2.0.1
|
||||
robtillaart/PCF8574@0.3.9
|
||||
adafruit/Adafruit Unified Sensor @ 1.1.13
|
||||
blemasle/MCP23017@2.0.0
|
||||
adafruit/Adafruit BusIO@1.5.0
|
||||
adafruit/Adafruit GFX Library@1.11.9
|
||||
zinggjm/GxEPD2@1.5.8
|
||||
#https://github.com/ZinggJM/GxEPD2
|
||||
sstaub/Ticker@4.4.0
|
||||
adafruit/Adafruit BMP280 Library@2.6.2
|
||||
adafruit/Adafruit BME280 Library@2.2.2
|
||||
adafruit/Adafruit BMP085 Library@1.2.1
|
||||
enjoyneering/HTU21D@1.2.1
|
||||
robtillaart/INA226@0.2.0
|
||||
paulstoffregen/OneWire@2.3.8
|
||||
milesburton/DallasTemperature@3.11.0
|
||||
signetica/SunRise@2.0.2
|
||||
build_flags=
|
||||
#-DTIME=$UNIX_TIME
|
||||
-D BOARD_OBP60S3
|
||||
# -D DISPLAY_GDEW042T2 #old E-Ink display from Waveshare, R10 0.47 ohm
|
||||
-D DISPLAY_GDEY042T81 #new E-Ink display from Waveshare, R10 2.2 ohm
|
||||
# -D DISPLAY_GYE042A87 #alternativ E-Ink display from Genyo Optical, R10 2.2 ohm
|
||||
# -D DISPLAY_SE0420NQ04 #alternativ E-Ink display from SID Technology, R10 2.2 ohm
|
||||
${env.build_flags}
|
||||
#CONFIG_ESP_TASK_WDT_TIMEOUT_S = 10 #Task Watchdog timeout period (seconds) [1...60] 5 default
|
||||
upload_port = /dev/ttyACM0
|
||||
upload_protocol = esptool #firmware upload via USB OTG seriell, by first upload need to set the ESP32-S3 in the upload mode with shortcut GND to Pin27
|
||||
upload_speed = 230400
|
||||
monitor_speed = 115200
|
|
@ -1,876 +0,0 @@
|
|||
/**
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* This library is written and maintained by Richard Moore.
|
||||
* Major parts were derived from Project Nayuki's library.
|
||||
*
|
||||
* Copyright (c) 2017 Richard Moore (https://github.com/ricmoo/QRCode)
|
||||
* Copyright (c) 2017 Project Nayuki (https://www.nayuki.io/page/qr-code-generator-library)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Special thanks to Nayuki (https://www.nayuki.io/) from which this library was
|
||||
* heavily inspired and compared against.
|
||||
*
|
||||
* See: https://github.com/nayuki/QR-Code-generator/tree/master/cpp
|
||||
*/
|
||||
|
||||
#include "qrcode.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#pragma mark - Error Correction Lookup tables
|
||||
|
||||
#if LOCK_VERSION == 0
|
||||
|
||||
static const uint16_t NUM_ERROR_CORRECTION_CODEWORDS[4][40] = {
|
||||
// 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level
|
||||
{ 10, 16, 26, 36, 48, 64, 72, 88, 110, 130, 150, 176, 198, 216, 240, 280, 308, 338, 364, 416, 442, 476, 504, 560, 588, 644, 700, 728, 784, 812, 868, 924, 980, 1036, 1064, 1120, 1204, 1260, 1316, 1372}, // Medium
|
||||
{ 7, 10, 15, 20, 26, 36, 40, 48, 60, 72, 80, 96, 104, 120, 132, 144, 168, 180, 196, 224, 224, 252, 270, 300, 312, 336, 360, 390, 420, 450, 480, 510, 540, 570, 570, 600, 630, 660, 720, 750}, // Low
|
||||
{ 17, 28, 44, 64, 88, 112, 130, 156, 192, 224, 264, 308, 352, 384, 432, 480, 532, 588, 650, 700, 750, 816, 900, 960, 1050, 1110, 1200, 1260, 1350, 1440, 1530, 1620, 1710, 1800, 1890, 1980, 2100, 2220, 2310, 2430}, // High
|
||||
{ 13, 22, 36, 52, 72, 96, 108, 132, 160, 192, 224, 260, 288, 320, 360, 408, 448, 504, 546, 600, 644, 690, 750, 810, 870, 952, 1020, 1050, 1140, 1200, 1290, 1350, 1440, 1530, 1590, 1680, 1770, 1860, 1950, 2040}, // Quartile
|
||||
};
|
||||
|
||||
static const uint8_t NUM_ERROR_CORRECTION_BLOCKS[4][40] = {
|
||||
// Version: (note that index 0 is for padding, and is set to an illegal value)
|
||||
// 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level
|
||||
{ 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49}, // Medium
|
||||
{ 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25}, // Low
|
||||
{ 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81}, // High
|
||||
{ 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68}, // Quartile
|
||||
};
|
||||
|
||||
static const uint16_t NUM_RAW_DATA_MODULES[40] = {
|
||||
// 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
|
||||
208, 359, 567, 807, 1079, 1383, 1568, 1936, 2336, 2768, 3232, 3728, 4256, 4651, 5243, 5867, 6523,
|
||||
// 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
|
||||
7211, 7931, 8683, 9252, 10068, 10916, 11796, 12708, 13652, 14628, 15371, 16411, 17483, 18587,
|
||||
// 32, 33, 34, 35, 36, 37, 38, 39, 40
|
||||
19723, 20891, 22091, 23008, 24272, 25568, 26896, 28256, 29648
|
||||
};
|
||||
|
||||
// @TODO: Put other LOCK_VERSIONS here
|
||||
#elif LOCK_VERSION == 3
|
||||
|
||||
static const int16_t NUM_ERROR_CORRECTION_CODEWORDS[4] = {
|
||||
26, 15, 44, 36
|
||||
};
|
||||
|
||||
static const int8_t NUM_ERROR_CORRECTION_BLOCKS[4] = {
|
||||
1, 1, 2, 2
|
||||
};
|
||||
|
||||
static const uint16_t NUM_RAW_DATA_MODULES = 567;
|
||||
|
||||
#else
|
||||
|
||||
#error Unsupported LOCK_VERSION (add it...)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
static int max(int a, int b) {
|
||||
if (a > b) { return a; }
|
||||
return b;
|
||||
}
|
||||
|
||||
/*
|
||||
static int abs(int value) {
|
||||
if (value < 0) { return -value; }
|
||||
return value;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
#pragma mark - Mode testing and conversion
|
||||
|
||||
static int8_t getAlphanumeric(char c) {
|
||||
|
||||
if (c >= '0' && c <= '9') { return (c - '0'); }
|
||||
if (c >= 'A' && c <= 'Z') { return (c - 'A' + 10); }
|
||||
|
||||
switch (c) {
|
||||
case ' ': return 36;
|
||||
case '$': return 37;
|
||||
case '%': return 38;
|
||||
case '*': return 39;
|
||||
case '+': return 40;
|
||||
case '-': return 41;
|
||||
case '.': return 42;
|
||||
case '/': return 43;
|
||||
case ':': return 44;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static bool isAlphanumeric(const char *text, uint16_t length) {
|
||||
while (length != 0) {
|
||||
if (getAlphanumeric(text[--length]) == -1) { return false; }
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
static bool isNumeric(const char *text, uint16_t length) {
|
||||
while (length != 0) {
|
||||
char c = text[--length];
|
||||
if (c < '0' || c > '9') { return false; }
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Counting
|
||||
|
||||
// We store the following tightly packed (less 8) in modeInfo
|
||||
// <=9 <=26 <= 40
|
||||
// NUMERIC ( 10, 12, 14);
|
||||
// ALPHANUMERIC ( 9, 11, 13);
|
||||
// BYTE ( 8, 16, 16);
|
||||
static char getModeBits(uint8_t version, uint8_t mode) {
|
||||
// Note: We use 15 instead of 16; since 15 doesn't exist and we cannot store 16 (8 + 8) in 3 bits
|
||||
// hex(int("".join(reversed([('00' + bin(x - 8)[2:])[-3:] for x in [10, 9, 8, 12, 11, 15, 14, 13, 15]])), 2))
|
||||
unsigned int modeInfo = 0x7bbb80a;
|
||||
|
||||
#if LOCK_VERSION == 0 || LOCK_VERSION > 9
|
||||
if (version > 9) { modeInfo >>= 9; }
|
||||
#endif
|
||||
|
||||
#if LOCK_VERSION == 0 || LOCK_VERSION > 26
|
||||
if (version > 26) { modeInfo >>= 9; }
|
||||
#endif
|
||||
|
||||
char result = 8 + ((modeInfo >> (3 * mode)) & 0x07);
|
||||
if (result == 15) { result = 16; }
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - BitBucket
|
||||
|
||||
typedef struct BitBucket {
|
||||
uint32_t bitOffsetOrWidth;
|
||||
uint16_t capacityBytes;
|
||||
uint8_t *data;
|
||||
} BitBucket;
|
||||
|
||||
/*
|
||||
void bb_dump(BitBucket *bitBuffer) {
|
||||
printf("Buffer: ");
|
||||
for (uint32_t i = 0; i < bitBuffer->capacityBytes; i++) {
|
||||
printf("%02x", bitBuffer->data[i]);
|
||||
if ((i % 4) == 3) { printf(" "); }
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
*/
|
||||
|
||||
static uint16_t bb_getGridSizeBytes(uint8_t size) {
|
||||
return (((size * size) + 7) / 8);
|
||||
}
|
||||
|
||||
static uint16_t bb_getBufferSizeBytes(uint32_t bits) {
|
||||
return ((bits + 7) / 8);
|
||||
}
|
||||
|
||||
static void bb_initBuffer(BitBucket *bitBuffer, uint8_t *data, int32_t capacityBytes) {
|
||||
bitBuffer->bitOffsetOrWidth = 0;
|
||||
bitBuffer->capacityBytes = capacityBytes;
|
||||
bitBuffer->data = data;
|
||||
|
||||
memset(data, 0, bitBuffer->capacityBytes);
|
||||
}
|
||||
|
||||
static void bb_initGrid(BitBucket *bitGrid, uint8_t *data, uint8_t size) {
|
||||
bitGrid->bitOffsetOrWidth = size;
|
||||
bitGrid->capacityBytes = bb_getGridSizeBytes(size);
|
||||
bitGrid->data = data;
|
||||
|
||||
memset(data, 0, bitGrid->capacityBytes);
|
||||
}
|
||||
|
||||
static void bb_appendBits(BitBucket *bitBuffer, uint32_t val, uint8_t length) {
|
||||
uint32_t offset = bitBuffer->bitOffsetOrWidth;
|
||||
for (int8_t i = length - 1; i >= 0; i--, offset++) {
|
||||
bitBuffer->data[offset >> 3] |= ((val >> i) & 1) << (7 - (offset & 7));
|
||||
}
|
||||
bitBuffer->bitOffsetOrWidth = offset;
|
||||
}
|
||||
/*
|
||||
void bb_setBits(BitBucket *bitBuffer, uint32_t val, int offset, uint8_t length) {
|
||||
for (int8_t i = length - 1; i >= 0; i--, offset++) {
|
||||
bitBuffer->data[offset >> 3] |= ((val >> i) & 1) << (7 - (offset & 7));
|
||||
}
|
||||
}
|
||||
*/
|
||||
static void bb_setBit(BitBucket *bitGrid, uint8_t x, uint8_t y, bool on) {
|
||||
uint32_t offset = y * bitGrid->bitOffsetOrWidth + x;
|
||||
uint8_t mask = 1 << (7 - (offset & 0x07));
|
||||
if (on) {
|
||||
bitGrid->data[offset >> 3] |= mask;
|
||||
} else {
|
||||
bitGrid->data[offset >> 3] &= ~mask;
|
||||
}
|
||||
}
|
||||
|
||||
static void bb_invertBit(BitBucket *bitGrid, uint8_t x, uint8_t y, bool invert) {
|
||||
uint32_t offset = y * bitGrid->bitOffsetOrWidth + x;
|
||||
uint8_t mask = 1 << (7 - (offset & 0x07));
|
||||
bool on = ((bitGrid->data[offset >> 3] & (1 << (7 - (offset & 0x07)))) != 0);
|
||||
if (on ^ invert) {
|
||||
bitGrid->data[offset >> 3] |= mask;
|
||||
} else {
|
||||
bitGrid->data[offset >> 3] &= ~mask;
|
||||
}
|
||||
}
|
||||
|
||||
static bool bb_getBit(BitBucket *bitGrid, uint8_t x, uint8_t y) {
|
||||
uint32_t offset = y * bitGrid->bitOffsetOrWidth + x;
|
||||
return (bitGrid->data[offset >> 3] & (1 << (7 - (offset & 0x07)))) != 0;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Drawing Patterns
|
||||
|
||||
// XORs the data modules in this QR Code with the given mask pattern. Due to XOR's mathematical
|
||||
// properties, calling applyMask(m) twice with the same value is equivalent to no change at all.
|
||||
// This means it is possible to apply a mask, undo it, and try another mask. Note that a final
|
||||
// well-formed QR Code symbol needs exactly one mask applied (not zero, not two, etc.).
|
||||
static void applyMask(BitBucket *modules, BitBucket *isFunction, uint8_t mask) {
|
||||
uint8_t size = modules->bitOffsetOrWidth;
|
||||
|
||||
for (uint8_t y = 0; y < size; y++) {
|
||||
for (uint8_t x = 0; x < size; x++) {
|
||||
if (bb_getBit(isFunction, x, y)) { continue; }
|
||||
|
||||
bool invert = 0;
|
||||
switch (mask) {
|
||||
case 0: invert = (x + y) % 2 == 0; break;
|
||||
case 1: invert = y % 2 == 0; break;
|
||||
case 2: invert = x % 3 == 0; break;
|
||||
case 3: invert = (x + y) % 3 == 0; break;
|
||||
case 4: invert = (x / 3 + y / 2) % 2 == 0; break;
|
||||
case 5: invert = x * y % 2 + x * y % 3 == 0; break;
|
||||
case 6: invert = (x * y % 2 + x * y % 3) % 2 == 0; break;
|
||||
case 7: invert = ((x + y) % 2 + x * y % 3) % 2 == 0; break;
|
||||
}
|
||||
bb_invertBit(modules, x, y, invert);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void setFunctionModule(BitBucket *modules, BitBucket *isFunction, uint8_t x, uint8_t y, bool on) {
|
||||
bb_setBit(modules, x, y, on);
|
||||
bb_setBit(isFunction, x, y, true);
|
||||
}
|
||||
|
||||
// Draws a 9*9 finder pattern including the border separator, with the center module at (x, y).
|
||||
static void drawFinderPattern(BitBucket *modules, BitBucket *isFunction, uint8_t x, uint8_t y) {
|
||||
uint8_t size = modules->bitOffsetOrWidth;
|
||||
|
||||
for (int8_t i = -4; i <= 4; i++) {
|
||||
for (int8_t j = -4; j <= 4; j++) {
|
||||
uint8_t dist = max(abs(i), abs(j)); // Chebyshev/infinity norm
|
||||
int16_t xx = x + j, yy = y + i;
|
||||
if (0 <= xx && xx < size && 0 <= yy && yy < size) {
|
||||
setFunctionModule(modules, isFunction, xx, yy, dist != 2 && dist != 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Draws a 5*5 alignment pattern, with the center module at (x, y).
|
||||
static void drawAlignmentPattern(BitBucket *modules, BitBucket *isFunction, uint8_t x, uint8_t y) {
|
||||
for (int8_t i = -2; i <= 2; i++) {
|
||||
for (int8_t j = -2; j <= 2; j++) {
|
||||
setFunctionModule(modules, isFunction, x + j, y + i, max(abs(i), abs(j)) != 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Draws two copies of the format bits (with its own error correction code)
|
||||
// based on the given mask and this object's error correction level field.
|
||||
static void drawFormatBits(BitBucket *modules, BitBucket *isFunction, uint8_t ecc, uint8_t mask) {
|
||||
|
||||
uint8_t size = modules->bitOffsetOrWidth;
|
||||
|
||||
// Calculate error correction code and pack bits
|
||||
uint32_t data = ecc << 3 | mask; // errCorrLvl is uint2, mask is uint3
|
||||
uint32_t rem = data;
|
||||
for (int i = 0; i < 10; i++) {
|
||||
rem = (rem << 1) ^ ((rem >> 9) * 0x537);
|
||||
}
|
||||
|
||||
data = data << 10 | rem;
|
||||
data ^= 0x5412; // uint15
|
||||
|
||||
// Draw first copy
|
||||
for (uint8_t i = 0; i <= 5; i++) {
|
||||
setFunctionModule(modules, isFunction, 8, i, ((data >> i) & 1) != 0);
|
||||
}
|
||||
|
||||
setFunctionModule(modules, isFunction, 8, 7, ((data >> 6) & 1) != 0);
|
||||
setFunctionModule(modules, isFunction, 8, 8, ((data >> 7) & 1) != 0);
|
||||
setFunctionModule(modules, isFunction, 7, 8, ((data >> 8) & 1) != 0);
|
||||
|
||||
for (int8_t i = 9; i < 15; i++) {
|
||||
setFunctionModule(modules, isFunction, 14 - i, 8, ((data >> i) & 1) != 0);
|
||||
}
|
||||
|
||||
// Draw second copy
|
||||
for (int8_t i = 0; i <= 7; i++) {
|
||||
setFunctionModule(modules, isFunction, size - 1 - i, 8, ((data >> i) & 1) != 0);
|
||||
}
|
||||
|
||||
for (int8_t i = 8; i < 15; i++) {
|
||||
setFunctionModule(modules, isFunction, 8, size - 15 + i, ((data >> i) & 1) != 0);
|
||||
}
|
||||
|
||||
setFunctionModule(modules, isFunction, 8, size - 8, true);
|
||||
}
|
||||
|
||||
|
||||
// Draws two copies of the version bits (with its own error correction code),
|
||||
// based on this object's version field (which only has an effect for 7 <= version <= 40).
|
||||
static void drawVersion(BitBucket *modules, BitBucket *isFunction, uint8_t version) {
|
||||
|
||||
int8_t size = modules->bitOffsetOrWidth;
|
||||
|
||||
#if LOCK_VERSION != 0 && LOCK_VERSION < 7
|
||||
return;
|
||||
|
||||
#else
|
||||
if (version < 7) { return; }
|
||||
|
||||
// Calculate error correction code and pack bits
|
||||
uint32_t rem = version; // version is uint6, in the range [7, 40]
|
||||
for (uint8_t i = 0; i < 12; i++) {
|
||||
rem = (rem << 1) ^ ((rem >> 11) * 0x1F25);
|
||||
}
|
||||
|
||||
uint32_t data = version << 12 | rem; // uint18
|
||||
|
||||
// Draw two copies
|
||||
for (uint8_t i = 0; i < 18; i++) {
|
||||
bool bit = ((data >> i) & 1) != 0;
|
||||
uint8_t a = size - 11 + i % 3, b = i / 3;
|
||||
setFunctionModule(modules, isFunction, a, b, bit);
|
||||
setFunctionModule(modules, isFunction, b, a, bit);
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
static void drawFunctionPatterns(BitBucket *modules, BitBucket *isFunction, uint8_t version, uint8_t ecc) {
|
||||
|
||||
uint8_t size = modules->bitOffsetOrWidth;
|
||||
|
||||
// Draw the horizontal and vertical timing patterns
|
||||
for (uint8_t i = 0; i < size; i++) {
|
||||
setFunctionModule(modules, isFunction, 6, i, i % 2 == 0);
|
||||
setFunctionModule(modules, isFunction, i, 6, i % 2 == 0);
|
||||
}
|
||||
|
||||
// Draw 3 finder patterns (all corners except bottom right; overwrites some timing modules)
|
||||
drawFinderPattern(modules, isFunction, 3, 3);
|
||||
drawFinderPattern(modules, isFunction, size - 4, 3);
|
||||
drawFinderPattern(modules, isFunction, 3, size - 4);
|
||||
|
||||
#if LOCK_VERSION == 0 || LOCK_VERSION > 1
|
||||
|
||||
if (version > 1) {
|
||||
|
||||
// Draw the numerous alignment patterns
|
||||
|
||||
uint8_t alignCount = version / 7 + 2;
|
||||
uint8_t step;
|
||||
if (version != 32) {
|
||||
step = (version * 4 + alignCount * 2 + 1) / (2 * alignCount - 2) * 2; // ceil((size - 13) / (2*numAlign - 2)) * 2
|
||||
} else { // C-C-C-Combo breaker!
|
||||
step = 26;
|
||||
}
|
||||
|
||||
uint8_t alignPositionIndex = alignCount - 1;
|
||||
uint8_t alignPosition[alignCount];
|
||||
|
||||
alignPosition[0] = 6;
|
||||
|
||||
uint8_t size = version * 4 + 17;
|
||||
for (uint8_t i = 0, pos = size - 7; i < alignCount - 1; i++, pos -= step) {
|
||||
alignPosition[alignPositionIndex--] = pos;
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < alignCount; i++) {
|
||||
for (uint8_t j = 0; j < alignCount; j++) {
|
||||
if ((i == 0 && j == 0) || (i == 0 && j == alignCount - 1) || (i == alignCount - 1 && j == 0)) {
|
||||
continue; // Skip the three finder corners
|
||||
} else {
|
||||
drawAlignmentPattern(modules, isFunction, alignPosition[i], alignPosition[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// Draw configuration data
|
||||
drawFormatBits(modules, isFunction, ecc, 0); // Dummy mask value; overwritten later in the constructor
|
||||
drawVersion(modules, isFunction, version);
|
||||
}
|
||||
|
||||
|
||||
// Draws the given sequence of 8-bit codewords (data and error correction) onto the entire
|
||||
// data area of this QR Code symbol. Function modules need to be marked off before this is called.
|
||||
static void drawCodewords(BitBucket *modules, BitBucket *isFunction, BitBucket *codewords) {
|
||||
|
||||
uint32_t bitLength = codewords->bitOffsetOrWidth;
|
||||
uint8_t *data = codewords->data;
|
||||
|
||||
uint8_t size = modules->bitOffsetOrWidth;
|
||||
|
||||
// Bit index into the data
|
||||
uint32_t i = 0;
|
||||
|
||||
// Do the funny zigzag scan
|
||||
for (int16_t right = size - 1; right >= 1; right -= 2) { // Index of right column in each column pair
|
||||
if (right == 6) { right = 5; }
|
||||
|
||||
for (uint8_t vert = 0; vert < size; vert++) { // Vertical counter
|
||||
for (int j = 0; j < 2; j++) {
|
||||
uint8_t x = right - j; // Actual x coordinate
|
||||
bool upwards = ((right & 2) == 0) ^ (x < 6);
|
||||
uint8_t y = upwards ? size - 1 - vert : vert; // Actual y coordinate
|
||||
if (!bb_getBit(isFunction, x, y) && i < bitLength) {
|
||||
bb_setBit(modules, x, y, ((data[i >> 3] >> (7 - (i & 7))) & 1) != 0);
|
||||
i++;
|
||||
}
|
||||
// If there are any remainder bits (0 to 7), they are already
|
||||
// set to 0/false/white when the grid of modules was initialized
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#pragma mark - Penalty Calculation
|
||||
|
||||
#define PENALTY_N1 3
|
||||
#define PENALTY_N2 3
|
||||
#define PENALTY_N3 40
|
||||
#define PENALTY_N4 10
|
||||
|
||||
// Calculates and returns the penalty score based on state of this QR Code's current modules.
|
||||
// This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.
|
||||
// @TODO: This can be optimized by working with the bytes instead of bits.
|
||||
static uint32_t getPenaltyScore(BitBucket *modules) {
|
||||
uint32_t result = 0;
|
||||
|
||||
uint8_t size = modules->bitOffsetOrWidth;
|
||||
|
||||
// Adjacent modules in row having same color
|
||||
for (uint8_t y = 0; y < size; y++) {
|
||||
|
||||
bool colorX = bb_getBit(modules, 0, y);
|
||||
for (uint8_t x = 1, runX = 1; x < size; x++) {
|
||||
bool cx = bb_getBit(modules, x, y);
|
||||
if (cx != colorX) {
|
||||
colorX = cx;
|
||||
runX = 1;
|
||||
|
||||
} else {
|
||||
runX++;
|
||||
if (runX == 5) {
|
||||
result += PENALTY_N1;
|
||||
} else if (runX > 5) {
|
||||
result++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Adjacent modules in column having same color
|
||||
for (uint8_t x = 0; x < size; x++) {
|
||||
bool colorY = bb_getBit(modules, x, 0);
|
||||
for (uint8_t y = 1, runY = 1; y < size; y++) {
|
||||
bool cy = bb_getBit(modules, x, y);
|
||||
if (cy != colorY) {
|
||||
colorY = cy;
|
||||
runY = 1;
|
||||
} else {
|
||||
runY++;
|
||||
if (runY == 5) {
|
||||
result += PENALTY_N1;
|
||||
} else if (runY > 5) {
|
||||
result++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t black = 0;
|
||||
for (uint8_t y = 0; y < size; y++) {
|
||||
uint16_t bitsRow = 0, bitsCol = 0;
|
||||
for (uint8_t x = 0; x < size; x++) {
|
||||
bool color = bb_getBit(modules, x, y);
|
||||
|
||||
// 2*2 blocks of modules having same color
|
||||
if (x > 0 && y > 0) {
|
||||
bool colorUL = bb_getBit(modules, x - 1, y - 1);
|
||||
bool colorUR = bb_getBit(modules, x, y - 1);
|
||||
bool colorL = bb_getBit(modules, x - 1, y);
|
||||
if (color == colorUL && color == colorUR && color == colorL) {
|
||||
result += PENALTY_N2;
|
||||
}
|
||||
}
|
||||
|
||||
// Finder-like pattern in rows and columns
|
||||
bitsRow = ((bitsRow << 1) & 0x7FF) | color;
|
||||
bitsCol = ((bitsCol << 1) & 0x7FF) | bb_getBit(modules, y, x);
|
||||
|
||||
// Needs 11 bits accumulated
|
||||
if (x >= 10) {
|
||||
if (bitsRow == 0x05D || bitsRow == 0x5D0) {
|
||||
result += PENALTY_N3;
|
||||
}
|
||||
if (bitsCol == 0x05D || bitsCol == 0x5D0) {
|
||||
result += PENALTY_N3;
|
||||
}
|
||||
}
|
||||
|
||||
// Balance of black and white modules
|
||||
if (color) { black++; }
|
||||
}
|
||||
}
|
||||
|
||||
// Find smallest k such that (45-5k)% <= dark/total <= (55+5k)%
|
||||
uint16_t total = size * size;
|
||||
for (uint16_t k = 0; black * 20 < (9 - k) * total || black * 20 > (11 + k) * total; k++) {
|
||||
result += PENALTY_N4;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Reed-Solomon Generator
|
||||
|
||||
static uint8_t rs_multiply(uint8_t x, uint8_t y) {
|
||||
// Russian peasant multiplication
|
||||
// See: https://en.wikipedia.org/wiki/Ancient_Egyptian_multiplication
|
||||
uint16_t z = 0;
|
||||
for (int8_t i = 7; i >= 0; i--) {
|
||||
z = (z << 1) ^ ((z >> 7) * 0x11D);
|
||||
z ^= ((y >> i) & 1) * x;
|
||||
}
|
||||
return z;
|
||||
}
|
||||
|
||||
static void rs_init(uint8_t degree, uint8_t *coeff) {
|
||||
memset(coeff, 0, degree);
|
||||
coeff[degree - 1] = 1;
|
||||
|
||||
// Compute the product polynomial (x - r^0) * (x - r^1) * (x - r^2) * ... * (x - r^{degree-1}),
|
||||
// drop the highest term, and store the rest of the coefficients in order of descending powers.
|
||||
// Note that r = 0x02, which is a generator element of this field GF(2^8/0x11D).
|
||||
uint16_t root = 1;
|
||||
for (uint8_t i = 0; i < degree; i++) {
|
||||
// Multiply the current product by (x - r^i)
|
||||
for (uint8_t j = 0; j < degree; j++) {
|
||||
coeff[j] = rs_multiply(coeff[j], root);
|
||||
if (j + 1 < degree) {
|
||||
coeff[j] ^= coeff[j + 1];
|
||||
}
|
||||
}
|
||||
root = (root << 1) ^ ((root >> 7) * 0x11D); // Multiply by 0x02 mod GF(2^8/0x11D)
|
||||
}
|
||||
}
|
||||
|
||||
static void rs_getRemainder(uint8_t degree, uint8_t *coeff, uint8_t *data, uint8_t length, uint8_t *result, uint8_t stride) {
|
||||
// Compute the remainder by performing polynomial division
|
||||
|
||||
//for (uint8_t i = 0; i < degree; i++) { result[] = 0; }
|
||||
//memset(result, 0, degree);
|
||||
|
||||
for (uint8_t i = 0; i < length; i++) {
|
||||
uint8_t factor = data[i] ^ result[0];
|
||||
for (uint8_t j = 1; j < degree; j++) {
|
||||
result[(j - 1) * stride] = result[j * stride];
|
||||
}
|
||||
result[(degree - 1) * stride] = 0;
|
||||
|
||||
for (uint8_t j = 0; j < degree; j++) {
|
||||
result[j * stride] ^= rs_multiply(coeff[j], factor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#pragma mark - QrCode
|
||||
|
||||
static int8_t encodeDataCodewords(BitBucket *dataCodewords, const uint8_t *text, uint16_t length, uint8_t version) {
|
||||
int8_t mode = MODE_BYTE;
|
||||
|
||||
if (isNumeric((char*)text, length)) {
|
||||
mode = MODE_NUMERIC;
|
||||
bb_appendBits(dataCodewords, 1 << MODE_NUMERIC, 4);
|
||||
bb_appendBits(dataCodewords, length, getModeBits(version, MODE_NUMERIC));
|
||||
|
||||
uint16_t accumData = 0;
|
||||
uint8_t accumCount = 0;
|
||||
for (uint16_t i = 0; i < length; i++) {
|
||||
accumData = accumData * 10 + ((char)(text[i]) - '0');
|
||||
accumCount++;
|
||||
if (accumCount == 3) {
|
||||
bb_appendBits(dataCodewords, accumData, 10);
|
||||
accumData = 0;
|
||||
accumCount = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 1 or 2 digits remaining
|
||||
if (accumCount > 0) {
|
||||
bb_appendBits(dataCodewords, accumData, accumCount * 3 + 1);
|
||||
}
|
||||
|
||||
} else if (isAlphanumeric((char*)text, length)) {
|
||||
mode = MODE_ALPHANUMERIC;
|
||||
bb_appendBits(dataCodewords, 1 << MODE_ALPHANUMERIC, 4);
|
||||
bb_appendBits(dataCodewords, length, getModeBits(version, MODE_ALPHANUMERIC));
|
||||
|
||||
uint16_t accumData = 0;
|
||||
uint8_t accumCount = 0;
|
||||
for (uint16_t i = 0; i < length; i++) {
|
||||
accumData = accumData * 45 + getAlphanumeric((char)(text[i]));
|
||||
accumCount++;
|
||||
if (accumCount == 2) {
|
||||
bb_appendBits(dataCodewords, accumData, 11);
|
||||
accumData = 0;
|
||||
accumCount = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 1 character remaining
|
||||
if (accumCount > 0) {
|
||||
bb_appendBits(dataCodewords, accumData, 6);
|
||||
}
|
||||
|
||||
} else {
|
||||
bb_appendBits(dataCodewords, 1 << MODE_BYTE, 4);
|
||||
bb_appendBits(dataCodewords, length, getModeBits(version, MODE_BYTE));
|
||||
for (uint16_t i = 0; i < length; i++) {
|
||||
bb_appendBits(dataCodewords, (char)(text[i]), 8);
|
||||
}
|
||||
}
|
||||
|
||||
//bb_setBits(dataCodewords, length, 4, getModeBits(version, mode));
|
||||
|
||||
return mode;
|
||||
}
|
||||
|
||||
static void performErrorCorrection(uint8_t version, uint8_t ecc, BitBucket *data) {
|
||||
|
||||
// See: http://www.thonky.com/qr-code-tutorial/structure-final-message
|
||||
|
||||
#if LOCK_VERSION == 0
|
||||
uint8_t numBlocks = NUM_ERROR_CORRECTION_BLOCKS[ecc][version - 1];
|
||||
uint16_t totalEcc = NUM_ERROR_CORRECTION_CODEWORDS[ecc][version - 1];
|
||||
uint16_t moduleCount = NUM_RAW_DATA_MODULES[version - 1];
|
||||
#else
|
||||
uint8_t numBlocks = NUM_ERROR_CORRECTION_BLOCKS[ecc];
|
||||
uint16_t totalEcc = NUM_ERROR_CORRECTION_CODEWORDS[ecc];
|
||||
uint16_t moduleCount = NUM_RAW_DATA_MODULES;
|
||||
#endif
|
||||
|
||||
uint8_t blockEccLen = totalEcc / numBlocks;
|
||||
uint8_t numShortBlocks = numBlocks - moduleCount / 8 % numBlocks;
|
||||
uint8_t shortBlockLen = moduleCount / 8 / numBlocks;
|
||||
|
||||
uint8_t shortDataBlockLen = shortBlockLen - blockEccLen;
|
||||
|
||||
uint8_t result[data->capacityBytes];
|
||||
memset(result, 0, sizeof(result));
|
||||
|
||||
uint8_t coeff[blockEccLen];
|
||||
rs_init(blockEccLen, coeff);
|
||||
|
||||
uint16_t offset = 0;
|
||||
uint8_t *dataBytes = data->data;
|
||||
|
||||
|
||||
// Interleave all short blocks
|
||||
for (uint8_t i = 0; i < shortDataBlockLen; i++) {
|
||||
uint16_t index = i;
|
||||
uint8_t stride = shortDataBlockLen;
|
||||
for (uint8_t blockNum = 0; blockNum < numBlocks; blockNum++) {
|
||||
result[offset++] = dataBytes[index];
|
||||
|
||||
#if LOCK_VERSION == 0 || LOCK_VERSION >= 5
|
||||
if (blockNum == numShortBlocks) { stride++; }
|
||||
#endif
|
||||
index += stride;
|
||||
}
|
||||
}
|
||||
|
||||
// Version less than 5 only have short blocks
|
||||
#if LOCK_VERSION == 0 || LOCK_VERSION >= 5
|
||||
{
|
||||
// Interleave long blocks
|
||||
uint16_t index = shortDataBlockLen * (numShortBlocks + 1);
|
||||
uint8_t stride = shortDataBlockLen;
|
||||
for (uint8_t blockNum = 0; blockNum < numBlocks - numShortBlocks; blockNum++) {
|
||||
result[offset++] = dataBytes[index];
|
||||
|
||||
if (blockNum == 0) { stride++; }
|
||||
index += stride;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// Add all ecc blocks, interleaved
|
||||
uint8_t blockSize = shortDataBlockLen;
|
||||
for (uint8_t blockNum = 0; blockNum < numBlocks; blockNum++) {
|
||||
|
||||
#if LOCK_VERSION == 0 || LOCK_VERSION >= 5
|
||||
if (blockNum == numShortBlocks) { blockSize++; }
|
||||
#endif
|
||||
rs_getRemainder(blockEccLen, coeff, dataBytes, blockSize, &result[offset + blockNum], numBlocks);
|
||||
dataBytes += blockSize;
|
||||
}
|
||||
|
||||
memcpy(data->data, result, data->capacityBytes);
|
||||
data->bitOffsetOrWidth = moduleCount;
|
||||
}
|
||||
|
||||
// We store the Format bits tightly packed into a single byte (each of the 4 modes is 2 bits)
|
||||
// The format bits can be determined by ECC_FORMAT_BITS >> (2 * ecc)
|
||||
static const uint8_t ECC_FORMAT_BITS = (0x02 << 6) | (0x03 << 4) | (0x00 << 2) | (0x01 << 0);
|
||||
|
||||
|
||||
#pragma mark - Public QRCode functions
|
||||
|
||||
uint16_t qrcode_getBufferSize(uint8_t version) {
|
||||
return bb_getGridSizeBytes(4 * version + 17);
|
||||
}
|
||||
|
||||
// @TODO: Return error if data is too big.
|
||||
int8_t qrcode_initBytes(QRCode *qrcode, uint8_t *modules, uint8_t version, uint8_t ecc, uint8_t *data, uint16_t length) {
|
||||
uint8_t size = version * 4 + 17;
|
||||
qrcode->version = version;
|
||||
qrcode->size = size;
|
||||
qrcode->ecc = ecc;
|
||||
qrcode->modules = modules;
|
||||
|
||||
uint8_t eccFormatBits = (ECC_FORMAT_BITS >> (2 * ecc)) & 0x03;
|
||||
|
||||
#if LOCK_VERSION == 0
|
||||
uint16_t moduleCount = NUM_RAW_DATA_MODULES[version - 1];
|
||||
uint16_t dataCapacity = moduleCount / 8 - NUM_ERROR_CORRECTION_CODEWORDS[eccFormatBits][version - 1];
|
||||
#else
|
||||
version = LOCK_VERSION;
|
||||
uint16_t moduleCount = NUM_RAW_DATA_MODULES;
|
||||
uint16_t dataCapacity = moduleCount / 8 - NUM_ERROR_CORRECTION_CODEWORDS[eccFormatBits];
|
||||
#endif
|
||||
|
||||
struct BitBucket codewords;
|
||||
uint8_t codewordBytes[bb_getBufferSizeBytes(moduleCount)];
|
||||
bb_initBuffer(&codewords, codewordBytes, (int32_t)sizeof(codewordBytes));
|
||||
|
||||
// Place the data code words into the buffer
|
||||
int8_t mode = encodeDataCodewords(&codewords, data, length, version);
|
||||
|
||||
if (mode < 0) { return -1; }
|
||||
qrcode->mode = mode;
|
||||
|
||||
// Add terminator and pad up to a byte if applicable
|
||||
uint32_t padding = (dataCapacity * 8) - codewords.bitOffsetOrWidth;
|
||||
if (padding > 4) { padding = 4; }
|
||||
bb_appendBits(&codewords, 0, padding);
|
||||
bb_appendBits(&codewords, 0, (8 - codewords.bitOffsetOrWidth % 8) % 8);
|
||||
|
||||
// Pad with alternate bytes until data capacity is reached
|
||||
for (uint8_t padByte = 0xEC; codewords.bitOffsetOrWidth < (dataCapacity * 8); padByte ^= 0xEC ^ 0x11) {
|
||||
bb_appendBits(&codewords, padByte, 8);
|
||||
}
|
||||
|
||||
BitBucket modulesGrid;
|
||||
bb_initGrid(&modulesGrid, modules, size);
|
||||
|
||||
BitBucket isFunctionGrid;
|
||||
uint8_t isFunctionGridBytes[bb_getGridSizeBytes(size)];
|
||||
bb_initGrid(&isFunctionGrid, isFunctionGridBytes, size);
|
||||
|
||||
// Draw function patterns, draw all codewords, do masking
|
||||
drawFunctionPatterns(&modulesGrid, &isFunctionGrid, version, eccFormatBits);
|
||||
performErrorCorrection(version, eccFormatBits, &codewords);
|
||||
drawCodewords(&modulesGrid, &isFunctionGrid, &codewords);
|
||||
|
||||
// Find the best (lowest penalty) mask
|
||||
uint8_t mask = 0;
|
||||
int32_t minPenalty = INT32_MAX;
|
||||
for (uint8_t i = 0; i < 8; i++) {
|
||||
drawFormatBits(&modulesGrid, &isFunctionGrid, eccFormatBits, i);
|
||||
applyMask(&modulesGrid, &isFunctionGrid, i);
|
||||
int penalty = getPenaltyScore(&modulesGrid);
|
||||
if (penalty < minPenalty) {
|
||||
mask = i;
|
||||
minPenalty = penalty;
|
||||
}
|
||||
applyMask(&modulesGrid, &isFunctionGrid, i); // Undoes the mask due to XOR
|
||||
}
|
||||
|
||||
qrcode->mask = mask;
|
||||
|
||||
// Overwrite old format bits
|
||||
drawFormatBits(&modulesGrid, &isFunctionGrid, eccFormatBits, mask);
|
||||
|
||||
// Apply the final choice of mask
|
||||
applyMask(&modulesGrid, &isFunctionGrid, mask);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int8_t qrcode_initText(QRCode *qrcode, uint8_t *modules, uint8_t version, uint8_t ecc, const char *data) {
|
||||
return qrcode_initBytes(qrcode, modules, version, ecc, (uint8_t*)data, strlen(data));
|
||||
}
|
||||
|
||||
bool qrcode_getModule(QRCode *qrcode, uint8_t x, uint8_t y) {
|
||||
if (x < 0 || x >= qrcode->size || y < 0 || y >= qrcode->size) {
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32_t offset = y * qrcode->size + x;
|
||||
return (qrcode->modules[offset >> 3] & (1 << (7 - (offset & 0x07)))) != 0;
|
||||
}
|
||||
|
||||
/*
|
||||
uint8_t qrcode_getHexLength(QRCode *qrcode) {
|
||||
return ((qrcode->size * qrcode->size) + 7) / 4;
|
||||
}
|
||||
|
||||
void qrcode_getHex(QRCode *qrcode, char *result) {
|
||||
|
||||
}
|
||||
*/
|
|
@ -1,99 +0,0 @@
|
|||
/**
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* This library is written and maintained by Richard Moore.
|
||||
* Major parts were derived from Project Nayuki's library.
|
||||
*
|
||||
* Copyright (c) 2017 Richard Moore (https://github.com/ricmoo/QRCode)
|
||||
* Copyright (c) 2017 Project Nayuki (https://www.nayuki.io/page/qr-code-generator-library)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Special thanks to Nayuki (https://www.nayuki.io/) from which this library was
|
||||
* heavily inspired and compared against.
|
||||
*
|
||||
* See: https://github.com/nayuki/QR-Code-generator/tree/master/cpp
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __QRCODE_H_
|
||||
#define __QRCODE_H_
|
||||
|
||||
#ifndef __cplusplus
|
||||
typedef unsigned char bool;
|
||||
static const bool false = 0;
|
||||
static const bool true = 1;
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
// QR Code Format Encoding
|
||||
#define MODE_NUMERIC 0
|
||||
#define MODE_ALPHANUMERIC 1
|
||||
#define MODE_BYTE 2
|
||||
|
||||
|
||||
// Error Correction Code Levels
|
||||
#define ECC_LOW 0
|
||||
#define ECC_MEDIUM 1
|
||||
#define ECC_QUARTILE 2
|
||||
#define ECC_HIGH 3
|
||||
|
||||
|
||||
// If set to non-zero, this library can ONLY produce QR codes at that version
|
||||
// This saves a lot of dynamic memory, as the codeword tables are skipped
|
||||
#ifndef LOCK_VERSION
|
||||
#define LOCK_VERSION 0
|
||||
#endif
|
||||
|
||||
|
||||
typedef struct QRCode {
|
||||
uint8_t version;
|
||||
uint8_t size;
|
||||
uint8_t ecc;
|
||||
uint8_t mode;
|
||||
uint8_t mask;
|
||||
uint8_t *modules;
|
||||
} QRCode;
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"{
|
||||
#endif /* __cplusplus */
|
||||
|
||||
|
||||
|
||||
uint16_t qrcode_getBufferSize(uint8_t version);
|
||||
|
||||
int8_t qrcode_initText(QRCode *qrcode, uint8_t *modules, uint8_t version, uint8_t ecc, const char *data);
|
||||
int8_t qrcode_initBytes(QRCode *qrcode, uint8_t *modules, uint8_t version, uint8_t ecc, uint8_t *data, uint16_t length);
|
||||
|
||||
bool qrcode_getModule(QRCode *qrcode, uint8_t x, uint8_t y);
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
|
||||
#endif /* __QRCODE_H_ */
|
|
@ -1,33 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# This script compile the software and loads the bin files into the web flash tool
|
||||
# in the Gitpod Docker container.
|
||||
# The web flashtool can be started from the Github website with:
|
||||
# http://YourGitHubName.github.io/LoRa-Boat-Monitor/flash_tool/esp_flash_tool.html
|
||||
|
||||
# Attention! Start this cript only in the Gitpod Docker container.
|
||||
# Start the script with: bash run
|
||||
|
||||
# Path definitions
|
||||
projectpath="./.pio/build/nodemcu-32s"
|
||||
toolpath="./docs/flash_tool"
|
||||
|
||||
# Install tools
|
||||
echo "Installing tools"
|
||||
cd /workspace/esp32-nmea2000
|
||||
pip3 install -U esptool
|
||||
pip3 install platformio
|
||||
|
||||
# Compile the firmware
|
||||
echo "Compiling Firmware"
|
||||
platformio run -e obp60_s3
|
||||
|
||||
# Copy all bin files in docs folder for online flash tool
|
||||
#echo "Copy bin files"
|
||||
#cp $projectpath/bootloader.bin $toolpath/bootloader.bin
|
||||
#cp $projectpath/partitions.bin $toolpath/partitions.bin
|
||||
#cp $projectpath/firmware.bin $toolpath/firmware.bin
|
||||
|
||||
# Merge all bin files to one merge file
|
||||
#echo "Merge all bin files"
|
||||
#esptool.py --chip ESP32 merge_bin -o $toolpath/merged-firmware.bin --flash_mode dio --flash_size 4MB 0x1000 $toolpath/bootloader.bin 0x8000 $toolpath/partitions.bin 0x10000 $toolpath/firmware.bin
|
Loading…
Reference in New Issue