From 981e6497ef9f17908e80dc52ac3afa25ac6817b3 Mon Sep 17 00:00:00 2001 From: Max-Plastix Date: Sat, 5 Feb 2022 18:30:37 -0800 Subject: [PATCH] Removed custom font. Made status optional. --- console-decoders/AppsScript-doPost.js | 82 +++++ console-decoders/unified_decoder.js | 13 +- main/configuration.h | 66 ++-- main/fonts.h | 423 -------------------------- main/main.cpp | 6 + main/screen.cpp | 3 +- 6 files changed, 135 insertions(+), 458 deletions(-) create mode 100644 console-decoders/AppsScript-doPost.js delete mode 100644 main/fonts.h diff --git a/console-decoders/AppsScript-doPost.js b/console-decoders/AppsScript-doPost.js new file mode 100644 index 0000000..22a0c75 --- /dev/null +++ b/console-decoders/AppsScript-doPost.js @@ -0,0 +1,82 @@ +function doPost(e) { + var GS = SpreadsheetApp.openById('') + // Create a sheet for today if it doesn't exist and add column headers + var SheetDate = new Date().toLocaleDateString(); + if (!GS.getSheetByName(SheetDate)) + GS.insertSheet(SheetDate).getRange('A1:N1').setValues([[ + 'Time', 'DateTime', 'Device EUI', 'Device Name', 'Battery', + 'Latitude', 'Longitude', 'Sats', 'Speed', + 'Hotspot', 'RSSI', 'SNR', 'Hotspot Dist', 'Hotspot Count' + ]]); + + // Get all contents + var json = JSON.parse(e.postData.contents); + + if (json.port == 2) + var ThisSheet = GS.getSheetByName(SheetDate); + else if (json.port == 5) + var ThisSheet = GS.getSheetByName('Status'); + else if (json.port == 6) + var ThisSheet = GS.getSheetByName('Lost GPS'); + else + var ThisSheet = GS.getSheetByName('Unknown'); + + // Row place holder + var ThisRecord = []; + var i = 0; + + ThisRecord[i++] = new Date().toLocaleTimeString(); // Timestamp + ThisRecord[i++] = new Date().toLocaleString(); // DateTime + ThisRecord[i++] = json.dev_eui; // EUI + ThisRecord[i++] = json.name; // Device Name + ThisRecord[i++] = json.decoded.payload.battery; // Battery + + if (json.port == 2) { + ThisRecord[i++] = json.decoded.payload.latitude; // Latitude + ThisRecord[i++] = json.decoded.payload.longitude; // Longitude + ThisRecord[i++] = json.decoded.payload.sats; // Sats + ThisRecord[i++] = json.decoded.payload.speed; // Speed + //ThisRecord[i++] = json.decoded.payload.accuracy; // Accuracy stuck at 2.5 + } else if (json.port == 5) { + ThisRecord[i++] = json.decoded.payload.last_latitude; // Latitude + ThisRecord[i++] = json.decoded.payload.last_longitude; // Longitude + ThisRecord[i++] = json.decoded.payload.status; + ThisRecord[i++] = json.decoded.payload.value; + } else if (json.port == 6) { + ThisRecord[i++] = json.decoded.payload.last_latitude; // Latitude + ThisRecord[i++] = json.decoded.payload.last_longitude; // Longitude + ThisRecord[i++] = json.decoded.payload.sats; + ThisRecord[i++] = json.decoded.payload.minutes; + } else { + ThisRecord[i++] = json.port; + ThisRecord[i++] = json.payload; + ThisRecord[i++] = json.payload_size; + } + + ThisRecord[i++] = json.hotspots[0].name; //Hotspot Name +// ThisRecord[i++] = json.hotspots[0].lat; //Hotspot Latitude +// ThisRecord[i++] = json.hotspots[0].long; //Hotspot Longitude + ThisRecord[i++] = json.hotspots[0].rssi; //Hotspot RSSI + ThisRecord[i++] = json.hotspots[0].snr; //Hotspot SNR + + // Distance to Hotspot + var lat1 = Number(json.decoded.payload.latitude); + var lon1 = Number(json.decoded.payload.longitude); + var lat2 = Number(json.hotspots[0].lat); + var lon2 = Number(json.hotspots[0].long); + var R = 6378.137; // Radius of earth in KM + var dLat = lat2 * Math.PI / 180 - lat1 * Math.PI / 180; + var dLon = lon2 * Math.PI / 180 - lon1 * Math.PI / 180; + var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) * + Math.sin(dLon / 2) * Math.sin(dLon / 2); + var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + var d = R * c; + ThisRecord[i++] = (d * 1000); + + ThisRecord[i++] = json.hotspots.length; // How many hotspots heard this? + + + // Save in spreadsheet + ThisSheet.getRange(ThisSheet.getLastRow() + 1, 1, 1, ThisRecord.length).setValues([ThisRecord]); +} diff --git a/console-decoders/unified_decoder.js b/console-decoders/unified_decoder.js index a8f47c6..e1a4a7b 100644 --- a/console-decoders/unified_decoder.js +++ b/console-decoders/unified_decoder.js @@ -1,6 +1,4 @@ -// Decoder for MaxPlastix mappers, compatible with: -// https://github.com/hkicko/CubeCell-GPS-Helium-Mapper -// but without the Tracker payload. +// Decoder for MaxPlastix mappers // // 11 Byte payload: // 3 Lat, 3 Long, 2 Altitude (m), 1 Speed (km/hr), 1 Battery, 1 Sats. @@ -10,6 +8,7 @@ function Decoder(bytes, port) { var decoded = {}; + // All formats carry a lat & lon reading: var latitude = ((bytes[0] << 16) >>> 0) + ((bytes[1] << 8) >>> 0) + bytes[2]; latitude = (latitude / 16777215.0 * 180) - 90; @@ -23,8 +22,10 @@ function Decoder(bytes, port) { var altValue = ((bytes[6] << 8) >>> 0) + bytes[7]; var sign = bytes[6] & (1 << 7); - if (sign) decoded.altitude = 0xFFFF0000 | altValue; - else decoded.altitude = altValue; + if (sign) + decoded.altitude = 0xFFFF0000 | altValue; + else + decoded.altitude = altValue; decoded.speed = parseFloat((((bytes[8])) / 1.609).toFixed(2)); decoded.battery = parseFloat((bytes[9] / 100 + 2).toFixed(2)); @@ -32,6 +33,8 @@ function Decoder(bytes, port) { decoded.accuracy = 2.5; // Bogus Accuracy required by Cargo/Mapper integration break; case 5: // System status + decoded.last_latitude = latitude; + decoded.last_longitude = longitude; decoded.battery = parseFloat((bytes[6] / 100 + 2).toFixed(2)); decoded.status = bytes[7]; decoded.value = bytes[8]; diff --git a/main/configuration.h b/main/configuration.h index 29ff1b0..f7e2059 100644 --- a/main/configuration.h +++ b/main/configuration.h @@ -27,8 +27,8 @@ along with this program. If not, see . // ----------------------------------------------------------------------------- // Version // ----------------------------------------------------------------------------- -#define APP_NAME "MaxP Mapper" -#define APP_VERSION "1.7.3" // 2022-Feb-01 +#define APP_NAME "MaxP Mapper" +#define APP_VERSION "1.7.4" // 2022-Feb-05 // ----------------------------------------------------------------------------- // CONFIGURATION @@ -39,52 +39,53 @@ along with this program. If not, see . // Minimum Distance between Mapper reports. This is your MAIN knob to turn for more/fewer uplink packets. // SMALLER distance: More packets, more dots on the map, more DC spent, more power consumed -// (If you set this to a very small value, it will still be rate-limited by how often your Region allows back-to-back Uplink packets.) -// LARGER distance: Fewer packets, might miss some hexes, conserves DC, battery might last longer -// Note that a hex is about 340m across. Ideally, you want at least two uplinks in each hex to map it. -#define MIN_DIST 70.0 // Minimum distance in meters from the last sent location before we send again. +// (If you set this to a very small value, it will still be rate-limited by how often your Region allows back-to-back +// Uplink packets.) LARGER distance: Fewer packets, might miss some hexes, conserves DC, battery might last longer Note +// that a hex is about 340m across. Ideally, you want at least two uplinks in each hex to map it. +#define MIN_DIST 70.0 // Minimum distance in meters from the last sent location before we send again. // If we are not moving at least MIN_DIST meters away from the last uplink, when should we send a redundant // Mapper Uplink from the same location? This Heartbeat or ping isn't all that important for mapping, but might be // useful for time-at-location tracking or other monitoring. You can safely set this value very high. -#define STATIONARY_TX_INTERVAL ( 5 * 60) // Send one uplink at least once every N seconds -#define NEVER_REST 0 // Change to 1 if you want to always send at THIS rate, with no slowing or sleeping. +#define STATIONARY_TX_INTERVAL (5 * 60) // Send one uplink at least once every N seconds +#define NEVER_REST 0 // Change to 1 if you want to always send at THIS rate, with no slowing or sleeping. // After being stationary for a long while, we move to a slower heartbeat interval: -#define REST_WAIT (20 * 60) // If we still haven't moved in this many seconds, start sending even slower.. -#define REST_TX_INTERVAL (30 * 60) // Slow resting ping frequency in seconds +#define REST_WAIT (20 * 60) // If we still haven't moved in this many seconds, start sending even slower.. +#define REST_TX_INTERVAL (30 * 60) // Slow resting ping frequency in seconds // This last stage is a low-power sleep to conserve battery when the Mapper has not moved for a long time. -// This one is a difficult compromise: Waking up to boot & power on the GPS is not a fast operation, -// so we want to avoid it as much as possible. There is no other motion sensor, so if we make it too long, +// This one is a difficult compromise: Waking up to boot & power on the GPS is not a fast operation, +// so we want to avoid it as much as possible. There is no other motion sensor, so if we make it too long, // we miss the first minutes of each motion while sleeping. // Note that USB Power will prevent this low-power sleep, and also wake us up from it. // A button press will also wake from sleep, but takes some time to initialise and re-aquire -#define SLEEP_WAIT ( 2 * 60 * 60) // If we STILL haven't moved in this long, turn off the GPS to save power +#define SLEEP_WAIT (2 * 60 * 60) // If we STILL haven't moved in this long, turn off the GPS to save power // For a vehicle application where USB Power appears BEFORE motion, this can be set very high without missing anything: -#define SLEEP_TX_INTERVAL ( 1 * 60 * 60) // Wake up and check position every now and then to see if movement happened +#define SLEEP_TX_INTERVAL (1 * 60 * 60) // Wake up and check position every now and then to see if movement happened // When searching for a GPS Fix, we may never find one due to obstruction, noise, or reduced availability. // Note that GPS Lost also counts as no-movement, so the Sleep tier above still applies -#define GPS_LOST_WAIT ( 5 * 60) // How long to wait for a GPS fix before declaring failure -#define GPS_LOST_PING (15 * 60) // Without GPS reception, how often to send a non-mapper status packet +#define GPS_LOST_WAIT (5 * 60) // How long to wait for a GPS fix before declaring failure +#define GPS_LOST_PING (15 * 60) // Without GPS reception, how often to send a non-mapper status packet -#define SCREEN_IDLE_OFF_S ( 2 * 60) // If there are no Uplinks or button presses sent for this long, turn the screen off. -#define MENU_TIMEOUT_S 5 // Seconds to wait before exiting the menu. +#define SCREEN_IDLE_OFF_S (2 * 60) // If there are no Uplinks or button presses sent for this long, turn the screen off. +#define MENU_TIMEOUT_S 5 // Seconds to wait before exiting the menu. -// Below this voltage, power off until USB power allows charging. The PMIC also has a (safety) turn-off much lower than this. -// We use a conservative 3.3v here since the battery will last longer. -#define BATTERY_LOW_VOLTAGE 3.3 +// Below this voltage, power off until USB power allows charging. The PMIC also has a (safety) turn-off much lower than +// this. We use a conservative 3.3v here since the battery will last longer. +#define BATTERY_LOW_VOLTAGE 3.3 // Confirmed packets (ACK request) conflict with the function of a Mapper and should not normally be enabled. // In areas of reduced coverage, the Mapper will try to send each packet six or more times with different SF/DR. // This causes irregular results and the location updates are infrequent, unpredictable, and out of date. -#define LORAWAN_CONFIRMED_EVERY 0 // Request Confirmation message every N Uplinks (0 means never, 1 means always, 2 every-other-one..) +// (0 means never, 1 means always, 2 every-other-one..) +#define LORAWAN_CONFIRMED_EVERY 0 // Request Confirmation message every N Uplinks // Spreading Factor (Data Rate) determines how long each 11-byte Mapper Uplink is on-air, and how observable it is. -// SF10 is about two seconds of transmission per packet, and the highest range, while SF7 is a good compromise +// SF10 is about two seconds of transmission per packet, and the highest range, while SF7 is a good compromise // for moving vehicles and reasonable mapping observations. -#define LORAWAN_SF DR_SF7 // Spreading factor (recommended DR_SF7 for network map purposes) +#define LORAWAN_SF DR_SF7 // Spreading factor (recommended DR_SF7 for network map purposes) // Deadzone defines a circular area where no map packets will originate. // This is useful to avoid sending many redundant packets in your own driveway or office, or just for local privacy. @@ -101,6 +102,16 @@ along with this program. If not, see . #define DEADZONE_RADIUS_M 500 // meters #endif +// There are some extra non-Mapper Uplink messages we can send, but there's no good way to avoid sending these +// to all Integrations from the Decoder. This causes (normal) Error messages on the Console because Mapper will throw +// them out for having no coordinates. It doesn't hurt anything, as they are correctly filtered by the Decoder, but if +// you don't like seeing Integration Errors, then set these to 0. Set these to 1 for extra non-mapper messages. +#ifndef SEND_GPSLOST_UPLINKS +#define SEND_GPSLOST_UPLINKS 0 // GPS Lost messages +#endif +#ifndef SEND_STATUS_UPLINKS +#define SEND_STATUS_UPLINKS 0 // USB Connnect/disconnect messages +#endif // ----------------------------------------------------------------------------- // Less common Configuration iteams @@ -108,7 +119,7 @@ along with this program. If not, see . // Select which T-Beam board is being used. Only uncomment one. //#define T_BEAM_V07 // AKA Rev0 (first board released) UNTESTED! Expect bugs. -#define T_BEAM_V10 // AKA Rev1 (second board released), this is the common "v1.1" +#define T_BEAM_V10 // AKA Rev1 (second board released), this is the common "v1.1" #define LOGO_DELAY 2000 // Time to show logo on first boot (ms) @@ -117,8 +128,7 @@ along with this program. If not, see . // Never enable ADR on Mappers because they are moving, so we don't want to adjust // anything based on packet reception. -#define LORAWAN_ADR 0 // Do not enable ADR - +#define LORAWAN_ADR 0 // Do not enable ADR // If you are having difficulty sending messages to TTN after the first successful send, // uncomment the next option and experiment with values (~ 1 - 5) @@ -184,7 +194,7 @@ along with this program. If not, see . #elif defined(T_BEAM_V10) // Or T-Beam v1.1 #define GPS_RX_PIN 34 #define GPS_TX_PIN 12 -#define GPS_INT 37 // 30ns accurate timepulse from Neo-6M pin 3 +#define GPS_INT 37 // 30ns accurate timepulse from Neo-6M pin 3 #endif // ----------------------------------------------------------------------------- diff --git a/main/fonts.h b/main/fonts.h deleted file mode 100644 index 05c9bff..0000000 --- a/main/fonts.h +++ /dev/null @@ -1,423 +0,0 @@ -const uint8_t Custom_ArialMT_Plain_10[] PROGMEM = { - 0x0A, // Width: 10 - 0x0A, // Height: 10 - 0x20, // First Char: 32 - 0xE0, // Numbers of Chars: 224 - - // Jump Table: - 0xFF, 0xFF, 0x00, 0x03, // 32:65535 - 0x00, 0x00, 0x04, 0x03, // 33:0 - 0x00, 0x04, 0x05, 0x04, // 34:4 - 0x00, 0x09, 0x09, 0x06, // 35:9 - 0x00, 0x12, 0x0A, 0x06, // 36:18 - 0x00, 0x1C, 0x10, 0x09, // 37:28 - 0x00, 0x2C, 0x0E, 0x07, // 38:44 - 0x00, 0x3A, 0x01, 0x02, // 39:58 - 0x00, 0x3B, 0x06, 0x03, // 40:59 - 0x00, 0x41, 0x06, 0x03, // 41:65 - 0x00, 0x47, 0x05, 0x04, // 42:71 - 0x00, 0x4C, 0x09, 0x06, // 43:76 - 0x00, 0x55, 0x04, 0x03, // 44:85 - 0x00, 0x59, 0x03, 0x03, // 45:89 - 0x00, 0x5C, 0x04, 0x03, // 46:92 - 0x00, 0x60, 0x05, 0x03, // 47:96 - 0x00, 0x65, 0x0A, 0x06, // 48:101 - 0x00, 0x6F, 0x08, 0x06, // 49:111 - 0x00, 0x77, 0x0A, 0x06, // 50:119 - 0x00, 0x81, 0x0A, 0x06, // 51:129 - 0x00, 0x8B, 0x0B, 0x06, // 52:139 - 0x00, 0x96, 0x0A, 0x06, // 53:150 - 0x00, 0xA0, 0x0A, 0x06, // 54:160 - 0x00, 0xAA, 0x09, 0x06, // 55:170 - 0x00, 0xB3, 0x0A, 0x06, // 56:179 - 0x00, 0xBD, 0x0A, 0x06, // 57:189 - 0x00, 0xC7, 0x04, 0x03, // 58:199 - 0x00, 0xCB, 0x04, 0x03, // 59:203 - 0x00, 0xCF, 0x0A, 0x06, // 60:207 - 0x00, 0xD9, 0x09, 0x06, // 61:217 - 0x00, 0xE2, 0x09, 0x06, // 62:226 - 0x00, 0xEB, 0x0B, 0x06, // 63:235 - 0x00, 0xF6, 0x14, 0x0A, // 64:246 - 0x01, 0x0A, 0x0E, 0x07, // 65:266 - 0x01, 0x18, 0x0C, 0x07, // 66:280 - 0x01, 0x24, 0x0C, 0x07, // 67:292 - 0x01, 0x30, 0x0B, 0x07, // 68:304 - 0x01, 0x3B, 0x0C, 0x07, // 69:315 - 0x01, 0x47, 0x09, 0x06, // 70:327 - 0x01, 0x50, 0x0D, 0x08, // 71:336 - 0x01, 0x5D, 0x0C, 0x07, // 72:349 - 0x01, 0x69, 0x04, 0x03, // 73:361 - 0x01, 0x6D, 0x08, 0x05, // 74:365 - 0x01, 0x75, 0x0E, 0x07, // 75:373 - 0x01, 0x83, 0x0C, 0x06, // 76:387 - 0x01, 0x8F, 0x10, 0x08, // 77:399 - 0x01, 0x9F, 0x0C, 0x07, // 78:415 - 0x01, 0xAB, 0x0E, 0x08, // 79:427 - 0x01, 0xB9, 0x0B, 0x07, // 80:441 - 0x01, 0xC4, 0x0E, 0x08, // 81:452 - 0x01, 0xD2, 0x0C, 0x07, // 82:466 - 0x01, 0xDE, 0x0C, 0x07, // 83:478 - 0x01, 0xEA, 0x0B, 0x06, // 84:490 - 0x01, 0xF5, 0x0C, 0x07, // 85:501 - 0x02, 0x01, 0x0D, 0x07, // 86:513 - 0x02, 0x0E, 0x11, 0x09, // 87:526 - 0x02, 0x1F, 0x0E, 0x07, // 88:543 - 0x02, 0x2D, 0x0D, 0x07, // 89:557 - 0x02, 0x3A, 0x0C, 0x06, // 90:570 - 0x02, 0x46, 0x06, 0x03, // 91:582 - 0x02, 0x4C, 0x06, 0x03, // 92:588 - 0x02, 0x52, 0x04, 0x03, // 93:594 - 0x02, 0x56, 0x09, 0x05, // 94:598 - 0x02, 0x5F, 0x0C, 0x06, // 95:607 - 0x02, 0x6B, 0x03, 0x03, // 96:619 - 0x02, 0x6E, 0x0A, 0x06, // 97:622 - 0x02, 0x78, 0x0A, 0x06, // 98:632 - 0x02, 0x82, 0x0A, 0x05, // 99:642 - 0x02, 0x8C, 0x0A, 0x06, // 100:652 - 0x02, 0x96, 0x0A, 0x06, // 101:662 - 0x02, 0xA0, 0x05, 0x03, // 102:672 - 0x02, 0xA5, 0x0A, 0x06, // 103:677 - 0x02, 0xAF, 0x0A, 0x06, // 104:687 - 0x02, 0xB9, 0x04, 0x02, // 105:697 - 0x02, 0xBD, 0x04, 0x02, // 106:701 - 0x02, 0xC1, 0x08, 0x05, // 107:705 - 0x02, 0xC9, 0x04, 0x02, // 108:713 - 0x02, 0xCD, 0x10, 0x08, // 109:717 - 0x02, 0xDD, 0x0A, 0x06, // 110:733 - 0x02, 0xE7, 0x0A, 0x06, // 111:743 - 0x02, 0xF1, 0x0A, 0x06, // 112:753 - 0x02, 0xFB, 0x0A, 0x06, // 113:763 - 0x03, 0x05, 0x05, 0x03, // 114:773 - 0x03, 0x0A, 0x08, 0x05, // 115:778 - 0x03, 0x12, 0x06, 0x03, // 116:786 - 0x03, 0x18, 0x0A, 0x06, // 117:792 - 0x03, 0x22, 0x09, 0x05, // 118:802 - 0x03, 0x2B, 0x0E, 0x07, // 119:811 - 0x03, 0x39, 0x0A, 0x05, // 120:825 - 0x03, 0x43, 0x09, 0x05, // 121:835 - 0x03, 0x4C, 0x0A, 0x05, // 122:844 - 0x03, 0x56, 0x06, 0x03, // 123:854 - 0x03, 0x5C, 0x04, 0x03, // 124:860 - 0x03, 0x60, 0x05, 0x03, // 125:864 - 0x03, 0x65, 0x09, 0x06, // 126:869 - 0xFF, 0xFF, 0x00, 0x00, // 127:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 128:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 129:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 130:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 131:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 132:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 133:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 134:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 135:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 136:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 137:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 138:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 139:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 140:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 141:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 142:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 143:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 144:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 145:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 146:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 147:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 148:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 149:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 150:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 151:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 152:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 153:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 154:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 155:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 156:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 157:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 158:65535 - 0xFF, 0xFF, 0x00, 0x0A, // 159:65535 - 0xFF, 0xFF, 0x00, 0x03, // 160:65535 - 0x03, 0x6E, 0x04, 0x03, // 161:878 - 0x03, 0x72, 0x0A, 0x06, // 162:882 - 0x03, 0x7C, 0x0C, 0x06, // 163:892 - 0x03, 0x88, 0x0A, 0x06, // 164:904 - 0x03, 0x92, 0x0A, 0x06, // 165:914 - 0x03, 0x9C, 0x04, 0x03, // 166:924 - 0x03, 0xA0, 0x0A, 0x06, // 167:928 - 0x03, 0xAA, 0x05, 0x03, // 168:938 - 0x03, 0xAF, 0x0D, 0x07, // 169:943 - 0x03, 0xBC, 0x07, 0x04, // 170:956 - 0x03, 0xC3, 0x0A, 0x06, // 171:963 - 0x03, 0xCD, 0x09, 0x06, // 172:973 - 0x03, 0xD6, 0x03, 0x03, // 173:982 - 0x03, 0xD9, 0x0D, 0x07, // 174:985 - 0x03, 0xE6, 0x0B, 0x06, // 175:998 - 0x03, 0xF1, 0x07, 0x04, // 176:1009 - 0x03, 0xF8, 0x0A, 0x05, // 177:1016 - 0x04, 0x02, 0x05, 0x03, // 178:1026 - 0x04, 0x07, 0x05, 0x03, // 179:1031 - 0x04, 0x0C, 0x05, 0x03, // 180:1036 - 0x04, 0x11, 0x0A, 0x06, // 181:1041 - 0x04, 0x1B, 0x09, 0x05, // 182:1051 - 0x04, 0x24, 0x03, 0x03, // 183:1060 - 0x04, 0x27, 0x06, 0x03, // 184:1063 - 0x04, 0x2D, 0x05, 0x03, // 185:1069 - 0x04, 0x32, 0x07, 0x04, // 186:1074 - 0x04, 0x39, 0x0A, 0x06, // 187:1081 - 0x04, 0x43, 0x10, 0x08, // 188:1091 - 0x04, 0x53, 0x10, 0x08, // 189:1107 - 0x04, 0x63, 0x10, 0x08, // 190:1123 - 0x04, 0x73, 0x0A, 0x06, // 191:1139 - 0x04, 0x7D, 0x0E, 0x07, // 192:1149 - 0x04, 0x8B, 0x0E, 0x07, // 193:1163 - 0x04, 0x99, 0x0E, 0x07, // 194:1177 - 0x04, 0xA7, 0x0E, 0x07, // 195:1191 - 0x04, 0xB5, 0x0E, 0x07, // 196:1205 - 0x04, 0xC3, 0x0E, 0x07, // 197:1219 - 0x04, 0xD1, 0x12, 0x0A, // 198:1233 - 0x04, 0xE3, 0x0C, 0x07, // 199:1251 - 0x04, 0xEF, 0x0C, 0x07, // 200:1263 - 0x04, 0xFB, 0x0C, 0x07, // 201:1275 - 0x05, 0x07, 0x0C, 0x07, // 202:1287 - 0x05, 0x13, 0x0C, 0x07, // 203:1299 - 0x05, 0x1F, 0x05, 0x03, // 204:1311 - 0x05, 0x24, 0x04, 0x03, // 205:1316 - 0x05, 0x28, 0x04, 0x03, // 206:1320 - 0x05, 0x2C, 0x05, 0x03, // 207:1324 - 0x05, 0x31, 0x0B, 0x07, // 208:1329 - 0x05, 0x3C, 0x0C, 0x07, // 209:1340 - 0x05, 0x48, 0x0E, 0x08, // 210:1352 - 0x05, 0x56, 0x0E, 0x08, // 211:1366 - 0x05, 0x64, 0x0E, 0x08, // 212:1380 - 0x05, 0x72, 0x0E, 0x08, // 213:1394 - 0x05, 0x80, 0x0E, 0x08, // 214:1408 - 0x05, 0x8E, 0x0A, 0x06, // 215:1422 - 0x05, 0x98, 0x0D, 0x08, // 216:1432 - 0x05, 0xA5, 0x0C, 0x07, // 217:1445 - 0x05, 0xB1, 0x0C, 0x07, // 218:1457 - 0x05, 0xBD, 0x0C, 0x07, // 219:1469 - 0x05, 0xC9, 0x0C, 0x07, // 220:1481 - 0x05, 0xD5, 0x0D, 0x07, // 221:1493 - 0x05, 0xE2, 0x0B, 0x07, // 222:1506 - 0x05, 0xED, 0x0C, 0x06, // 223:1517 - 0x05, 0xF9, 0x0A, 0x06, // 224:1529 - 0x06, 0x03, 0x0A, 0x06, // 225:1539 - 0x06, 0x0D, 0x0A, 0x06, // 226:1549 - 0x06, 0x17, 0x0A, 0x06, // 227:1559 - 0x06, 0x21, 0x0A, 0x06, // 228:1569 - 0x06, 0x2B, 0x0A, 0x06, // 229:1579 - 0x06, 0x35, 0x10, 0x09, // 230:1589 - 0x06, 0x45, 0x0A, 0x05, // 231:1605 - 0x06, 0x4F, 0x0A, 0x06, // 232:1615 - 0x06, 0x59, 0x0A, 0x06, // 233:1625 - 0x06, 0x63, 0x0A, 0x06, // 234:1635 - 0x06, 0x6D, 0x0A, 0x06, // 235:1645 - 0x06, 0x77, 0x05, 0x03, // 236:1655 - 0x06, 0x7C, 0x04, 0x03, // 237:1660 - 0x06, 0x80, 0x05, 0x03, // 238:1664 - 0x06, 0x85, 0x05, 0x03, // 239:1669 - 0x06, 0x8A, 0x0A, 0x06, // 240:1674 - 0x06, 0x94, 0x0A, 0x06, // 241:1684 - 0x06, 0x9E, 0x0A, 0x06, // 242:1694 - 0x06, 0xA8, 0x0A, 0x06, // 243:1704 - 0x06, 0xB2, 0x0A, 0x06, // 244:1714 - 0x06, 0xBC, 0x0A, 0x06, // 245:1724 - 0x06, 0xC6, 0x0A, 0x06, // 246:1734 - 0x06, 0xD0, 0x09, 0x05, // 247:1744 - 0x06, 0xD9, 0x0A, 0x06, // 248:1753 - 0x06, 0xE3, 0x0A, 0x06, // 249:1763 - 0x06, 0xED, 0x0A, 0x06, // 250:1773 - 0x06, 0xF7, 0x0A, 0x06, // 251:1783 - 0x07, 0x01, 0x0A, 0x06, // 252:1793 - 0x07, 0x0B, 0x09, 0x05, // 253:1803 - 0x07, 0x14, 0x0A, 0x06, // 254:1812 - 0x07, 0x1E, 0x09, 0x05, // 255:1822 - - // Font Data: - 0x00,0x00,0xF8,0x02, // 33 - 0x38,0x00,0x00,0x00,0x38, // 34 - 0xA0,0x03,0xE0,0x00,0xB8,0x03,0xE0,0x00,0xB8, // 35 - 0x30,0x01,0x28,0x02,0xF8,0x07,0x48,0x02,0x90,0x01, // 36 - 0x00,0x00,0x30,0x00,0x48,0x00,0x30,0x03,0xC0,0x00,0xB0,0x01,0x48,0x02,0x80,0x01, // 37 - 0x80,0x01,0x50,0x02,0x68,0x02,0xA8,0x02,0x18,0x01,0x80,0x03,0x80,0x02, // 38 - 0x38, // 39 - 0xE0,0x03,0x10,0x04,0x08,0x08, // 40 - 0x08,0x08,0x10,0x04,0xE0,0x03, // 41 - 0x28,0x00,0x18,0x00,0x28, // 42 - 0x40,0x00,0x40,0x00,0xF0,0x01,0x40,0x00,0x40, // 43 - 0x00,0x00,0x00,0x06, // 44 - 0x80,0x00,0x80, // 45 - 0x00,0x00,0x00,0x02, // 46 - 0x00,0x03,0xE0,0x00,0x18, // 47 - 0xF0,0x01,0x08,0x02,0x08,0x02,0x08,0x02,0xF0,0x01, // 48 - 0x00,0x00,0x20,0x00,0x10,0x00,0xF8,0x03, // 49 - 0x10,0x02,0x08,0x03,0x88,0x02,0x48,0x02,0x30,0x02, // 50 - 0x10,0x01,0x08,0x02,0x48,0x02,0x48,0x02,0xB0,0x01, // 51 - 0xC0,0x00,0xA0,0x00,0x90,0x00,0x88,0x00,0xF8,0x03,0x80, // 52 - 0x60,0x01,0x38,0x02,0x28,0x02,0x28,0x02,0xC8,0x01, // 53 - 0xF0,0x01,0x28,0x02,0x28,0x02,0x28,0x02,0xD0,0x01, // 54 - 0x08,0x00,0x08,0x03,0xC8,0x00,0x38,0x00,0x08, // 55 - 0xB0,0x01,0x48,0x02,0x48,0x02,0x48,0x02,0xB0,0x01, // 56 - 0x70,0x01,0x88,0x02,0x88,0x02,0x88,0x02,0xF0,0x01, // 57 - 0x00,0x00,0x20,0x02, // 58 - 0x00,0x00,0x20,0x06, // 59 - 0x00,0x00,0x40,0x00,0xA0,0x00,0xA0,0x00,0x10,0x01, // 60 - 0xA0,0x00,0xA0,0x00,0xA0,0x00,0xA0,0x00,0xA0, // 61 - 0x00,0x00,0x10,0x01,0xA0,0x00,0xA0,0x00,0x40, // 62 - 0x10,0x00,0x08,0x00,0x08,0x00,0xC8,0x02,0x48,0x00,0x30, // 63 - 0x00,0x00,0xC0,0x03,0x30,0x04,0xD0,0x09,0x28,0x0A,0x28,0x0A,0xC8,0x0B,0x68,0x0A,0x10,0x05,0xE0,0x04, // 64 - 0x00,0x02,0xC0,0x01,0xB0,0x00,0x88,0x00,0xB0,0x00,0xC0,0x01,0x00,0x02, // 65 - 0x00,0x00,0xF8,0x03,0x48,0x02,0x48,0x02,0x48,0x02,0xF0,0x01, // 66 - 0x00,0x00,0xF0,0x01,0x08,0x02,0x08,0x02,0x08,0x02,0x10,0x01, // 67 - 0x00,0x00,0xF8,0x03,0x08,0x02,0x08,0x02,0x10,0x01,0xE0, // 68 - 0x00,0x00,0xF8,0x03,0x48,0x02,0x48,0x02,0x48,0x02,0x48,0x02, // 69 - 0x00,0x00,0xF8,0x03,0x48,0x00,0x48,0x00,0x08, // 70 - 0x00,0x00,0xE0,0x00,0x10,0x01,0x08,0x02,0x48,0x02,0x50,0x01,0xC0, // 71 - 0x00,0x00,0xF8,0x03,0x40,0x00,0x40,0x00,0x40,0x00,0xF8,0x03, // 72 - 0x00,0x00,0xF8,0x03, // 73 - 0x00,0x03,0x00,0x02,0x00,0x02,0xF8,0x01, // 74 - 0x00,0x00,0xF8,0x03,0x80,0x00,0x60,0x00,0x90,0x00,0x08,0x01,0x00,0x02, // 75 - 0x00,0x00,0xF8,0x03,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02, // 76 - 0x00,0x00,0xF8,0x03,0x30,0x00,0xC0,0x01,0x00,0x02,0xC0,0x01,0x30,0x00,0xF8,0x03, // 77 - 0x00,0x00,0xF8,0x03,0x30,0x00,0x40,0x00,0x80,0x01,0xF8,0x03, // 78 - 0x00,0x00,0xF0,0x01,0x08,0x02,0x08,0x02,0x08,0x02,0x08,0x02,0xF0,0x01, // 79 - 0x00,0x00,0xF8,0x03,0x48,0x00,0x48,0x00,0x48,0x00,0x30, // 80 - 0x00,0x00,0xF0,0x01,0x08,0x02,0x08,0x02,0x08,0x03,0x08,0x03,0xF0,0x02, // 81 - 0x00,0x00,0xF8,0x03,0x48,0x00,0x48,0x00,0xC8,0x00,0x30,0x03, // 82 - 0x00,0x00,0x30,0x01,0x48,0x02,0x48,0x02,0x48,0x02,0x90,0x01, // 83 - 0x00,0x00,0x08,0x00,0x08,0x00,0xF8,0x03,0x08,0x00,0x08, // 84 - 0x00,0x00,0xF8,0x01,0x00,0x02,0x00,0x02,0x00,0x02,0xF8,0x01, // 85 - 0x08,0x00,0x70,0x00,0x80,0x01,0x00,0x02,0x80,0x01,0x70,0x00,0x08, // 86 - 0x18,0x00,0xE0,0x01,0x00,0x02,0xF0,0x01,0x08,0x00,0xF0,0x01,0x00,0x02,0xE0,0x01,0x18, // 87 - 0x00,0x02,0x08,0x01,0x90,0x00,0x60,0x00,0x90,0x00,0x08,0x01,0x00,0x02, // 88 - 0x08,0x00,0x10,0x00,0x20,0x00,0xC0,0x03,0x20,0x00,0x10,0x00,0x08, // 89 - 0x08,0x03,0x88,0x02,0xC8,0x02,0x68,0x02,0x38,0x02,0x18,0x02, // 90 - 0x00,0x00,0xF8,0x0F,0x08,0x08, // 91 - 0x18,0x00,0xE0,0x00,0x00,0x03, // 92 - 0x08,0x08,0xF8,0x0F, // 93 - 0x40,0x00,0x30,0x00,0x08,0x00,0x30,0x00,0x40, // 94 - 0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08, // 95 - 0x08,0x00,0x10, // 96 - 0x00,0x00,0x00,0x03,0xA0,0x02,0xA0,0x02,0xE0,0x03, // 97 - 0x00,0x00,0xF8,0x03,0x20,0x02,0x20,0x02,0xC0,0x01, // 98 - 0x00,0x00,0xC0,0x01,0x20,0x02,0x20,0x02,0x40,0x01, // 99 - 0x00,0x00,0xC0,0x01,0x20,0x02,0x20,0x02,0xF8,0x03, // 100 - 0x00,0x00,0xC0,0x01,0xA0,0x02,0xA0,0x02,0xC0,0x02, // 101 - 0x20,0x00,0xF0,0x03,0x28, // 102 - 0x00,0x00,0xC0,0x05,0x20,0x0A,0x20,0x0A,0xE0,0x07, // 103 - 0x00,0x00,0xF8,0x03,0x20,0x00,0x20,0x00,0xC0,0x03, // 104 - 0x00,0x00,0xE8,0x03, // 105 - 0x00,0x08,0xE8,0x07, // 106 - 0xF8,0x03,0x80,0x00,0xC0,0x01,0x20,0x02, // 107 - 0x00,0x00,0xF8,0x03, // 108 - 0x00,0x00,0xE0,0x03,0x20,0x00,0x20,0x00,0xE0,0x03,0x20,0x00,0x20,0x00,0xC0,0x03, // 109 - 0x00,0x00,0xE0,0x03,0x20,0x00,0x20,0x00,0xC0,0x03, // 110 - 0x00,0x00,0xC0,0x01,0x20,0x02,0x20,0x02,0xC0,0x01, // 111 - 0x00,0x00,0xE0,0x0F,0x20,0x02,0x20,0x02,0xC0,0x01, // 112 - 0x00,0x00,0xC0,0x01,0x20,0x02,0x20,0x02,0xE0,0x0F, // 113 - 0x00,0x00,0xE0,0x03,0x20, // 114 - 0x40,0x02,0xA0,0x02,0xA0,0x02,0x20,0x01, // 115 - 0x20,0x00,0xF8,0x03,0x20,0x02, // 116 - 0x00,0x00,0xE0,0x01,0x00,0x02,0x00,0x02,0xE0,0x03, // 117 - 0x20,0x00,0xC0,0x01,0x00,0x02,0xC0,0x01,0x20, // 118 - 0xE0,0x01,0x00,0x02,0xC0,0x01,0x20,0x00,0xC0,0x01,0x00,0x02,0xE0,0x01, // 119 - 0x20,0x02,0x40,0x01,0x80,0x00,0x40,0x01,0x20,0x02, // 120 - 0x20,0x00,0xC0,0x09,0x00,0x06,0xC0,0x01,0x20, // 121 - 0x20,0x02,0x20,0x03,0xA0,0x02,0x60,0x02,0x20,0x02, // 122 - 0x80,0x00,0x78,0x0F,0x08,0x08, // 123 - 0x00,0x00,0xF8,0x0F, // 124 - 0x08,0x08,0x78,0x0F,0x80, // 125 - 0xC0,0x00,0x40,0x00,0xC0,0x00,0x80,0x00,0xC0, // 126 - 0x00,0x00,0xA0,0x0F, // 161 - 0x00,0x00,0xC0,0x01,0xA0,0x0F,0x78,0x02,0x40,0x01, // 162 - 0x40,0x02,0x70,0x03,0xC8,0x02,0x48,0x02,0x08,0x02,0x10,0x02, // 163 - 0x00,0x00,0xE0,0x01,0x20,0x01,0x20,0x01,0xE0,0x01, // 164 - 0x48,0x01,0x70,0x01,0xC0,0x03,0x70,0x01,0x48,0x01, // 165 - 0x00,0x00,0x38,0x0F, // 166 - 0xD0,0x04,0x28,0x09,0x48,0x09,0x48,0x0A,0x90,0x05, // 167 - 0x08,0x00,0x00,0x00,0x08, // 168 - 0xE0,0x00,0x10,0x01,0x48,0x02,0xA8,0x02,0xA8,0x02,0x10,0x01,0xE0, // 169 - 0x68,0x00,0x68,0x00,0x68,0x00,0x78, // 170 - 0x00,0x00,0x80,0x01,0x40,0x02,0x80,0x01,0x40,0x02, // 171 - 0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0xE0, // 172 - 0x80,0x00,0x80, // 173 - 0xE0,0x00,0x10,0x01,0xE8,0x02,0x68,0x02,0xC8,0x02,0x10,0x01,0xE0, // 174 - 0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02, // 175 - 0x00,0x00,0x38,0x00,0x28,0x00,0x38, // 176 - 0x40,0x02,0x40,0x02,0xF0,0x03,0x40,0x02,0x40,0x02, // 177 - 0x48,0x00,0x68,0x00,0x58, // 178 - 0x48,0x00,0x58,0x00,0x68, // 179 - 0x00,0x00,0x10,0x00,0x08, // 180 - 0x00,0x00,0xE0,0x0F,0x00,0x02,0x00,0x02,0xE0,0x03, // 181 - 0x70,0x00,0xF8,0x0F,0x08,0x00,0xF8,0x0F,0x08, // 182 - 0x00,0x00,0x40, // 183 - 0x00,0x00,0x00,0x14,0x00,0x18, // 184 - 0x00,0x00,0x10,0x00,0x78, // 185 - 0x30,0x00,0x48,0x00,0x48,0x00,0x30, // 186 - 0x00,0x00,0x40,0x02,0x80,0x01,0x40,0x02,0x80,0x01, // 187 - 0x00,0x00,0x10,0x02,0x78,0x01,0xC0,0x00,0x20,0x01,0x90,0x01,0xC8,0x03,0x00,0x01, // 188 - 0x00,0x00,0x10,0x02,0x78,0x01,0x80,0x00,0x60,0x00,0x50,0x02,0x48,0x03,0xC0,0x02, // 189 - 0x48,0x00,0x58,0x00,0x68,0x03,0x80,0x00,0x60,0x01,0x90,0x01,0xC8,0x03,0x00,0x01, // 190 - 0x00,0x00,0x00,0x06,0x00,0x09,0xA0,0x09,0x00,0x04, // 191 - 0x00,0x02,0xC0,0x01,0xB0,0x00,0x89,0x00,0xB2,0x00,0xC0,0x01,0x00,0x02, // 192 - 0x00,0x02,0xC0,0x01,0xB0,0x00,0x8A,0x00,0xB1,0x00,0xC0,0x01,0x00,0x02, // 193 - 0x00,0x02,0xC0,0x01,0xB2,0x00,0x89,0x00,0xB2,0x00,0xC0,0x01,0x00,0x02, // 194 - 0x00,0x02,0xC2,0x01,0xB1,0x00,0x8A,0x00,0xB1,0x00,0xC0,0x01,0x00,0x02, // 195 - 0x00,0x02,0xC0,0x01,0xB2,0x00,0x88,0x00,0xB2,0x00,0xC0,0x01,0x00,0x02, // 196 - 0x00,0x02,0xC0,0x01,0xBE,0x00,0x8A,0x00,0xBE,0x00,0xC0,0x01,0x00,0x02, // 197 - 0x00,0x03,0xC0,0x00,0xE0,0x00,0x98,0x00,0x88,0x00,0xF8,0x03,0x48,0x02,0x48,0x02,0x48,0x02, // 198 - 0x00,0x00,0xF0,0x01,0x08,0x02,0x08,0x16,0x08,0x1A,0x10,0x01, // 199 - 0x00,0x00,0xF8,0x03,0x49,0x02,0x4A,0x02,0x48,0x02,0x48,0x02, // 200 - 0x00,0x00,0xF8,0x03,0x48,0x02,0x4A,0x02,0x49,0x02,0x48,0x02, // 201 - 0x00,0x00,0xFA,0x03,0x49,0x02,0x4A,0x02,0x48,0x02,0x48,0x02, // 202 - 0x00,0x00,0xF8,0x03,0x4A,0x02,0x48,0x02,0x4A,0x02,0x48,0x02, // 203 - 0x00,0x00,0xF9,0x03,0x02, // 204 - 0x02,0x00,0xF9,0x03, // 205 - 0x01,0x00,0xFA,0x03, // 206 - 0x02,0x00,0xF8,0x03,0x02, // 207 - 0x40,0x00,0xF8,0x03,0x48,0x02,0x48,0x02,0x10,0x01,0xE0, // 208 - 0x00,0x00,0xFA,0x03,0x31,0x00,0x42,0x00,0x81,0x01,0xF8,0x03, // 209 - 0x00,0x00,0xF0,0x01,0x08,0x02,0x09,0x02,0x0A,0x02,0x08,0x02,0xF0,0x01, // 210 - 0x00,0x00,0xF0,0x01,0x08,0x02,0x0A,0x02,0x09,0x02,0x08,0x02,0xF0,0x01, // 211 - 0x00,0x00,0xF0,0x01,0x08,0x02,0x0A,0x02,0x09,0x02,0x0A,0x02,0xF0,0x01, // 212 - 0x00,0x00,0xF0,0x01,0x0A,0x02,0x09,0x02,0x0A,0x02,0x09,0x02,0xF0,0x01, // 213 - 0x00,0x00,0xF0,0x01,0x0A,0x02,0x08,0x02,0x0A,0x02,0x08,0x02,0xF0,0x01, // 214 - 0x10,0x01,0xA0,0x00,0xE0,0x00,0xA0,0x00,0x10,0x01, // 215 - 0x00,0x00,0xF0,0x02,0x08,0x03,0xC8,0x02,0x28,0x02,0x18,0x03,0xE8, // 216 - 0x00,0x00,0xF8,0x01,0x01,0x02,0x02,0x02,0x00,0x02,0xF8,0x01, // 217 - 0x00,0x00,0xF8,0x01,0x02,0x02,0x01,0x02,0x00,0x02,0xF8,0x01, // 218 - 0x00,0x00,0xF8,0x01,0x02,0x02,0x01,0x02,0x02,0x02,0xF8,0x01, // 219 - 0x00,0x00,0xF8,0x01,0x02,0x02,0x00,0x02,0x02,0x02,0xF8,0x01, // 220 - 0x08,0x00,0x10,0x00,0x20,0x00,0xC2,0x03,0x21,0x00,0x10,0x00,0x08, // 221 - 0x00,0x00,0xF8,0x03,0x10,0x01,0x10,0x01,0x10,0x01,0xE0, // 222 - 0x00,0x00,0xF0,0x03,0x08,0x01,0x48,0x02,0xB0,0x02,0x80,0x01, // 223 - 0x00,0x00,0x00,0x03,0xA4,0x02,0xA8,0x02,0xE0,0x03, // 224 - 0x00,0x00,0x00,0x03,0xA8,0x02,0xA4,0x02,0xE0,0x03, // 225 - 0x00,0x00,0x00,0x03,0xA8,0x02,0xA4,0x02,0xE8,0x03, // 226 - 0x00,0x00,0x08,0x03,0xA4,0x02,0xA8,0x02,0xE4,0x03, // 227 - 0x00,0x00,0x00,0x03,0xA8,0x02,0xA0,0x02,0xE8,0x03, // 228 - 0x00,0x00,0x00,0x03,0xAE,0x02,0xAA,0x02,0xEE,0x03, // 229 - 0x00,0x00,0x40,0x03,0xA0,0x02,0xA0,0x02,0xC0,0x01,0xA0,0x02,0xA0,0x02,0xC0,0x02, // 230 - 0x00,0x00,0xC0,0x01,0x20,0x16,0x20,0x1A,0x40,0x01, // 231 - 0x00,0x00,0xC0,0x01,0xA4,0x02,0xA8,0x02,0xC0,0x02, // 232 - 0x00,0x00,0xC0,0x01,0xA8,0x02,0xA4,0x02,0xC0,0x02, // 233 - 0x00,0x00,0xC0,0x01,0xA8,0x02,0xA4,0x02,0xC8,0x02, // 234 - 0x00,0x00,0xC0,0x01,0xA8,0x02,0xA0,0x02,0xC8,0x02, // 235 - 0x00,0x00,0xE4,0x03,0x08, // 236 - 0x08,0x00,0xE4,0x03, // 237 - 0x08,0x00,0xE4,0x03,0x08, // 238 - 0x08,0x00,0xE0,0x03,0x08, // 239 - 0x00,0x00,0xC0,0x01,0x28,0x02,0x38,0x02,0xE0,0x01, // 240 - 0x00,0x00,0xE8,0x03,0x24,0x00,0x28,0x00,0xC4,0x03, // 241 - 0x00,0x00,0xC0,0x01,0x24,0x02,0x28,0x02,0xC0,0x01, // 242 - 0x00,0x00,0xC0,0x01,0x28,0x02,0x24,0x02,0xC0,0x01, // 243 - 0x00,0x00,0xC0,0x01,0x28,0x02,0x24,0x02,0xC8,0x01, // 244 - 0x00,0x00,0xC8,0x01,0x24,0x02,0x28,0x02,0xC4,0x01, // 245 - 0x00,0x00,0xC0,0x01,0x28,0x02,0x20,0x02,0xC8,0x01, // 246 - 0x40,0x00,0x40,0x00,0x50,0x01,0x40,0x00,0x40, // 247 - 0x00,0x00,0xC0,0x02,0xA0,0x03,0x60,0x02,0xA0,0x01, // 248 - 0x00,0x00,0xE0,0x01,0x04,0x02,0x08,0x02,0xE0,0x03, // 249 - 0x00,0x00,0xE0,0x01,0x08,0x02,0x04,0x02,0xE0,0x03, // 250 - 0x00,0x00,0xE8,0x01,0x04,0x02,0x08,0x02,0xE0,0x03, // 251 - 0x00,0x00,0xE0,0x01,0x08,0x02,0x00,0x02,0xE8,0x03, // 252 - 0x20,0x00,0xC0,0x09,0x08,0x06,0xC4,0x01,0x20, // 253 - 0x00,0x00,0xF8,0x0F,0x20,0x02,0x20,0x02,0xC0,0x01, // 254 - 0x20,0x00,0xC8,0x09,0x00,0x06,0xC8,0x01,0x20 // 255 -}; diff --git a/main/main.cpp b/main/main.cpp index 168239a..6e45fb1 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -203,6 +203,9 @@ boolean send_uplink(uint8_t *txBuffer, uint8_t length, uint8_t fport, boolean co } bool status_uplink(uint8_t status, uint8_t value) { + if (!SEND_STATUS_UPLINKS) + return false; + pack_lat_lon(last_send_lat, last_send_lon); txBuffer[6] = battery_byte(); txBuffer[7] = status; @@ -215,6 +218,9 @@ bool status_uplink(uint8_t status, uint8_t value) { bool gpslost_uplink(void) { uint16_t minutes_lost; + if (!SEND_GPSLOST_UPLINKS) + return false; + minutes_lost = (last_fix_time - millis()) / 1000 / 60; pack_lat_lon(last_send_lat, last_send_lon); txBuffer[6] = battery_byte(); diff --git a/main/screen.cpp b/main/screen.cpp index 4975f9e..bc31c95 100644 --- a/main/screen.cpp +++ b/main/screen.cpp @@ -29,7 +29,6 @@ along with this program. If not, see . #include "SSD1306Wire.h" #include "configuration.h" #include "credentials.h" -#include "fonts.h" #include "gps.h" #include "images.h" @@ -181,7 +180,7 @@ void screen_setup(uint8_t addr) { return; display->init(); display->flipScreenVertically(); - display->setFont(Custom_ArialMT_Plain_10); + display->setFont(ArialMT_Plain_10); // Scroll buffer display->setLogBuffer(4, 30);